Nice to hear, Oscar. thx. PS: I've read your other mail about the JDO (lack of) enhancement issue, still mulling on it...
On 12 June 2013 12:20, GESCONSULTOR - Óscar Bou <[email protected]>wrote: > Working perfectly with latest snapshot :-)) > > > Thanks for the quick response. Is one of the things (also the "quality" of > the framework) that invites us to accept the "risk" of abandoning our > current technology stack and invest on the change to Apache Isis. > > We expect to contribute in the near future also, when we know more about > the "internals". > > Thanks! > > > > El 12/06/2013, a las 06:57, Dan Haywood (JIRA) <[email protected]> escribió: > > > > > [ > https://issues.apache.org/jira/browse/ISIS-435?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel] > > > > Dan Haywood updated ISIS-435: > > ----------------------------- > > > > Fix Version/s: core-1.3.0 > > > >> Problems with Enums implementing methods on values > >> -------------------------------------------------- > >> > >> Key: ISIS-435 > >> URL: https://issues.apache.org/jira/browse/ISIS-435 > >> Project: Isis > >> Issue Type: Bug > >> Components: Core > >> Affects Versions: core-1.2.0 > >> Reporter: Oscar Bou > >> Assignee: Dan Haywood > >> Fix For: core-1.3.0 > >> > >> > >> Apache Isis must properly support methods on Enums and Enum values. > >> Steps to reproduce on the current Archetype: > >> 1. On "ToDoItem.java", modify the "Category" enum, replacing its > definition by this: > >> public static enum Category { > >> Professional { > >> @Override > >> public Integer myIndex() { > >> return 1; > >> } > >> }, Domestic { > >> @Override > >> public Integer myIndex() { > >> return 2; > >> } > >> }, Other { > >> @Override > >> public Integer myIndex() { > >> return 3; > >> } > >> }; > >> public abstract Integer myIndex(); > >> } > >> 2. Try to run the project and the following Exception is thrown (while > running the tests and installing the Fixture): > >> 11:45:24,380 [Native main DEBUG] SELECT > 'dom.todo.ToDoItem' AS > NUCLEUS_TYPE,A0.CATEGORY,A0.COMPLETE,A0.COST,A0.DESCRIPTION,A0.DUEBY,A0.NOTES,A0.OWNEDBY,A0.TODOITEM_ID,A0.VERSION > FROM TODOITEM A0 > >> 11:45:24,381 [Native main DEBUG] SELECT > 'dom.todo.ToDoItem' AS > NUCLEUS_TYPE,A0.CATEGORY,A0.COMPLETE,A0.COST,A0.DESCRIPTION,A0.DUEBY,A0.NOTES,A0.OWNEDBY,A0.TODOITEM_ID,A0.VERSION > FROM TODOITEM A0 > >> 11:45:24,381 [Native main DEBUG] SELECT > 'dom.todo.ToDoItem' AS > NUCLEUS_TYPE,A0.CATEGORY,A0.COMPLETE,A0.COST,A0.DESCRIPTION,A0.DUEBY,A0.NOTES,A0.OWNEDBY,A0.TODOITEM_ID,A0.VERSION > FROM TODOITEM A0 > >> 11:45:24,381 [Native main DEBUG] SELECT > 'dom.todo.ToDoItem' AS > NUCLEUS_TYPE,A0.CATEGORY,A0.COMPLETE,A0.COST,A0.DESCRIPTION,A0.DUEBY,A0.NOTES,A0.OWNEDBY,A0.TODOITEM_ID,A0.VERSION > FROM TODOITEM A0 > >> 11:45:24,382 [FacetedMethodsBuilder main INFO ] introspecting > dom.todo.ToDoItem$Category$1 > >> 11:45:24,382 [FixturesInstallerDelegate main ERROR] installing > fixture fixture.todo.ToDoItemsFixture failed; aborting > >> java.lang.IllegalArgumentException: illegal argument, expected: is a > non empty string > >> at > org.apache.isis.core.commons.ensure.Ensure.ensureThatArg(Ensure.java:57) > >> at > org.apache.isis.core.metamodel.spec.ObjectSpecId.<init>(ObjectSpecId.java:47) > >> at > org.apache.isis.core.metamodel.spec.ObjectSpecId.of(ObjectSpecId.java:43) > >> at > org.apache.isis.core.progmodel.facets.object.objecttype.ObjectSpecIdFacetAbstract.<init>(ObjectSpecIdFacetAbstract.java:40) > >> at > org.apache.isis.core.progmodel.facets.object.objecttype.ObjectSpecIdFacetDerivedFromClassName.<init>(ObjectSpecIdFacetDerivedFromClassName.java:27) > >> at > org.apache.isis.core.progmodel.facets.object.objecttype.ObjectTypeDerivedFromClassNameFacetFactory.process(ObjectTypeDerivedFromClassNameFacetFactory.java:47) > >> at > org.apache.isis.core.metamodel.specloader.facetprocessor.FacetProcessor.process(FacetProcessor.java:283) > >> at > org.apache.isis.core.metamodel.specloader.specimpl.FacetedMethodsBuilder.introspectClass(FacetedMethodsBuilder.java:178) > >> at > org.apache.isis.core.metamodel.specloader.specimpl.dflt.ObjectSpecificationDefault.introspectTypeHierarchyAndMembers(ObjectSpecificationDefault.java:128) > >> at > org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault.introspectIfRequired(ObjectReflectorDefault.java:572) > >> at > org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault.loadSpecificationForSubstitutedClass(ObjectReflectorDefault.java:475) > >> at > org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault.internalLoadSpecification(ObjectReflectorDefault.java:453) > >> at > org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault.loadSpecification(ObjectReflectorDefault.java:448) > >> at > org.apache.isis.core.runtime.persistence.adaptermanager.AdapterManagerDefault.existingOrValueAdapter(AdapterManagerDefault.java:186) > >> at > org.apache.isis.core.runtime.persistence.adaptermanager.AdapterManagerDefault.adapterFor(AdapterManagerDefault.java:160) > >> at > org.apache.isis.core.runtime.persistence.internal.RuntimeContextFromSession$2.adapterFor(RuntimeContextFromSession.java:110) > >> at > org.apache.isis.core.progmodel.facets.properties.defaults.fromtype.PropertyDefaultFacetDerivedFromDefaultedFacet.getDefault(PropertyDefaultFacetDerivedFromDefaultedFacet.java:49) > >> at > org.apache.isis.core.metamodel.specloader.specimpl.OneToOneAssociationImpl.getDefault(OneToOneAssociationImpl.java:210) > >> at > org.apache.isis.core.metamodel.specloader.specimpl.OneToOneAssociationImpl.toDefault(OneToOneAssociationImpl.java:221) > >> at > org.apache.isis.core.metamodel.specloader.specimpl.dflt.ObjectSpecificationDefault.initialize(ObjectSpecificationDefault.java:456) > >> at > org.apache.isis.core.runtime.system.persistence.PersistenceSession.createTransientInstance(PersistenceSession.java:316) > >> at > org.apache.isis.core.runtime.persistence.internal.RuntimeContextFromSession$7.createTransientInstance(RuntimeContextFromSession.java:185) > >> at > org.apache.isis.core.metamodel.services.container.DomainObjectContainerDefault.doCreateTransientInstance(DomainObjectContainerDefault.java:148) > >> at > org.apache.isis.core.metamodel.services.container.DomainObjectContainerDefault.newTransientInstance(DomainObjectContainerDefault.java:100) > >> at > org.apache.isis.applib.AbstractContainedObject.newTransientInstance(AbstractContainedObject.java:41) > >> at dom.todo.ToDoItems.newToDo(ToDoItems.java:150) > >> at > fixture.todo.ToDoItemsFixture.createToDoItemForUser(ToDoItemsFixture.java:76) > >> at > fixture.todo.ToDoItemsFixture.installFor(ToDoItemsFixture.java:50) > >> at fixture.todo.ToDoItemsFixture.install(ToDoItemsFixture.java:41) > >> at > org.apache.isis.core.runtime.fixtures.FixturesInstallerDelegate.installFixture(FixturesInstallerDelegate.java:213) > >> at > org.apache.isis.core.runtime.fixtures.FixturesInstallerDelegate.installFixtureInTransaction(FixturesInstallerDelegate.java:175) > >> at > org.apache.isis.core.runtime.fixtures.FixturesInstallerDelegate.installFixtures(FixturesInstallerDelegate.java:162) > >> at > org.apache.isis.core.runtime.fixtures.FixturesInstallerDelegate.installFixtures(FixturesInstallerDelegate.java:142) > >> at > org.apache.isis.core.integtestsupport.IsisSystemForTest.wireAndInstallFixtures(IsisSystemForTest.java:292) > >> at > org.apache.isis.core.integtestsupport.IsisSystemForTest.setUpSystem(IsisSystemForTest.java:283) > >> at > org.apache.isis.core.integtestsupport.IsisSystemForTest.setUpSystem(IsisSystemForTest.java:256) > >> at > integtests.AbstractIntegTest$IsisSystemForTestRule$1.initialValue(AbstractIntegTest.java:131) > >> at > integtests.AbstractIntegTest$IsisSystemForTestRule$1.initialValue(AbstractIntegTest.java:128) > >> at java.lang.ThreadLocal.setInitialValue(ThreadLocal.java:141) > >> at java.lang.ThreadLocal.get(ThreadLocal.java:131) > >> at > integtests.AbstractIntegTest$IsisSystemForTestRule.getIsisSystemForTest(AbstractIntegTest.java:137) > >> at > integtests.AbstractIntegTest$IsisSystemForTestRule.apply(AbstractIntegTest.java:142) > >> at > org.junit.runners.BlockJUnit4ClassRunner.withMethodRules(BlockJUnit4ClassRunner.java:349) > >> at > org.junit.runners.BlockJUnit4ClassRunner.withRules(BlockJUnit4ClassRunner.java:339) > >> at > org.junit.runners.BlockJUnit4ClassRunner.methodBlock(BlockJUnit4ClassRunner.java:256) > >> at > org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70) > >> at > org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) > >> at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) > >> at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) > >> at > org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) > >> at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) > >> at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) > >> at > org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) > >> at org.junit.runners.ParentRunner.run(ParentRunner.java:309) > >> at > org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:59) > >> at > org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:115) > >> at > org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:102) > >> at org.apache.maven.surefire.Surefire.run(Surefire.java:180) > >> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > >> at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) > >> at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) > >> at java.lang.reflect.Method.invoke(Method.java:597) > >> at > org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:350) > >> at > org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:1021) > >> 11:45:24,382 [IsisTransaction main INFO ] abort > transaction IsisTransaction@7fbb6976[state=IN_PROGRESS,commands=0] > >> 11:45:24,387 [IsisConfigurationDefault main INFO ] adding > isis.persistor.datanucleus.RegisterEntities.packagePrefix=dom > >> 11:45:24,388 [IsisConfigurationDefault main INFO ] adding > isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionURL=jdbc:hsqldb:mem:test > >> 11:45:24,388 [IsisConfigurationDefault main INFO ] adding > isis.persistor.datanucleus.impl.datanucleus.defaultInheritanceStrategy=TABLE_PER_CLASS > >> 11:45:24,388 [IsisConfigurationDefault main INFO ] adding > isis.persistor.datanucleus.install-fixtures=true > >> 11:45:24,388 [IsisConfigurationDefault main INFO ] adding > isis.persistor.datanucleus.impl.datanucleus.cache.level2.type=none > >> 11:45:24,388 [IsisSystemFixturesHookAbstract main INFO ] > initialising Isis System > >> 11:45:24,388 [IsisSystemFixturesHookAbstract main INFO ] > working directory: /Users/oscarboubou/dev/test/myapp/integtests/. > >> 11:45:24,388 [IsisSystemFixturesHookAbstract main INFO ] > resource stream source: null > >> 11:45:24,388 [TemplateImageLoaderAwt main INFO ] images to be > loaded from images/ > >> 11:45:24,390 [TemplateImageLoaderAwt main INFO ] images to be > loaded from images/ > >> [....] more log here. > >> 3. If we annotate all abstract method implementations with > @Programmatic, the exception is still thrown: > >> public class ToDoItem implements Comparable<ToDoItem> /*, Locatable*/ { > // GMAP3: uncomment to use https://github.com/danhaywood/isis-wicket-gmap3 > >> private static final long ONE_WEEK_IN_MILLIS = 7 * 24 * 60 * 60 * > 1000L; > >> public static enum Category { > >> Professional { > >> @Override > >> @Programmatic > >> public Integer myIndex() { > >> return 1; > >> } > >> }, Domestic { > >> @Override > >> @Programmatic > >> public Integer myIndex() { > >> return 2; > >> } > >> }, Other { > >> @Override > >> @Programmatic > >> public Integer myIndex() { > >> return 3; > >> } > >> }; > >> public abstract Integer myIndex(); > >> } > >> 4. The exception is still thrown if the Enum is annotated with > @ObjectType: > >> @ObjectType("TODOCATEGORY") > >> public static enum Category { > >> Professional { > >> @Override > >> public Integer myIndex() { > >> return 1; > >> } > >> }, Domestic { > >> @Override > >> public Integer myIndex() { > >> return 2; > >> } > >> }, Other { > >> @Override > >> public Integer myIndex() { > >> return 3; > >> } > >> }; > >> @Programmatic > >> public abstract Integer myIndex(); > >> } > >> 5. But This works ok: > >> @ObjectType("TODOCATEGORY") > >> public static enum Category { > >> Professional , Domestic, Other; > >> @Programmatic > >> public Integer myIndex() { > >> return 1; > >> }; > >> } > >> 6. And this works ok also: > >> public static enum Category { > >> Professional , Domestic, Other; > >> @Programmatic > >> public Integer myIndex() { > >> return 1; > >> }; > >> } > > > > -- > > This message is automatically generated by JIRA. > > If you think it was sent incorrectly, please contact your JIRA > administrators > > For more information on JIRA, see: > http://www.atlassian.com/software/jira > >
