@Override public Object invoke( Object proxy, Method method, Object[] args ) throws Throwable { return associations.namedAssociationFor( method ); }
@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 NamedAssociation<T> map( Composite entity ) { try { Object target = entity; if( traversedAssociation != null ) { target = traversedAssociation.map( entity ).get(); } if( traversedManyAssociation != null ) { throw new IllegalArgumentException( "Cannot traverse ManyAssociations" ); } if( traversedNamedAssociation != null ) { throw new IllegalArgumentException( "Cannot traverse NamedAssociations" ); } CompositeInstance handler = (CompositeInstance) Proxy.getInvocationHandler( target ); return ( (AssociationStateHolder) handler.state() ).namedAssociationFor( accessor ); } catch( IllegalArgumentException e ) { throw e; } catch( Throwable e ) { throw new IllegalArgumentException( e ); } }
@Override public Map<String, EntityReference> map( AssociationDescriptor descriptor ) { AssociationDescriptor associationDescriptor; try { String associationName = descriptor.qualifiedName().name(); AssociationStateDescriptor entityState = entityDescriptor.state(); associationDescriptor = entityState.getNamedAssociationByName( associationName ); } catch( IllegalArgumentException e ) { return Collections.emptyMap(); } AccessibleObject associationMethod = associationDescriptor.accessor(); NamedAssociation<Object> assoc = associationState.namedAssociationFor( associationMethod ); Map<String, EntityReference> refs = new LinkedHashMap<>( assoc.count() ); for( String name : assoc ) { refs.put( name, EntityReference.entityReferenceFor( assoc.get( name ) ) ); } return refs; } } );
NamedAssociation<?> state = associationState.namedAssociationFor( associationDescriptor.accessor() ); Map<String, String> entities = new LinkedHashMap<>( state.count() ); for( String name : state )
@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; } } } };
NamedAssociation<Object> vAssocState = vState.namedAssociationFor( vAssocDesc.accessor() ); return NAMED_ASSOC_TO_ENTITY_REF_MAP.map( vAssocState );
NamedAssociation<?> state = associationState.namedAssociationFor( associationMethod ); Map<String, String> entities = new LinkedHashMap<>( state.count() ); for( String name : state )
NamedAssociation<Object> eNamedAssoc = eState.namedAssociationFor( eAssocDesc.accessor() ); try NamedAssociation<Object> vNamedAssoc = vState.namedAssociationFor( vAssocDesc.accessor() ); for( String assocName : Iterables.toList( eNamedAssoc ) )
NamedAssociation<Object> eNamedAssoc = eState.namedAssociationFor( eAssocDesc.accessor() ); try NamedAssociation<Object> vNamedAssoc = vState.namedAssociationFor( vAssocDesc.accessor() ); for( String assocName : Iterables.toList( eNamedAssoc ) )