Author: bleny Date: 2010-09-30 10:38:02 +0200 (Thu, 30 Sep 2010) New Revision: 371 Url: http://nuiton.org/repositories/revision/wikitty/371 Log: add missing operations in Wikitty API for meta-extension Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/Wikitty.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyCopyOnWrite.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyImpl.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyAbstractGenerator.java trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyHelperGenerator.java Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/Wikitty.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/Wikitty.java 2010-09-30 08:18:10 UTC (rev 370) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/Wikitty.java 2010-09-30 08:38:02 UTC (rev 371) @@ -37,6 +37,15 @@ void addExtension(List<WikittyExtension> exts); /** + * check that the wikitty has a metaExtension about a given extension + * @param metaExtension the metaExtension to be checked + * @param extension an extension already added to the wikitty + * @since 2.2.0 + */ + boolean hasMetaExtension(String metaExtensionName, + String extensionName); + + /** * add a meta-extension about the given extension to this wikitty * @param metaExtension the metaExtension to add * @param extension an extension already added to the wikitty @@ -164,11 +173,19 @@ void setVersion(String version); /** + * get the field modified after wikitty was restored + * @return a set of fully qualified field names + * @since 2.2.0 + */ + Set<String> getDirty(); + + /** * Server only used * @param version */ void clearDirty(); + /** * Server only used * @param fieldName fqn (ex: extensionName.fieldName) Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyCopyOnWrite.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyCopyOnWrite.java 2010-09-30 08:18:10 UTC (rev 370) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyCopyOnWrite.java 2010-09-30 08:38:02 UTC (rev 371) @@ -265,11 +265,26 @@ target.setVersion(version); } + /** + * @see org.nuiton.wikitty.Wikitty#getDirty() + */ + public Set<String> getDirty() { + return target.getDirty(); + } + + /** + * @see org.nuiton.wikitty.Wikitty#clearDirty() + */ public void clearDirty() { + substituteTargetWithCopy(); target.clearDirty(); } + /** + * @see org.nuiton.wikitty.Wikitty#setFqField(String, Object) + */ public void setFqField(String fieldName, Object value) { + substituteTargetWithCopy(); target.setFqField(fieldName, value); } @@ -278,6 +293,15 @@ } /** + * @see org.nuiton.wikitty.Wikitty#hasMetaExtension(String, String) + */ + @Override + public boolean hasMetaExtension(String metaExtensionName, + String extensionName) { + return target.hasMetaExtension(metaExtensionName, extensionName); + } + + /** * @see org.nuiton.wikitty.Wikitty#addMetaExtension(WikittyExtension, WikittyExtension) */ @Override Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyImpl.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyImpl.java 2010-09-30 08:18:10 UTC (rev 370) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyImpl.java 2010-09-30 08:38:02 UTC (rev 371) @@ -208,6 +208,19 @@ } extensions.put(ext.name, ext); } + + /** + * @see org.nuiton.wikitty.Wikitty#hasMetaExtension(String, String) + */ + @Override + public boolean hasMetaExtension(String metaExtensionName, + String extensionName) { + String metaExtensionFQName = WikittyUtil.getFQMetaExtensionName( + metaExtensionName, + extensionName); + boolean hasMetaExtension = extensions.containsKey(metaExtensionFQName); + return hasMetaExtension; + } /** * @see org.nuiton.wikitty.Wikitty#addMetaExtension(WikittyExtension, WikittyExtension) @@ -222,15 +235,14 @@ * @see org.nuiton.wikitty.Wikitty#addMetaExtension(WikittyExtension, String) */ @Override - public void addMetaExtension(WikittyExtension metaExtension, String extensionFqn) { - if (hasExtension(extensionFqn)) { - extensions.put( String.format("%s:%s", - extensionFqn, - metaExtension.getName()), - metaExtension); - // add field + public void addMetaExtension(WikittyExtension metaExtension, String extensionName) { + if (hasExtension(extensionName)) { + String metaExtensionFQName = WikittyUtil.getFQMetaExtensionName( + metaExtension.getName(), + extensionName); + extensions.put(metaExtensionFQName, metaExtension); } else { - throw new IllegalArgumentException("this wikitty doesn't have an extension named " + extensionFqn); + throw new IllegalArgumentException("this wikitty doesn't have an extension named " + extensionName); } } @@ -780,6 +792,13 @@ this.version = version; } + /** + * @see org.nuiton.wikitty.Wikitty#getDirty() + */ + public Set<String> getDirty() { + return fieldDirty; + } + /* * @see org.nuiton.wikitty.Wikitty#clearDirty() */ Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java 2010-09-30 08:18:10 UTC (rev 370) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java 2010-09-30 08:38:02 UTC (rev 371) @@ -73,6 +73,11 @@ static final protected FastDateFormat solrDateFormat = FastDateFormat.getInstance( DATE_FORMAT, CANONICAL_TZ, CANONICAL_LOCALE); + protected static final String FQ_FIELD_NAME_SEPARATOR = "."; + protected static final String FQ_FIELD_NAME_SEPARATOR_REGEX = "\\."; + protected static final String FQ_META_EXTENSION_SEPARATOR = ":"; + protected static final String FQ_META_EXTENSION_SEPARATOR_REGEX = ":"; + // /** All date format parser used to convert string to date */ // static final protected DateFormat[] parserDateFormats = new DateFormat[] { @@ -796,4 +801,54 @@ * current = leastSignificant; } return enc.encode(b); */ } + + /** given a fully qualified field name, return the name of the extension */ + public static String getExtensionNameFromFQFieldName(String fqFieldName) { + String[] fqFieldElements = fqFieldName.split(FQ_FIELD_NAME_SEPARATOR_REGEX); + return fqFieldElements[0]; + } + + /** given a fully qualified field name, return the name of the field */ + public static String getFieldNameFromFQFieldName(String fqFieldName) { + String[] fqFieldElements = fqFieldName.split(FQ_FIELD_NAME_SEPARATOR_REGEX); + return fqFieldElements[1]; + } + + /** given names of extension and field, return a fully qualified field name */ + public static String getFQFieldName(String extensionName, String fieldName) { + String fqFieldName = extensionName + FQ_FIELD_NAME_SEPARATOR_REGEX + fieldName; + return fqFieldName; + } + + /** given a fully qualified meta-extension name, return the name of the meta-extension */ + public static String getMetaExtensionNameFromFQMetaExtensionName(String fqFieldName) { + String[] fqElements = fqFieldName.split(FQ_META_EXTENSION_SEPARATOR_REGEX); + return fqElements[0]; + } + + /** given a fully qualified meta-extension name, return the name of the extension */ + public static String getExtensionNameFromFQMetaExtensionName(String fqFieldName) { + String[] fqElements = fqFieldName.split(FQ_META_EXTENSION_SEPARATOR_REGEX); + return fqElements[1]; + } + + /** given names of meta-extension and extension, return a fully qualified meta-extension name */ + public static String getFQMetaExtensionName(String metaExtensionName, String extensionName) { + String fqFieldName = metaExtensionName + FQ_META_EXTENSION_SEPARATOR + extensionName; + return fqFieldName; + } + + /** + * Get the FQN of a metaExtension field. The FQN may depend of an extension + * getMetaFieldName(metaExt, ext, field) returns "ext:metaExt.field" + * getMetaFieldName(metaExt, null, field) returns "metaExt.field" + */ + public static String getMetaFieldName(String metaExtensionName, String extensionName, String fieldName) { + String actualExtensionName = metaExtensionName; + if (extensionName == null) { + actualExtensionName = getFQMetaExtensionName(metaExtensionName, extensionName); + } + String metaFieldName = getFQFieldName(actualExtensionName, fieldName); + return metaFieldName; + } } 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 2010-09-30 08:18:10 UTC (rev 370) +++ trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyAbstractGenerator.java 2010-09-30 08:38:02 UTC (rev 371) @@ -591,7 +591,6 @@ String fieldName = <%=helperClassName%>.getMetaFieldName(extensionForMetaExtension, "<%=attributeName%>"); getPropertyChangeSupport().firePropertyChange(fieldName, oldValue, <%=getter.getName()%>()); } - return oldValue; }*/); } } 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 2010-09-30 08:18:10 UTC (rev 370) +++ trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyHelperGenerator.java 2010-09-30 08:38:02 UTC (rev 371) @@ -231,6 +231,7 @@ String abstractName = WikittyTransformerUtil.businessEntityToAbstractName(metaExtension); String contractName = WikittyTransformerUtil.businessEntityToContractName(metaExtension); + String extensionVariableName = WikittyTransformerUtil.classToExtensionVariableName(metaExtension, true); ObjectModelOperation addMetaExtension = addOperation(helper, "addMetaExtension", "void", ObjectModelModifier.STATIC); @@ -253,7 +254,7 @@ metaExtension.getName())); setOperationBody(hasMetaExtension, "" /*{ - wikitty.hasMetaExtension(<%=abstractName%>.extension<%=contractName%>, extension); + wikitty.hasMetaExtension(<%=extensionVariableName%>, extension.getName()); }*/);