[
http://issues.ops4j.org/jira/browse/QI-37?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_11271
]
Sonny Gill commented on QI-37:
------------------------------
Yeah, I was thinking that too, and that will solve the problem.
But, this adds an 'if' check for each subsequent access. Will that
have a performance implication?
PropertyContext.newInstance has -
Property instance;
if( ImmutableProperty.class.isAssignableFrom( propertyType ) )
{
instance = new ImmutablePropertyInstance<Object>(this, value
);
}
else
{
instance = new PropertyInstance<Object>( this, value );
}
Would it make sense to change it to -
Property instance;
if( ImmutableProperty.class.isAssignableFrom( propertyType ) )
{
instance = new ImmutablePropertyInstance<Object>(this, value
== null?ImmutablePropertyInstance.UNSET:value );
}
else
{
instance = new PropertyInstance<Object>( this, value );
}
and call it with null value from StateInvocationHandler?
> Properties of the stateOfComposite() returned Object return String UNSET for
> all types
> --------------------------------------------------------------------------------------
>
> Key: QI-37
> URL: http://issues.ops4j.org/jira/browse/QI-37
> Project: Qi4j
> Issue Type: Bug
> Components: Core Runtime
> Affects Versions: 0.1
> Reporter: Sonny Gill
> Assignee: Rickard Öberg
>
> Not sure if this can be called a bug, or if anything can be done about this..
> Calling Property.get() on the properties of the composite returned by
> CompositeBuilder.stateOfComposite() returns the String "UNSET".
> Also Property.get().getClass() throws a ClassCastException for properties
> that are not of type String.
> This makes it cumbersome to use the same GUI control for adding and modifying
> objects, since the new objects require an explicit check against
> ImmutablePropertyInstance.UNSET or literal String value "UNSET".
> TestCase -
> ______________________________________________________________________________
> import org.qi4j.bootstrap.ApplicationFactory;
> import org.qi4j.bootstrap.AssemblyException;
> import org.qi4j.bootstrap.ModuleAssembly;
> import org.qi4j.bootstrap.SingletonAssembler;
> import org.qi4j.composite.Composite;
> import org.qi4j.composite.CompositeBuilder;
> import org.qi4j.composite.CompositeBuilderFactory;
> import org.qi4j.composite.ObjectBuilderFactory;
> import org.qi4j.composite.scope.Structure;
> import org.qi4j.property.Property;
> import org.qi4j.runtime.structure.ApplicationInstance;
> public class TestCase
> {
> public static class Main
> {
> @Structure
> CompositeBuilderFactory cbf;
> public Main() throws Exception
> {
> SingletonAssembler assembler = new SingletonAssembler()
> {
> public void assemble( ModuleAssembly module ) throws
> AssemblyException
> {
> module.addComposites( AComposite.class );
> module.addObjects( Main.class );
> }
> };
> final ApplicationInstance application = new
> ApplicationFactory().newApplication(assembler).
> newApplicationInstance( "Test" );
> application.activate();
> ObjectBuilderFactory obf = application.getLayerInstances().get( 0
> ).getModuleInstances().
> get( 0 ).getStructureContext().getObjectBuilderFactory();
> obf.newObjectBuilder( Main.class ).injectTo( this );
> CompositeBuilder<AComposite> builder = cbf.newCompositeBuilder(
> AComposite.class );
> AComposite aComposite = builder.stateOfComposite();
> System.out.println( aComposite.propA().get() );
> System.out.println( aComposite.propA().get().getClass() );
> }
> public static void main( String[] args ) throws Exception
> {
> new Main();
> }
> }
> }
> interface A
> {
> Property<Integer> propA();
> }
> interface AComposite extends A, Composite
> {
> }
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.ops4j.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
_______________________________________________
qi4j-dev mailing list
[email protected]
http://lists.ops4j.org/mailman/listinfo/qi4j-dev