r339 - in wikengo_core-wikitty: wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty wikengo_core-wikitty-jdbc-impl/src/main/java/org/sharengo/wikitty/jdbc wikengo_core-wikitty-jdbc-impl/src/test/resources
Author: kmorin Date: 2009-12-10 18:14:14 +0100 (Thu, 10 Dec 2009) New Revision: 339 Modified: wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/AbstractWikittyService.java wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/WikittyExtension.java wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/WikittyUtil.java wikengo_core-wikitty/wikengo_core-wikitty-jdbc-impl/src/main/java/org/sharengo/wikitty/jdbc/WikittyExtensionStorageJDBC.java wikengo_core-wikitty/wikengo_core-wikitty-jdbc-impl/src/main/java/org/sharengo/wikitty/jdbc/WikittyJDBCUtil.java wikengo_core-wikitty/wikengo_core-wikitty-jdbc-impl/src/test/resources/jdbc.properties Log: - add tag value to the wikittyExtension Modified: wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/AbstractWikittyService.java =================================================================== --- wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/AbstractWikittyService.java 2009-12-08 07:46:00 UTC (rev 338) +++ wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/AbstractWikittyService.java 2009-12-10 17:14:14 UTC (rev 339) @@ -509,6 +509,7 @@ String extName = xpp.getAttributeValue(null, "name"); String version = xpp.getAttributeValue(null, "version"); String requires = xpp.getAttributeValue(null, "requires"); + String tagValue = xpp.getAttributeValue(null, "tagValue"); ext = new WikittyExtension(extName, version, requires, new LinkedHashMap<String, FieldType>()); } else if ("object".equals(name)) { String id = xpp.getAttributeValue(null, "id"); Modified: wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/WikittyExtension.java =================================================================== --- wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/WikittyExtension.java 2009-12-08 07:46:00 UTC (rev 338) +++ wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/WikittyExtension.java 2009-12-10 17:14:14 UTC (rev 339) @@ -19,10 +19,7 @@ import java.io.Serializable; -import java.util.ArrayList; -import java.util.Collection; -import java.util.LinkedHashMap; -import java.util.List; +import java.util.*; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -50,6 +47,10 @@ * name of other extension needed to put this extension to object */ protected String requires; + /** + * tag value for this extension + */ + Map<String, String> tagValues = new HashMap<String, String>(); /** * use to know version objet, when you change field number, type or other @@ -70,7 +71,7 @@ } this.name = name; } - + public WikittyExtension(String name, String version, String requires, LinkedHashMap<String, FieldType> fields) { if (name == null) { @@ -127,7 +128,15 @@ public String getRequires() { return requires; } - + + public Map<String,String> getTagValues() { + return tagValues; + } + + public String getTagValue(String tag) { + return tagValues.get(tag); + } + public FieldType getFieldType(String fieldName) { return fields.get(fieldName); } @@ -141,6 +150,10 @@ fields.put(fieldName, type); } + public void addTagValue(String tag, String value) { + tagValues.put(tag, value); + } + @Override public int hashCode() { return getId().hashCode(); Modified: wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/WikittyUtil.java =================================================================== --- wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/WikittyUtil.java 2009-12-08 07:46:00 UTC (rev 338) +++ wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/WikittyUtil.java 2009-12-10 17:14:14 UTC (rev 339) @@ -93,9 +93,15 @@ * <li> group 8: all tag/value (toto=titi tutu=tata;lala) no space allowed in tag or value */ static protected Pattern fieldPattern = Pattern.compile( - "\\s*(\\w+)\\s+(\\w+)(?:\\s*\\[(\\d+)-(?:(\\d+)|([\\*n]))\\])?(?:\\s+(unique))?(?:\\s+(not null))?((?:\\s+\\w+=(\\w|;)+)*)"); + "\\s*(\\w+)\\s+(\\w+)(?:\\s*\\[(\\d+)-(?:(\\d+)|([\\*n]))\\])?(?:\\s+(unique))?(?:\\s+(not null))?((?:\\s+\\w+=(\\S)+)*)"); /** + * Extension tagValue pattern parser + * group: all tag/value (toto=titi tutu=tata;lala) no space allowed in tag or value + */ + static protected Pattern extTagValuePattern = Pattern.compile("((?:\\w+=(\\S)+(\\s+|$))*)"); + + /** * parse FieldType definition and return field name. All field information * are stored in fieldType object passed in argument * @param def string field definition @@ -150,6 +156,49 @@ } /** + * parse tag value definition and add each one to the extension. All tag values + * are stored in WikittyExtension object passed in argument + * @param def string field definition + * @param extension the WikittyExtension to add the tag values + * @return field name parsed in definition + */ + static public void parseExtensionTagValue(String def, WikittyExtension extension) { + log.debug(def); + if(def != null) { + Matcher match = extTagValuePattern.matcher(def); + if (match.matches()) { + log.debug("matches !"); + String tagValues = match.group(1); + if (tagValues != null) { + String[] tagValuesTab = tagValues.trim().split("\\s"); + for (String tagValue : tagValuesTab) { + String[] tagValueTab = tagValue.trim().split("="); + if (tagValueTab.length != 2) { + log.warn(String.format( + "Illegal tag/value declaration '%s' in '%s'", + tagValue, def)); + } else { + String tag = tagValueTab[0]; + String value = tagValueTab[1]; + extension.addTagValue(tag, value.replace(FieldType.WORD_SEPARATOR, " ")); + } + } + } + } else { + throw new WikittyException(String.format("Bad FieldType definition '%s'", def)); + } + } + } + + static public String convertTagValuesToString(WikittyExtension extension) { + StringBuffer result = new StringBuffer(); + for(Map.Entry entry : extension.getTagValues().entrySet()) { + result.append(entry.getKey()).append("=").append(entry.getValue()).append(" "); + } + return result.toString().trim(); + } + + /** * Create map from string representation * * ex: "String name", "Wikitty children[0-*]" Modified: wikengo_core-wikitty/wikengo_core-wikitty-jdbc-impl/src/main/java/org/sharengo/wikitty/jdbc/WikittyExtensionStorageJDBC.java =================================================================== --- wikengo_core-wikitty/wikengo_core-wikitty-jdbc-impl/src/main/java/org/sharengo/wikitty/jdbc/WikittyExtensionStorageJDBC.java 2009-12-08 07:46:00 UTC (rev 338) +++ wikengo_core-wikitty/wikengo_core-wikitty-jdbc-impl/src/main/java/org/sharengo/wikitty/jdbc/WikittyExtensionStorageJDBC.java 2009-12-10 17:14:14 UTC (rev 339) @@ -163,9 +163,11 @@ //if the data is not already recorded if (!versionResultSet.first()) { + String tagValues = WikittyUtil.convertTagValuesToString(ext); batch.append(String.format(conf.getProperty(adminInsertQ), ext.getId(), ext.getName(), ext.getVersion(), - ext.getRequires() != null ? "'" + ext.getRequires() + "'" : "null")); + ext.getRequires() != null ? "'" + ext.getRequires() + "'" : "null", + !tagValues.isEmpty() ? "'" + tagValues + "'" : "null")); for (int i = 0 ; i < ext.getFieldNames().size() ; i++) { FieldType type = ext.getFieldType(ext.getFieldNames().get(i)); batch.append(String.format(conf.getProperty(dataInsertQ), @@ -353,6 +355,7 @@ String extName = adminResultSet.getString(COL_NAME); String extVersion = adminResultSet.getString(COL_VERSION); String extRequires = adminResultSet.getString(COL_REQUIRES); + String extTagValue = adminResultSet.getString(COL_TAG_VALUES); LinkedHashMap<String, FieldType> fieldTypes = new LinkedHashMap<String, FieldType>(); //get the data with the id "id" in the data table ResultSet dataResultSet = statement.executeQuery( @@ -367,6 +370,7 @@ } result = new WikittyExtension(extName, extVersion, extRequires, fieldTypes); + WikittyUtil.parseExtensionTagValue(extTagValue, result); extensionCache.put(id, result); } Modified: wikengo_core-wikitty/wikengo_core-wikitty-jdbc-impl/src/main/java/org/sharengo/wikitty/jdbc/WikittyJDBCUtil.java =================================================================== --- wikengo_core-wikitty/wikengo_core-wikitty-jdbc-impl/src/main/java/org/sharengo/wikitty/jdbc/WikittyJDBCUtil.java 2009-12-08 07:46:00 UTC (rev 338) +++ wikengo_core-wikitty/wikengo_core-wikitty-jdbc-impl/src/main/java/org/sharengo/wikitty/jdbc/WikittyJDBCUtil.java 2009-12-10 17:14:14 UTC (rev 339) @@ -51,6 +51,10 @@ */ static final public String COL_REQUIRES = "requires"; /** + * requires column in the extension_admin table + */ + static final public String COL_TAG_VALUES = "tagValues"; + /** * version column in the admin tables */ static final public String COL_VERSION = "version"; Modified: wikengo_core-wikitty/wikengo_core-wikitty-jdbc-impl/src/test/resources/jdbc.properties =================================================================== --- wikengo_core-wikitty/wikengo_core-wikitty-jdbc-impl/src/test/resources/jdbc.properties 2009-12-08 07:46:00 UTC (rev 338) +++ wikengo_core-wikitty/wikengo_core-wikitty-jdbc-impl/src/test/resources/jdbc.properties 2009-12-10 17:14:14 UTC (rev 339) @@ -8,7 +8,9 @@ jdbc.queries.creation.extension.admin=CREATE TABLE IF NOT EXISTS extension_admin (\ id text NOT NULL,\ name text NOT NULL,\ -version varchar(8) NOT NULL);\ +version varchar(8) NOT NULL,\ +requires text,\ +tagValues text);\ ALTER TABLE extension_admin ADD PRIMARY KEY (id); #table extension_data creation query @@ -65,7 +67,7 @@ (id, fieldName, %s) VALUES ('%s', '%s.%s', %s); #extension insertion in the admin table query jdbc.queries.insert.extension.admin=INSERT INTO extension_admin\ -(id, name, version) VALUES ('%s', '%s', '%s'); +(id, name, version, requires, tagValues) VALUES ('%s', '%s', '%s', %s, %s); #extension insertion in the data table query jdbc.queries.insert.extension.data=INSERT INTO extension_data\ (id, fieldName, fieldType) VALUES ('%s', '%s', '%s'); \ No newline at end of file
participants (1)
-
kmorin@users.nuiton.org