@Override public Object invoke( Object proxy, Method method, Object[] args ) throws Throwable { return associations.associationFor( method ); }
@Override public Object invoke( Object proxy, Method method, Object[] args ) throws Throwable { return associations.manyAssociationFor( method ); }
@Override public Object invoke( Object proxy, Method method, Object[] args ) throws Throwable { return associations.namedAssociationFor( method ); }
return associationState.propertyFor( descriptor.accessor() ).get(); Object entity = associationState.associationFor( associationMethod ).get(); if( entity != null ) ManyAssociation<?> state = associationState.manyAssociationFor( associationDescriptor.accessor() ); List<String> entities = new ArrayList<>( state.count() ); for( Object entity : state ) NamedAssociation<?> state = associationState.namedAssociationFor( associationDescriptor.accessor() ); Map<String, String> entities = new LinkedHashMap<>( state.count() ); for( String name : state )
@Override public EntityReference map( AssociationDescriptor eAssocDesc ) { try { return EntityReference.entityReferenceFor( vState.associationFor( eAssocDesc.accessor() ) ); } catch( IllegalArgumentException assocNotFoundOnValue ) { // Find String Property and convert to Association String propName = eAssocDesc.qualifiedName().name(); try { PropertyDescriptor vPropDesc = vStateDesc.findPropertyModelByName( propName ); if( STRING_TYPE_SPEC.satisfiedBy( vPropDesc.valueType() ) ) { String assocState = (String) vState.propertyFor( vPropDesc.accessor() ).get(); return EntityReference.parseEntityReference( assocState ); } return null; } catch( IllegalArgumentException propNotFoundOnValue ) { return null; } } } };
@Override public Map<String, EntityReference> map( AssociationDescriptor eAssocDesc ) { try { NamedAssociation<?> vAssocState = vState.namedAssociationFor( eAssocDesc.accessor() ); return NAMED_ASSOC_TO_ENTITY_REF_MAP.map( vAssocState ); } catch( IllegalArgumentException assocNotFoundOnValue ) { // Find Map<String,String> Property and convert to NamedAssociation String propName = eAssocDesc.qualifiedName().name(); try { PropertyDescriptor vPropDesc = vStateDesc.findPropertyModelByName( propName ); if( STRING_MAP_TYPE_SPEC.satisfiedBy( vPropDesc.valueType() ) ) { Map<String, String> vAssocState = (Map) vState .propertyFor( vPropDesc.accessor() ).get(); return STRING_MAP_TO_ENTITY_REF_MAP.map( vAssocState ); } return Collections.EMPTY_MAP; } catch( IllegalArgumentException propNotFoundOnValue ) { return Collections.EMPTY_MAP; } } } };
@Override public Iterable<EntityReference> map( AssociationDescriptor eAssocDesc ) { try { ManyAssociation<Object> vAssocState = vState.manyAssociationFor( eAssocDesc.accessor() ); return MANY_ASSOC_TO_ENTITY_REF_ITERABLE.map( vAssocState ); } catch( IllegalArgumentException assocNotFoundOnValue ) { // Find Collection<String> Property and convert to ManyAssociation String propName = eAssocDesc.qualifiedName().name(); try { PropertyDescriptor vPropDesc = vStateDesc.findPropertyModelByName( propName ); if( STRING_COLLECTION_TYPE_SPEC.satisfiedBy( vPropDesc.valueType() ) ) { Collection<String> vAssocState = (Collection) vState .propertyFor( vPropDesc.accessor() ).get(); return STRING_COLLEC_TO_ENTITY_REF_ITERABLE.map( vAssocState ); } return Iterables.empty(); } catch( IllegalArgumentException propNotFoundOnValue ) { return Iterables.empty(); } } } };
@Override public Object map( PropertyDescriptor ePropDesc ) { try { return vState.propertyFor( ePropDesc.accessor() ).get(); } catch( IllegalArgumentException propNotFoundOnValue ) { // Property not found return null; } } };
return associationState.propertyFor( propertyDescriptor.accessor() ).get(); Object entity = associationState.associationFor( associationMethod ).get(); if( entity != null ) ManyAssociation<?> state = associationState.manyAssociationFor( associationMethod ); List<String> entities = new ArrayList<>( state.count() ); for( Object entity : state ) NamedAssociation<?> state = associationState.namedAssociationFor( associationMethod ); Map<String, String> entities = new LinkedHashMap<>( state.count() ); for( String name : state )
@Override public EntityReference map( AssociationDescriptor eAssocDesc ) { String assocName = eAssocDesc.qualifiedName().name(); try { AssociationDescriptor vAssocDesc = vStateDesc.getAssociationByName( assocName ); Object assocEntity = vState.associationFor( vAssocDesc.accessor() ).get(); return assocEntity == null ? null : EntityReference.entityReferenceFor( assocEntity ); } catch( IllegalArgumentException assocNotFoundOnValue ) { // Association not found on Value, find Property<String> and convert to Association try { PropertyDescriptor vPropDesc = vStateDesc.findPropertyModelByName( assocName ); if( STRING_TYPE_SPEC.satisfiedBy( vPropDesc.valueType() ) ) { String assocId = (String) vState.propertyFor( vPropDesc.accessor() ).get(); return assocId == null ? null : EntityReference.parseEntityReference( assocId ); } return null; } catch( IllegalArgumentException propNotFoundOnValue ) { return null; } } } };
NamedAssociation<Object> vAssocState = vState.namedAssociationFor( vAssocDesc.accessor() ); return NAMED_ASSOC_TO_ENTITY_REF_MAP.map( vAssocState ); .propertyFor( vPropDesc.accessor() ).get(); return STRING_MAP_TO_ENTITY_REF_MAP.map( vAssocState );
ManyAssociation<Object> vManyAssoc = vState.manyAssociationFor( vAssocDesc.accessor() ); return MANY_ASSOC_TO_ENTITY_REF_ITERABLE.map( vManyAssoc ); .propertyFor( vPropDesc.accessor() ).get(); return STRING_COLLEC_TO_ENTITY_REF_ITERABLE.map( vAssocState );
@Override public void setAttribute( Attribute attribute ) throws AttributeNotFoundException, InvalidAttributeValueException, MBeanException, ReflectionException { UnitOfWork uow = module.newUnitOfWork(); try { EntityComposite configuration = uow.get( EntityComposite.class, identity ); AssociationStateHolder state = spi.stateOf( configuration ); AccessibleObject accessor = propertyNames.get( attribute.getName() ); Property<Object> property = state.propertyFor( accessor ); property.set( attribute.getValue() ); try { uow.complete(); } catch ( UnitOfWorkCompletionException e ) { throw new ReflectionException( e ); } } finally { uow.discard(); } }
eState.propertyFor( ePropDesc.accessor() ).set( vState.propertyFor( vPropDesc.accessor() ).get() ); Association<Object> eAssoc = eState.associationFor( eAssocDesc.accessor() ); try eAssoc.set( vState.associationFor( vAssocDesc.accessor() ).get() ); String assocId = (String) vState.propertyFor( vPropDesc.accessor() ).get(); if( assocId != null ) ManyAssociation<Object> eManyAssoc = eState.manyAssociationFor( eAssocDesc.accessor() ); try ManyAssociation<Object> vManyAssoc = vState.manyAssociationFor( vAssocDesc.accessor() ); for( Object assoc : eManyAssoc.toList() ) Collection<String> vAssocState = (Collection) vState.propertyFor( vPropDesc.accessor() ).get(); for( Object assoc : eManyAssoc.toList() ) NamedAssociation<Object> eNamedAssoc = eState.namedAssociationFor( eAssocDesc.accessor() ); try NamedAssociation<Object> vNamedAssoc = vState.namedAssociationFor( vAssocDesc.accessor() ); for( String assocName : Iterables.toList( eNamedAssoc ) ) Map<String, String> vAssocState = (Map) vState.propertyFor( vPropDesc.accessor() ).get(); for( String assocName : Iterables.toList( eNamedAssoc ) )
@Override public EntityReference map( AssociationDescriptor associationDescriptor ) { return EntityReference.entityReferenceFor( associationState.associationFor( associationDescriptor.accessor() ).get() ); } },
@Override public Iterable<EntityReference> map( AssociationDescriptor associationDescriptor ) { ManyAssociation<?> state = associationState.manyAssociationFor( associationDescriptor.accessor() ); List<EntityReference> refs = new ArrayList<>( state.count() ); for( Object entity : state ) { refs.add( EntityReference.entityReferenceFor( entity ) ); } return refs; } },
@Override public Map<String, EntityReference> map( AssociationDescriptor associationDescriptor ) { NamedAssociation<?> assoc = associationState.namedAssociationFor( associationDescriptor.accessor() ); Map<String, EntityReference> refs = new LinkedHashMap<>( assoc.count() ); for( String name : assoc ) { refs.put( name, EntityReference.entityReferenceFor( assoc.get( name ) ) ); } return refs; } } );
@Override public Object getAttribute( String name ) throws AttributeNotFoundException, MBeanException, ReflectionException { UnitOfWork uow = module.newUnitOfWork(); try { EntityComposite configuration = uow.get( EntityComposite.class, identity ); AssociationStateHolder state = spi.stateOf( configuration ); AccessibleObject accessor = propertyNames.get( name ); Property<Object> property = state.propertyFor( accessor ); return property.get(); } catch ( Exception ex ) { throw new ReflectionException( ex, "Could not get attribute " + name ); } finally { uow.discard(); } }
eState.propertyFor( ePropDesc.accessor() ).set( vState.propertyFor( vPropDesc.accessor() ).get() ); Association<Object> eAssoc = eState.associationFor( eAssocDesc.accessor() ); try eAssoc.set( vState.associationFor( vAssocDesc.accessor() ).get() ); String assocId = (String) vState.propertyFor( vPropDesc.accessor() ).get(); if( assocId != null ) ManyAssociation<Object> eManyAssoc = eState.manyAssociationFor( eAssocDesc.accessor() ); try ManyAssociation<Object> vManyAss = vState.manyAssociationFor( vAssDesc.accessor() ); for( Object ass : eManyAssoc.toList() ) Collection<String> vAssocState = (Collection) vState.propertyFor( vPropDesc.accessor() ).get(); for( Object ass : eManyAssoc.toList() ) NamedAssociation<Object> eNamedAssoc = eState.namedAssociationFor( eAssocDesc.accessor() ); try NamedAssociation<Object> vNamedAssoc = vState.namedAssociationFor( vAssocDesc.accessor() ); for( String assocName : Iterables.toList( eNamedAssoc ) ) Map<String, String> vAssocState = (Map) vState.propertyFor( vPropDesc.accessor() ).get(); for( String assocName : Iterables.toList( eNamedAssoc ) )
return ( (AssociationStateHolder) handler.state() ).associationFor( accessor );