protected ModelField getReferenceIdentifierField( ModelAssociation association ) throws ModelloException { XmlAssociationMetadata xmlAssocMetadata = (XmlAssociationMetadata) association.getAssociationMetadata( XmlAssociationMetadata.ID ); ModelField referenceIdentifierField = null; if ( xmlAssocMetadata.isReference() ) { String associationName = association.getName(); ModelClass modelClass = association.getModelClass(); if ( !isClassInModel( association.getTo(), modelClass.getModel() ) ) { throw new ModelloException( "Can't use xml.reference on the '" + associationName + "' association of '" + modelClass.getName() + "' because the target class '" + association.getTo() + "' is not in the model" ); } List<ModelField> identifierFields = association.getToClass().getIdentifierFields( getGeneratedVersion() ); if ( identifierFields.size() == 1 ) { referenceIdentifierField = identifierFields.get( 0 ); } else { referenceIdentifierField = new DummyIdModelField(); referenceIdentifierField.setName( "modello.refid" ); } } return referenceIdentifierField; }
private JType getDesiredType( ModelField modelField, boolean useTo ) throws ModelloException { JField field = createField( modelField ); JType type = field.getType(); if ( modelField instanceof ModelAssociation ) { ModelAssociation modelAssociation = (ModelAssociation) modelField; JavaAssociationMetadata javaAssociationMetadata = (JavaAssociationMetadata) modelAssociation.getAssociationMetadata( JavaAssociationMetadata.ID ); if ( StringUtils.isNotEmpty( javaAssociationMetadata.getInterfaceName() ) && !modelAssociation.isManyMultiplicity() ) { type = new JClass( javaAssociationMetadata.getInterfaceName() ); } else if ( modelAssociation.isManyMultiplicity() && modelAssociation.isGenericType() ) { JType componentType = getComponentType( modelAssociation, javaAssociationMetadata ); type = new JCollectionType( modelAssociation.getType(), componentType, useJava5 ); } else if ( useTo ) { type = new JClass( modelAssociation.getTo() ); } } return type; }
validateFieldNotEmpty( "Association", "name", getName() ); validateFieldNotEmpty( "Association '" + getName() + "'", "to", to ); if ( isEmpty( to ) ) toClass = getModelClass().getModel().getClass( to, getVersionRange() ); throw new ModelValidationException( "Association '" + getName() + "': Could not find to class." ); if ( isEmpty( multiplicity ) ) throw new ModelValidationException( "Association multiplicity '" + getName() + "' is incorrect: " + "Possible values are '1', '*' or 'n'." ); if ( isEmpty( getType() ) ) ModelDefault modelDefault = getModelClass().getModel().getDefault( ModelDefault.LIST ); setType( modelDefault.getKey() ); setDefaultValue( getDefaultValue( modelDefault ) ); if ( isManyMultiplicity() ) if ( "Set".equalsIgnoreCase( getType() ) ) setType( ModelDefault.SET );
public Map<String, String> getAttributesForAssociation( ModelAssociation modelAssociation ) { return associationAttributes.get( modelAssociation.getModelClass().getName() + ':' + modelAssociation.getName() + ':' + modelAssociation.getVersionRange() ); }
public String getType() { if ( ONE_MULTIPLICITY.equals( getMultiplicity() ) ) { return getTo(); } else { return super.getType(); } }
private String getDefaultValue( ModelDefault modelDefault ) { String value = modelDefault.getValue(); if ( isGenericType() ) { value = StringUtils.replace( value, "<?>", "/*<" + getTo() + ">*/" ); } return value; } }
private void createCreateAssociation( JClass jClass, ModelAssociation modelAssociation ) JMethod createMethod = new JMethod( "create" + modelAssociation.getTo() + "Association" ); (JavaAssociationMetadata) modelAssociation.getAssociationMetadata( JavaAssociationMetadata.ID ); new JParameter( new JClass( modelAssociation.getTo() ), uncapitalise( modelAssociation.getTo() ) ) ); if ( modelAssociation.isOneMultiplicity() ) sc.add( "if ( this." + modelAssociation.getName() + " != null )" ); "break" + modelAssociation.getTo() + "Association( this." + modelAssociation.getName() + " );" ); sc.add( "this." + modelAssociation.getName() + " = " + uncapitalise( modelAssociation.getTo() ) + ";" ); sc.add( "Collection " + modelAssociation.getName() + " = get" + capitalise( modelAssociation.getName() ) + "();" ); sc.add( "if ( " + modelAssociation.getName() + ".contains( " + uncapitalise( modelAssociation.getTo() ) + " ) )" ); sc.add( "throw new IllegalStateException( \"" + uncapitalise( modelAssociation.getTo() ) + " is already assigned.\" );" ); sc.add( modelAssociation.getName() + ".add( " + uncapitalise( modelAssociation.getTo() ) + " );" );
if ( modelAssociation.isManyMultiplicity() ) if ( modelAssociation.getType().equals( ModelDefault.PROPERTIES ) || modelAssociation.getType().equals( ModelDefault.MAP ) ) JavaFieldMetadata javaFieldMetadata = (JavaFieldMetadata) modelAssociation.getMetadata( JavaFieldMetadata.ID ); String action = isMap( modelAssociation.getType() ) ? "put" : "add"; sc.add( "instance.get" + capitalise( modelAssociation.getName() ) + "()." + action + "All( " + modelAssociation.getName() + " );" ); return; String targetField = modelAssociation.getName(); else if ( modelAssociation.getToClass() != null ) itemType = modelAssociation.getToClass().getName(); else if ( modelAssociation.getType().equals( ModelDefault.PROPERTIES ) || modelAssociation.getType().equals( ModelDefault.MAP ) ) if ( modelAssociation.getType().equals( ModelDefault.PROPERTIES ) ) itemTypeBuilder.append( "String, " ).append( modelAssociation.getTo() ); .append( capitalise( singular( modelAssociation.getName() ) ) ) .append( "( " ); if ( modelAssociation.getType().equals( ModelDefault.PROPERTIES )
if ( modelAssociation.isManyMultiplicity() ) if ( modelAssociation.isGenericType() ) type = new JCollectionType( modelAssociation.getType(), componentType, useJava5 ); else if ( ModelDefault.MAP.equals( modelAssociation.getType() ) ) JMapType mapType = new JMapType( modelAssociation.getType(), defaultValue, componentType, useJava5 ); defaultValue = mapType.getInstanceName(); type = mapType; type = new JClass( modelAssociation.getType() ); JField jField = new JField( type, modelAssociation.getName() ); jField.getModifiers().setFinal( true ); if ( !isEmpty( modelAssociation.getComment() ) ) jField.setComment( modelAssociation.getComment() ); if ( useJava5 && !modelAssociation.getAnnotations().isEmpty() ) for ( String annotation : modelAssociation.getAnnotations() )
private void writeAssociation( XMLWriter writer, ModelAssociation association ) (StoreAssociationMetadata) association.getAssociationMetadata( StoreAssociationMetadata.ID ); (JPoxAssociationMetadata) association.getAssociationMetadata( JPoxAssociationMetadata.ID ); if ( association.getType().equals( "java.util.List" ) || association.getType().equals( "java.util.Set" ) ) if ( association.getTo().equals( "String" ) ) writer.addAttribute( "element-type", association.getTo() ); else if ( association.getType().equals( "java.util.Map" ) ) if ( association.getTo().equals( "String" ) ) writer.addAttribute( "value-type", association.getTo() ); else if ( association.getType().equals( "java.util.Properties" ) )
private void createClassCastAssertion( JSourceCode sc, ModelAssociation modelAssociation, String crudModifier ) throws ModelloException { JavaAssociationMetadata javaAssociationMetadata = (JavaAssociationMetadata) modelAssociation.getAssociationMetadata( JavaAssociationMetadata.ID ); if ( StringUtils.isEmpty( javaAssociationMetadata.getInterfaceName() ) ) { return; // java.useInterface feature not used, no class cast assertion needed } String propertyName = capitalise( modelAssociation.getName() ); JField field = createField( modelAssociation ); String fieldName = field.getName(); JType type = new JClass( modelAssociation.getTo() ); if ( modelAssociation.isManyMultiplicity() ) { fieldName = uncapitalise( modelAssociation.getTo() ); } String instanceName = type.getName(); // Add sane class cast exception message // When will sun ever fix this? sc.add( "if ( " + fieldName + " != null && !( " + fieldName + " instanceof " + instanceName + " ) )" ); sc.add( "{" ); sc.indent(); sc.add( "throw new ClassCastException( \"" + modelAssociation.getModelClass().getName() + "." + crudModifier + propertyName + "( " + fieldName + " ) parameter must be instanceof \" + " + instanceName + ".class.getName() );" ); sc.unindent(); sc.add( "}" ); }
if ( assoc.isManyMultiplicity() ) String type = assoc.getType(); if ( ModelDefault.LIST.equals( type ) || ModelDefault.SET.equals( type ) ) sc.add( assoc.getType() + " list = " + assoc.getDefaultValue() + ";" ); if ( isClassInModel( assoc.getTo(), modelClass.getModel() ) ) String className = getSourceClassName( assoc.getToClass(), fromVersion ); sc.add( className + " v = (" + className + ") i.next();" ); sc.add( assoc.getTo() + " v = (" + assoc.getTo() + ") i.next();" ); if ( isClassInModel( assoc.getTo(), objectModel ) ) sc.add( "list.add( convert" + assoc.getTo() + "( v ) );" ); sc.add( assoc.getType() + " map = " + assoc.getDefaultValue() + ";" ); if ( isClassInModel( assoc.getTo(), modelClass.getModel() ) ) String className = getSourceClassName( assoc.getToClass(), fromVersion ); sc.add( className + " v = (" + className + ") entry.getValue();" ); sc.add( assoc.getTo() + " v = (" + assoc.getTo() + ") entry.getValue();" ); if ( isClassInModel( assoc.getTo(), objectModel ) )
if ( assoc.isManyMultiplicity() ) (XmlAssociationMetadata) assoc.getAssociationMetadata( XmlAssociationMetadata.ID ); wrappedItems = xmlAssociationMetadata.isWrappedItems(); ModelClass fieldModelClass = getModel().getClass( assoc.getTo(), getGeneratedVersion() ); (XmlAssociationMetadata) assoc.getAssociationMetadata( XmlAssociationMetadata.ID );
ModelClass toClass = association.getToClass(); if ( association.isOneMultiplicity() ) (XmlAssociationMetadata) association.getAssociationMetadata( XmlAssociationMetadata.ID ); String toType = association.getTo(); if ( toClass != null )
tagName = association.getName(); if ( association.isManyMultiplicity() ) XmlFieldMetadata xmlFieldMetadata = (XmlFieldMetadata) association.getMetadata( XmlFieldMetadata.ID ); (XmlAssociationMetadata) association.getAssociationMetadata( XmlAssociationMetadata.ID ); if ( association.isManyMultiplicity() )
String to = association.getTo(); String instanceFieldName = getInstanceFieldName( to ); sc.indent(); String capAssocName = capitalise( association.getName() ); if ( association.isOneMultiplicity() ) sc.add( "String id = (String) refs.get( \"" + association.getName() + "\" );" ); sc.add( to + " ref = (" + to + ") " + instanceFieldName + ".get( id );" ); sc.indent(); sc.add( "String id = (String) refs.get( \"" + association.getName() + ".\" + i );" ); sc.add( to + " ref = (" + to + ") " + instanceFieldName + ".get( id );" ); sc.add( "if ( ref != null )" ); if ( association.isOneMultiplicity() ) sc.add( "resolveReferences( value.get" + capitalise( association.getName() ) + "() );" ); sc.add( "for ( java.util.Iterator i = value.get" + capitalise( association.getName() ) + "().iterator(); i.hasNext(); )" ); sc.add( "{" ); sc.addIndented( "resolveReferences( (" + association.getTo() + ") i.next() );" ); sc.add( "}" );
GeneratorNode( ModelAssociation association, GeneratorNode parent ) { this( association.getTo(), parent, association ); }
JavaAssociationMetadata javaAssociationMetadata = getJavaAssociationMetadata( modelAssociation ); if ( modelAssociation.isManyMultiplicity() && !javaFieldMetadata.isGetter() && !javaFieldMetadata.isSetter() + modelClass.getName() + "." + modelAssociation.getName() + "' field (" + modelAssociation.getType() + ") cannot be set, no getter/setter/adder method available." );
private StoreAssociationMetadata getAssociationMetadata( ModelAssociation association ) { return (StoreAssociationMetadata) association.getAssociationMetadata( StoreAssociationMetadata.ID ); } }