r1000 - trunk/eugene/src/main/java/org/nuiton/eugene/models/object
Author: tchemit Date: 2010-11-25 19:40:54 +0100 (Thu, 25 Nov 2010) New Revision: 1000 Url: http://nuiton.org/repositories/revision/eugene/1000 Log: Anomalie #1100: User not warned when an entry of the model properties file can not be attached Evolution #1098: Improve tagValue detection Evolution #1099: Can use tagvalue or now also tagValue in model properties file Modified: trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelReader.java Modified: trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelReader.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelReader.java 2010-11-25 09:04:45 UTC (rev 999) +++ trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelReader.java 2010-11-25 18:40:54 UTC (rev 1000) @@ -33,6 +33,7 @@ import java.util.Arrays; import java.util.Enumeration; import java.util.List; +import java.util.Properties; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.commons.digester.Digester; @@ -50,7 +51,6 @@ import org.nuiton.util.FileUtil; import org.nuiton.util.RecursiveProperties; import org.nuiton.util.StringUtil; -import org.xml.sax.SAXException; /** * To read object model files into an memory object model. @@ -76,6 +76,9 @@ public static final String CLASS = "class"; /** + * Pattern to define tag values authorized at classifier level in the model + * properties file. + * * L'expression réguliere match les chaines de type * <package.ClassName>.<class|attribute|operation>.[name].<stereotype|tagvalue>.[tag] * fr.isisfish.entities.Population.class.stereotype=entity @@ -86,8 +89,17 @@ * fr.isisfish.entities.Population.operation.getRegion.tagvalue.pk=... */ protected Pattern propertiesPattern = Pattern - .compile("((?:[_a-zA-Z0-9]+\\.)+(?:_?[A-Z][_a-zA-Z0-9]*\\.)+)(?:(class|attribute|operation)\\.)(?:([_a-z0-9][_a-zA-Z0-9]*)\\.)?(?:(stereotype|tagvalue)\\.?)([_a-z0-9][_a-zA-Z0-9]*)?"); + .compile("((?:[_a-zA-Z0-9]+\\.)+(?:_?[A-Z][_a-zA-Z0-9]*\\.)+)(?:(class|attribute|operation))\\.(?:([_a-zA-Z0-9]+)\\.)?(?:(stereotype|tagvalue|tagValue)?)\\.([_a-z0-9][_a-zA-Z0-9]*)?"); + /** + * Pattern to define tag values authorized at model level in the model + * properties file. + * + * @since 2.2.1 + */ + protected Pattern modelTagValuePattern = Pattern + .compile("model\\.(?:(tagvalue|tagValue)?)\\.((?:[_a-zA-Z0-9]+)+)"); + public static final String MODEL = "model"; /** @@ -114,14 +126,10 @@ try { digester.push(model); model = (ObjectModel) digester.parse(file); - } catch (IOException e) { + } catch (Exception e) { if (log.isWarnEnabled()) { log.warn("Unable to parse ObjectModel input file : " + file, e); } - } catch (SAXException e) { - if (log.isWarnEnabled()) { - log.warn("Unable to parse ObjectModel input file : " + file, e); - } } // recherche est charge le fichier propriete associe au modele @@ -129,7 +137,6 @@ String ext = FileUtil.extension(file); String name = FileUtil.basename(file, "." + ext); File propFile = new File(dir, name + ".properties"); - RecursiveProperties prop = new RecursiveProperties(); if (!propFile.exists()) { if (log.isInfoEnabled()) { log.info("Pas de fichier de propriete " + propFile @@ -140,145 +147,7 @@ log.info("Lecture du fichier de propriete " + propFile + " associé au model"); } - try { - FileInputStream inStream = new FileInputStream(propFile); - try { - prop.load(inStream); - } finally { - inStream.close(); - } - } catch (IOException eee) { - if (log.isWarnEnabled()) { - log.warn("Impossible de lire le fichier de propriete " - + propFile, eee); - } - } - - // on ajoute les proprietes du fichier associe au model - for (Enumeration<Object> e = prop.keys(); e.hasMoreElements();) { - String key = (String) e.nextElement(); - String value = prop.getProperty(key); - - if (key.startsWith(MODEL)) { - - // model tag value - - if (!key.startsWith("model.tagvalue.")) { - if (log.isWarnEnabled()) { - log.warn("only tagvalue is allowed on model in properties"); - } - continue; - } - String tag = key.substring("model.tagvalue.".length()); - - ObjectModelImpl modelImpl = (ObjectModelImpl) model; - if (tag.equals(JavaGeneratorUtil.TAG_VERSION)) { - - // push directly the version in the model version - // property - modelImpl.setVersion(value); - } - ObjectModelImplTagValue tagvalue = new ObjectModelImplTagValue(); - tagvalue.setName(tag); - tagvalue.setValue(value); - modelImpl.addTagValue(tagvalue); - continue; - } - - // element tag value - Matcher matcher = propertiesPattern.matcher(key); - - if (log.isDebugEnabled()) { - log.debug("Propriete: '" + key + "'"); - } - - if (matcher.find()) { - // fqn is fully qualified name of class - String fqn = matcher.group(1); - fqn = StringUtil.substring(fqn, 0, -1); // remove ended - // . - // target is class, attribute or operation - String target = matcher.group(2); - String targetName = matcher.group(3); - // type is stereotype or tagvalue - String type = matcher.group(4); - String tag = matcher.group(5); - - if (log.isDebugEnabled()) { - log.debug("Propriete: '" + key + "' => " - + "fqn:" + fqn + " target:" + target - + " targetName:" + targetName - + " type:" + type + " tag:" + tag); - } - - ObjectModelClassifier omc = model.getClassifier(fqn); - if (omc == null) { - if (log.isWarnEnabled()) { - log.warn("Could not find classifier for " + - fqn + " from tag value " + key); - } - continue; - } - - if (!(omc instanceof ObjectModelClassifierImpl)) { - // TODO il faudra avoir des methodes d'acces en Set sur l'interface pour eviter ce message - if (log.isWarnEnabled()) { - log.warn("Can't add properties to model, " + - "it's not an " + - "ObjectModelClassifierImpl : " + - omc.getQualifiedName()); - } - continue; - } - - List<ObjectModelElement> elems = new ArrayList<ObjectModelElement>(); - if (CLASS.equals(target)) { - elems.add(omc); - } else if (ATTRIBUTE.equals(target)) { - - ObjectModelAttribute attr = - getAttribute((ObjectModelClass)omc, targetName); - elems.add(attr); - - } else if (OPERATION.equals(target)) { - elems.addAll(omc.getOperations(targetName)); - } - for (Object elem1 : elems) { - if (elem1 == null) { - if (log.isWarnEnabled()) { - log.warn("can not attach tagValue " + - key + " on a null element."); - } - continue; - } - ObjectModelElementImpl elem = - (ObjectModelElementImpl) elem1; - if (STEREOTYPE.equals(type)) { - // pour les stereotypes - ObjectModelImplRef stereotype = new ObjectModelImplRef(); - stereotype.setName(value); - elem.addStereotype(stereotype); - continue; - } - - if (TAGVALUE.equals(type)) { - // pour les tagvalues - ObjectModelImplTagValue tagvalue = - new ObjectModelImplTagValue(); - tagvalue.setName(tag); - tagvalue.setValue(value); - if (log.isDebugEnabled()) { - log.debug("tagValue:" + tagvalue - + ", tag:" + tag - + ", value:" + value - + ", element:" + elem); - } - elem.addTagValue(tagvalue); - - } - } - } - } + loadModelPropertiesFile(propFile, model); } } if (log.isDebugEnabled()) { @@ -287,13 +156,6 @@ } } return model; - /*try { - generate(objectModel, destDir); - } catch (IOException eee) { - if (log.isWarnEnabled()) { - log.warn("Unable to generate for file", eee); - } - }*/ } /** @@ -327,4 +189,165 @@ } return result; } + + protected Properties loadModelPropertiesFile(File propFile, ObjectModel model) { + Properties prop = new RecursiveProperties(); + try { + FileInputStream inStream = new FileInputStream(propFile); + try { + prop.load(inStream); + } finally { + inStream.close(); + } + } catch (IOException eee) { + if (log.isWarnEnabled()) { + log.warn("Impossible de lire le fichier de propriete " + + propFile, eee); + } + } + // on ajoute les proprietes du fichier associe au model + for (Enumeration<Object> e = prop.keys(); e.hasMoreElements();) { + String key = (String) e.nextElement(); + String value = prop.getProperty(key); + + if (key.startsWith(MODEL)) { + + // model tag value + + Matcher matcher = modelTagValuePattern.matcher(key); + + if (!matcher.find()) { + if (log.isWarnEnabled()) { + log.warn("Invalid model tag value [" + key + "] : only tagvalue or tagValue is allowed on model in properties"); + } + continue; + } + String tag = matcher.group(2); +// if (!key.startsWith("model.tagvalue.") || +// !key.startsWith("model.tagValue.")) { +// if (log.isWarnEnabled()) { +// log.warn("Invalid tag value [" + key + "] : only tagvalue or tagValue is allowed on model in properties"); +// } +// continue; +// } +// String tag = key.substring("model.tagvalue.".length()); + + ObjectModelImpl modelImpl = (ObjectModelImpl) model; + if (tag.equals(JavaGeneratorUtil.TAG_VERSION)) { + + // push directly the version in the model version + // property + modelImpl.setVersion(value); + } + modelImpl.addTagValue(tag, value); + continue; + } + + // element tag value + Matcher matcher = propertiesPattern.matcher(key); + + if (log.isDebugEnabled()) { + log.debug("Propriete: '" + key + "'"); + } + + if (!matcher.find()) { + if (log.isWarnEnabled()) { + log.warn("Invalid tag value [" + key + "] : syntax is not correct."); + } + continue; + } + + String fqn = matcher.group(1); + fqn = StringUtil.substring(fqn, 0, -1); // remove ended + // . + // target is class, attribute or operation + String target = matcher.group(2); + String targetName = matcher.group(3); + // type is stereotype or tagvalue + String type = matcher.group(4); + String tag = matcher.group(5); + + if (log.isDebugEnabled()) { + log.debug("Propriete: '" + key + "' => " + + "fqn:" + fqn + " target:" + target + + " targetName:" + targetName + + " type:" + type + " tag:" + tag); + } + + ObjectModelClassifier omc = model.getClassifier(fqn); + if (omc == null) { + if (log.isWarnEnabled()) { + log.warn("Invalid tag value [" + key + + "] : Could not find classifier for " + fqn); + } + continue; + } + + //todo tchemit 2010-11-25 : what does it mean ? every thing extends ObjectModelClassifierImpl + if (!(omc instanceof ObjectModelClassifierImpl)) { + // TODO il faudra avoir des methodes d'acces en Set sur l'interface pour eviter ce message + if (log.isWarnEnabled()) { + log.warn("Can't add properties to model, " + + "it's not an " + + "ObjectModelClassifierImpl : " + + omc.getQualifiedName()); + } + continue; + } + + List<ObjectModelElement> elems = new ArrayList<ObjectModelElement>(); + if (CLASS.equals(target)) { + elems.add(omc); + } else if (ATTRIBUTE.equals(target)) { + + ObjectModelAttribute attr = + getAttribute((ObjectModelClass) omc, targetName); + elems.add(attr); + + } else if (OPERATION.equals(target)) { + elems.addAll(omc.getOperations(targetName)); + } + + if (elems.isEmpty()) { + if (log.isWarnEnabled()) { + log.warn("Invalid tag value [" + key + "] : Could not find any element '" + targetName + "' of type '" + target + "' on classifier '" + fqn + "'."); + } + } + for (Object elem1 : elems) { + if (elem1 == null) { + if (log.isWarnEnabled()) { + log.warn("Invalid tag value [" + key + "] : Element '" + targetName + "' of type '" + target + "' on classifier '" + fqn + "' is null."); + } + continue; + } + ObjectModelElementImpl elem = + (ObjectModelElementImpl) elem1; + if (STEREOTYPE.equals(type)) { + // pour les stereotypes + ObjectModelImplRef stereotype = new ObjectModelImplRef(); + stereotype.setName(value); + elem.addStereotype(stereotype); + continue; + } + + if (TAGVALUE.equals(type)) { + // pour les tagvalues + ObjectModelImplTagValue tagvalue = + new ObjectModelImplTagValue(); + tagvalue.setName(tag); + tagvalue.setValue(value); + if (log.isDebugEnabled()) { + log.debug("tagValue:" + tagvalue + + ", tag:" + tag + + ", value:" + value + + ", element:" + elem); + } + elem.addTagValue(tagvalue); + + } + } + } + + return prop; + } }
participants (1)
-
tchemit@users.nuiton.org