r1444 - in trunk: wikitty-api/src/main/java/org/nuiton/wikitty wikitty-api/src/main/java/org/nuiton/wikitty/entities wikitty-generators/src/main/java/org/nuiton/wikitty/generator
Author: bpoussin Date: 2012-03-06 20:00:56 +0100 (Tue, 06 Mar 2012) New Revision: 1444 Url: http://nuiton.org/repositories/revision/wikitty/1444 Log: Evolution #1988: Wikitty pre-loading field Modification des generateurs pour avoir des methodes supplementaires pour acceder au preload facilement. Ajout en plus de methode 'set' pour pouvoir directement faire des set(Entity) au lieu de set(Entity.getWikittyId()); Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/Wikitty.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyCopyOnWrite.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyImpl.java trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyAbstractGenerator.java trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyContractGenerator.java trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyDTOGenerator.java trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyHelperGenerator.java trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyTransformerUtil.java Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java 2012-03-06 11:08:27 UTC (rev 1443) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java 2012-03-06 19:00:56 UTC (rev 1444) @@ -56,6 +56,7 @@ import java.util.Enumeration; import java.util.HashMap; import java.util.LinkedHashMap; +import java.util.LinkedHashSet; import java.util.List; import java.util.Locale; import java.util.Map; @@ -789,7 +790,7 @@ * Create new Business Entity with specified Wikitty * @param target Business Entity class * @param w wikitty to used - * @return + * @return new instance of object wanted or null if w is null */ static public <E extends BusinessEntity> E newInstance(Class<E> target, Wikitty w) { E result = null; @@ -807,10 +808,13 @@ * * @param source business entity source * @param target business entity class wanted - * @return new instance of object wanted + * @return new instance of object wanted or null if source is null */ public <E extends BusinessEntity> E newInstance(Class<E> target, BusinessEntityImpl source) { - E result = newInstance(target, source.getWikitty()); + E result = null; + if (source != null) { + result = newInstance(target, source.getWikitty()); + } return result; } @@ -819,21 +823,45 @@ * Create new Business Entity List from wikitties * @param target Business Entity class * @param wikitties list of wikitties - * @return new list of Business Entity + * @return new list of Business Entity or null if wikitties is null */ static public <E extends BusinessEntity> List<E> newInstance(Class<E> target, List<Wikitty> wikitties) { - List<E> result = new ArrayList<E>(wikitties.size()); - for (Wikitty w : wikitties) { - if (w == null) { - result.add(null); - } else { - result.add(newInstance(target, w)); + List<E> result = null; + if (wikitties != null) { + result = new ArrayList<E>(wikitties.size()); + for (Wikitty w : wikitties) { + if (w == null) { + result.add(null); + } else { + result.add(newInstance(target, w)); + } } } return result; } + /** + * Create new Business Entity Set from wikitties + * @param target Business Entity class + * @param wikitties set of wikitties + * @return new set of Business Entity or null if wikitties is null + */ + static public <E extends BusinessEntity> Set<E> newInstance(Class<E> target, Set<Wikitty> wikitties) { + Set<E> result = null; + if (wikitties != null) { + result = new LinkedHashSet<E>(wikitties.size()); + for (Wikitty w : wikitties) { + if (w == null) { + result.add(null); + } else { + result.add(newInstance(target, w)); + } + } + } + return result; + } + /** * Create new instance of BusinessEntity from Wikitty object passed in argument. * If argument is Interface try to add 'Impl' to find instanciable class. Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/Wikitty.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/Wikitty.java 2012-03-06 11:08:27 UTC (rev 1443) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/Wikitty.java 2012-03-06 19:00:56 UTC (rev 1444) @@ -262,7 +262,17 @@ */ FieldType getFieldType(String fqfieldName); + /** + * Return field type for the given fieldName. + * + * @param extName extension name + * @param fieldName field name + * @return field type + */ + FieldType getFieldType(String extName, String fieldName); + + /** * Set field value. * * @param ext extension @@ -329,9 +339,10 @@ * @param clazz * @return unmodifiable list */ - <E> List<E> getFieldAsList(String ext, String fieldName, - final Class<E> clazz); + <E> List<E> getFieldAsList(String ext, String fieldName, final Class<E> clazz); + List<Wikitty> getFieldAsWikittyList(String ext, String fieldName, boolean exceptionIfNotLoaded); + /** * * @param <E> @@ -340,6 +351,8 @@ */ <E> Set<E> getFieldAsSet(String ext, String fieldName, final Class<E> clazz); + Set<Wikitty> getFieldAsWikittySet(String ext, String fieldName, boolean exceptionIfNotLoaded); + void addToField(String ext, String fieldName, Object value); void removeFromField(String ext, String fieldName, Object value); Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyCopyOnWrite.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyCopyOnWrite.java 2012-03-06 11:08:27 UTC (rev 1443) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyCopyOnWrite.java 2012-03-06 19:00:56 UTC (rev 1444) @@ -27,19 +27,14 @@ import java.beans.PropertyChangeListener; import java.math.BigDecimal; import java.util.Collection; -import java.util.Collections; import java.util.Date; -import java.util.HashMap; -import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import org.apache.commons.lang3.ObjectUtils; - import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.wikitty.WikittyException; -import org.nuiton.wikitty.generator.WikittyTagValue; /** this class wrap a wikitty in a proxy that copy the wikitty before applying any change * @@ -293,6 +288,11 @@ } @Override + public FieldType getFieldType(String extName, String fieldName) { + return target.getFieldType(extName, fieldName); + } + + @Override public void setField(String ext, String fieldName, Object value) { substituteTargetWithCopy(); target.setField(ext, fieldName, value); @@ -365,11 +365,23 @@ } @Override + public List<Wikitty> getFieldAsWikittyList(String ext, String fieldName, + boolean exceptionIfNotLoaded) { + return target.getFieldAsWikittyList(ext, fieldName, exceptionIfNotLoaded); + } + + @Override public <E> Set<E> getFieldAsSet(String ext, String fieldName, Class<E> clazz) { return target.getFieldAsSet(ext, fieldName, clazz); } @Override + public Set<Wikitty> getFieldAsWikittySet(String ext, String fieldName, + boolean exceptionIfNotLoaded) { + return target.getFieldAsWikittySet(ext, fieldName, exceptionIfNotLoaded); + } + + @Override public void addToField(String ext, String fieldName, Object value) { substituteTargetWithCopy(); target.addToField(ext, fieldName, value); Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyImpl.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyImpl.java 2012-03-06 11:08:27 UTC (rev 1443) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyImpl.java 2012-03-06 19:00:56 UTC (rev 1444) @@ -534,31 +534,30 @@ */ @Override public FieldType getFieldType(String fqfieldName) { - try { - String[] field = fqfieldName.split("\\."); - WikittyExtension ext = getExtension(field[0]); - if (ext == null) { + String extName = WikittyExtension.extractExtensionName(fqfieldName); + String fieldName = WikittyExtension.extractFieldName(fqfieldName); + FieldType result = getFieldType(extName, fieldName); + return result; + } + + @Override + public FieldType getFieldType(String extName, String fieldName) { + WikittyExtension ext = getExtension(extName); + if (ext == null) { + throw new WikittyException(String.format( + "Extension '%s' doesn't exists on wikitty '%s'", extName, id)); + } else { + int crochet = fieldName.indexOf("["); + if (crochet != -1) { + fieldName = fieldName.substring(0, crochet); + } + FieldType result = ext.getFieldType(fieldName); + if (result == null) { throw new WikittyException(String.format( - "Extension '%s' doesn't exists on wikitty '%s'", field[0], id)); - } else { - String fieldName = field[1]; - int crochet = fieldName.indexOf("["); - if (crochet != -1) { - fieldName = fieldName.substring(0, crochet); - } - FieldType result = ext.getFieldType(fieldName); - if (result == null) { - throw new WikittyException(String.format( - "field '%s' doesn't exists on extension '%s'", fieldName, field[0])); + "field '%s' doesn't exists on extension '%s'", fieldName, extName)); - } - return result; } - } catch (Exception eee) { - throw new WikittyException( - String.format("Field %s is not a fully qualified field name", fqfieldName), - eee - ); + return result; } } @@ -818,6 +817,31 @@ } } + @Override + public List<Wikitty> getFieldAsWikittyList( + String ext, String fieldName, boolean exceptionIfNotLoaded) { + + List<Wikitty> result = null; + + Collection<String> collection = getFieldAsList(ext, fieldName, String.class); + if (collection != null) { + result = new ArrayList<Wikitty>(collection.size()); + for (String s : collection) { + Wikitty w = getPreloaded().get(s); + if (exceptionIfNotLoaded && w == null) { + throw new WikittyException( + String.format("Wikitty for field %s.%s is not preloaded (%s)", + ext, fieldName, s)); + } + result.add(w); + } + + // return unmodiable collection + result = Collections.unmodifiableList(result); + } + return result; + } + /* * @see org.nuiton.wikitty.Wikitty#getFieldAsSet(java.lang.String, java.lang.String, java.lang.Class) */ @@ -837,6 +861,31 @@ } } + @Override + public Set<Wikitty> getFieldAsWikittySet( + String ext, String fieldName, boolean exceptionIfNotLoaded) { + + Set<Wikitty> result = null; + + Collection<String> collection = getFieldAsSet(ext, fieldName, String.class); + if (collection != null) { + result = new LinkedHashSet<Wikitty>(); + for (String s : collection) { + Wikitty w = getPreloaded().get(s); + if (exceptionIfNotLoaded && w == null) { + throw new WikittyException( + String.format("Wikitty for field %s.%s is not preloaded (%s)", + ext, fieldName, s)); + } + result.add(w); + } + + // return unmodiable collection + result = Collections.unmodifiableSet(result); + } + return result; + } + /* * @see org.nuiton.wikitty.Wikitty#addToField(java.lang.String, java.lang.String, java.lang.Object) */ Modified: trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyAbstractGenerator.java =================================================================== --- trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyAbstractGenerator.java 2012-03-06 11:08:27 UTC (rev 1443) +++ trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyAbstractGenerator.java 2012-03-06 19:00:56 UTC (rev 1444) @@ -370,6 +370,7 @@ // needed below, in templates String fieldVariableName = WikittyTransformerUtil.attributeToFielVariableName(attribute, true); String attributeType = WikittyTransformerUtil.generateResultType(attribute, false); + String attributeObjectType = WikittyTransformerUtil.generateResultObjectType(attribute, false); // getter can have a different name than attribute.getName() // but attribute.getName() must styll be used to access to helper getter method @@ -389,6 +390,12 @@ "Collection<" + attributeType + ">"; String attributeTypeVarargs = attributeType + "..."; + String attributeObjectTypeCollectionStrict = + WikittyTransformerUtil.generateResultObjectType(attribute, true); + String attributeObjectTypeCollectionGeneric = + "Collection<" + attributeObjectType + ">"; + String attributeObjectTypeVarargs = attributeObjectType + "..."; + String getFieldMethodName = WikittyTransformerUtil.generateGetFieldAsCall(attribute); // now, for this attribute, we will generate add, remove and clear methods @@ -462,6 +469,74 @@ }*/; setOperationBody(clear, clearBody); + // + // Pour avoir acces en mode Objet entity + // + if (attributeObjectType != null) { + // C'est un BusinessEntity on ajoute les getter et setter specifique + + getterName = "get" + capitalizedGetterSetterName; + ObjectModelOperation getterObject = addOperation( + abstractClass, getterName, attributeObjectTypeCollectionStrict); + addParameter(getterObject, "boolean", "exceptionIfNotLoaded"); + addAnnotation(abstractClass, getterObject, "Override"); + String getterObjectBody = "" +/*{ +<%=attributeObjectTypeCollectionStrict%> result = <%=helperClassName%>.get<%=capitalizedAttributeName%>(getWikitty(), exceptionIfNotLoaded); +return result; +}*/; + setOperationBody(getterObject, getterObjectBody); + + String setterObjectName = "set" + capitalizedGetterSetterName + "Entity"; + ObjectModelOperation setterObject = addOperation(abstractClass, setterObjectName, "void"); + addAnnotation(abstractClass, setterObject, "Override"); + addParameter(setterObject, attributeObjectTypeCollectionGeneric, getterSetterName); + String setterObjectBody = "" +/*{ +<%=attributeObjectTypeCollectionStrict%> oldValue = get<%=capitalizedAttributeName%>(false); +<%=helperClassName%>.set<%=capitalizedHelperGetterSetterName%>Entity(getWikitty(), <%=attributeName%>); +getPropertyChangeSupport().firePropertyChange(<%=fieldVariableName%>, oldValue, <%= getter.getName() %>()); +}*/; + setOperationBody(setterObject, setterObjectBody); + + String addAllNameObject = "addAll" + capitalizedGetterSetterName + "Entity"; + ObjectModelOperation addAllObject = addOperation(abstractClass, addAllNameObject, "void"); + addAnnotation(abstractClass, addAllObject, "Override"); + addParameter(addAllObject, attributeObjectTypeCollectionGeneric, attributeName); + String addAllObjectBody = "" +/*{ +<%=attributeObjectTypeCollectionStrict%> oldValue = get<%=capitalizedAttributeName%>(false); +<%=helperClassName%>.addAll<%=capitalizedHelperGetterSetterName%>Entity(getWikitty(), <%=attributeName%>); +getPropertyChangeSupport().firePropertyChange(<%=fieldVariableName%>, oldValue, <%= getterObject.getName() %>()); +}*/; + setOperationBody(addAllObject, addAllObjectBody); + + String addNameObject = "add" + capitalizedGetterSetterName; + ObjectModelOperation adderObject = addOperation(abstractClass, addNameObject, "void"); + addAnnotation(abstractClass, adderObject, "Override"); + addParameter(adderObject, attributeObjectTypeVarargs, "element"); + String adderObjectBody = "" +/*{ +<%=attributeObjectTypeCollectionStrict%> oldValue = get<%=capitalizedAttributeName%>(false); +<%=helperClassName%>.add<%=capitalizedHelperGetterSetterName%>(getWikitty(), element); +getPropertyChangeSupport().firePropertyChange(<%=fieldVariableName%>, oldValue, <%= getterObject.getName() %>()); +}*/; + setOperationBody(adderObject, adderObjectBody); + + String removeNameObject = "remove" + capitalizedGetterSetterName; + ObjectModelOperation removerObject = addOperation(abstractClass, removeNameObject, "void"); + addAnnotation(abstractClass, removerObject, "Override"); + addParameter(removerObject, attributeObjectTypeVarargs, "element"); + String removerObjectBody = "" +/*{ +<%=attributeObjectTypeCollectionStrict%> oldValue = get<%=capitalizedAttributeName%>(false); +<%=helperClassName%>.remove<%=capitalizedHelperGetterSetterName%>(getWikitty(), element); +getPropertyChangeSupport().firePropertyChange(<%=fieldVariableName%>, oldValue, <%=getterObject.getName()%>()); +}*/; + setOperationBody(removerObject, removerObjectBody); + + } + } else { String getFieldMethodName = WikittyTransformerUtil.generateGetFieldAsCall(attribute); @@ -485,6 +560,33 @@ <%=helperClassName%>.set<%=capitalizedHelperGetterSetterName%>(getWikitty(), <%=attributeName%>); getPropertyChangeSupport().firePropertyChange(<%=fieldVariableName%>, oldValue, <%=getter.getName()%>()); }*/); + + // + // Pour avoir acces en mode Objet entity + // + if (attributeObjectType != null) { + // adding getter and setter to contract + getterName = "get" + capitalizedGetterSetterName; + ObjectModelOperation getterObject = addOperation(abstractClass, getterName, attributeObjectType); + addParameter(getterObject, "boolean", "exceptionIfNotLoaded"); + addAnnotation(abstractClass, getterObject, "Override"); + setOperationBody(getterObject, "" +/*{ +<%=attributeObjectType%> value = <%=helperClassName%>.get<%=capitalizedHelperGetterSetterName%>(getWikitty(), exceptionIfNotLoaded); +return value; +}*/); + + String setterNameObject = "set" + capitalizedGetterSetterName; + ObjectModelOperation setterObject = addOperation(abstractClass, setterNameObject, "void"); + addAnnotation(abstractClass, setterObject, "Override"); + addParameter(setterObject, attributeObjectType, attributeName); + setOperationBody(setterObject, "" +/*{ +<%=attributeObjectType%> oldValue = <%=getterName%>(false); +<%=helperClassName%>.set<%=capitalizedHelperGetterSetterName%>(getWikitty(), <%=attributeName%>); +getPropertyChangeSupport().firePropertyChange(<%=fieldVariableName%>, oldValue, <%=getterObject.getName()%>()); +}*/); + } } // save the getter name for this attribute @@ -649,6 +751,7 @@ // needed below, in templates String fieldVariableName = WikittyTransformerUtil.attributeToFielVariableName(attribute, true); String attributeType = WikittyTransformerUtil.generateResultType(attribute, false); + String attributeObjectType = WikittyTransformerUtil.generateResultObjectType(attribute, false); String attributeName = attribute.getName(); if (attribute.hasTagValue(TAG_ALTERNATIVE_NAME)) { @@ -667,6 +770,12 @@ "Collection<" + attributeType + ">"; String attributeTypeVarargs = attributeType + "..."; + String attributeObjectTypeCollectionStrict = + WikittyTransformerUtil.generateResultObjectType(attribute, true); + String attributeObjectTypeCollectionGeneric = + "Collection<" + attributeObjectType + ">"; + String attributeObjectTypeVarargs = attributeObjectType + "..."; + String getFieldMethodName = WikittyTransformerUtil.generateGetFieldAsCall(attribute); String attributeNameCapitalized = StringUtils.capitalize(attributeName); @@ -782,6 +891,111 @@ setOperationBody(clear, clearBody); + // + // Pour avoir acces en mode Objet entity + // + if (attributeObjectType != null) { + // C'est un BusinessEntity on ajoute les getter et setter specifique + + getterName = "get" + attributeNameCapitalized; + ObjectModelOperation getterObject = addOperation( + abstractClassForThisMetaExtension, getterName, + attributeObjectTypeCollectionStrict); + addParameter(getterObject, "boolean", "exceptionIfNotLoaded"); + addAnnotation(abstractClassForThisMetaExtension, getterObject, "Override"); + String getterObjectBody = "" +/*{ + <%=attributeObjectTypeCollectionStrict%> result; + if (extensionForMetaExtension == null) { + result = <%=helperClassName%>.<%=getterName%>(getWikitty(), exceptionIfNotLoaded); + } else { + result = <%=helperClassName%>.<%=getterName%>(extensionForMetaExtension.getName(), getWikitty(), exceptionIfNotLoaded); + } + return result; +}*/; + setOperationBody(getterObject, getterObjectBody); + + String setterNameObject = "set" + attributeNameCapitalized + "Entity"; + ObjectModelOperation setterObject = addOperation( + abstractClassForThisMetaExtension, setterNameObject, "void"); + addAnnotation(abstractClassForThisMetaExtension, setterObject, "Override"); + addParameter(setterObject, attributeObjectTypeCollectionGeneric, "values"); + String setterBodyObject = "" +/*{ + String fieldName; + <%=attributeObjectTypeCollectionStrict%> oldValue = <%=getterObject.getName()%>(false); + if (extensionForMetaExtension == null) { + <%=helperClassName%>.<%=setterNameObject%>(getWikitty(), values); + fieldName = <%=fieldVariableName%>; + } else { + <%=helperClassName%>.<%=setterNameObject%>(extensionForMetaExtension.getName(), getWikitty(), values); + fieldName = <%=helperClassName%>.getMetaFieldName(extensionForMetaExtension, "<%=attributeName%>"); + } + getPropertyChangeSupport().firePropertyChange(fieldName, oldValue, <%=getter.getName()%>()); +}*/; + setOperationBody(setterObject, setterBodyObject); + + String addAllNameObject = "addAll" + attributeNameCapitalized + "Entity"; + ObjectModelOperation addAllObject = addOperation( + abstractClassForThisMetaExtension, addAllNameObject, "void"); + addAnnotation(abstractClassForThisMetaExtension, addAllObject, "Override"); + addParameter(addAllObject, attributeObjectTypeCollectionGeneric, "values"); + String addAllBodyObject = "" +/*{ + String fieldName; + <%=attributeObjectTypeCollectionStrict%> oldValue = <%=getterObject.getName()%>(false); + if (extensionForMetaExtension == null) { + <%=helperClassName%>.<%=addAllNameObject%>(getWikitty(), values); + fieldName = <%=fieldVariableName%>; + } else { + <%=helperClassName%>.<%=addAllNameObject%>(extensionForMetaExtension.getName(), getWikitty(), values); + fieldName = <%=helperClassName%>.getMetaFieldName(extensionForMetaExtension, "<%=attributeName%>"); + } + getPropertyChangeSupport().firePropertyChange(fieldName, oldValue, <%=getterObject.getName()%>(false)); +}*/; + setOperationBody(addAllObject, addAllBodyObject); + + String addNameObject = "add" + attributeNameCapitalized; + ObjectModelOperation adderObject = addOperation( + abstractClassForThisMetaExtension, addNameObject, "void"); + addAnnotation(abstractClassForThisMetaExtension, adderObject, "Override"); + addParameter(adderObject, attributeObjectTypeVarargs, "element"); + String adderBodyObject = "" +/*{ + String fieldName; + <%=attributeObjectTypeCollectionStrict%> oldValue = <%=getterObject.getName()%>(false); + if (extensionForMetaExtension == null) { + <%=helperClassName%>.<%=addNameObject%>(getWikitty(), element); + fieldName = <%=fieldVariableName%>; + } else { + <%=helperClassName%>.<%=addNameObject%>(extensionForMetaExtension.getName(), getWikitty(), element); + fieldName = <%=helperClassName%>.getMetaFieldName(extensionForMetaExtension, "<%=attributeName%>"); + } + getPropertyChangeSupport().firePropertyChange(fieldName, oldValue, <%=getterObject.getName()%>(false)); +}*/; + setOperationBody(adderObject, adderBodyObject); + + String removeNameObject = "remove" + attributeNameCapitalized; + ObjectModelOperation removerObject = addOperation( + abstractClassForThisMetaExtension, removeNameObject, "void"); + addAnnotation(abstractClassForThisMetaExtension, removerObject, "Override"); + addParameter(removerObject, attributeObjectTypeVarargs, "element"); + String removerBodyObject = "" +/*{ + String fieldName; + <%=attributeObjectTypeCollectionStrict%> oldValue = <%=getterObject.getName()%>(false); + if (extensionForMetaExtension == null) { + <%=helperClassName%>.<%=removeNameObject%>(getWikitty(), element); + fieldName = <%=fieldVariableName%>; + } else { + <%=helperClassName%>.<%=removeNameObject%>(extensionForMetaExtension.getName(), getWikitty(), element); + fieldName = <%=helperClassName%>.getMetaFieldName(extensionForMetaExtension, "<%=attributeName%>"); + } + getPropertyChangeSupport().firePropertyChange(fieldName, oldValue, <%=getterObject.getName()%>(false)); +}*/; + setOperationBody(removerObject, removerBodyObject); + + } } else { String getFieldMethodName = WikittyTransformerUtil.generateGetFieldAsCall(attribute); @@ -818,6 +1032,49 @@ getPropertyChangeSupport().firePropertyChange(fieldName, oldValue, <%=getter.getName()%>()); } }*/); + // + // Pour avoir acces en mode Objet entity + // + if (attributeObjectType != null) { + // C'est un BusinessEntity on ajoute les getter et setter specifique + + getterName = "get" + StringUtils.capitalize(attributeName); + ObjectModelOperation getterObject = addOperation( + abstractClassForThisMetaExtension, getterName, attributeObjectType); + addParameter(getterObject, "boolean", "exceptionIfNotLoaded"); + addAnnotation(abstractClassForThisMetaExtension, getterObject, "Override"); + setOperationBody(getterObject, "" +/*{ + <%=attributeObjectType%> value; + if (extensionForMetaExtension == null) { + value = <%=helperClassName%>.<%=getterName%>(getWikitty(), exceptionIfNotLoaded); + } else { + value = <%=helperClassName%>.<%=getterName%>(extensionForMetaExtension.getName(), getWikitty(), exceptionIfNotLoaded); + } + return value; +}*/); + + String setterNameObject = "set" + StringUtils.capitalize(attributeName); + ObjectModelOperation setterObject = addOperation( + abstractClassForThisMetaExtension, setterNameObject, "void"); + addAnnotation(abstractClassForThisMetaExtension, setterObject, "Override"); + addParameter(setterObject, attributeObjectType, attributeName); + setOperationBody(setterObject, "" +/*{ + <%=attributeObjectType%> oldValue; + if (extensionForMetaExtension == null) { + oldValue = <%=getterName%>(false); + <%=helperClassName%>.<%=setterNameObject%>(getWikitty(), <%=attributeName%>); + getPropertyChangeSupport().firePropertyChange(<%=fieldVariableName%>, oldValue, <%=getterObject.getName()%>(false)); + } else { + oldValue = <%=getterName%>(false); + <%=helperClassName%>.<%=setterNameObject%>(extensionForMetaExtension.getName(), getWikitty(), <%=attributeName%>); + String fieldName = <%=helperClassName%>.getMetaFieldName(extensionForMetaExtension, "<%=attributeName%>"); + getPropertyChangeSupport().firePropertyChange(fieldName, oldValue, <%=getterObject.getName()%>(false)); + } +}*/); + } + } } } Modified: trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyContractGenerator.java =================================================================== --- trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyContractGenerator.java 2012-03-06 11:08:27 UTC (rev 1443) +++ trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyContractGenerator.java 2012-03-06 19:00:56 UTC (rev 1444) @@ -273,6 +273,8 @@ */ protected void addOperationWithName(ObjectModelInterface contract, ObjectModelAttribute attribute, String getterSetterName) { String attributeType = WikittyTransformerUtil.generateResultType(attribute, false); + String attributeObjectType = WikittyTransformerUtil.generateResultObjectType(attribute, false); + if (attribute.getMaxMultiplicity() > 1 || attribute.getMaxMultiplicity() == -1) { // attributed is a collection, we will generate operations get, add, remove and clear @@ -280,6 +282,12 @@ String attributeTypeCollectionGeneric = "Collection<" + attributeType + ">"; String attributeTypeVarargs = attributeType + "..."; + String attributeObjectTypeCollectionStrict = + WikittyTransformerUtil.generateResultObjectType(attribute, true); + String attributeObjectTypeCollectionGeneric = + "Collection<" + attributeObjectType + ">"; + String attributeObjectTypeVarargs = attributeObjectType + "..."; + // now, for this attribute, we will generate add, remove and clear methods // adding operations to contract String getterName = "get" + StringUtils.capitalize(getterSetterName); @@ -305,6 +313,33 @@ String clearName = "clear" + StringUtils.capitalize(getterSetterName); addOperation(contract, clearName, "void"); + // + // Pour avoir acces en mode Objet entity + // + if (attributeObjectType != null) { + // C'est un BusinessEntity on ajoute les getter et setter specifique + + String getterNameObject = "get" + StringUtils.capitalize(getterSetterName); + ObjectModelOperation getterObject = addOperation(contract, getterNameObject, attributeObjectTypeCollectionStrict); + addParameter(getterObject, "boolean", "exceptionIfNotLoaded"); + setDocumentation(getterObject, attribute.getDocumentation()); + + String setterNameObject = "set" + StringUtils.capitalize(getterSetterName) + "Entity"; + ObjectModelOperation setterObject = addOperation(contract, setterNameObject, "void"); + addParameter(setterObject, attributeObjectTypeCollectionGeneric, getterSetterName); + + String addAllNameObject = "addAll" + StringUtils.capitalize(getterSetterName) + "Entity"; + ObjectModelOperation addAllObject = addOperation(contract, addAllNameObject, "void"); + addParameter(addAllObject, attributeObjectTypeCollectionGeneric, getterSetterName); + + String addNameObject = "add" + StringUtils.capitalize(getterSetterName); + ObjectModelOperation adderObject = addOperation(contract, addNameObject, "void"); + addParameter(adderObject, attributeObjectTypeVarargs, "element"); + + String removeNameObject = "remove" + StringUtils.capitalize(getterSetterName); + ObjectModelOperation removerObject = addOperation(contract, removeNameObject, "void"); + addParameter(removerObject, attributeObjectTypeVarargs, "element"); + } } else { // attribute is not a collection, we generate a getter and a setter String getterName = "get" + StringUtils.capitalize(getterSetterName); @@ -314,6 +349,22 @@ String setterName = "set" + StringUtils.capitalize(getterSetterName); ObjectModelOperation setter = addOperation(contract, setterName, "void"); addParameter(setter, attributeType, getterSetterName); + + // + // Pour avoir acces en mode Objet entity + // + if (attributeObjectType != null) { + // C'est un BusinessEntity on ajoute les getter et setter specifique + + String getterNameObject = "get" + StringUtils.capitalize(getterSetterName); + ObjectModelOperation getterObject = addOperation(contract, getterNameObject, attributeObjectType); + addParameter(getterObject, "boolean", "exceptionIfNotLoaded"); + setDocumentation(getterObject, attribute.getDocumentation()); + + String setterNameObject = "set" + StringUtils.capitalize(getterSetterName); + ObjectModelOperation setterObject = addOperation(contract, setterNameObject, "void"); + addParameter(setterObject, attributeObjectType, getterSetterName); + } } } Modified: trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyDTOGenerator.java =================================================================== --- trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyDTOGenerator.java 2012-03-06 11:08:27 UTC (rev 1443) +++ trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyDTOGenerator.java 2012-03-06 19:00:56 UTC (rev 1444) @@ -174,6 +174,7 @@ if (attribute.isNavigable()) { // needed below, in templates String attributeType = WikittyTransformerUtil.generateResultType(attribute, false); + String attributeObjectType = WikittyTransformerUtil.generateResultObjectType(attribute, false); String attributeName = attribute.getName(); //add necessary import @@ -196,7 +197,12 @@ String attributeTypeCollectionGeneric = "Collection<" + attributeType + ">"; String attributeTypeVarargs = attributeType + "..."; - + + String attributeObjectTypeCollectionStrict = + WikittyTransformerUtil.generateResultObjectType(attribute, true); + String attributeObjectTypeCollectionGeneric = + "Collection<" + attributeObjectType + ">"; + String attributeObjectTypeVarargs = attributeObjectType + "..."; String attributeTypeCollectionStrictImpl = null; String collectionType = WikittyTransformerUtil.getCollectionTypeName(attribute); @@ -309,6 +315,93 @@ }*/; setOperationBody(clear, clearBody); + // + // Pour avoir acces en mode Objet entity + // + if (attributeObjectType != null) { + // C'est un BusinessEntity on ajoute les getter et setter specifique + + getterName = "get" + StringUtils.capitalize(attributeName); + ObjectModelOperation getterObject = addOperation( + abstractClass, getterName, attributeObjectTypeCollectionStrict); + addParameter(getterObject, "boolean", "exceptionIfNotLoaded"); + addAnnotation(abstractClass, getterObject, "Override"); + String getterObjectBody = "" +/*{ + if (exceptionIfNotLoaded) { + throw new WikittyException("Preload is not implemented in DTO"); + } else { + return null; + } +}*/; + setOperationBody(getterObject, getterObjectBody); + + // adding the setter + getterName = "set" + StringUtils.capitalize(attributeName); + ObjectModelOperation setterObject = addOperation( + abstractClass, getterName + "Entity", "void"); + addAnnotation(abstractClass, setterObject, "Override"); + addParameter(setterObject, attributeObjectTypeCollectionGeneric, attributeName); + String setterObjectBody = "" +/*{ + <%=attributeTypeCollectionStrictImpl%> tmp = new <%=attributeTypeCollectionStrictImpl%>(); + for (<%=attributeObjectType%> e : <%=attributeName%>) { + tmp.add(e.getWikittyId()); + } + <%=getterName%>(tmp); +}*/; + setOperationBody(setterObject, setterObjectBody); + + // adding the addAll + String addAllNameObject = "addAll" + StringUtils.capitalize(attributeName); + ObjectModelOperation addAllObject = addOperation( + abstractClass, addAllNameObject + "Entity", "void"); + addAnnotation(abstractClass, addAllObject, "Override"); + addParameter(addAllObject, attributeObjectTypeCollectionGeneric, attributeName); + String addAllObjectBody = "" +/*{ + <%=attributeTypeCollectionStrictImpl%> tmp = new <%=attributeTypeCollectionStrictImpl%>(); + for (<%=attributeObjectType%> e : <%=attributeName%>) { + tmp.add(e.getWikittyId()); + } + <%=addAllNameObject%>(tmp); +}*/; + setOperationBody(addAllObject, addAllObjectBody); + + //adding the add method + String addNameObject = "add" + StringUtils.capitalize(attributeName); + ObjectModelOperation adderObject = addOperation( + abstractClass, addNameObject, "void"); + addAnnotation(abstractClass, adderObject, "Override"); + addParameter(adderObject, attributeObjectTypeVarargs, "element"); + String adderObjectBody = "" +/*{ + String[] tmp = new String[element.length]; + for (int i=0; i<element.length; i++) { + tmp[i] = element[i].getWikittyId(); + } + <%=addNameObject%>(tmp); +}*/; + setOperationBody(adderObject, adderObjectBody); + + //adding the remove method + String removeNameObject = "remove" + StringUtils.capitalize(attributeName); + ObjectModelOperation removerObject = addOperation( + abstractClass, removeNameObject, "void"); + addAnnotation(abstractClass, removerObject, "Override"); + addParameter(removerObject, attributeObjectTypeVarargs, "element"); + String removerObjectBody = "" +/*{ + String[] tmp = new String[element.length]; + for (int i=0; i<element.length; i++) { + tmp[i] = element[i].getWikittyId(); + } + <%=removeNameObject%>(tmp); +}*/; + setOperationBody(removerObject, removerObjectBody); + + } + } else { //No multiplicity @@ -340,6 +433,39 @@ this.<%=attributeName%>=<%=attributeName%>; modificationCount++; }*/); + + // + // Pour avoir acces en mode Objet entity + // + if (attributeObjectType != null) { + // C'est un BusinessEntity on ajoute les getter et setter specifique + + getterName = "get" + StringUtils.capitalize(attributeName); + ObjectModelOperation getterObject = addOperation( + abstractClass, getterName, attributeObjectType); + addParameter(getterObject, "boolean", "exceptionIfNotLoaded"); + addAnnotation(abstractClass, getterObject, "Override"); + setOperationBody(getterObject, "" +/*{ + if (exceptionIfNotLoaded) { + throw new WikittyException("Preload is not implemented in DTO"); + } else { + return null; + } +}*/); + + //adding setter + String setterNameObject = "set" + StringUtils.capitalize(attributeName); + ObjectModelOperation setterObject = addOperation( + abstractClass, setterNameObject, "void"); + addAnnotation(abstractClass, setterObject, "Override"); + addParameter(setterObject, attributeObjectType, attributeName); + setOperationBody(setterObject, "" +/*{ + <%=setterNameObject%>(<%=attributeName%>.getWikittyId()); +}*/); + + } } // save the getter name for this attribute Modified: trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyHelperGenerator.java =================================================================== --- trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyHelperGenerator.java 2012-03-06 11:08:27 UTC (rev 1443) +++ trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyHelperGenerator.java 2012-03-06 19:00:56 UTC (rev 1444) @@ -113,7 +113,8 @@ // needed below, in templates String fieldVariableName = WikittyTransformerUtil.attributeToFielVariableName(attribute, true); String attributeType = WikittyTransformerUtil.generateResultType(attribute, false); - + String attributeObjectType = WikittyTransformerUtil.generateResultObjectType(attribute, false); + String attributeName = attribute.getName(); if (attribute.hasTagValue(TAG_ALTERNATIVE_NAME)) { // there is a conflict, purifier transformer give as the right name to use @@ -125,10 +126,16 @@ String attributeTypeCollectionStrict = WikittyTransformerUtil.generateResultType(attribute, true); - String attributeTypeCollectionGeneric = + String attributeTypeCollectionGeneric = "Collection<" + attributeType + ">"; String attributeTypeVarargs = attributeType + "..."; + String attributeObjectTypeCollectionStrict = + WikittyTransformerUtil.generateResultObjectType(attribute, true); + String attributeObjectTypeCollectionGeneric = + "Collection<" + attributeObjectType + ">"; + String attributeObjectTypeVarargs = attributeObjectType + "..."; + String getFieldMethodName = WikittyTransformerUtil.generateGetFieldAsCall(attribute); String attributeNameCapitalized = @@ -136,6 +143,9 @@ // now, for this attribute, we will generate add, remove and clear methods // adding operations to contract + // + // GETTER + // String getterName = "get" + attributeNameCapitalized; ObjectModelOperation getter = addOperation( helper, getterName, attributeTypeCollectionStrict, @@ -148,6 +158,9 @@ }*/; setOperationBody(getter, getterBody); + // + // SETTER + // String setterName = "set" + attributeNameCapitalized; ObjectModelOperation setter = addOperation( helper, setterName, "void", ObjectModelModifier.STATIC); @@ -159,6 +172,9 @@ }*/; setOperationBody(setter, setterBody); + // + // ADDALL + // String addAllName = "addAll" + attributeNameCapitalized; ObjectModelOperation addAll = addOperation( helper, addAllName, "void", ObjectModelModifier.STATIC); @@ -174,6 +190,9 @@ }*/; setOperationBody(addAll, addAllBody); + // + // ADD + // String addName = "add" + attributeNameCapitalized; ObjectModelOperation adder = addOperation(helper, addName, "void", ObjectModelModifier.STATIC); addParameter(adder, "Wikitty", "wikitty"); @@ -186,6 +205,9 @@ }*/; setOperationBody(adder, adderBody); + // + // REMOVE + // String removeName = "remove" + StringUtils.capitalize(attributeName); ObjectModelOperation remover = addOperation(helper, removeName, "void", ObjectModelModifier.STATIC); addParameter(remover, "Wikitty", "wikitty"); @@ -198,6 +220,9 @@ }*/; setOperationBody(remover, removerBody); + // + // CLEAR + // String clearName = "clear" + StringUtils.capitalize(attributeName); ObjectModelOperation clear = addOperation(helper, clearName, "void", ObjectModelModifier.STATIC); addParameter(clear, "Wikitty", "wikitty"); @@ -206,12 +231,101 @@ wikitty.clearField(<%=extensionVariableName%>, <%=fieldVariableName%>); }*/; setOperationBody(clear, clearBody); - - + + // + // Pour avoir acces en mode Objet entity + // + if (attributeObjectType != null) { + // C'est un BusinessEntity on ajoute les getter et setter specifique + String collectionType = WikittyTransformerUtil.getCollectionTypeName(attribute); + + // + // GETTER + // + String getterObjectName = "get" + attributeNameCapitalized; + ObjectModelOperation getterObject = addOperation( + helper, getterObjectName, attributeObjectTypeCollectionStrict, + ObjectModelModifier.STATIC); + addParameter(getterObject, "Wikitty", "wikitty"); + addParameter(getterObject, "boolean", "exceptionIfNotLoaded"); + String getterObjectBody = "" +/*{ + <%=attributeObjectTypeCollectionStrict%> result = WikittyUtil.newInstance(<%=attributeObjectType%>.class, wikitty.getFieldAsWikitty<%=collectionType%>(<%=extensionVariableName%>, <%=fieldVariableName%>, exceptionIfNotLoaded)); + return result; +}*/; + setOperationBody(getterObject, getterObjectBody); + + // + // SETTER + // + String setterObjectName = "set" + attributeNameCapitalized + "Entity"; + ObjectModelOperation setterObject = addOperation( + helper, setterObjectName, "void", ObjectModelModifier.STATIC); + addParameter(setterObject, WikittyTransformerUtil.WIKITTY_CLASS_FQN, "wikitty"); + addParameter(setterObject, attributeObjectTypeCollectionGeneric, attributeName); + String setterObjectBody = "" +/*{ + wikitty.setField(<%=extensionVariableName%>, <%=fieldVariableName%>, <%=attributeName%>); +}*/; + setOperationBody(setterObject, setterObjectBody); + + // + // ADDALL + // + String addAllObjectName = "addAll" + attributeNameCapitalized + "Entity"; + ObjectModelOperation addAllObject = addOperation( + helper, addAllObjectName, "void", ObjectModelModifier.STATIC); + addParameter(addAllObject, WikittyTransformerUtil.WIKITTY_CLASS_FQN, "wikitty"); + addParameter(addAllObject, attributeObjectTypeCollectionGeneric, attributeName); + String addAllObjectBody = "" +/*{ + if(<%=attributeName%> != null){ + for (<%=attributeObjectType%> v:<%=attributeName%>){ + add<%=attributeNameCapitalized%>(wikitty, v); + } + } +}*/; + setOperationBody(addAllObject, addAllObjectBody); + + // + // ADD + // + String addNameObject = "add" + attributeNameCapitalized; + ObjectModelOperation adderObject = addOperation(helper, addNameObject, "void", ObjectModelModifier.STATIC); + addParameter(adderObject, "Wikitty", "wikitty"); + addParameter(adderObject, attributeObjectTypeVarargs, "element"); + String adderObjectBody = "" +/*{ + for (<%=attributeObjectType%> v : element) { + wikitty.addToField(<%=extensionVariableName%>, <%=fieldVariableName%>, v); + } +}*/; + setOperationBody(adderObject, adderObjectBody); + + // + // REMOVE + // + String removeNameObject = "remove" + StringUtils.capitalize(attributeName); + ObjectModelOperation removerObject = addOperation(helper, removeNameObject, "void", ObjectModelModifier.STATIC); + addParameter(removerObject, "Wikitty", "wikitty"); + addParameter(removerObject, attributeObjectTypeVarargs, "element"); + String removerObjectBody = "" +/*{ + for (<%=attributeObjectType%> v : element) { + wikitty.removeFromField(<%=extensionVariableName%>, <%=fieldVariableName%>, v); + } +}*/; + setOperationBody(removerObject, removerObjectBody); + + } + } else { String getFieldMethodName = WikittyTransformerUtil.generateGetFieldAsCall(attribute); // adding getter and setter to contract + // + // GETTER + // String getterName = "get" + StringUtils.capitalize(attributeName); ObjectModelOperation getter = addOperation(helper, getterName, attributeType, ObjectModelModifier.STATIC); addParameter(getter, "Wikitty", "wikitty"); @@ -221,6 +335,9 @@ return value; }*/); + // + // SETTER + // String setterName = "set" + StringUtils.capitalize(attributeName); ObjectModelOperation setter = addOperation(helper, setterName, attributeType, ObjectModelModifier.STATIC); addParameter(setter, "Wikitty", "wikitty"); @@ -231,6 +348,42 @@ wikitty.setField(<%=extensionVariableName%>, <%=fieldVariableName%>, <%=attributeName%>); return oldValue; }*/); + + // + // Pour avoir acces en mode Objet entity + // + if (attributeObjectType != null) { + + // + // GETTER + // + String getterObjectName = "get" + StringUtils.capitalize(attributeName); + ObjectModelOperation getterObject = addOperation(helper, + getterObjectName, attributeObjectType, ObjectModelModifier.STATIC); + addParameter(getterObject, "Wikitty", "wikitty"); + addParameter(getterObject, "boolean", "exceptionIfNotLoaded"); + setOperationBody(getterObject, "" +/*{ + <%=attributeObjectType%> value = WikittyUtil.newInstance(<%=attributeObjectType%>.class, wikitty.getFieldAsWikitty(<%=extensionVariableName%>, <%=fieldVariableName%>, exceptionIfNotLoaded)); + return value; +}*/); + + // + // SETTER + // + String setterObjectName = "set" + StringUtils.capitalize(attributeName); + ObjectModelOperation setterObject = addOperation(helper, setterObjectName, attributeObjectType, ObjectModelModifier.STATIC); + addParameter(setterObject, "Wikitty", "wikitty"); + addParameter(setterObject, attributeObjectType, attributeName); + setOperationBody(setterObject, "" +/*{ + <%=attributeObjectType%> oldValue = <%=getter.getName()%>(wikitty, false); + wikitty.setField(<%=extensionVariableName%>, <%=fieldVariableName%>, <%=attributeName%>); + return oldValue; +}*/); + + } + } } } @@ -390,7 +543,8 @@ // needed below, in templates String fieldVariableName = WikittyTransformerUtil.attributeToFielVariableName(attribute, true); String attributeType = WikittyTransformerUtil.generateResultType(attribute, false); - + String attributeObjectType = WikittyTransformerUtil.generateResultObjectType(attribute, false); + String attributeName = attribute.getName(); if (attribute.hasTagValue(TAG_ALTERNATIVE_NAME)) { // there is a conflict, purifier transformer give as the right name to use @@ -406,6 +560,12 @@ "Collection<" + attributeType + ">"; String attributeTypeVarargs = attributeType + "..."; + String attributeObjectTypeCollectionStrict = + WikittyTransformerUtil.generateResultObjectType(attribute, true); + String attributeObjectTypeCollectionGeneric = + "Collection<" + attributeObjectType + ">"; + String attributeObjectTypeVarargs = attributeObjectType + "..."; + String getFieldMethodName = WikittyTransformerUtil.generateGetFieldAsCall(attribute); String capitalizedAttributeName = StringUtils.capitalize(attributeName); @@ -447,7 +607,7 @@ String addAllBody = "" /*{ if(<%=attributeName%> != null){ - for (String id:<%=attributeName%>){ + for (<%=attributeType%> id:<%=attributeName%>){ add<%=capitalizedAttributeName%>(extensionName, wikitty, id); } } @@ -482,7 +642,7 @@ } }*/; setOperationBody(remover, removerBody); - + String clearName = "clear" + capitalizedAttributeName; ObjectModelOperation clear = addOperation(helper, clearName, "void", ObjectModelModifier.STATIC); addParameter(clear, "String", "extensionName"); @@ -493,7 +653,91 @@ wikitty.clearField(fieldName); }*/; setOperationBody(clear, clearBody); - + + // + // Pour avoir acces en mode Objet entity + // + if (attributeObjectType != null) { + // C'est un BusinessEntity on ajoute les getter et setter specifique + String collectionType = WikittyTransformerUtil.getCollectionTypeName(attribute); + + String getterNameObject = "get" + capitalizedAttributeName; + ObjectModelOperation getterObject = addOperation( + helper, getterNameObject, attributeObjectTypeCollectionStrict, + ObjectModelModifier.STATIC); + addParameter(getterObject, "String", "extensionName"); + addParameter(getterObject, WikittyTransformerUtil.WIKITTY_CLASS_FQN, "wikitty"); + addParameter(getterObject, "boolean", "exceptionIfNotLoaded"); + String getterObjectBody = "" +/*{ + String fqfieldName = getMetaFieldName(extensionName, "<%=attributeName%>"); + String extName = WikittyExtension.extractExtensionName(fqfieldName); + String fieldName = WikittyExtension.extractFieldName(fqfieldName); + <%=attributeObjectTypeCollectionStrict%> result = WikittyUtil.newInstance(<%=attributeObjectType%>.class, wikitty.getFieldAsWikitty<%=collectionType%>(extName, fieldName, exceptionIfNotLoaded)); + return result; +}*/; + setOperationBody(getterObject, getterObjectBody); + + String setterNameObject = "set" + capitalizedAttributeName + "Entity"; + ObjectModelOperation setterObject = addOperation( + helper, setterNameObject, "void", ObjectModelModifier.STATIC); + addParameter(setterObject, "String", "extensionName"); + addParameter(setterObject, WikittyTransformerUtil.WIKITTY_CLASS_FQN, "wikitty"); + addParameter(setterObject, attributeObjectTypeCollectionGeneric, attributeName); + String setterObjectBody = "" +/*{ + clear<%=capitalizedAttributeName%>(extensionName, wikitty); + addAll<%=capitalizedAttributeName%>Entity(extensionName, wikitty, <%=attributeName%>); +}*/; + setOperationBody(setterObject, setterObjectBody); + + String addAllNameObject = "addAll" + capitalizedAttributeName + "Entity"; + ObjectModelOperation addAllObject = addOperation( + helper, addAllNameObject, "void", ObjectModelModifier.STATIC); + addParameter(addAllObject, "String", "extensionName"); + addParameter(addAllObject, WikittyTransformerUtil.WIKITTY_CLASS_FQN, "wikitty"); + addParameter(addAllObject, attributeObjectTypeCollectionGeneric, attributeName); + String addAllObjectBody = "" +/*{ + if(<%=attributeName%> != null){ + for (<%=attributeObjectType%> e:<%=attributeName%>){ + add<%=capitalizedAttributeName%>(extensionName, wikitty, e); + } + } +}*/; + setOperationBody(addAllObject, addAllObjectBody); + + String addNameObject = "add" + capitalizedAttributeName; + ObjectModelOperation adderObject = addOperation( + helper, addNameObject, "void", ObjectModelModifier.STATIC); + addParameter(adderObject, "String", "extensionName"); + addParameter(adderObject, WikittyTransformerUtil.WIKITTY_CLASS_FQN, "wikitty"); + addParameter(adderObject, attributeObjectTypeVarargs, "element"); + String adderObjectBody = "" +/*{ + for (<%=attributeObjectType%> v : element) { + String fieldName = getMetaFieldName(extensionName, "<%=attributeName%>"); + wikitty.addToField(fieldName, v); + } +}*/; + setOperationBody(adderObject, adderObjectBody); + + String removeNameObject = "remove" + capitalizedAttributeName; + ObjectModelOperation removerObject = addOperation( + helper, removeNameObject, "void", ObjectModelModifier.STATIC); + addParameter(removerObject, "String", "extensionName"); + addParameter(removerObject, WikittyTransformerUtil.WIKITTY_CLASS_FQN, "wikitty"); + addParameter(removerObject, attributeObjectTypeVarargs, "element"); + String removerObjectBody = "" +/*{ + for (<%=attributeObjectType%> v : element) { + String fieldName = getMetaFieldName(extensionName, "<%=attributeName%>"); + wikitty.removeFromField(fieldName, v); + } +}*/; + setOperationBody(removerObject, removerObjectBody); + } + } else { String getFieldMethodName = WikittyTransformerUtil.generateGetFieldAsCall(attribute); @@ -522,6 +766,41 @@ wikitty.setFqField(fieldName, <%=attributeName%>); return oldValue; }*/); + // + // Pour avoir acces en mode Objet entity + // + if (attributeObjectType != null) { + // C'est un BusinessEntity on ajoute les getter et setter specifique + + String getterNameObject = "get" + StringUtils.capitalize(attributeName); + ObjectModelOperation getterObject = addOperation( + helper, getterNameObject, attributeObjectType, ObjectModelModifier.STATIC); + addParameter(getterObject, "String", "extensionName"); + addParameter(getterObject, WikittyTransformerUtil.WIKITTY_CLASS_FQN, "wikitty"); + addParameter(getterObject, "boolean", "exceptionIfNotLoaded"); + setOperationBody(getterObject, "" +/*{ + String fqfieldName = getMetaFieldName(extensionName, "<%=attributeName%>"); + String extName = WikittyExtension.extractExtensionName(fqfieldName); + String fieldName = WikittyExtension.extractFieldName(fqfieldName); + <%=attributeObjectType%> value = WikittyUtil.newInstance(<%=attributeObjectType%>.class, wikitty.getFieldAsWikitty(extName, fieldName, exceptionIfNotLoaded)); + return value; +}*/); + + String setterNameObject = "set" + StringUtils.capitalize(attributeName); + ObjectModelOperation setterObject = addOperation( + helper, setterNameObject, attributeObjectType, ObjectModelModifier.STATIC); + addParameter(setterObject, "String", "extensionName"); + addParameter(setterObject, WikittyTransformerUtil.WIKITTY_CLASS_FQN, "wikitty"); + addParameter(setterObject, attributeObjectType, attributeName); + setOperationBody(setterObject, "" +/*{ + <%=attributeObjectType%> oldValue = <%=getterObject.getName()%>(extensionName, wikitty, false); + String fieldName = getMetaFieldName(extensionName, "<%=attributeName%>"); + wikitty.setFqField(fieldName, <%=attributeName%>); + return oldValue; +}*/); + } } } } Modified: trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyTransformerUtil.java =================================================================== --- trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyTransformerUtil.java 2012-03-06 11:08:27 UTC (rev 1443) +++ trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyTransformerUtil.java 2012-03-06 19:00:56 UTC (rev 1444) @@ -166,7 +166,27 @@ return simpleTypeName; } - + + /** + * for a given type of attribute, if is Business Entity return it, otherwize null + * @param attribute + * @param considerMultiplicity + * @return + */ + protected static String generateResultObjectType(ObjectModelAttribute attribute, + boolean considerMultiplicity) { + String result = FQNtoSimpleName(attribute.getType()); + if (commonTypes.contains(result) || "Wikitty".equalsIgnoreCase(result)) { + // On ne retourne quelque chose que si c'est un business entity type + result = null; + } + + if (result != null && considerMultiplicity && isAttributeCollection(attribute)) { + result = getCollectionTypeName(attribute) + "<" + result + ">"; + } + return result; + } + protected static String getCollectionTypeName(ObjectModelAttribute attribute) { String result; if (attribute.isUnique()) {
participants (1)
-
bpoussin@users.nuiton.org