Author: agiraudet Date: 2013-05-16 18:01:22 +0200 (Thu, 16 May 2013) New Revision: 1248 Url: http://nuiton.org/projects/eugene/repository/revisions/1248 Log: ajout de nouvelles fonctionnalit?\195?\169s ?\195?\160 YamlToObjectModel.java : g?\195?\168re presque toutes les options de l'ObjectModel (les principales) pour la syntaxe pure YAML ajout de nouvelles fonctionnalit?\195?\169s ?\195?\160 PlantumlTemplatesGenerator.java : affiches d?\195?\169sormais les g?\195?\169n?\195?\169ralisations et classes d'association dans les diagrammes g?\195?\169n?\195?\169r?\195?\169s avec PlantUML mise ?\195?\160 jour de la version de la d?\195?\169pendance de PlantUML du module eugene-plantuml-template correction d'un import vers une classe supprim?\195?\169e dans YamlObjectModelReader.java Note: d?\195?\169couverte d'un bug dans ObjectModelClassImpl.java ligne 124 (v?\195?\169rification avant prochain commit) 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/YamlObjectModelReader.java trunk/eugene/src/main/java/org/nuiton/eugene/models/object/reader/yaml/YamlToObjectModel.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/YamlObjectModelReader.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/models/object/reader/YamlObjectModelReader.java 2013-05-15 15:59:44 UTC (rev 1247) +++ trunk/eugene/src/main/java/org/nuiton/eugene/models/object/reader/YamlObjectModelReader.java 2013-05-16 16:01:22 UTC (rev 1248) @@ -29,7 +29,6 @@ import org.apache.commons.logging.LogFactory; import org.nuiton.eugene.ModelHelper; import org.nuiton.eugene.models.object.ObjectModel; -import org.nuiton.eugene.models.object.reader.yaml.Test; import org.nuiton.eugene.models.object.reader.yaml.YamlToObjectModel; import org.yaml.snakeyaml.error.YAMLException; Modified: trunk/eugene/src/main/java/org/nuiton/eugene/models/object/reader/yaml/YamlToObjectModel.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/models/object/reader/yaml/YamlToObjectModel.java 2013-05-15 15:59:44 UTC (rev 1247) +++ trunk/eugene/src/main/java/org/nuiton/eugene/models/object/reader/yaml/YamlToObjectModel.java 2013-05-16 16:01:22 UTC (rev 1248) @@ -35,7 +35,7 @@ public static final String DOCUMENTATION = "documentation"; public static final String TAG_VALUES = "tagvalues"; public static final String COMMENTS = "comments"; - public static final String STEREOTYPES = "stereotype"; + public static final String STEREOTYPES = "stereotypes"; public static final String EXTERN = "extern"; public static final String INNER = "inner"; public static final String TYPE = "type"; @@ -64,28 +64,30 @@ public static final String PARTICIPANT = "participant"; public static final String LITERAL = "literal"; + private boolean _loginit = true; + private void log(String str) { + try { + FileWriter log; + String path = "/tmp/log.yaml.txt"; - private boolean _log = false; - - private void log(String str) throws IOException { - FileWriter log = null; - String path = "/tmp/log.yaml.txt"; - if (_log) { - log = new FileWriter(path, _log); + if (_loginit) { + log = new FileWriter(path, false); + log.close(); + _loginit = false; + } + log = new FileWriter(path, true); log.write("[LOG] " + str + "\n"); log.close(); - } else { - log = new FileWriter(path, _log); - log.write("[LOG] start v1.0\n"); - log.close(); - _log = true; - } + } catch (IOException e) {;} } public YamlToObjectModel() { yaml = new Yaml(); } + //TODO: retourner boolean sur reussite chargement ? ou lever excpetions ? + //TODO: charger valeurs par defaut en fonction de la version de la syntaxe yaml (syntaxe: version), charger les valeurs à partir d'un fichier ou d'une classe ? + //if(valeur == null) -> charger valeur par defaut -charger celles de l'utilisateur ou celles du programme ou rien public void loadFile(File file, ObjectModel model) throws IOException { ObjectModelImpl modelOM = (ObjectModelImpl) model; InputStream input = new FileInputStream(file); @@ -93,8 +95,8 @@ input.close(); List<String> ignore = new LinkedList<String>(); - ignore.add("imports"); - ignore.add("tagvalues"); + ignore.add(IMPORTS); + ignore.add(TAG_VALUES); browseKeySetToLowerCase(modelYAML, ignore); loadModel(modelYAML, modelOM); @@ -111,8 +113,8 @@ return null; } - public List collectAllElements(List data, Object key) { - List res = new LinkedList(); + public List<Object> collectAllElements(List data, Object key) { + List<Object> res = new LinkedList<Object>(); for (Object obj : data) { if (obj instanceof Map) { if (((Map) obj).containsKey(key)) { @@ -194,9 +196,7 @@ loadEnumeration(enumerationYAML, enumerationOM); modelOM.addEnumeration(enumerationOM); } - } - //return true/false -> chargement reussi ? } public void loadElement(Object elementYAML, ObjectModelElementImpl elementOM) { @@ -249,6 +249,9 @@ ObjectModelImplRef stereotypeOM = new ObjectModelImplRef(); stereotypeOM.setName(String.valueOf(stereotype)); elementOM.addStereotype(stereotypeOM); + //log + log("stereotype="+stereotypeOM.getName()); + //log } } } @@ -350,8 +353,29 @@ List participantsYAML = collectAllElements((List) associationClassYAML, PARTICIPANT); for (Object participantYAML : participantsYAML) { - ObjectModeImplAssociationClassParticipant participant = new ObjectModeImplAssociationClassParticipant(); - //TODO: + if (participantYAML instanceof List) { + + ObjectModeImplAssociationClassParticipant participantOM = new ObjectModeImplAssociationClassParticipant(); + participantOM.setAssociationClass(associationClassOM); + + Object nameYAML = collectElement((List) participantYAML, NAME); + if (nameYAML == null) { + ; + } else { + participantOM.setName(String.valueOf(nameYAML)); + } + + Object attributeYAML = collectElement((List) participantYAML, ATTRIBUTE); + if (attributeYAML == null) { + ; + } else { + participantOM.setAttribute(String.valueOf(attributeYAML)); + } + + associationClassOM.addParticipant(participantOM); + + log("associationClass"); + } } } } @@ -545,5 +569,4 @@ } } } - } 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-05-15 15:59:44 UTC (rev 1247) +++ trunk/eugene/src/main/java/org/nuiton/eugene/models/object/reader/yaml/YamlUtil.java 2013-05-16 16:01:22 UTC (rev 1248) @@ -24,6 +24,7 @@ keySetToLowerCase((Map) obj); for (Object key : ((Map) obj).keySet()) { + //tester si String ou caster avec valueOf if (!ignore.contains(key)) { browseKeySetToLowerCase(((Map) obj).get(key), ignore); } Modified: trunk/eugene-plantuml-templates/pom.xml =================================================================== --- trunk/eugene-plantuml-templates/pom.xml 2013-05-15 15:59:44 UTC (rev 1247) +++ trunk/eugene-plantuml-templates/pom.xml 2013-05-16 16:01:22 UTC (rev 1248) @@ -46,7 +46,7 @@ <dependency> <groupId>net.sourceforge.plantuml</groupId> <artifactId>plantuml</artifactId> - <version>7962</version> + <version>7965</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-05-15 15:59:44 UTC (rev 1247) +++ trunk/eugene-plantuml-templates/src/main/java/org/nuiton/eugene/plantuml/PlantumlTemplatesGenerator.java 2013-05-16 16:01:22 UTC (rev 1248) @@ -3,6 +3,7 @@ import net.sourceforge.plantuml.GeneratedImage; import net.sourceforge.plantuml.SourceFileReader; import org.nuiton.eugene.models.object.*; +import org.nuiton.eugene.models.object.xml.ObjectModelClassImpl; import java.io.*; import java.util.*; @@ -12,12 +13,27 @@ public class PlantumlTemplatesGenerator extends ObjectModelGenerator { + private boolean _loginit = true; + private void log(String str) { + try { + FileWriter log; + String path = "/tmp/log.yaml.txt"; + + 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 { - /*//log - FileWriter log = new FileWriter(File.separator+"tmp"+File.separator+"test2.log"); - log.close(); - *///log + //log + //log // utiliser le systeme de templates a l'avenir @@ -33,9 +49,18 @@ if(class_tmp.getStereotypes().size()>0) { classStereotype = "<<"; + boolean first = true; for(String str : class_tmp.getStereotypes()) { - classStereotype = classStereotype+","+str; + if(first) + { + classStereotype = classStereotype+str; + first = false; + } + else + { + classStereotype = classStereotype+" ,"+str; + } } classStereotype = classStereotype+">>"; } @@ -147,6 +172,55 @@ } } + //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); + } + else + { + associationClass.put(key,new LinkedList<String>()); + associationClass.get(key).add(value); + } + } + } + } + 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); + } + } + output.write(") .. "+entry.getKey()+"\n"); + } + + //extensions/generalisations (heritage) + for(ObjectModelClass classOM : input.getClasses()) + { + for(ObjectModelClass superClassOM : classOM.getSuperclasses()) + { + output.write(superClassOM.getName()+" <|-- "+classOM.getName()); + } + } + // fin du fichier output.write("\n@enduml"); } @@ -177,8 +251,7 @@ File plantuml = new File(destDir+File.separator+this.getFilenameForModel(model)); SourceFileReader reader = new SourceFileReader(plantuml); List<GeneratedImage> lst = reader.getGeneratedImages(); - File diagram = new File(destDir+File.separator+model.getName()+".png"); - diagram = lst.get(0).getPngFile(); + new File(lst.get(0).getPngFile(), destDir+File.separator+model.getName()+".png"); } catch (InterruptedException e) { e.printStackTrace(); }