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
