isis-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Stephen Cameron <steve.cameron...@gmail.com>
Subject Re: code-lists and administration thereof
Date Sun, 02 Aug 2015 20:54:04 GMT
Hi,

Just trying this now, with current version of kitchen sink I got an error
message starting the webapp, saying that no persistable classes could be
found and to check value of
isis.persistor.datanucleus.RegisterEntities.packagePrefix
in isis.properties, but that key is in isis_datanucleus.properties.

Also errors in running fixture script :(


   - org.apache.wicket.WicketRuntimeException
   - Method onRequest of interface
   org.apache.wicket.behavior.IBehaviorListener targeted at
   org.apache.wicket.ajax.markup.html.AjaxLink$1@1ac79481 on component
   [AjaxLink [Component id = menuLink]] threw an exception
   - org.apache.wicket.RequestListenerInterface#internalInvoke(RequestListenerInterface.java:268)

   - org.apache.wicket.RequestListenerInterface#invoke(RequestListenerInterface.java:241)

   - org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler#invokeListener(ListenerInterfaceRequestHandler.java:250)

   - org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler#respond(ListenerInterfaceRequestHandler.java:236)

   - org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor#respond(RequestCycle.java:862)

   - org.apache.wicket.request.RequestHandlerStack#execute(RequestHandlerStack.java:64)

   - org.apache.wicket.request.cycle.RequestCycle#execute(RequestCycle.java:261)

   - org.apache.wicket.request.cycle.RequestCycle#processRequest(RequestCycle.java:218)

   - org.apache.wicket.request.cycle.RequestCycle#processRequestAndDetach(RequestCycle.java:289)

   - org.apache.wicket.protocol.http.WicketFilter#processRequestCycle(WicketFilter.java:259)

   - org.apache.wicket.protocol.http.WicketFilter#processRequest(WicketFilter.java:201)

   - org.apache.wicket.protocol.http.WicketFilter#doFilter(WicketFilter.java:282)

   - org.mortbay.jetty.servlet.ServletHandler$CachedChain#doFilter(ServletHandler.java:1212)

   - org.apache.isis.core.webapp.diagnostics.IsisLogOnExceptionFilter#doFilter(IsisLogOnExceptionFilter.java:52)

   - org.mortbay.jetty.servlet.ServletHandler$CachedChain#doFilter(ServletHandler.java:1212)

   - org.apache.shiro.web.servlet.AbstractShiroFilter#executeChain(AbstractShiroFilter.java:449)

   - org.apache.shiro.web.servlet.AbstractShiroFilter$1#call(AbstractShiroFilter.java:365)

   - org.apache.shiro.subject.support.SubjectCallable#doCall(SubjectCallable.java:90)

   - org.apache.shiro.subject.support.SubjectCallable#call(SubjectCallable.java:83)

   - org.apache.shiro.subject.support.DelegatingSubject#execute(DelegatingSubject.java:383)

   - org.apache.shiro.web.servlet.AbstractShiroFilter#doFilterInternal(AbstractShiroFilter.java:362)

   - org.apache.shiro.web.servlet.OncePerRequestFilter#doFilter(OncePerRequestFilter.java:125)

   - org.mortbay.jetty.servlet.ServletHandler$CachedChain#doFilter(ServletHandler.java:1212)

   - org.mortbay.jetty.servlet.ServletHandler#handle(ServletHandler.java:399)

   - org.mortbay.jetty.security.SecurityHandler#handle(SecurityHandler.java:216)

   - org.mortbay.jetty.servlet.SessionHandler#handle(SessionHandler.java:182)

   - org.mortbay.jetty.handler.ContextHandler#handle(ContextHandler.java:766)

   - org.mortbay.jetty.webapp.WebAppContext#handle(WebAppContext.java:450)
   - org.mortbay.jetty.handler.ContextHandlerCollection#handle(ContextHandlerCollection.java:230)

   - org.mortbay.jetty.handler.HandlerCollection#handle(HandlerCollection.java:114)

   - org.mortbay.jetty.handler.HandlerWrapper#handle(HandlerWrapper.java:152)

   - org.mortbay.jetty.Server#handle(Server.java:326)
   - org.mortbay.jetty.HttpConnection#handleRequest(HttpConnection.java:542)

   - org.mortbay.jetty.HttpConnection$RequestHandler#headerComplete(HttpConnection.java:928)

   - org.mortbay.jetty.HttpParser#parseNext(HttpParser.java:549)
   - org.mortbay.jetty.HttpParser#parseAvailable(HttpParser.java:212)
   - org.mortbay.jetty.HttpConnection#handle(HttpConnection.java:404)
   - org.mortbay.io.nio.SelectChannelEndPoint#run(SelectChannelEndPoint.java:410)

   - org.mortbay.thread.QueuedThreadPool$PoolThread#run(QueuedThreadPool.java:582)

   -
   - Caused by:
   -
   - java.lang.reflect.InvocationTargetException
   -
   - sun.reflect.GeneratedMethodAccessor98#invoke(null:-1)
   - sun.reflect.DelegatingMethodAccessorImpl#invoke(DelegatingMethodAccessorImpl.java:43)

   - java.lang.reflect.Method#invoke(Method.java:497)
   - org.apache.wicket.RequestListenerInterface#internalInvoke(RequestListenerInterface.java:258)

   - org.apache.wicket.RequestListenerInterface#invoke(RequestListenerInterface.java:241)

   - org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler#invokeListener(ListenerInterfaceRequestHandler.java:250)

   - org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler#respond(ListenerInterfaceRequestHandler.java:236)

   - org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor#respond(RequestCycle.java:862)

   - org.apache.wicket.request.RequestHandlerStack#execute(RequestHandlerStack.java:64)

   - org.apache.wicket.request.cycle.RequestCycle#execute(RequestCycle.java:261)

   - org.apache.wicket.request.cycle.RequestCycle#processRequest(RequestCycle.java:218)

   - org.apache.wicket.request.cycle.RequestCycle#processRequestAndDetach(RequestCycle.java:289)

   - org.apache.wicket.protocol.http.WicketFilter#processRequestCycle(WicketFilter.java:259)

   - org.apache.wicket.protocol.http.WicketFilter#processRequest(WicketFilter.java:201)

   - org.apache.wicket.protocol.http.WicketFilter#doFilter(WicketFilter.java:282)

   - org.mortbay.jetty.servlet.ServletHandler$CachedChain#doFilter(ServletHandler.java:1212)

   - org.apache.isis.core.webapp.diagnostics.IsisLogOnExceptionFilter#doFilter(IsisLogOnExceptionFilter.java:52)

   - org.mortbay.jetty.servlet.ServletHandler$CachedChain#doFilter(ServletHandler.java:1212)

   - org.apache.shiro.web.servlet.AbstractShiroFilter#executeChain(AbstractShiroFilter.java:449)

   - org.apache.shiro.web.servlet.AbstractShiroFilter$1#call(AbstractShiroFilter.java:365)

   - org.apache.shiro.subject.support.SubjectCallable#doCall(SubjectCallable.java:90)

   - org.apache.shiro.subject.support.SubjectCallable#call(SubjectCallable.java:83)

   - org.apache.shiro.subject.support.DelegatingSubject#execute(DelegatingSubject.java:383)

   - org.apache.shiro.web.servlet.AbstractShiroFilter#doFilterInternal(AbstractShiroFilter.java:362)

   - org.apache.shiro.web.servlet.OncePerRequestFilter#doFilter(OncePerRequestFilter.java:125)

   - org.mortbay.jetty.servlet.ServletHandler$CachedChain#doFilter(ServletHandler.java:1212)

   - org.mortbay.jetty.servlet.ServletHandler#handle(ServletHandler.java:399)

   - org.mortbay.jetty.security.SecurityHandler#handle(SecurityHandler.java:216)

   - org.mortbay.jetty.servlet.SessionHandler#handle(SessionHandler.java:182)

   - org.mortbay.jetty.handler.ContextHandler#handle(ContextHandler.java:766)

   - org.mortbay.jetty.webapp.WebAppContext#handle(WebAppContext.java:450)
   - org.mortbay.jetty.handler.ContextHandlerCollection#handle(ContextHandlerCollection.java:230)

   - org.mortbay.jetty.handler.HandlerCollection#handle(HandlerCollection.java:114)

   - org.mortbay.jetty.handler.HandlerWrapper#handle(HandlerWrapper.java:152)

   - org.mortbay.jetty.Server#handle(Server.java:326)
   - org.mortbay.jetty.HttpConnection#handleRequest(HttpConnection.java:542)

   - org.mortbay.jetty.HttpConnection$RequestHandler#headerComplete(HttpConnection.java:928)

   - org.mortbay.jetty.HttpParser#parseNext(HttpParser.java:549)
   - org.mortbay.jetty.HttpParser#parseAvailable(HttpParser.java:212)
   - org.mortbay.jetty.HttpConnection#handle(HttpConnection.java:404)
   - org.mortbay.io.nio.SelectChannelEndPoint#run(SelectChannelEndPoint.java:410)

   - org.mortbay.thread.QueuedThreadPool$PoolThread#run(QueuedThreadPool.java:582)

   -
   - Caused by:
   -
   - java.lang.IllegalArgumentException
   - argument type mismatch
   - sun.reflect.NativeMethodAccessorImpl#invoke0(NativeMethodAccessorImpl.java:-2)

   - sun.reflect.NativeMethodAccessorImpl#invoke(NativeMethodAccessorImpl.java:62)

   - sun.reflect.DelegatingMethodAccessorImpl#invoke(DelegatingMethodAccessorImpl.java:43)

   - java.lang.reflect.Method#invoke(Method.java:497)
   - org.apache.isis.applib.fixturescripts.FixtureScript#setParam(FixtureScript.java:689)

   - org.apache.isis.applib.fixturescripts.FixtureScript#defaultParam(FixtureScript.java:631)

   - org.isisaddons.app.kitchensink.fixture.primitive.PrimitiveObjectsFixture#execute(PrimitiveObjectsFixture.java:133)

   - org.apache.isis.applib.fixturescripts.FixtureScript$ExecutionContext#executeChildIfNotAlready(FixtureScript.java:549)

   - org.apache.isis.applib.fixturescripts.FixtureScript$ExecutionContext#executeChildT(FixtureScript.java:528)

   - org.apache.isis.applib.fixturescripts.FixtureScript$ExecutionContext#executeChildT(FixtureScript.java:498)

   - org.apache.isis.applib.fixturescripts.FixtureScript$ExecutionContext#executeChild(FixtureScript.java:487)

   - org.isisaddons.app.kitchensink.fixture.KitchensinkSetupFixture#execute(KitchensinkSetupFixture.java:62)

   - org.apache.isis.applib.fixturescripts.FixtureScript$ExecutionContext#executeChildIfNotAlready(FixtureScript.java:549)

   - org.apache.isis.applib.fixturescripts.FixtureScript$ExecutionContext#access$200(FixtureScript.java:248)

   - org.apache.isis.applib.fixturescripts.FixtureScript#run(FixtureScript.java:719)

   - org.isisaddons.app.kitchensink.fixture.KitchensinkFixturesService#installFixturesAndReturnFirst(KitchensinkFixturesService.java:95)

   - sun.reflect.NativeMethodAccessorImpl#invoke0(NativeMethodAccessorImpl.java:-2)

   - sun.reflect.NativeMethodAccessorImpl#invoke(NativeMethodAccessorImpl.java:62)

   - sun.reflect.DelegatingMethodAccessorImpl#invoke(DelegatingMethodAccessorImpl.java:43)

   - java.lang.reflect.Method#invoke(Method.java:497)
   - org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacetForDomainEventAbstract#internalInvoke(ActionInvocationFacetForDomainEventAbstract.java:356)

   - org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacetForDomainEventAbstract#invoke(ActionInvocationFacetForDomainEventAbstract.java:196)

   - org.apache.isis.core.runtime.transaction.facets.ActionInvocationFacetWrapTransaction$1#execute(ActionInvocationFacetWrapTransaction.java:57)

   - org.apache.isis.core.runtime.transaction.facets.ActionInvocationFacetWrapTransaction$1#execute(ActionInvocationFacetWrapTransaction.java:54)

   - org.apache.isis.core.runtime.system.transaction.IsisTransactionManager#executeWithinTransaction(IsisTransactionManager.java:205)

   - org.apache.isis.core.runtime.transaction.facets.ActionInvocationFacetWrapTransaction#invoke(ActionInvocationFacetWrapTransaction.java:54)

   - org.apache.isis.core.metamodel.specloader.specimpl.ObjectActionImpl#execute(ObjectActionImpl.java:367)

   - org.apache.isis.core.metamodel.specloader.specimpl.ObjectActionImpl#executeWithRuleChecking(ObjectActionImpl.java:358)

   - org.apache.isis.viewer.wicket.model.models.ActionModel#executeAction(ActionModel.java:467)

   - org.apache.isis.viewer.wicket.model.models.ActionModel#load(ActionModel.java:447)

   - org.apache.isis.viewer.wicket.model.models.ActionModel#load(ActionModel.java:80)

   - org.apache.wicket.model.LoadableDetachableModel#getObject(LoadableDetachableModel.java:121)

   - org.apache.isis.viewer.wicket.model.models.ActionModel#executeHandlingApplicationExceptions(ActionModel.java:543)

   - org.apache.isis.viewer.wicket.ui.components.actions.ActionPanel#executeActionOnTargetAndProcessResults(ActionPanel.java:245)

   - org.apache.isis.viewer.wicket.ui.components.actions.ActionPanel#executeActionAndProcessResults(ActionPanel.java:193)

   - org.apache.isis.viewer.wicket.ui.components.actions.ActionPanel#buildGui(ActionPanel.java:104)

   - org.apache.isis.viewer.wicket.ui.components.actions.ActionPanel#<init>(ActionPanel.java:82)

   - org.apache.isis.viewer.wicket.ui.components.actions.ActionPanelFactory#createComponent(ActionPanelFactory.java:49)

   - org.apache.isis.viewer.wicket.viewer.registries.components.ComponentFactoryRegistryDefault#createComponent(ComponentFactoryRegistryDefault.java:128)

   - org.apache.isis.viewer.wicket.ui.components.widgets.linkandlabel.ActionLinkFactoryAbstract$1#onClick(ActionLinkFactoryAbstract.java:74)

   - org.apache.wicket.ajax.markup.html.AjaxLink$1#onEvent(AjaxLink.java:86)

   - org.apache.wicket.ajax.AjaxEventBehavior#respond(AjaxEventBehavior.java:124)

   - org.apache.wicket.ajax.AbstractDefaultAjaxBehavior#onRequest(AbstractDefaultAjaxBehavior.java:633)

   - sun.reflect.GeneratedMethodAccessor98#invoke(null:-1)
   - sun.reflect.DelegatingMethodAccessorImpl#invoke(DelegatingMethodAccessorImpl.java:43)

   - java.lang.reflect.Method#invoke(Method.java:497)
   - org.apache.wicket.RequestListenerInterface#internalInvoke(RequestListenerInterface.java:258)

   - org.apache.wicket.RequestListenerInterface#invoke(RequestListenerInterface.java:241)

   - org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler#invokeListener(ListenerInterfaceRequestHandler.java:250)

   - org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler#respond(ListenerInterfaceRequestHandler.java:236)

   - org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor#respond(RequestCycle.java:862)

   - org.apache.wicket.request.RequestHandlerStack#execute(RequestHandlerStack.java:64)

   - org.apache.wicket.request.cycle.RequestCycle#execute(RequestCycle.java:261)

   - org.apache.wicket.request.cycle.RequestCycle#processRequest(RequestCycle.java:218)

   - org.apache.wicket.request.cycle.RequestCycle#processRequestAndDetach(RequestCycle.java:289)

   - org.apache.wicket.protocol.http.WicketFilter#processRequestCycle(WicketFilter.java:259)

   - org.apache.wicket.protocol.http.WicketFilter#processRequest(WicketFilter.java:201)

   - org.apache.wicket.protocol.http.WicketFilter#doFilter(WicketFilter.java:282)

   - org.mortbay.jetty.servlet.ServletHandler$CachedChain#doFilter(ServletHandler.java:1212)

   - org.apache.isis.core.webapp.diagnostics.IsisLogOnExceptionFilter#doFilter(IsisLogOnExceptionFilter.java:52)

   - org.mortbay.jetty.servlet.ServletHandler$CachedChain#doFilter(ServletHandler.java:1212)

   - org.apache.shiro.web.servlet.AbstractShiroFilter#executeChain(AbstractShiroFilter.java:449)

   - org.apache.shiro.web.servlet.AbstractShiroFilter$1#call(AbstractShiroFilter.java:365)

   - org.apache.shiro.subject.support.SubjectCallable#doCall(SubjectCallable.java:90)

   - org.apache.shiro.subject.support.SubjectCallable#call(SubjectCallable.java:83)

   - org.apache.shiro.subject.support.DelegatingSubject#execute(DelegatingSubject.java:383)

   - org.apache.shiro.web.servlet.AbstractShiroFilter#doFilterInternal(AbstractShiroFilter.java:362)

   - org.apache.shiro.web.servlet.OncePerRequestFilter#doFilter(OncePerRequestFilter.java:125)

   - org.mortbay.jetty.servlet.ServletHandler$CachedChain#doFilter(ServletHandler.java:1212)

   - org.mortbay.jetty.servlet.ServletHandler#handle(ServletHandler.java:399)

   - org.mortbay.jetty.security.SecurityHandler#handle(SecurityHandler.java:216)

   - org.mortbay.jetty.servlet.SessionHandler#handle(SessionHandler.java:182)

   - org.mortbay.jetty.handler.ContextHandler#handle(ContextHandler.java:766)

   - org.mortbay.jetty.webapp.WebAppContext#handle(WebAppContext.java:450)
   - org.mortbay.jetty.handler.ContextHandlerCollection#handle(ContextHandlerCollection.java:230)

   - org.mortbay.jetty.handler.HandlerCollection#handle(HandlerCollection.java:114)

   - org.mortbay.jetty.handler.HandlerWrapper#handle(HandlerWrapper.java:152)

   - org.mortbay.jetty.Server#handle(Server.java:326)
   - org.mortbay.jetty.HttpConnection#handleRequest(HttpConnection.java:542)

   - org.mortbay.jetty.HttpConnection$RequestHandler#headerComplete(HttpConnection.java:928)

   - org.mortbay.jetty.HttpParser#parseNext(HttpParser.java:549)
   - org.mortbay.jetty.HttpParser#parseAvailable(HttpParser.java:212)
   - org.mortbay.jetty.HttpConnection#handle(HttpConnection.java:404)
   - org.mortbay.io.nio.SelectChannelEndPoint#run(SelectChannelEndPoint.java:410)

   - org.mortbay.thread.QueuedThreadPool$PoolThread#run(QueuedThreadPool.java:582




On Sun, Aug 2, 2015 at 11:23 PM, Dan Haywood <dan@haywood-associates.co.uk>
wrote:

> Further to this, I've updated the kitchensink (against 1.9.0-SNAPSHOT) to
> demonstrate this technique....
>
> The code is in ReferenceObject, which you can get to from the "Data Types"
> menu.  Use the fixture scripts menu to create some sample data.
>
> The relevant code is below.
>
> Cheers
> Dan
>
> [1]  https://github.com/isisaddons/isis-app-kitchensink
>
>
>     private OtherObject someOtherObjectUsingName;
>
>     @Property(hidden = Where.EVERYWHERE)
>     @Column(allowsNull = "true")
>     public OtherObject getSomeOtherObjectUsingName() {
>         return someOtherObjectUsingName;
>     }
>
>     public void setSomeOtherObjectUsingName(final OtherObject
> someOtherObjectUsingName) {
>         this.someOtherObjectUsingName = someOtherObjectUsingName;
>     }
>
>     @NotPersistent
>     public String getSomeOtherObjectUsingNameName() {
>         return getSomeOtherObjectUsingName() != null?
> getSomeOtherObjectUsingName().getName() : null;
>     }
>
>     public void setSomeOtherObjectUsingNameName(final String name) {
>         OtherObject otherObject = name != null
>                 ? container.firstMatch(OtherObject.class, withName(name))
>                 : null;
>         setSomeOtherObjectUsingName(otherObject);
>     }
>
>     public List<String> choicesSomeOtherObjectUsingNameName() {
>         List<OtherObject> otherObjects =
> container.allInstances(OtherObject.class);
>         return Lists.newArrayList(
>                 Iterables.transform(otherObjects, nameOf())
>         );
>     }
>
>     private static Function<OtherObject, String> nameOf() {
>         return new Function<OtherObject, String>() {
>             @Nullable @Override public String apply(final OtherObject
> input) {
>                 return input.getName();
>             }
>         };
>     }
>
>     private static Predicate<OtherObject> withName(final String name) {
>         return new Predicate<OtherObject>() {
>         @Override public boolean apply(final OtherObject input) {
>              return Objects.equal(input.getName(), name);
>             }
>     };
>     }
>
>
>
>
>
> On 30 July 2015 at 13:16, Dan Haywood <dan@haywood-associates.co.uk>
> wrote:
>
> > looks right to me, so I'll take a look at in this eve or tomorrow.
> >
> > thx
> > Dan
> >
> >
> > On 30 July 2015 at 13:12, Stephen Cameron <steve.cameron.62@gmail.com>
> > wrote:
> >
> >> Still no luck with this one.
> >>
> >> The derived RegionName appears as a non-editable property, so not sure
> >> what
> >> was different before when I was getting an model validation error.
> >>
> >> My current code of interest is this:
> >>
> >>     @Column(name = "region", allowsNull = "true")
> >>     //@MemberOrder(sequence = "7")
> >>     @Property(hidden=Where.EVERYWHERE)
> >>     public Region getRegion() {
> >>         return this.region;
> >>     }
> >>
> >>     public void setRegion(Region region) {
> >>         this.region = region;
> >>     }
> >>
> >>     public List<Region> choicesRegion() {
> >>         return regions.listAllRegions();
> >>     }
> >>
> >>     @MemberOrder(sequence = "7")
> >>     public String getRegionName() {
> >>         return regions.nameForRegion(getRegion());
> >>     }
> >>
> >>     public void setRegionName(String name) {
> >>         setRegion(regions.regionForName(name));
> >>     }
> >>
> >>     public List<String> choicesRegionName(){
> >>         return regions.listAllNamesExclusive(getRegion());
> >>     }
> >>
> >> My Region class is this:
> >>
> >> package au.com.scds.chats.dom.modules.general.codes;
> >>
> >> import javax.jdo.annotations.Column;
> >> import javax.jdo.annotations.IdentityType;
> >> import javax.jdo.annotations.PrimaryKey;
> >>
> >> import org.apache.isis.applib.annotation.Action;
> >> import org.apache.isis.applib.annotation.ActionLayout;
> >> import org.apache.isis.applib.annotation.DomainServiceLayout;
> >> import org.apache.isis.applib.annotation.DomainServiceLayout.MenuBar;
> >> import org.apache.isis.applib.annotation.MemberOrder;
> >> import org.apache.isis.applib.annotation.PropertyLayout;
> >>
> >> @javax.jdo.annotations.PersistenceCapable(
> >>          identityType=IdentityType.APPLICATION)
> >> public class Region {
> >>
> >>     public String title(){
> >>         return getName();
> >>     }
> >>
> >>     private String name;
> >>
> >>     @Column(name="region", allowsNull = "false")
> >>     @PrimaryKey()
> >>     @PropertyLayout(named="Region")
> >>     @MemberOrder(sequence="1")
> >>     public String getName() {
> >>         return name;
> >>     }
> >>
> >>     public void setName(String name) {
> >>         this.name = name;
> >>     }
> >> }
> >>
> >> My Regions repository class is this:
> >>
> >> package au.com.scds.chats.dom.modules.general.codes;
> >>
> >> import java.util.ArrayList;
> >> import java.util.List;
> >>
> >> import org.apache.isis.applib.DomainObjectContainer;
> >> import org.apache.isis.applib.annotation.Action;
> >> import org.apache.isis.applib.annotation.ActionLayout;
> >> import org.apache.isis.applib.annotation.BookmarkPolicy;
> >> import org.apache.isis.applib.annotation.DomainService;
> >> import org.apache.isis.applib.annotation.DomainServiceLayout;
> >> import org.apache.isis.applib.annotation.DomainServiceLayout.MenuBar;
> >> import org.apache.isis.applib.annotation.MemberOrder;
> >> import org.apache.isis.applib.annotation.ParameterLayout;
> >> import org.apache.isis.applib.annotation.Programmatic;
> >> import org.apache.isis.applib.annotation.SemanticsOf;
> >> import org.apache.isis.applib.query.QueryDefault;
> >>
> >> import au.com.scds.chats.dom.modules.participant.Participant;
> >>
> >> @DomainService(repositoryFor = Region.class)
> >> @DomainServiceLayout(menuBar = MenuBar.SECONDARY, named =
> >> "Administration",
> >> menuOrder = "100.1")
> >> public class Regions {
> >>
> >>     // region > listAll (action)
> >>     @Action(semantics = SemanticsOf.SAFE)
> >>     @ActionLayout(bookmarking = BookmarkPolicy.AS_ROOT)
> >>     @MemberOrder(sequence = "1")
> >>     public List<Region> listAllRegions() {
> >>         return container.allInstances(Region.class);
> >>     }
> >>
> >>     // endregion
> >>
> >>     // region > create (action)
> >>     @MemberOrder(sequence = "2")
> >>     public Region createRegion(
> >>             final @ParameterLayout(named = "Region Name") String name) {
> >>         final Region obj = container.newTransientInstance(Region.class);
> >>         obj.setName(name);
> >>         container.persistIfNotAlready(obj);
> >>         return obj;
> >>     }
> >>
> >>     // endregion
> >>
> >>     // region > injected services
> >>
> >>     @javax.inject.Inject
> >>     DomainObjectContainer container;
> >>
> >>     // endregion
> >>
> >>     @Programmatic
> >>     public String nameForRegion(Region region) {
> >>         return (region != null) ? region.getName() : null;
> >>     }
> >>
> >>
> >>     @Programmatic
> >>     public List<String> listAllNamesExclusive(Region region) {
> >>         List<Region> regions = listAllRegions();
> >>         List<String> names = new ArrayList<String>();
> >>         for (Region r : regions) {
> >>             if (region != null && r != region) {
> >>                 names.add(r.getName());
> >>             }
> >>         }
> >>         return names;
> >>     }
> >>
> >>
> >>     @Programmatic
> >>     public Region regionForName(String name) {
> >>         Region region = container.firstMatch(new QueryDefault<>(
> >> Region.class,
> >>                  "findRegion", "name", name));
> >>         return region;
> >>     }
> >>
> >> }
> >>
> >> Just maybe I there is something missing still?
> >>
> >> I added a @Property annotation to the getRegionName() method, but that
> >> gave
> >> me a message saying it expected @javax.jdo.persistence.Column too.
> >>
> >> Note I couldn't use deprecated @Hidden in Isis 1.9.0.
> >>
> >>
> >> On Thu, Jul 30, 2015 at 8:14 PM, Stephen Cameron <
> >> steve.cameron.62@gmail.com
> >> > wrote:
> >>
> >> > Hi Dan, When I tried this I got an model validation error message
> >> relating
> >> > to the choices method, I will have another go and if it fails, provide
> >> the
> >> > test case. Thanks for the tips.
> >> >
> >> > On Thu, Jul 30, 2015 at 7:57 PM, Dan Haywood <
> >> dan@haywood-associates.co.uk
> >> > > wrote:
> >> >
> >> >> You should be able to add a choicesXxx() for the derived property:
> >> >>
> >> >>     public List<String> choicesRegionName(){
> >> >>         return
> Lists.newArrayList(Iterables.transform(choicesRegion(),
> >> x
> >> >> ->
> >> >> x.getName()));
> >> >>     }
> >> >>
> >> >> If that isn't sufficient, you might also need to add a setter:
> >> >>
> >> >> public void setRegionName(final String name) {
> >> >> setRegion(Iterables.find(choicesRegion(), x ->
> >> x.getName().equals(name)));
> >> >> }
> >> >>
> >> >> Obviously, you might need to also add some error handling.
> >> >>
> >> >> ~~~
> >> >>
> >> >> Regarding the "external URL" idea, perhaps you could raise that as
a
> >> >> separate ticket, with a code sketch as to how you'd like this
> >> information
> >> >> specified?
> >> >>
> >> >> Thanks
> >> >> Dan
> >> >>
> >> >>
> >> >>
> >> >>
> >> >>
> >> >> On 30 July 2015 at 03:17, Stephen Cameron <
> steve.cameron.62@gmail.com>
> >> >> wrote:
> >> >>
> >> >> > Not so simple, as now the property cannot be updated.
> >> >> >
> >> >> > I have the following (@Hidden is deprecated)
> >> >> >
> >> >> >     @Column(allowsNull = "true")
> >> >> >     @MemberOrder(sequence = "7")
> >> >> >     @PropertyLayout(hidden=Where.EVERYWHERE)
> >> >> >     public Region getRegion() {
> >> >> >         return this.region;
> >> >> >     }
> >> >> >
> >> >> >     public void setRegion(Region region) {
> >> >> >         this.region = region;
> >> >> >     }
> >> >> >
> >> >> >     public List<Region> choicesRegion(){
> >> >> >         List<Region> regions =
> container.allInstances(Region.class);
> >> >> >         return regions;
> >> >> >     }
> >> >> >
> >> >> >     @MemberOrder(sequence = "7.1")
> >> >> >     public String getRegionName(){
> >> >> >         return (getRegion() != null) ? getRegion().getName() :
> null;
> >> >> >     }
> >> >> >
> >> >> > Sure enough getRegion doesn't appear in the UI but getRegionName
> >> does,
> >> >> but
> >> >> > then setRegion and choiceRegion don't mean anything to the UI,
so
> the
> >> >> > Region property is read-only.
> >> >> >
> >> >> > This issue is maybe more significant than it appears at first,
in
> >> terms
> >> >> of
> >> >> > domain modelling such code-lists are simple types that 'represent'
> >> >> things
> >> >> > on the boundary of the domain of interest. So we usually want
to
> just
> >> >> > represent them with a name. Presently it makes no sense to go
to
> that
> >> >> thing
> >> >> > via a hyperlink as all we'll find is that name, our model extends
> no
> >> >> > further.
> >> >> >
> >> >> > However we just might like to allow users to leave the domain
model
> >> and
> >> >> go
> >> >> > to a resource outside. So, extending the suppressLink=true idea,
I
> >> would
> >> >> > add that each object could have an implicit link(URL),created
by
> >> Isis,
> >> >> or
> >> >> > an explicit one and if the explicit one is present it can
> optionally
> >> be
> >> >> > used as an alternative to the implicit one.
> >> >> >
> >> >> > For example, you might create a database to log fish details,
> species
> >> >> is a
> >> >> > boundary concept, we aren't likely to want to add a new species
to
> >> the
> >> >> list
> >> >> > of known species, but we'd like to keep such a list handy, but
for
> >> each
> >> >> > named species in that list, to provide an explicit link to a
> resource
> >> >> in a
> >> >> > global fish database. It makes more sense to use this link than
the
> >> >> > implicit one, as if the implicit one is used we'd navigate to
the
> >> domain
> >> >> > object page displaying the name and URL, both of which items of
> data
> >> >> could
> >> >> > have been in the explicit link.
> >> >> >
> >> >> > In the explicit case you might want to warn the user they are
> >> navigating
> >> >> > outside the Isis domain application.
> >> >> >
> >> >> > Perhaps all this could be done simply if there was a URI type
in
> >> Isis,
> >> >> that
> >> >> > would allow it to create 'smart links' automatically.
> >> >> >
> >> >> >
> >> >> >
> >> >> >
> >> >> >
> >> >> > On Wed, Jul 29, 2015 at 9:37 PM, Stephen Cameron <
> >> >> > steve.cameron.62@gmail.com
> >> >> > > wrote:
> >> >> >
> >> >> > > Thanks Jeroen, seems simple enough :)
> >> >> > >
> >> >> > > On Wed, Jul 29, 2015 at 9:28 PM, Jeroen van der Wal <
> >> >> jeroen@stromboli.it
> >> >> > >
> >> >> > > wrote:
> >> >> > >
> >> >> > >> You could also hide the property and create a separate
getter
> for
> >> >> > display
> >> >> > >> purposes only:
> >> >> > >>
> >> >> > >> private MyProperty myProperty;
> >> >> > >>
> >> >> > >> @Hidden
> >> >> > >> public MyProperty getMyProperty() {...}
> >> >> > >>
> >> >> > >> public void setMyProperty(...) {...}
> >> >> > >>
> >> >> > >> public String getMyPropertyName() {
> >> >> > >>     getMyProperty.getName();
> >> >> > >> }
> >> >> > >>
> >> >> > >> On 29 July 2015 at 13:18, Stephen Cameron <
> >> >> steve.cameron.62@gmail.com>
> >> >> > >> wrote:
> >> >> > >>
> >> >> > >> > On Wed, Jul 29, 2015 at 6:38 PM, Dan Haywood <
> >> >> > >> dan@haywood-associates.co.uk
> >> >> > >> > >
> >> >> > >> > wrote:
> >> >> > >> >
> >> >> > >> > > You are right, they will be displayed as links;
there's no
> >> way to
> >> >> > >> disable
> >> >> > >> > > it currently.
> >> >> > >> > >
> >> >> > >> > > We could add a bit of metadata perhaps for
this, eg
> >> >> > >> > > @DomainObjectLayout(suppressLink=true) or similar.
> >> >> > >> > >
> >> >> > >> > > Please raise a ticket.
> >> >> > >> > >
> >> >> > >> >
> >> >> > >> > OK https://issues.apache.org/jira/browse/ISIS-1180
> >> >> > >> >
> >> >> > >> > >
> >> >> > >> > > Thx
> >> >> > >> > > Dan
> >> >> > >> > >
> >> >> > >> > > PS: these entities wouldn't be value types,
rather regular
> >> >> entities.
> >> >> > >> But
> >> >> > >> > > you are right... what we really want is full-class
support
> for
> >> >> value
> >> >> > >> > types.
> >> >> > >> > >   We're just not there yet...
> >> >> > >> > >
> >> >> > >> > >
> >> >> > >> > >
> >> >> > >> >
> >> >> > >> > >
> >> >> > >> > >
> >> >> > >> > > On 29 July 2015 at 09:34, Stephen Cameron <
> >> >> > steve.cameron.62@gmail.com
> >> >> > >> >
> >> >> > >> > > wrote:
> >> >> > >> > >
> >> >> > >> > > > Thanks, but surely such object properties
always end up
> >> being
> >> >> > >> displayed
> >> >> > >> > > as
> >> >> > >> > > > links? Clicking on the link to go to such
an object page
> is
> >> >> > >> > meaningless,
> >> >> > >> > > as
> >> >> > >> > > > it only has one name property, that was
displayed in the
> >> link.
> >> >> > Can I
> >> >> > >> > > > disable that default behaviour for value
types?
> >> >> > >> > > >
> >> >> > >> > > >
> >> >> > >> > > >
> >> >> > >> > > > On Wed, Jul 29, 2015 at 5:47 PM, Dan Haywood
<
> >> >> > >> > > dan@haywood-associates.co.uk
> >> >> > >> > > > >
> >> >> > >> > > > wrote:
> >> >> > >> > > >
> >> >> > >> > > > > On 29 July 2015 at 08:08, Stephen
Cameron <
> >> >> > >> > steve.cameron.62@gmail.com>
> >> >> > >>
> >> >> > >> > > > > wrote:
> >> >> > >> > > > >
> >> >> > >> > > > > > Hi,
> >> >> > >> > > > > >
> >> >> > >> > > > > > I want to do have some properties
that are essentially
> >> >> String
> >> >> > >> > types,
> >> >> > >> > > > but
> >> >> > >> > > > > > which have a limited range of
values (code-lists or
> >> >> restricted
> >> >> > >> > > > > > vocabularies). I want to allow
these lists to be
> >> >> administered
> >> >> > >> > > > centrally,
> >> >> > >> > > > > so
> >> >> > >> > > > > > to add them to a single Administration
menu item for
> >> admin
> >> >> > >> users.
> >> >> > >> > > > > >
> >> >> > >> > > > > > For most users these codes should
appears as lists of
> >> >> strings
> >> >> > >> not
> >> >> > >> > as
> >> >> > >> > > > > > objects, but making them objects
seems to be the
> >> logical OO
> >> >> > way
> >> >> > >> to
> >> >> > >> > > deal
> >> >> > >> > > > > > with them in Isis. So they are
basically objects with
> >> one
> >> >> > 'name'
> >> >> > >> > > > property
> >> >> > >> > > > > > (and maybe an id added by datanucleus).
All users need
> >> to
> >> >> see
> >> >> > is
> >> >> > >> > the
> >> >> > >> > > > name
> >> >> > >> > > > > > property, no icon is needed.
> >> >> > >> > > > > >
> >> >> > >> > > > > > Also, if I make them objects
I also will get
> referencial
> >> >> > >> integrity
> >> >> > >> > > > > > constraints applied in the database.
> >> >> > >> > > > > >
> >> >> > >> > > > > >
> >> >> > >> > > > > +1, do it this way.  That way they
can also hold
> >> behaviour in
> >> >> > the
> >> >> > >> > > future.
> >> >> > >> > > > >
> >> >> > >> > > > >
> >> >> > >> > > > >
> >> >> > >> > > > >
> >> >> > >> > > > > > I wonder there is a simple recipe
for this?
> >> >> > >> > > > > >
> >> >> > >> > > > >
> >> >> > >> > > > > No magic recipe for the domain entities...
basically
> >> >> > copy-n-paste
> >> >> > >> the
> >> >> > >> > > > > SimpleObject that's in our archetype
as many times as
> >> needed,
> >> >> > and
> >> >> > >> > tweak
> >> >> > >> > > > as
> >> >> > >> > > > > required.
> >> >> > >> > > > >
> >> >> > >> > > > > If you want to use the code as the
primary key, then use
> >> DN
> >> >> > >> > application
> >> >> > >> > > > > identity
> >> >> > >> > > > >
> >> >> > >> > > > > @javax.jdo.annotations.PersistenceCapable(
> >> >> > >> > > > >         identityType=IdentityType.APPLICATION,
> >> >> > >> > > > >         schema = "simple",
> >> >> > >> > > > >         table = "SimpleObject"
> >> >> > >> > > > > )
> >> >> > >> > > > >
> >> >> > >> > > > > and add @PrimaryKey to the "name"
property.  Also add
> >> @Title
> >> >> to
> >> >> > >> that
> >> >> > >> > > > 'name'
> >> >> > >> > > > > property (it is in SimpleObject already).
> >> >> > >> > > > >
> >> >> > >> > > > >
> >> >> > >> > > > > You would probably want to remove
the version column, ie
> >> >> remove:
> >> >> > >> > > > >
> >> >> > >> > > > > @javax.jdo.annotations.Version(
> >> >> > >> > > > >         strategy=VersionStrategy.VERSION_NUMBER,
> >> >> > >> > > > >         column="version")
> >> >> > >> > > > >
> >> >> > >> > > > >
> >> >> > >> > > > > In addition, if you annotate the
class as "bounded"
> >> >> > >> > > > > (@DomainObject(bounded=true)) then
you are telling the
> >> >> framework
> >> >> > >> that
> >> >> > >> > > > > there's a limited - ie bounded -
set of instances, and
> so
> >> it
> >> >> > will
> >> >> > >> > > display
> >> >> > >> > > > > all instances in a drop-down for
you.
> >> >> > >> > > > >
> >> >> > >> > > > >
> >> >> > >> > > > > HTH
> >> >> > >> > > > > Dan
> >> >> > >> > > > >
> >> >> > >> > > >
> >> >> > >> > >
> >> >> > >> >
> >> >> > >>
> >> >> > >
> >> >> > >
> >> >> >
> >> >>
> >> >
> >> >
> >>
> >
> >
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message