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
>
>

Reply via email to