r1277 - in trunk: eugene/src/main/java/org/nuiton/eugene/models/object/reader/yaml eugene-plantuml-templates eugene-plantuml-templates/src/main/java/org/nuiton/eugene/plantuml
Author: agiraudet Date: 2013-06-13 18:07:14 +0200 (Thu, 13 Jun 2013) New Revision: 1277 Url: http://nuiton.org/projects/eugene/repository/revisions/1277 Log: Refonte compl?\195?\168te du template PlantUML et mise ?\195?\160 jour de la version de la d?\195?\169pendance vers PlantUML Modified: trunk/eugene-plantuml-templates/pom.xml trunk/eugene-plantuml-templates/src/main/java/org/nuiton/eugene/plantuml/PlantumlTemplatesGenerator.java trunk/eugene/src/main/java/org/nuiton/eugene/models/object/reader/yaml/LoadObjectModel.java trunk/eugene/src/main/java/org/nuiton/eugene/models/object/reader/yaml/YamlUtil.java Modified: trunk/eugene/src/main/java/org/nuiton/eugene/models/object/reader/yaml/LoadObjectModel.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/models/object/reader/yaml/LoadObjectModel.java 2013-06-12 15:46:10 UTC (rev 1276) +++ trunk/eugene/src/main/java/org/nuiton/eugene/models/object/reader/yaml/LoadObjectModel.java 2013-06-13 16:07:14 UTC (rev 1277) @@ -37,6 +37,8 @@ } else { packageL = packageYAMLO; } + //permet d'afficher le package dans le diagramme plantuml + modelOM.addTagValue(PACKAGE,packageL); String nameYAMLO = modelYAMLO.getFirstMapStringListString(NAME); if (nameYAMLO == null) { Modified: trunk/eugene/src/main/java/org/nuiton/eugene/models/object/reader/yaml/YamlUtil.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/models/object/reader/yaml/YamlUtil.java 2013-06-12 15:46:10 UTC (rev 1276) +++ trunk/eugene/src/main/java/org/nuiton/eugene/models/object/reader/yaml/YamlUtil.java 2013-06-13 16:07:14 UTC (rev 1277) @@ -14,7 +14,7 @@ //TODO: faire classes dédiée au parser ? public class YamlUtil { - //TODO: caster proprement + @Deprecated public static void keySetToLowerCase(Map<Object, Object> map) { List<Object> keys = new ArrayList<Object>(map.keySet()); for (Object obj : keys) { @@ -25,6 +25,7 @@ } } + @Deprecated public static void browseKeySetToLowerCase(Object obj, List<String> ignore) { if (obj instanceof Map) { keySetToLowerCase((Map<Object, Object>) obj); @@ -95,7 +96,6 @@ } } - // fonctionnel/robuste/optimise public static List<String> charParse(String str, Character target) { LinkedList<String> res = new LinkedList<String>(); StringBuilder tmp = new StringBuilder(str.length() + 1);//+1 utile en Java ? != C @@ -118,7 +118,6 @@ return res; } - // fonctionnel/robuste/optimise public static List<String> multiCharParse(String str, List<Character> targets) { LinkedList<String> res = new LinkedList<String>(); StringBuilder tmp = new StringBuilder(str.length() + 1);//+1 utile en Java ? != C @@ -248,25 +247,7 @@ return null; } - public static void main(String[] args) { - /*List<Character> ignoreStart = new LinkedList<Character>(); - ignoreStart.add('('); - ignoreStart.add('<'); - List<Character> ignoreEnd = new LinkedList<Character>(); - ignoreEnd.add(')'); - ignoreEnd.add('>'); - List<String> tmp = charParseMultiIgnore("public Map<Integer, String> Somme(List<String> bonjour, int y)",' ',ignoreStart,ignoreEnd); - for(String str : tmp) - { - System.out.println(str); - }*/ - //System.out.println(beforeChar("11..**",'.')); - //System.out.println(afterChar("11..**",'.')); - //System.out.println(afterChar("java.lang.String",'.')); - List<String> test = charParseIgnore("Map<String,String,String>", ',', '<', '>'); - for (String str : test) { - System.out.println(str); - } - System.out.println(extract('<', '>', "<<<>>>")); - } + /*public static void main(String[] args) { + ; + }*/ } Modified: trunk/eugene-plantuml-templates/pom.xml =================================================================== --- trunk/eugene-plantuml-templates/pom.xml 2013-06-12 15:46:10 UTC (rev 1276) +++ trunk/eugene-plantuml-templates/pom.xml 2013-06-13 16:07:14 UTC (rev 1277) @@ -46,7 +46,7 @@ <dependency> <groupId>net.sourceforge.plantuml</groupId> <artifactId>plantuml</artifactId> - <version>7965</version> + <version>7968</version> </dependency> </dependencies> Modified: trunk/eugene-plantuml-templates/src/main/java/org/nuiton/eugene/plantuml/PlantumlTemplatesGenerator.java =================================================================== --- trunk/eugene-plantuml-templates/src/main/java/org/nuiton/eugene/plantuml/PlantumlTemplatesGenerator.java 2013-06-12 15:46:10 UTC (rev 1276) +++ trunk/eugene-plantuml-templates/src/main/java/org/nuiton/eugene/plantuml/PlantumlTemplatesGenerator.java 2013-06-13 16:07:14 UTC (rev 1277) @@ -3,317 +3,309 @@ import net.sourceforge.plantuml.GeneratedImage; import net.sourceforge.plantuml.SourceFileReader; import org.nuiton.eugene.models.object.*; -import org.nuiton.eugene.models.object.xml.ObjectModelAssociationClassImpl; -import org.nuiton.eugene.models.object.xml.ObjectModelClassImpl; +import org.nuiton.eugene.models.object.reader.yaml.KeyWords; +import org.nuiton.eugene.models.object.reader.yaml.YamlUtil; -import java.io.*; +import java.io.File; +import java.io.IOException; +import java.io.Writer; import java.util.*; -// http://maven-site.nuiton.org/eugene/objectmodel/ObjectModel_Interfaces.png -//TODO : Plexus ? +/** + * @author agiraudet <giraudet@codelutin.com> + * @plexus.component role="org.nuiton.eugene.Template" role-hint="org.nuiton.eugene.plantuml.PlantumlTemplatesGenerator" + * @since 2.6.4 + */ -public class PlantumlTemplatesGenerator extends ObjectModelGenerator { +//TODO: utiliser systeme de template - private boolean _loginit = true; - private void log(String str) { - try { - FileWriter log; - String path = "/tmp/log.plantuml.txt"; +public class PlantumlTemplatesGenerator extends ObjectModelGenerator implements KeyWords { - if (_loginit) { - log = new FileWriter(path, false); - log.close(); - _loginit = false; - } - log = new FileWriter(path, true); - log.write("[LOG] " + str + "\n"); - log.close(); - } catch (IOException e) {;} + @Override + public void generateFromModel(Writer output, ObjectModel input) throws IOException { + output.write("@startuml\n\n"); + + String nameM = "", versionM = "", packageM = ""; + if (input.getName() != null) { + nameM = input.getName(); + } + if (input.getVersion() != null) { + versionM = input.getVersion(); + } + if (input.getTagValue(PACKAGE) != null) { + packageM = input.getTagValue(PACKAGE) + " "; + } + output.write("note \"" + nameM + " " + versionM + "\" as N1\n\n"); + output.write("package " + packageM + "{\n\n"); + String indent = " "; + for (ObjectModelClass objectModelClass : input.getClasses()) { + generateFromClass(output, objectModelClass, indent); + } + for (ObjectModelInterface objectModelInterface : input.getInterfaces()) { + generateFromInterface(output, objectModelInterface, indent); + } + for (ObjectModelEnumeration objectModelEnumeration : input.getEnumerations()) { + generateFromEnumeration(output, objectModelEnumeration, indent); + } + generateFromLinks(output, input, indent); + output.write("\n"); + output.write("}\n"); + output.write("@enduml"); } @Override - public void generateFromModel(Writer output, ObjectModel input) throws IOException { - //log - //log + public void applyTemplate(ObjectModel model, File destDir) throws IOException { + super.applyTemplate(model, destDir); + try { + File plantuml = new File(destDir + File.separator + this.getFilenameForModel(model)); + SourceFileReader reader = new SourceFileReader(plantuml); + List<GeneratedImage> lst = reader.getGeneratedImages(); + new File(lst.get(0).getPngFile(), destDir + File.separator + model.getName() + ".png"); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } - // utiliser le systeme de templates a l'avenir + @Override + public String getFilenameForModel(ObjectModel model) { + return model.getName() + ".plantuml"; + } - Map<ObjectModelAttribute,ObjectModelClassifier> linksOME = new LinkedHashMap<ObjectModelAttribute, ObjectModelClassifier>(); + public void generateFromClass(Writer output, ObjectModelClass input, String indent) throws IOException { + String name = "", stereotype = "", isAbstract = ""; + if (input.getName() != null) { + name = input.getName() + " "; + } + if (input.getStereotypes() != null) { + stereotype = getFromStereotypes(input.getStereotypes()) + " "; + } + if (input.isAbstract()) { + isAbstract = "abstract "; + } + output.write(indent + isAbstract + "class " + name + stereotype + "{\n"); + if (input.getAttributes() != null && !input.getAttributes().isEmpty()) { + generateFromAttributes(output, input.getAttributes(), indent + " "); + } + output.write(indent + " ..\n"); + if (input.getOperations() != null) { + generateFromOperations(output, input.getOperations(), indent + " "); + } + output.write(indent + "}\n"); - // debut du fichier - output.write("@startuml\n\n"); - // parcours des classes - for(ObjectModelClass class_tmp : input.getClasses()) - { - String classStereotype = ""; - if(class_tmp.getStereotypes().size()>0) - { - classStereotype = "<<"; - boolean first = true; - for(String str : class_tmp.getStereotypes()) - { - if(first) - { - classStereotype = classStereotype+str; - first = false; - } - else - { - classStereotype = classStereotype+" ,"+str; - } - } - classStereotype = classStereotype+">>"; - } - String className = class_tmp.getName(); - // ajout de la classe - output.write("class "+className+classStereotype+" {\n"); - // parcours des attributs de la classe - for(ObjectModelAttribute attribute_tmp : class_tmp.getAttributes()) - { - String attributeName = attribute_tmp.getName(); - //String attributeType = afterLastPoint(attribute_tmp.getType()); - String attributeType = attribute_tmp.getType(); - // si l'attribut n'est lie a aucune classe - if(attribute_tmp.referenceClassifier()) - { - // ajout du lien - linksOME.put(attribute_tmp,class_tmp); - } - else - { - // ajout de l'attribut - output.write(" -"+attributeName+" : "+attributeType+"\n"); - } - } - // parcours des operations - for(ObjectModelOperation operation_tmp : class_tmp.getOperations()) - { - String operationName = operation_tmp.getName(); - //String operationReturnType = afterLastPoint(operation_tmp.getReturnType()); - String operationReturnType = operation_tmp.getReturnType(); - // ajout de l'operation - output.write(" +"+operationName+"("); - // parcours des parametres - boolean first = true; - for(ObjectModelParameter param : operation_tmp.getParameters()) - { - String parameterName = param.getName(); - //String parameterType = afterLastPoint(param.getType()); - String parameterType = param.getType(); - if(first) - { - first = false; - } - else - { - output.write(", "); - } - // ajout du parametre - output.write(parameterName+" : "+parameterType); - } - // ajout du type de retour - output.write(") : "+operationReturnType+"\n");// attention aux listes ! - } - output.write("}\n\n"); + if (input.getSuperclasses() != null) { + generateFromSuperClasses(output, input.getSuperclasses(), name, indent); + } + if (input.getInterfaces() != null) { + generateFromSuperInterfaces(output, input.getInterfaces(), name, indent); + } + output.write("\n"); + } + public void generateFromInterface(Writer output, ObjectModelInterface input, String indent) throws IOException { + String name = "", stereotype = ""; + if (input.getName() != null) { + name = input.getName() + " "; } + if (input.getStereotypes() != null) { + stereotype = getFromStereotypes(input.getStereotypes()) + " "; + } + output.write(indent + "class " + name + stereotype + "{\n"); + if (input.getAttributes() != null && !input.getAttributes().isEmpty()) { + generateFromAttributes(output, input.getAttributes(), indent + " "); + } + output.write(indent + " ..\n"); + if (input.getOperations() != null) { + generateFromOperations(output, input.getOperations(), indent + " "); + } + output.write(indent + "}\n"); - // parcours des enumerations - for(ObjectModelEnumeration enumeration_tmp : input.getEnumerations()) - { - String enumerationName = enumeration_tmp.getName(); - String enumerationStereotype = ""; - if(enumeration_tmp.getStereotypes().size()>0) - { - enumerationStereotype = "<<"; - boolean first = true; - for(String str : enumeration_tmp.getStereotypes()) - { - if(first) - { - enumerationStereotype = enumerationStereotype+str; - first = false; - } - else - { - enumerationStereotype = enumerationStereotype+" ,"+str; - } - } - enumerationStereotype = enumerationStereotype+">>"; + if (input.getInterfaces() != null) { + generateFromSuperInterfaces(output, input.getInterfaces(), name, indent); + } + output.write("\n"); + } + + public void generateFromEnumeration(Writer output, ObjectModelEnumeration input, String indent) throws IOException { + String name = "", stereotype = ""; + if (input.getName() != null) { + name = input.getName() + " "; + } + if (input.getStereotypes() != null) { + stereotype = getFromStereotypes(input.getStereotypes()) + " "; + } + output.write(indent + "enum " + name + stereotype + "{\n"); + if (input.getLiterals() != null && !input.getAttributes().isEmpty()) { + for (String literal : input.getLiterals()) { + output.write(indent + " " + literal.toUpperCase() + "\n"); } - // ajout de l'enumeration - output.write("enum "+enumerationName+enumerationStereotype+" {\n"); - for(String literalOM : enumeration_tmp.getLiterals()) - { - output.write(" "+literalOM.toUpperCase()+"\n"); - } - output.write("}\n\n"); } + output.write(indent + " ..\n"); + if (input.getOperations() != null) { + generateFromOperations(output, input.getOperations(), indent + " "); + } + output.write(indent + "}\n"); - // parcours des interfaces - for(ObjectModelInterface interface_tmp : input.getInterfaces()) - { - String interfaceName = interface_tmp.getName(); - String interfaceStereotype = ""; - if(interface_tmp.getStereotypes().size()>0) - { - interfaceStereotype = "<<"; - boolean first = true; - for(String str : interface_tmp.getStereotypes()) - { - if(first) - { - interfaceStereotype = interfaceStereotype+str; - first = false; - } - else - { - interfaceStereotype = interfaceStereotype+" ,"+str; - } + output.write("\n"); + } + + public String getFromStereotypes(Collection<String> stereotypes) { + StringBuilder stereotype = new StringBuilder(""); + if (stereotypes.size() > 0) { + stereotype.append("<< "); + boolean first = true; + for (String str : stereotypes) { + if (first) { + first = false; + } else { + stereotype.append(", "); } - interfaceStereotype = interfaceStereotype+">>"; + stereotype.append(str); } - // ajout de l'interface - output.write("interface "+interfaceName+interfaceStereotype+" {\n"); - // ajout des methodes - output.write("}\n\n"); + stereotype.append(" >>"); } + return stereotype.toString(); + } - //liaisons - for(ObjectModelAttribute attribute_tmp : linksOME.keySet()) - { - //if(attribute_tmp.isNavigable()) - { - if(attribute_tmp.isComposite() && attribute_tmp.referenceClassifier()) - { - output.write(linksOME.get(attribute_tmp).getName()+" *-- "+attribute_tmp.getClassifier().getName()+"\n"); + //TODO: parser type + public void generateFromAttributes(Writer output, Collection<ObjectModelAttribute> input, String indent) throws IOException { + for (ObjectModelAttribute attribute : input) { + if (!attribute.referenceClassifier()) { + String type = "", name = ""; + if (attribute.getType() != null) { + type = attribute.getType() + " "; } - else if(attribute_tmp.isAggregate() && attribute_tmp.referenceClassifier())//else if - { - output.write(linksOME.get(attribute_tmp).getName()+" o-- "+attribute_tmp.getClassifier().getName()+"\n"); + if (attribute.getName() != null) { + name = attribute.getName(); } - else if(!attribute_tmp.isNavigable() && attribute_tmp.referenceClassifier())//probleme avec les compositions et aggregations -> double lien - { - output.write(attribute_tmp.getClassifier().getName()+" --> "+linksOME.get(attribute_tmp).getName()+"\n"); - } - else if(attribute_tmp.isNavigable() && attribute_tmp.referenceClassifier()) - { - output.write(attribute_tmp.getClassifier().getName()+" -- "+linksOME.get(attribute_tmp).getName()+"\n"); - } + output.write(indent + type + name + "\n"); } } + } - /*//test - for(ObjectModelClassifier class_tmp : input.getClassifiers()) - { - log("name="+class_tmp.getName()); - for(ObjectModelDependency dependency : class_tmp.getDependencies()) - { - log("dependency="+dependency.getName()+" client="+ dependency.getClient().getName()+" supplier="+dependency.getSupplier().getName()); + //TODO: parser parameters + public void generateFromOperations(Writer output, Collection<ObjectModelOperation> input, String indent) throws IOException { + for (ObjectModelOperation operation : input) { + String isAbstract = "", parameters = "", name = "", returnParameter = ""; + if (operation.isAbstract()) { + isAbstract = "{abstract} "; } - if(class_tmp.getDeclaringElement() != null) - { - log("declaringElement="+class_tmp.getDeclaringElement().getName()); - } - } - *///test - - //classes d'association - Map<String,LinkedList<String>> associationClass = new LinkedHashMap<String, LinkedList<String>>(); - for(ObjectModelClassifier classifier : input.getClassifiers()) - { - for(ObjectModelAttribute attribute : classifier.getAttributes()) - { - if(attribute.hasAssociationClass()) - { - String key = attribute.getAssociationClass().getName(); - String value = classifier.getName(); - if(associationClass.containsKey(key)) - { - associationClass.get(key).add(value); + if (operation.getParameters() != null) { + StringBuilder tmp = new StringBuilder(""); + boolean first = true; + for (ObjectModelParameter parameter : operation.getParameters()) { + if (first) { + first = false; + } else { + tmp.append(", "); } - else - { - associationClass.put(key,new LinkedList<String>()); - associationClass.get(key).add(value); + if (parameter.getType() != null) { + tmp.append(parameter.getType()).append(" "); } + if (parameter.getName() != null) { + tmp.append(parameter.getName()); + } } + parameters = tmp.toString(); } - } - for(Map.Entry<String,LinkedList<String>> entry : associationClass.entrySet()) - { - boolean first = true; - output.write("("); - for(String value : entry.getValue()) - { - if(first) - { - output.write(value); - first = false; - }else - { - output.write(", "+value); + if (operation.getReturnParameter() != null) { + if (operation.getReturnParameter().getType() != null) { + returnParameter = operation.getReturnParameter().getType() + " "; } } - output.write(") .. "+entry.getKey()+"\n"); + if (operation.getName() != null) { + name = operation.getName(); + } + output.write(indent + isAbstract + returnParameter + name + "(" + parameters + ")\n"); } + } - //extensions/generalisations (heritage) - for(ObjectModelClass classOM : input.getClasses()) - { - for(ObjectModelClass superClassOM : classOM.getSuperclasses()) - { - output.write(superClassOM.getName()+" <|-- "+classOM.getName()+"\n"); + public void generateFromSuperClasses(Writer output, Collection<ObjectModelClass> input, String name, String indent) throws IOException { + for (ObjectModelClass superClass : input) { + String superClassName = ""; + if (superClass.getName() != null) { + superClassName = superClass.getName(); } + output.write(indent + superClassName + " <|-- " + name + "\n"); } + } - //realisations - for(ObjectModelClass classOM : input.getClasses()) - { - for(ObjectModelInterface superInterfaceOM : classOM.getInterfaces()) - { - output.write(superInterfaceOM.getName()+" <|.. "+classOM.getName()+"\n"); + public void generateFromSuperInterfaces(Writer output, Collection<ObjectModelInterface> input, String name, String indent) throws IOException { + for (ObjectModelInterface superInterface : input) { + String superInterfaceName = ""; + if (superInterface.getName() != null) { + superInterfaceName = superInterface.getName(); } + output.write(indent + superInterfaceName + " <|.. " + name + "\n"); } - - // fin du fichier - output.write("\n@enduml"); } - // exemple : afterLastPoint("org.nuiton.testeugene.generator") return "generator" - public static String afterLastPoint(String input) - { - String str = new StringBuffer(input).reverse().toString(); - String res = ""; - for(Character car : str.toCharArray()) + //TODO: factoriser + public void generateFromLinks(Writer output, ObjectModel input, String indent) throws IOException { + Map<ObjectModelAttribute, ObjectModelClassifier> attributesM = new LinkedHashMap<ObjectModelAttribute, ObjectModelClassifier>(); + List<ObjectModelAttribute> bin = new LinkedList<ObjectModelAttribute>();//bin au sens poubelle + + for (ObjectModelClassifier classifier : input.getClassifiers())//TODO+enum? { - if(car.equals('.')) - { - return res; + if (classifier.getAttributes() != null) { + for (ObjectModelAttribute attribute : classifier.getAttributes()) { + if (attribute.referenceClassifier()) { + attributesM.put(attribute, classifier); + } + } } - else - { - res = car.toString()+res; - } } - return res; - } - @Override - public void applyTemplate(ObjectModel model, File destDir) throws IOException { - super.applyTemplate(model, destDir); - try { - File plantuml = new File(destDir+File.separator+this.getFilenameForModel(model)); - SourceFileReader reader = new SourceFileReader(plantuml); - List<GeneratedImage> lst = reader.getGeneratedImages(); - new File(lst.get(0).getPngFile(), destDir+File.separator+model.getName()+".png"); - } catch (InterruptedException e) { - e.printStackTrace(); + for (Map.Entry<ObjectModelAttribute, ObjectModelClassifier> entry : attributesM.entrySet()) { + ObjectModelAttribute attribute = entry.getKey(); + ObjectModelClassifier classifier = entry.getValue(); + if (attribute.isNavigable()) { + String attributeName = ""; + if (attribute.getName() != null) { + attributeName = attribute.getName(); + } + String minMultiplicity = (attribute.getMinMultiplicity() == -1) ? "*" : String.valueOf(attribute.getMinMultiplicity()); + String maxMultiplicity = (attribute.getMaxMultiplicity() == -1) ? "*" : String.valueOf(attribute.getMaxMultiplicity()); + String multiplicity = (minMultiplicity.equals(maxMultiplicity)) ? minMultiplicity : minMultiplicity + ".." + maxMultiplicity; + String type = YamlUtil.afterChar(attribute.getType(), '.'); + if (!bin.contains(attribute)) { + if (attribute.getReverseAttribute() != null) { + ObjectModelAttribute reverseAttribute = attribute.getReverseAttribute(); + String reverseAttributeName = ""; + if (reverseAttribute.getName() != null) { + reverseAttributeName = reverseAttribute.getName(); + } + String reverseMinMultiplicity = (reverseAttribute.getMinMultiplicity() == -1) ? "*" : String.valueOf(reverseAttribute.getMinMultiplicity()); + String reverseMaxMultiplicity = (reverseAttribute.getMaxMultiplicity() == -1) ? "*" : String.valueOf(reverseAttribute.getMaxMultiplicity()); + String reverseMultiplicity = (reverseMinMultiplicity.equals(reverseMaxMultiplicity)) ? reverseMinMultiplicity : reverseMinMultiplicity + ".." + reverseMaxMultiplicity; + String reverseType = YamlUtil.afterChar(reverseAttribute.getType(), '.'); + if (reverseAttribute.isNavigable())//lien bi-directionnel + { + output.write(indent + type + " \"" + multiplicity + " " + attributeName + "\" -- \"" + reverseMultiplicity + " " + reverseAttributeName + "\" " + reverseType + "\n"); + if (attribute.getAssociationClass() != null && reverseAttribute.getAssociationClass() != null && attribute.getAssociationClass().equals(reverseAttribute.getAssociationClass())) { + String associationClassName = ""; + if (attribute.getAssociationClass().getName() != null) { + associationClassName = attribute.getAssociationClass().getName(); + } + output.write(indent + "(" + type + ", " + reverseType + ") . " + associationClassName + "\n"); + } + bin.add(reverseAttribute); + } else//lien uni-directionnel + { + if (multiplicity.equals("0..*") && reverseMultiplicity.equals("1")) { + output.write(indent + type + " \"" + multiplicity + " " + attributeName + "\" <--* \"" + reverseMultiplicity + " " + reverseAttributeName + "\" " + reverseType + "\n"); + } else { + output.write(indent + type + " \"" + multiplicity + " " + attributeName + "\" <-- \"" + reverseMultiplicity + " " + reverseAttributeName + "\" " + reverseType + "\n"); + } + } + } else { + String reverseType = ""; + if (attributesM.get(attribute).getName() != null) { + reverseType = attributesM.get(attribute).getName(); + } + output.write(type + " \"" + multiplicity + " " + attributeName + "\" <-- " + reverseType + "\n"); + } + } + } } } - - @Override - public String getFilenameForModel(ObjectModel model) { - return model.getName()+".plantuml"; - } }
participants (1)
-
agiraudet@users.nuiton.org