Wikitty-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- 1653 discussions
r1446 - trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query
by bpoussin@users.nuiton.org 07 Mar '12
by bpoussin@users.nuiton.org 07 Mar '12
07 Mar '12
Author: bpoussin
Date: 2012-03-07 19:42:05 +0100 (Wed, 07 Mar 2012)
New Revision: 1446
Url: http://nuiton.org/repositories/revision/wikitty/1446
Log:
synchronisation de la map d'alias pour eviter les problemes de parsing
Modified:
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryParser.java
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryParser.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryParser.java 2012-03-07 18:17:46 UTC (rev 1445)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryParser.java 2012-03-07 18:42:05 UTC (rev 1446)
@@ -24,6 +24,7 @@
*/
package org.nuiton.wikitty.query;
+import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
@@ -71,7 +72,9 @@
/**
* Cette classe permet d'interpreter une requete faite textuellement en la
- * convertisant en sa representation objet.
+ * convertisant en sa representation objet. Si l'objet est instancier pour
+ * utiliser les fonctionnalites d'alias, il est possible de l'utiliser dans
+ * plusieurs thread concurent. La map d'alias est protegee.
*
* Pour plus d'information reportez-vous à la
* <a href="http://maven-site.nuiton.org/wikitty/user/query.html">documentation</a>
@@ -154,20 +157,45 @@
return true;
}
+ /**
+ * Retourne une vue non modifiable des alias disponibles.
+ * @return
+ */
public Map<String, String> getAlias() {
- return alias;
+ return Collections.unmodifiableMap(alias);
}
+ /**
+ * Modifie l'ensemble des alias, la map passee en parametre est copiee en
+ * interne.
+ * @param alias la map des alias qui sera copiee
+ * @return le WikittyQueryParser lui meme (this)
+ */
public WikittyQueryParser setAlias(Map<String, String> alias) {
- this.alias = alias;
+ // on passe par la creation d'une nouvelle map, pour eviter que l'utilisateur
+ // ne puisse modifier les alias depuis l'exterieur et eviter le plus
+ // possible les synchronize
+ this.alias = new LinkedHashMap<String, String>();
+ if (alias != null) {
+ this.alias.putAll(alias);
+ }
return this;
}
public WikittyQueryParser addAlias(String aliasName, String aliasValue) {
- alias.put(aliasName, aliasValue);
+ synchronized(alias) {
+ alias.put(aliasName, aliasValue);
+ }
return this;
}
+ public WikittyQueryParser clearAlias() {
+ // on passe par la creation d'une nouvelle map, pour eviter le plus
+ // possible les synchronize
+ this.alias = new LinkedHashMap<String, String>();
+ return this;
+ }
+
/**
* Parse query and use alias added with {@link #addAlias} or {@link #setAlias}
*
@@ -200,9 +228,16 @@
static public WikittyQuery parse(String queryString, Map<String, String> alias) {
if (alias != null) {
String queryStringInit = queryString;
- // first replace alias in queryString
- for (Map.Entry<String, String> a : alias.entrySet()) {
- queryString = queryString.replaceAll(a.getKey(), a.getValue());
+ // on synchronise l'utilisation de la map, pour etre sur qu'il n'y
+ // ait pas d'ajout/modif durant son utilisation pour le remplacement
+ // on fait direcement les remplacements de la requete car, c'est
+ // le seul endroit ou l'alias est utilise, et c'est aussi rapide
+ // que de faire une copie de la map
+ synchronized(alias) {
+ // first replace alias in queryString
+ for (Map.Entry<String, String> a : alias.entrySet()) {
+ queryString = queryString.replaceAll(a.getKey(), a.getValue());
+ }
}
if (log.isDebugEnabled()) {
log.debug(String.format("QueryString \n'%s' become after alias \n'%s'\naliases are %s",
1
0
r1445 - in trunk: wikitty-api/src/main/java/org/nuiton/wikitty/query wikitty-api/src/main/java/org/nuiton/wikitty/services wikitty-api/src/main/java/org/nuiton/wikitty/storage wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr
by bpoussin@users.nuiton.org 07 Mar '12
by bpoussin@users.nuiton.org 07 Mar '12
07 Mar '12
Author: bpoussin
Date: 2012-03-07 19:17:46 +0100 (Wed, 07 Mar 2012)
New Revision: 1445
Url: http://nuiton.org/repositories/revision/wikitty/1445
Log:
rename WikittyQuery.first in WikittyQuery.offset this name is better and used in many database and other framework
Modified:
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQuery.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryVisitorCopy.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceStorage.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/storage/WikittySearchEngineHelper.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/storage/WikittySearchEngineInMemory.java
trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolr.java
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQuery.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQuery.java 2012-03-06 19:00:56 UTC (rev 1444)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQuery.java 2012-03-07 18:17:46 UTC (rev 1445)
@@ -68,7 +68,7 @@
protected Condition condition;
/** First index to get result. */
- protected int first = 0;
+ protected int offset = 0;
/** Number of result to retrieve. 100 by default. */
protected int limit = 100;
@@ -133,7 +133,7 @@
} else if (ObjectUtils.equals(this.getClass(), o.getClass())) {
WikittyQuery other = (WikittyQuery)o;
result = ObjectUtils.equals(this.getName(), other.getName()) &&
- ObjectUtils.equals(this.getFirst(), other.getFirst()) &&
+ ObjectUtils.equals(this.getOffset(), other.getOffset()) &&
ObjectUtils.equals(this.getLimit(), other.getLimit()) &&
ObjectUtils.equals(this.isFacetExtension(), other.isFacetExtension()) &&
ObjectUtils.equals(this.getFacetField(), other.getFacetField()) &&
@@ -192,12 +192,40 @@
return this;
}
+ /**
+ * Indique le premier element retourne par la requete. Si la requete peut
+ * retourner 100 reponses, et qu'on fixe l'offset a 25 alors il n'y aura
+ * au maximume que 75 reponses retournees.
+ * @return
+ */
+ public int getOffset() {
+ return offset;
+ }
+
+ /**
+ * Indique le premier element retourne par la requete. Si la requete peut
+ * retourner 100 reponses, et qu'on fixe l'offset a 25 alors il n'y aura
+ * au maximume que 75 reponses retournees.
+ * @return
+ */
+ public void setOffset(int offset) {
+ this.offset = offset;
+ }
+
+ /**
+ * @deprecated since 3.5 use {@link #getOffset()}
+ */
+ @Deprecated
public int getFirst() {
- return first;
+ return offset;
}
+ /**
+ * @deprecated since 3.5 use {@link #setOffset(int)}
+ */
+ @Deprecated
public WikittyQuery setFirst(int first) {
- this.first = first;
+ this.offset = first;
return this;
}
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryVisitorCopy.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryVisitorCopy.java 2012-03-06 19:00:56 UTC (rev 1444)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryVisitorCopy.java 2012-03-07 18:17:46 UTC (rev 1445)
@@ -93,7 +93,7 @@
q.setFacetField(new ArrayList<Element>(o.getFacetField()));
q.setFacetLimit(o.getFacetLimit());
q.setFacetMinCount(o.getFacetMinCount());
- q.setFirst(o.getFirst());
+ q.setOffset(o.getOffset());
q.setLimit(o.getLimit());
q.setFacetSort(o.getFacetSort());
q.setName(o.getName());
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceStorage.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceStorage.java 2012-03-06 19:00:56 UTC (rev 1444)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceStorage.java 2012-03-07 18:17:46 UTC (rev 1445)
@@ -789,7 +789,7 @@
if (!idSet.contains(wikittyNodeId)) {
Wikitty treeNode = restore(
securityToken, wikittyNodeId);
- WikittyTreeNodeHelper.setParent(treeNode, null);
+ WikittyTreeNodeHelper.setParent(treeNode, (String)null);
storedWikitties.add(treeNode);
}
}
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/storage/WikittySearchEngineHelper.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/storage/WikittySearchEngineHelper.java 2012-03-06 19:00:56 UTC (rev 1444)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/storage/WikittySearchEngineHelper.java 2012-03-07 18:17:46 UTC (rev 1445)
@@ -120,7 +120,7 @@
List<FacetTopic> topics = resultSelect.getFacets().get(select.getElement().getValue());
List<String> selectList = new ArrayList<String>(topics.size());
- if (query.getFirst() < topics.size()) {
+ if (query.getOffset() < topics.size()) {
// il faut que le premier demande soit inferieur a la taille,
// sinon on ne fait rien
for (FacetTopic topic : topics) {
@@ -137,10 +137,10 @@
}
// on ne garde que ce qui est demande
- if (query.getFirst() < topics.size()) {
- int first = query.getFirst();
- int last = Math.min(topics.size(), query.getFirst() + query.getLimit());
- selectList = selectList.subList(first, last);
+ if (query.getOffset() < topics.size()) {
+ int offset = query.getOffset();
+ int last = Math.min(topics.size(), query.getOffset() + query.getLimit());
+ selectList = selectList.subList(offset, last);
}
// gestion des agregats
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/storage/WikittySearchEngineInMemory.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/storage/WikittySearchEngineInMemory.java 2012-03-06 19:00:56 UTC (rev 1444)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/storage/WikittySearchEngineInMemory.java 2012-03-07 18:17:46 UTC (rev 1445)
@@ -322,7 +322,7 @@
result = WikittySearchEngineHelper.findAllByQueryWithSelect(
this, transaction, query);
} else {
- int first = query.getFirst();
+ int offset = query.getOffset();
int limit = query.getLimit();
List<String> ids = new LinkedList<String>();
FacetPredicate facets = new FacetPredicate(this, transaction, query);
@@ -344,7 +344,7 @@
if (!w.isDeleted()) {
if (checkRestriction(this, transaction, c, w)) {
totalResult++;
- if (totalResult > first && ids.size() < limit) {
+ if (totalResult > offset && ids.size() < limit) {
// ajout en tant que resultat
ids.add(id);
}
@@ -354,7 +354,7 @@
}
result = new WikittyQueryResult<String>(query.getName(),
- first, totalResult, query.getCondition().toString(), facets.getFacets(), ids);
+ offset, totalResult, query.getCondition().toString(), facets.getFacets(), ids);
}
return result;
}
Modified: trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolr.java
===================================================================
--- trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolr.java 2012-03-06 19:00:56 UTC (rev 1444)
+++ trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolr.java 2012-03-07 18:17:46 UTC (rev 1445)
@@ -671,15 +671,15 @@
SolrQuery querySolr = new SolrQuery(SOLR_QUERY_PARSER + queryString);
// Add paged
- int first = query.getFirst();
+ int offset = query.getOffset();
int limit = query.getLimit();
if (limit == Integer.MAX_VALUE) {
// WARNING It is necessary to substract 'start' otherwise,
// there is a capacity overlow in solR
- limit = Integer.MAX_VALUE - first;
+ limit = Integer.MAX_VALUE - offset;
}
- querySolr.setStart(first);
+ querySolr.setStart(offset);
querySolr.setRows(limit);
// Add sorting
@@ -794,7 +794,7 @@
// Build paged result
result = new WikittyQueryResult<String>(
query.getName(),
- first, numFound, queryString, facets, ids);
+ offset, numFound, queryString, facets, ids);
}
return result;
1
0
r1444 - in trunk: wikitty-api/src/main/java/org/nuiton/wikitty wikitty-api/src/main/java/org/nuiton/wikitty/entities wikitty-generators/src/main/java/org/nuiton/wikitty/generator
by bpoussin@users.nuiton.org 06 Mar '12
by bpoussin@users.nuiton.org 06 Mar '12
06 Mar '12
Author: bpoussin
Date: 2012-03-06 20:00:56 +0100 (Tue, 06 Mar 2012)
New Revision: 1444
Url: http://nuiton.org/repositories/revision/wikitty/1444
Log:
Evolution #1988: Wikitty pre-loading field
Modification des generateurs pour avoir des methodes supplementaires
pour acceder au preload facilement.
Ajout en plus de methode 'set' pour pouvoir directement faire des
set(Entity) au lieu de set(Entity.getWikittyId());
Modified:
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/Wikitty.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyCopyOnWrite.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyImpl.java
trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyAbstractGenerator.java
trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyContractGenerator.java
trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyDTOGenerator.java
trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyHelperGenerator.java
trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyTransformerUtil.java
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java 2012-03-06 11:08:27 UTC (rev 1443)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java 2012-03-06 19:00:56 UTC (rev 1444)
@@ -56,6 +56,7 @@
import java.util.Enumeration;
import java.util.HashMap;
import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
@@ -789,7 +790,7 @@
* Create new Business Entity with specified Wikitty
* @param target Business Entity class
* @param w wikitty to used
- * @return
+ * @return new instance of object wanted or null if w is null
*/
static public <E extends BusinessEntity> E newInstance(Class<E> target, Wikitty w) {
E result = null;
@@ -807,10 +808,13 @@
*
* @param source business entity source
* @param target business entity class wanted
- * @return new instance of object wanted
+ * @return new instance of object wanted or null if source is null
*/
public <E extends BusinessEntity> E newInstance(Class<E> target, BusinessEntityImpl source) {
- E result = newInstance(target, source.getWikitty());
+ E result = null;
+ if (source != null) {
+ result = newInstance(target, source.getWikitty());
+ }
return result;
}
@@ -819,21 +823,45 @@
* Create new Business Entity List from wikitties
* @param target Business Entity class
* @param wikitties list of wikitties
- * @return new list of Business Entity
+ * @return new list of Business Entity or null if wikitties is null
*/
static public <E extends BusinessEntity> List<E> newInstance(Class<E> target, List<Wikitty> wikitties) {
- List<E> result = new ArrayList<E>(wikitties.size());
- for (Wikitty w : wikitties) {
- if (w == null) {
- result.add(null);
- } else {
- result.add(newInstance(target, w));
+ List<E> result = null;
+ if (wikitties != null) {
+ result = new ArrayList<E>(wikitties.size());
+ for (Wikitty w : wikitties) {
+ if (w == null) {
+ result.add(null);
+ } else {
+ result.add(newInstance(target, w));
+ }
}
}
return result;
}
+ /**
+ * Create new Business Entity Set from wikitties
+ * @param target Business Entity class
+ * @param wikitties set of wikitties
+ * @return new set of Business Entity or null if wikitties is null
+ */
+ static public <E extends BusinessEntity> Set<E> newInstance(Class<E> target, Set<Wikitty> wikitties) {
+ Set<E> result = null;
+ if (wikitties != null) {
+ result = new LinkedHashSet<E>(wikitties.size());
+ for (Wikitty w : wikitties) {
+ if (w == null) {
+ result.add(null);
+ } else {
+ result.add(newInstance(target, w));
+ }
+ }
+ }
+ return result;
+ }
+
/**
* Create new instance of BusinessEntity from Wikitty object passed in argument.
* If argument is Interface try to add 'Impl' to find instanciable class.
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/Wikitty.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/Wikitty.java 2012-03-06 11:08:27 UTC (rev 1443)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/Wikitty.java 2012-03-06 19:00:56 UTC (rev 1444)
@@ -262,7 +262,17 @@
*/
FieldType getFieldType(String fqfieldName);
+
/**
+ * Return field type for the given fieldName.
+ *
+ * @param extName extension name
+ * @param fieldName field name
+ * @return field type
+ */
+ FieldType getFieldType(String extName, String fieldName);
+
+ /**
* Set field value.
*
* @param ext extension
@@ -329,9 +339,10 @@
* @param clazz
* @return unmodifiable list
*/
- <E> List<E> getFieldAsList(String ext, String fieldName,
- final Class<E> clazz);
+ <E> List<E> getFieldAsList(String ext, String fieldName, final Class<E> clazz);
+ List<Wikitty> getFieldAsWikittyList(String ext, String fieldName, boolean exceptionIfNotLoaded);
+
/**
*
* @param <E>
@@ -340,6 +351,8 @@
*/
<E> Set<E> getFieldAsSet(String ext, String fieldName, final Class<E> clazz);
+ Set<Wikitty> getFieldAsWikittySet(String ext, String fieldName, boolean exceptionIfNotLoaded);
+
void addToField(String ext, String fieldName, Object value);
void removeFromField(String ext, String fieldName, Object value);
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyCopyOnWrite.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyCopyOnWrite.java 2012-03-06 11:08:27 UTC (rev 1443)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyCopyOnWrite.java 2012-03-06 19:00:56 UTC (rev 1444)
@@ -27,19 +27,14 @@
import java.beans.PropertyChangeListener;
import java.math.BigDecimal;
import java.util.Collection;
-import java.util.Collections;
import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.commons.lang3.ObjectUtils;
-
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.nuiton.wikitty.WikittyException;
-import org.nuiton.wikitty.generator.WikittyTagValue;
/** this class wrap a wikitty in a proxy that copy the wikitty before applying any change
*
@@ -293,6 +288,11 @@
}
@Override
+ public FieldType getFieldType(String extName, String fieldName) {
+ return target.getFieldType(extName, fieldName);
+ }
+
+ @Override
public void setField(String ext, String fieldName, Object value) {
substituteTargetWithCopy();
target.setField(ext, fieldName, value);
@@ -365,11 +365,23 @@
}
@Override
+ public List<Wikitty> getFieldAsWikittyList(String ext, String fieldName,
+ boolean exceptionIfNotLoaded) {
+ return target.getFieldAsWikittyList(ext, fieldName, exceptionIfNotLoaded);
+ }
+
+ @Override
public <E> Set<E> getFieldAsSet(String ext, String fieldName, Class<E> clazz) {
return target.getFieldAsSet(ext, fieldName, clazz);
}
@Override
+ public Set<Wikitty> getFieldAsWikittySet(String ext, String fieldName,
+ boolean exceptionIfNotLoaded) {
+ return target.getFieldAsWikittySet(ext, fieldName, exceptionIfNotLoaded);
+ }
+
+ @Override
public void addToField(String ext, String fieldName, Object value) {
substituteTargetWithCopy();
target.addToField(ext, fieldName, value);
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyImpl.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyImpl.java 2012-03-06 11:08:27 UTC (rev 1443)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyImpl.java 2012-03-06 19:00:56 UTC (rev 1444)
@@ -534,31 +534,30 @@
*/
@Override
public FieldType getFieldType(String fqfieldName) {
- try {
- String[] field = fqfieldName.split("\\.");
- WikittyExtension ext = getExtension(field[0]);
- if (ext == null) {
+ String extName = WikittyExtension.extractExtensionName(fqfieldName);
+ String fieldName = WikittyExtension.extractFieldName(fqfieldName);
+ FieldType result = getFieldType(extName, fieldName);
+ return result;
+ }
+
+ @Override
+ public FieldType getFieldType(String extName, String fieldName) {
+ WikittyExtension ext = getExtension(extName);
+ if (ext == null) {
+ throw new WikittyException(String.format(
+ "Extension '%s' doesn't exists on wikitty '%s'", extName, id));
+ } else {
+ int crochet = fieldName.indexOf("[");
+ if (crochet != -1) {
+ fieldName = fieldName.substring(0, crochet);
+ }
+ FieldType result = ext.getFieldType(fieldName);
+ if (result == null) {
throw new WikittyException(String.format(
- "Extension '%s' doesn't exists on wikitty '%s'", field[0], id));
- } else {
- String fieldName = field[1];
- int crochet = fieldName.indexOf("[");
- if (crochet != -1) {
- fieldName = fieldName.substring(0, crochet);
- }
- FieldType result = ext.getFieldType(fieldName);
- if (result == null) {
- throw new WikittyException(String.format(
- "field '%s' doesn't exists on extension '%s'", fieldName, field[0]));
+ "field '%s' doesn't exists on extension '%s'", fieldName, extName));
- }
- return result;
}
- } catch (Exception eee) {
- throw new WikittyException(
- String.format("Field %s is not a fully qualified field name", fqfieldName),
- eee
- );
+ return result;
}
}
@@ -818,6 +817,31 @@
}
}
+ @Override
+ public List<Wikitty> getFieldAsWikittyList(
+ String ext, String fieldName, boolean exceptionIfNotLoaded) {
+
+ List<Wikitty> result = null;
+
+ Collection<String> collection = getFieldAsList(ext, fieldName, String.class);
+ if (collection != null) {
+ result = new ArrayList<Wikitty>(collection.size());
+ for (String s : collection) {
+ Wikitty w = getPreloaded().get(s);
+ if (exceptionIfNotLoaded && w == null) {
+ throw new WikittyException(
+ String.format("Wikitty for field %s.%s is not preloaded (%s)",
+ ext, fieldName, s));
+ }
+ result.add(w);
+ }
+
+ // return unmodiable collection
+ result = Collections.unmodifiableList(result);
+ }
+ return result;
+ }
+
/*
* @see org.nuiton.wikitty.Wikitty#getFieldAsSet(java.lang.String, java.lang.String, java.lang.Class)
*/
@@ -837,6 +861,31 @@
}
}
+ @Override
+ public Set<Wikitty> getFieldAsWikittySet(
+ String ext, String fieldName, boolean exceptionIfNotLoaded) {
+
+ Set<Wikitty> result = null;
+
+ Collection<String> collection = getFieldAsSet(ext, fieldName, String.class);
+ if (collection != null) {
+ result = new LinkedHashSet<Wikitty>();
+ for (String s : collection) {
+ Wikitty w = getPreloaded().get(s);
+ if (exceptionIfNotLoaded && w == null) {
+ throw new WikittyException(
+ String.format("Wikitty for field %s.%s is not preloaded (%s)",
+ ext, fieldName, s));
+ }
+ result.add(w);
+ }
+
+ // return unmodiable collection
+ result = Collections.unmodifiableSet(result);
+ }
+ return result;
+ }
+
/*
* @see org.nuiton.wikitty.Wikitty#addToField(java.lang.String, java.lang.String, java.lang.Object)
*/
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 2012-03-06 11:08:27 UTC (rev 1443)
+++ trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyAbstractGenerator.java 2012-03-06 19:00:56 UTC (rev 1444)
@@ -370,6 +370,7 @@
// needed below, in templates
String fieldVariableName = WikittyTransformerUtil.attributeToFielVariableName(attribute, true);
String attributeType = WikittyTransformerUtil.generateResultType(attribute, false);
+ String attributeObjectType = WikittyTransformerUtil.generateResultObjectType(attribute, false);
// getter can have a different name than attribute.getName()
// but attribute.getName() must styll be used to access to helper getter method
@@ -389,6 +390,12 @@
"Collection<" + attributeType + ">";
String attributeTypeVarargs = attributeType + "...";
+ String attributeObjectTypeCollectionStrict =
+ WikittyTransformerUtil.generateResultObjectType(attribute, true);
+ String attributeObjectTypeCollectionGeneric =
+ "Collection<" + attributeObjectType + ">";
+ String attributeObjectTypeVarargs = attributeObjectType + "...";
+
String getFieldMethodName = WikittyTransformerUtil.generateGetFieldAsCall(attribute);
// now, for this attribute, we will generate add, remove and clear methods
@@ -462,6 +469,74 @@
}*/;
setOperationBody(clear, clearBody);
+ //
+ // Pour avoir acces en mode Objet entity
+ //
+ if (attributeObjectType != null) {
+ // C'est un BusinessEntity on ajoute les getter et setter specifique
+
+ getterName = "get" + capitalizedGetterSetterName;
+ ObjectModelOperation getterObject = addOperation(
+ abstractClass, getterName, attributeObjectTypeCollectionStrict);
+ addParameter(getterObject, "boolean", "exceptionIfNotLoaded");
+ addAnnotation(abstractClass, getterObject, "Override");
+ String getterObjectBody = ""
+/*{
+<%=attributeObjectTypeCollectionStrict%> result = <%=helperClassName%>.get<%=capitalizedAttributeName%>(getWikitty(), exceptionIfNotLoaded);
+return result;
+}*/;
+ setOperationBody(getterObject, getterObjectBody);
+
+ String setterObjectName = "set" + capitalizedGetterSetterName + "Entity";
+ ObjectModelOperation setterObject = addOperation(abstractClass, setterObjectName, "void");
+ addAnnotation(abstractClass, setterObject, "Override");
+ addParameter(setterObject, attributeObjectTypeCollectionGeneric, getterSetterName);
+ String setterObjectBody = ""
+/*{
+<%=attributeObjectTypeCollectionStrict%> oldValue = get<%=capitalizedAttributeName%>(false);
+<%=helperClassName%>.set<%=capitalizedHelperGetterSetterName%>Entity(getWikitty(), <%=attributeName%>);
+getPropertyChangeSupport().firePropertyChange(<%=fieldVariableName%>, oldValue, <%= getter.getName() %>());
+}*/;
+ setOperationBody(setterObject, setterObjectBody);
+
+ String addAllNameObject = "addAll" + capitalizedGetterSetterName + "Entity";
+ ObjectModelOperation addAllObject = addOperation(abstractClass, addAllNameObject, "void");
+ addAnnotation(abstractClass, addAllObject, "Override");
+ addParameter(addAllObject, attributeObjectTypeCollectionGeneric, attributeName);
+ String addAllObjectBody = ""
+/*{
+<%=attributeObjectTypeCollectionStrict%> oldValue = get<%=capitalizedAttributeName%>(false);
+<%=helperClassName%>.addAll<%=capitalizedHelperGetterSetterName%>Entity(getWikitty(), <%=attributeName%>);
+getPropertyChangeSupport().firePropertyChange(<%=fieldVariableName%>, oldValue, <%= getterObject.getName() %>());
+}*/;
+ setOperationBody(addAllObject, addAllObjectBody);
+
+ String addNameObject = "add" + capitalizedGetterSetterName;
+ ObjectModelOperation adderObject = addOperation(abstractClass, addNameObject, "void");
+ addAnnotation(abstractClass, adderObject, "Override");
+ addParameter(adderObject, attributeObjectTypeVarargs, "element");
+ String adderObjectBody = ""
+/*{
+<%=attributeObjectTypeCollectionStrict%> oldValue = get<%=capitalizedAttributeName%>(false);
+<%=helperClassName%>.add<%=capitalizedHelperGetterSetterName%>(getWikitty(), element);
+getPropertyChangeSupport().firePropertyChange(<%=fieldVariableName%>, oldValue, <%= getterObject.getName() %>());
+}*/;
+ setOperationBody(adderObject, adderObjectBody);
+
+ String removeNameObject = "remove" + capitalizedGetterSetterName;
+ ObjectModelOperation removerObject = addOperation(abstractClass, removeNameObject, "void");
+ addAnnotation(abstractClass, removerObject, "Override");
+ addParameter(removerObject, attributeObjectTypeVarargs, "element");
+ String removerObjectBody = ""
+/*{
+<%=attributeObjectTypeCollectionStrict%> oldValue = get<%=capitalizedAttributeName%>(false);
+<%=helperClassName%>.remove<%=capitalizedHelperGetterSetterName%>(getWikitty(), element);
+getPropertyChangeSupport().firePropertyChange(<%=fieldVariableName%>, oldValue, <%=getterObject.getName()%>());
+}*/;
+ setOperationBody(removerObject, removerObjectBody);
+
+ }
+
} else {
String getFieldMethodName = WikittyTransformerUtil.generateGetFieldAsCall(attribute);
@@ -485,6 +560,33 @@
<%=helperClassName%>.set<%=capitalizedHelperGetterSetterName%>(getWikitty(), <%=attributeName%>);
getPropertyChangeSupport().firePropertyChange(<%=fieldVariableName%>, oldValue, <%=getter.getName()%>());
}*/);
+
+ //
+ // Pour avoir acces en mode Objet entity
+ //
+ if (attributeObjectType != null) {
+ // adding getter and setter to contract
+ getterName = "get" + capitalizedGetterSetterName;
+ ObjectModelOperation getterObject = addOperation(abstractClass, getterName, attributeObjectType);
+ addParameter(getterObject, "boolean", "exceptionIfNotLoaded");
+ addAnnotation(abstractClass, getterObject, "Override");
+ setOperationBody(getterObject, ""
+/*{
+<%=attributeObjectType%> value = <%=helperClassName%>.get<%=capitalizedHelperGetterSetterName%>(getWikitty(), exceptionIfNotLoaded);
+return value;
+}*/);
+
+ String setterNameObject = "set" + capitalizedGetterSetterName;
+ ObjectModelOperation setterObject = addOperation(abstractClass, setterNameObject, "void");
+ addAnnotation(abstractClass, setterObject, "Override");
+ addParameter(setterObject, attributeObjectType, attributeName);
+ setOperationBody(setterObject, ""
+/*{
+<%=attributeObjectType%> oldValue = <%=getterName%>(false);
+<%=helperClassName%>.set<%=capitalizedHelperGetterSetterName%>(getWikitty(), <%=attributeName%>);
+getPropertyChangeSupport().firePropertyChange(<%=fieldVariableName%>, oldValue, <%=getterObject.getName()%>());
+}*/);
+ }
}
// save the getter name for this attribute
@@ -649,6 +751,7 @@
// needed below, in templates
String fieldVariableName = WikittyTransformerUtil.attributeToFielVariableName(attribute, true);
String attributeType = WikittyTransformerUtil.generateResultType(attribute, false);
+ String attributeObjectType = WikittyTransformerUtil.generateResultObjectType(attribute, false);
String attributeName = attribute.getName();
if (attribute.hasTagValue(TAG_ALTERNATIVE_NAME)) {
@@ -667,6 +770,12 @@
"Collection<" + attributeType + ">";
String attributeTypeVarargs = attributeType + "...";
+ String attributeObjectTypeCollectionStrict =
+ WikittyTransformerUtil.generateResultObjectType(attribute, true);
+ String attributeObjectTypeCollectionGeneric =
+ "Collection<" + attributeObjectType + ">";
+ String attributeObjectTypeVarargs = attributeObjectType + "...";
+
String getFieldMethodName = WikittyTransformerUtil.generateGetFieldAsCall(attribute);
String attributeNameCapitalized = StringUtils.capitalize(attributeName);
@@ -782,6 +891,111 @@
setOperationBody(clear, clearBody);
+ //
+ // Pour avoir acces en mode Objet entity
+ //
+ if (attributeObjectType != null) {
+ // C'est un BusinessEntity on ajoute les getter et setter specifique
+
+ getterName = "get" + attributeNameCapitalized;
+ ObjectModelOperation getterObject = addOperation(
+ abstractClassForThisMetaExtension, getterName,
+ attributeObjectTypeCollectionStrict);
+ addParameter(getterObject, "boolean", "exceptionIfNotLoaded");
+ addAnnotation(abstractClassForThisMetaExtension, getterObject, "Override");
+ String getterObjectBody = ""
+/*{
+ <%=attributeObjectTypeCollectionStrict%> result;
+ if (extensionForMetaExtension == null) {
+ result = <%=helperClassName%>.<%=getterName%>(getWikitty(), exceptionIfNotLoaded);
+ } else {
+ result = <%=helperClassName%>.<%=getterName%>(extensionForMetaExtension.getName(), getWikitty(), exceptionIfNotLoaded);
+ }
+ return result;
+}*/;
+ setOperationBody(getterObject, getterObjectBody);
+
+ String setterNameObject = "set" + attributeNameCapitalized + "Entity";
+ ObjectModelOperation setterObject = addOperation(
+ abstractClassForThisMetaExtension, setterNameObject, "void");
+ addAnnotation(abstractClassForThisMetaExtension, setterObject, "Override");
+ addParameter(setterObject, attributeObjectTypeCollectionGeneric, "values");
+ String setterBodyObject = ""
+/*{
+ String fieldName;
+ <%=attributeObjectTypeCollectionStrict%> oldValue = <%=getterObject.getName()%>(false);
+ if (extensionForMetaExtension == null) {
+ <%=helperClassName%>.<%=setterNameObject%>(getWikitty(), values);
+ fieldName = <%=fieldVariableName%>;
+ } else {
+ <%=helperClassName%>.<%=setterNameObject%>(extensionForMetaExtension.getName(), getWikitty(), values);
+ fieldName = <%=helperClassName%>.getMetaFieldName(extensionForMetaExtension, "<%=attributeName%>");
+ }
+ getPropertyChangeSupport().firePropertyChange(fieldName, oldValue, <%=getter.getName()%>());
+}*/;
+ setOperationBody(setterObject, setterBodyObject);
+
+ String addAllNameObject = "addAll" + attributeNameCapitalized + "Entity";
+ ObjectModelOperation addAllObject = addOperation(
+ abstractClassForThisMetaExtension, addAllNameObject, "void");
+ addAnnotation(abstractClassForThisMetaExtension, addAllObject, "Override");
+ addParameter(addAllObject, attributeObjectTypeCollectionGeneric, "values");
+ String addAllBodyObject = ""
+/*{
+ String fieldName;
+ <%=attributeObjectTypeCollectionStrict%> oldValue = <%=getterObject.getName()%>(false);
+ if (extensionForMetaExtension == null) {
+ <%=helperClassName%>.<%=addAllNameObject%>(getWikitty(), values);
+ fieldName = <%=fieldVariableName%>;
+ } else {
+ <%=helperClassName%>.<%=addAllNameObject%>(extensionForMetaExtension.getName(), getWikitty(), values);
+ fieldName = <%=helperClassName%>.getMetaFieldName(extensionForMetaExtension, "<%=attributeName%>");
+ }
+ getPropertyChangeSupport().firePropertyChange(fieldName, oldValue, <%=getterObject.getName()%>(false));
+}*/;
+ setOperationBody(addAllObject, addAllBodyObject);
+
+ String addNameObject = "add" + attributeNameCapitalized;
+ ObjectModelOperation adderObject = addOperation(
+ abstractClassForThisMetaExtension, addNameObject, "void");
+ addAnnotation(abstractClassForThisMetaExtension, adderObject, "Override");
+ addParameter(adderObject, attributeObjectTypeVarargs, "element");
+ String adderBodyObject = ""
+/*{
+ String fieldName;
+ <%=attributeObjectTypeCollectionStrict%> oldValue = <%=getterObject.getName()%>(false);
+ if (extensionForMetaExtension == null) {
+ <%=helperClassName%>.<%=addNameObject%>(getWikitty(), element);
+ fieldName = <%=fieldVariableName%>;
+ } else {
+ <%=helperClassName%>.<%=addNameObject%>(extensionForMetaExtension.getName(), getWikitty(), element);
+ fieldName = <%=helperClassName%>.getMetaFieldName(extensionForMetaExtension, "<%=attributeName%>");
+ }
+ getPropertyChangeSupport().firePropertyChange(fieldName, oldValue, <%=getterObject.getName()%>(false));
+}*/;
+ setOperationBody(adderObject, adderBodyObject);
+
+ String removeNameObject = "remove" + attributeNameCapitalized;
+ ObjectModelOperation removerObject = addOperation(
+ abstractClassForThisMetaExtension, removeNameObject, "void");
+ addAnnotation(abstractClassForThisMetaExtension, removerObject, "Override");
+ addParameter(removerObject, attributeObjectTypeVarargs, "element");
+ String removerBodyObject = ""
+/*{
+ String fieldName;
+ <%=attributeObjectTypeCollectionStrict%> oldValue = <%=getterObject.getName()%>(false);
+ if (extensionForMetaExtension == null) {
+ <%=helperClassName%>.<%=removeNameObject%>(getWikitty(), element);
+ fieldName = <%=fieldVariableName%>;
+ } else {
+ <%=helperClassName%>.<%=removeNameObject%>(extensionForMetaExtension.getName(), getWikitty(), element);
+ fieldName = <%=helperClassName%>.getMetaFieldName(extensionForMetaExtension, "<%=attributeName%>");
+ }
+ getPropertyChangeSupport().firePropertyChange(fieldName, oldValue, <%=getterObject.getName()%>(false));
+}*/;
+ setOperationBody(removerObject, removerBodyObject);
+
+ }
} else {
String getFieldMethodName = WikittyTransformerUtil.generateGetFieldAsCall(attribute);
@@ -818,6 +1032,49 @@
getPropertyChangeSupport().firePropertyChange(fieldName, oldValue, <%=getter.getName()%>());
}
}*/);
+ //
+ // Pour avoir acces en mode Objet entity
+ //
+ if (attributeObjectType != null) {
+ // C'est un BusinessEntity on ajoute les getter et setter specifique
+
+ getterName = "get" + StringUtils.capitalize(attributeName);
+ ObjectModelOperation getterObject = addOperation(
+ abstractClassForThisMetaExtension, getterName, attributeObjectType);
+ addParameter(getterObject, "boolean", "exceptionIfNotLoaded");
+ addAnnotation(abstractClassForThisMetaExtension, getterObject, "Override");
+ setOperationBody(getterObject, ""
+/*{
+ <%=attributeObjectType%> value;
+ if (extensionForMetaExtension == null) {
+ value = <%=helperClassName%>.<%=getterName%>(getWikitty(), exceptionIfNotLoaded);
+ } else {
+ value = <%=helperClassName%>.<%=getterName%>(extensionForMetaExtension.getName(), getWikitty(), exceptionIfNotLoaded);
+ }
+ return value;
+}*/);
+
+ String setterNameObject = "set" + StringUtils.capitalize(attributeName);
+ ObjectModelOperation setterObject = addOperation(
+ abstractClassForThisMetaExtension, setterNameObject, "void");
+ addAnnotation(abstractClassForThisMetaExtension, setterObject, "Override");
+ addParameter(setterObject, attributeObjectType, attributeName);
+ setOperationBody(setterObject, ""
+/*{
+ <%=attributeObjectType%> oldValue;
+ if (extensionForMetaExtension == null) {
+ oldValue = <%=getterName%>(false);
+ <%=helperClassName%>.<%=setterNameObject%>(getWikitty(), <%=attributeName%>);
+ getPropertyChangeSupport().firePropertyChange(<%=fieldVariableName%>, oldValue, <%=getterObject.getName()%>(false));
+ } else {
+ oldValue = <%=getterName%>(false);
+ <%=helperClassName%>.<%=setterNameObject%>(extensionForMetaExtension.getName(), getWikitty(), <%=attributeName%>);
+ String fieldName = <%=helperClassName%>.getMetaFieldName(extensionForMetaExtension, "<%=attributeName%>");
+ getPropertyChangeSupport().firePropertyChange(fieldName, oldValue, <%=getterObject.getName()%>(false));
+ }
+}*/);
+ }
+
}
}
}
Modified: trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyContractGenerator.java
===================================================================
--- trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyContractGenerator.java 2012-03-06 11:08:27 UTC (rev 1443)
+++ trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyContractGenerator.java 2012-03-06 19:00:56 UTC (rev 1444)
@@ -273,6 +273,8 @@
*/
protected void addOperationWithName(ObjectModelInterface contract, ObjectModelAttribute attribute, String getterSetterName) {
String attributeType = WikittyTransformerUtil.generateResultType(attribute, false);
+ String attributeObjectType = WikittyTransformerUtil.generateResultObjectType(attribute, false);
+
if (attribute.getMaxMultiplicity() > 1 || attribute.getMaxMultiplicity() == -1) {
// attributed is a collection, we will generate operations get, add, remove and clear
@@ -280,6 +282,12 @@
String attributeTypeCollectionGeneric = "Collection<" + attributeType + ">";
String attributeTypeVarargs = attributeType + "...";
+ String attributeObjectTypeCollectionStrict =
+ WikittyTransformerUtil.generateResultObjectType(attribute, true);
+ String attributeObjectTypeCollectionGeneric =
+ "Collection<" + attributeObjectType + ">";
+ String attributeObjectTypeVarargs = attributeObjectType + "...";
+
// now, for this attribute, we will generate add, remove and clear methods
// adding operations to contract
String getterName = "get" + StringUtils.capitalize(getterSetterName);
@@ -305,6 +313,33 @@
String clearName = "clear" + StringUtils.capitalize(getterSetterName);
addOperation(contract, clearName, "void");
+ //
+ // Pour avoir acces en mode Objet entity
+ //
+ if (attributeObjectType != null) {
+ // C'est un BusinessEntity on ajoute les getter et setter specifique
+
+ String getterNameObject = "get" + StringUtils.capitalize(getterSetterName);
+ ObjectModelOperation getterObject = addOperation(contract, getterNameObject, attributeObjectTypeCollectionStrict);
+ addParameter(getterObject, "boolean", "exceptionIfNotLoaded");
+ setDocumentation(getterObject, attribute.getDocumentation());
+
+ String setterNameObject = "set" + StringUtils.capitalize(getterSetterName) + "Entity";
+ ObjectModelOperation setterObject = addOperation(contract, setterNameObject, "void");
+ addParameter(setterObject, attributeObjectTypeCollectionGeneric, getterSetterName);
+
+ String addAllNameObject = "addAll" + StringUtils.capitalize(getterSetterName) + "Entity";
+ ObjectModelOperation addAllObject = addOperation(contract, addAllNameObject, "void");
+ addParameter(addAllObject, attributeObjectTypeCollectionGeneric, getterSetterName);
+
+ String addNameObject = "add" + StringUtils.capitalize(getterSetterName);
+ ObjectModelOperation adderObject = addOperation(contract, addNameObject, "void");
+ addParameter(adderObject, attributeObjectTypeVarargs, "element");
+
+ String removeNameObject = "remove" + StringUtils.capitalize(getterSetterName);
+ ObjectModelOperation removerObject = addOperation(contract, removeNameObject, "void");
+ addParameter(removerObject, attributeObjectTypeVarargs, "element");
+ }
} else {
// attribute is not a collection, we generate a getter and a setter
String getterName = "get" + StringUtils.capitalize(getterSetterName);
@@ -314,6 +349,22 @@
String setterName = "set" + StringUtils.capitalize(getterSetterName);
ObjectModelOperation setter = addOperation(contract, setterName, "void");
addParameter(setter, attributeType, getterSetterName);
+
+ //
+ // Pour avoir acces en mode Objet entity
+ //
+ if (attributeObjectType != null) {
+ // C'est un BusinessEntity on ajoute les getter et setter specifique
+
+ String getterNameObject = "get" + StringUtils.capitalize(getterSetterName);
+ ObjectModelOperation getterObject = addOperation(contract, getterNameObject, attributeObjectType);
+ addParameter(getterObject, "boolean", "exceptionIfNotLoaded");
+ setDocumentation(getterObject, attribute.getDocumentation());
+
+ String setterNameObject = "set" + StringUtils.capitalize(getterSetterName);
+ ObjectModelOperation setterObject = addOperation(contract, setterNameObject, "void");
+ addParameter(setterObject, attributeObjectType, getterSetterName);
+ }
}
}
Modified: trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyDTOGenerator.java
===================================================================
--- trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyDTOGenerator.java 2012-03-06 11:08:27 UTC (rev 1443)
+++ trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyDTOGenerator.java 2012-03-06 19:00:56 UTC (rev 1444)
@@ -174,6 +174,7 @@
if (attribute.isNavigable()) {
// needed below, in templates
String attributeType = WikittyTransformerUtil.generateResultType(attribute, false);
+ String attributeObjectType = WikittyTransformerUtil.generateResultObjectType(attribute, false);
String attributeName = attribute.getName();
//add necessary import
@@ -196,7 +197,12 @@
String attributeTypeCollectionGeneric =
"Collection<" + attributeType + ">";
String attributeTypeVarargs = attributeType + "...";
-
+
+ String attributeObjectTypeCollectionStrict =
+ WikittyTransformerUtil.generateResultObjectType(attribute, true);
+ String attributeObjectTypeCollectionGeneric =
+ "Collection<" + attributeObjectType + ">";
+ String attributeObjectTypeVarargs = attributeObjectType + "...";
String attributeTypeCollectionStrictImpl = null;
String collectionType = WikittyTransformerUtil.getCollectionTypeName(attribute);
@@ -309,6 +315,93 @@
}*/;
setOperationBody(clear, clearBody);
+ //
+ // Pour avoir acces en mode Objet entity
+ //
+ if (attributeObjectType != null) {
+ // C'est un BusinessEntity on ajoute les getter et setter specifique
+
+ getterName = "get" + StringUtils.capitalize(attributeName);
+ ObjectModelOperation getterObject = addOperation(
+ abstractClass, getterName, attributeObjectTypeCollectionStrict);
+ addParameter(getterObject, "boolean", "exceptionIfNotLoaded");
+ addAnnotation(abstractClass, getterObject, "Override");
+ String getterObjectBody = ""
+/*{
+ if (exceptionIfNotLoaded) {
+ throw new WikittyException("Preload is not implemented in DTO");
+ } else {
+ return null;
+ }
+}*/;
+ setOperationBody(getterObject, getterObjectBody);
+
+ // adding the setter
+ getterName = "set" + StringUtils.capitalize(attributeName);
+ ObjectModelOperation setterObject = addOperation(
+ abstractClass, getterName + "Entity", "void");
+ addAnnotation(abstractClass, setterObject, "Override");
+ addParameter(setterObject, attributeObjectTypeCollectionGeneric, attributeName);
+ String setterObjectBody = ""
+/*{
+ <%=attributeTypeCollectionStrictImpl%> tmp = new <%=attributeTypeCollectionStrictImpl%>();
+ for (<%=attributeObjectType%> e : <%=attributeName%>) {
+ tmp.add(e.getWikittyId());
+ }
+ <%=getterName%>(tmp);
+}*/;
+ setOperationBody(setterObject, setterObjectBody);
+
+ // adding the addAll
+ String addAllNameObject = "addAll" + StringUtils.capitalize(attributeName);
+ ObjectModelOperation addAllObject = addOperation(
+ abstractClass, addAllNameObject + "Entity", "void");
+ addAnnotation(abstractClass, addAllObject, "Override");
+ addParameter(addAllObject, attributeObjectTypeCollectionGeneric, attributeName);
+ String addAllObjectBody = ""
+/*{
+ <%=attributeTypeCollectionStrictImpl%> tmp = new <%=attributeTypeCollectionStrictImpl%>();
+ for (<%=attributeObjectType%> e : <%=attributeName%>) {
+ tmp.add(e.getWikittyId());
+ }
+ <%=addAllNameObject%>(tmp);
+}*/;
+ setOperationBody(addAllObject, addAllObjectBody);
+
+ //adding the add method
+ String addNameObject = "add" + StringUtils.capitalize(attributeName);
+ ObjectModelOperation adderObject = addOperation(
+ abstractClass, addNameObject, "void");
+ addAnnotation(abstractClass, adderObject, "Override");
+ addParameter(adderObject, attributeObjectTypeVarargs, "element");
+ String adderObjectBody = ""
+/*{
+ String[] tmp = new String[element.length];
+ for (int i=0; i<element.length; i++) {
+ tmp[i] = element[i].getWikittyId();
+ }
+ <%=addNameObject%>(tmp);
+}*/;
+ setOperationBody(adderObject, adderObjectBody);
+
+ //adding the remove method
+ String removeNameObject = "remove" + StringUtils.capitalize(attributeName);
+ ObjectModelOperation removerObject = addOperation(
+ abstractClass, removeNameObject, "void");
+ addAnnotation(abstractClass, removerObject, "Override");
+ addParameter(removerObject, attributeObjectTypeVarargs, "element");
+ String removerObjectBody = ""
+/*{
+ String[] tmp = new String[element.length];
+ for (int i=0; i<element.length; i++) {
+ tmp[i] = element[i].getWikittyId();
+ }
+ <%=removeNameObject%>(tmp);
+}*/;
+ setOperationBody(removerObject, removerObjectBody);
+
+ }
+
} else {
//No multiplicity
@@ -340,6 +433,39 @@
this.<%=attributeName%>=<%=attributeName%>;
modificationCount++;
}*/);
+
+ //
+ // Pour avoir acces en mode Objet entity
+ //
+ if (attributeObjectType != null) {
+ // C'est un BusinessEntity on ajoute les getter et setter specifique
+
+ getterName = "get" + StringUtils.capitalize(attributeName);
+ ObjectModelOperation getterObject = addOperation(
+ abstractClass, getterName, attributeObjectType);
+ addParameter(getterObject, "boolean", "exceptionIfNotLoaded");
+ addAnnotation(abstractClass, getterObject, "Override");
+ setOperationBody(getterObject, ""
+/*{
+ if (exceptionIfNotLoaded) {
+ throw new WikittyException("Preload is not implemented in DTO");
+ } else {
+ return null;
+ }
+}*/);
+
+ //adding setter
+ String setterNameObject = "set" + StringUtils.capitalize(attributeName);
+ ObjectModelOperation setterObject = addOperation(
+ abstractClass, setterNameObject, "void");
+ addAnnotation(abstractClass, setterObject, "Override");
+ addParameter(setterObject, attributeObjectType, attributeName);
+ setOperationBody(setterObject, ""
+/*{
+ <%=setterNameObject%>(<%=attributeName%>.getWikittyId());
+}*/);
+
+ }
}
// save the getter name for this attribute
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 2012-03-06 11:08:27 UTC (rev 1443)
+++ trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyHelperGenerator.java 2012-03-06 19:00:56 UTC (rev 1444)
@@ -113,7 +113,8 @@
// needed below, in templates
String fieldVariableName = WikittyTransformerUtil.attributeToFielVariableName(attribute, true);
String attributeType = WikittyTransformerUtil.generateResultType(attribute, false);
-
+ String attributeObjectType = WikittyTransformerUtil.generateResultObjectType(attribute, false);
+
String attributeName = attribute.getName();
if (attribute.hasTagValue(TAG_ALTERNATIVE_NAME)) {
// there is a conflict, purifier transformer give as the right name to use
@@ -125,10 +126,16 @@
String attributeTypeCollectionStrict =
WikittyTransformerUtil.generateResultType(attribute, true);
- String attributeTypeCollectionGeneric =
+ String attributeTypeCollectionGeneric =
"Collection<" + attributeType + ">";
String attributeTypeVarargs = attributeType + "...";
+ String attributeObjectTypeCollectionStrict =
+ WikittyTransformerUtil.generateResultObjectType(attribute, true);
+ String attributeObjectTypeCollectionGeneric =
+ "Collection<" + attributeObjectType + ">";
+ String attributeObjectTypeVarargs = attributeObjectType + "...";
+
String getFieldMethodName =
WikittyTransformerUtil.generateGetFieldAsCall(attribute);
String attributeNameCapitalized =
@@ -136,6 +143,9 @@
// now, for this attribute, we will generate add, remove and clear methods
// adding operations to contract
+ //
+ // GETTER
+ //
String getterName = "get" + attributeNameCapitalized;
ObjectModelOperation getter = addOperation(
helper, getterName, attributeTypeCollectionStrict,
@@ -148,6 +158,9 @@
}*/;
setOperationBody(getter, getterBody);
+ //
+ // SETTER
+ //
String setterName = "set" + attributeNameCapitalized;
ObjectModelOperation setter = addOperation(
helper, setterName, "void", ObjectModelModifier.STATIC);
@@ -159,6 +172,9 @@
}*/;
setOperationBody(setter, setterBody);
+ //
+ // ADDALL
+ //
String addAllName = "addAll" + attributeNameCapitalized;
ObjectModelOperation addAll = addOperation(
helper, addAllName, "void", ObjectModelModifier.STATIC);
@@ -174,6 +190,9 @@
}*/;
setOperationBody(addAll, addAllBody);
+ //
+ // ADD
+ //
String addName = "add" + attributeNameCapitalized;
ObjectModelOperation adder = addOperation(helper, addName, "void", ObjectModelModifier.STATIC);
addParameter(adder, "Wikitty", "wikitty");
@@ -186,6 +205,9 @@
}*/;
setOperationBody(adder, adderBody);
+ //
+ // REMOVE
+ //
String removeName = "remove" + StringUtils.capitalize(attributeName);
ObjectModelOperation remover = addOperation(helper, removeName, "void", ObjectModelModifier.STATIC);
addParameter(remover, "Wikitty", "wikitty");
@@ -198,6 +220,9 @@
}*/;
setOperationBody(remover, removerBody);
+ //
+ // CLEAR
+ //
String clearName = "clear" + StringUtils.capitalize(attributeName);
ObjectModelOperation clear = addOperation(helper, clearName, "void", ObjectModelModifier.STATIC);
addParameter(clear, "Wikitty", "wikitty");
@@ -206,12 +231,101 @@
wikitty.clearField(<%=extensionVariableName%>, <%=fieldVariableName%>);
}*/;
setOperationBody(clear, clearBody);
-
-
+
+ //
+ // Pour avoir acces en mode Objet entity
+ //
+ if (attributeObjectType != null) {
+ // C'est un BusinessEntity on ajoute les getter et setter specifique
+ String collectionType = WikittyTransformerUtil.getCollectionTypeName(attribute);
+
+ //
+ // GETTER
+ //
+ String getterObjectName = "get" + attributeNameCapitalized;
+ ObjectModelOperation getterObject = addOperation(
+ helper, getterObjectName, attributeObjectTypeCollectionStrict,
+ ObjectModelModifier.STATIC);
+ addParameter(getterObject, "Wikitty", "wikitty");
+ addParameter(getterObject, "boolean", "exceptionIfNotLoaded");
+ String getterObjectBody = ""
+/*{
+ <%=attributeObjectTypeCollectionStrict%> result = WikittyUtil.newInstance(<%=attributeObjectType%>.class, wikitty.getFieldAsWikitty<%=collectionType%>(<%=extensionVariableName%>, <%=fieldVariableName%>, exceptionIfNotLoaded));
+ return result;
+}*/;
+ setOperationBody(getterObject, getterObjectBody);
+
+ //
+ // SETTER
+ //
+ String setterObjectName = "set" + attributeNameCapitalized + "Entity";
+ ObjectModelOperation setterObject = addOperation(
+ helper, setterObjectName, "void", ObjectModelModifier.STATIC);
+ addParameter(setterObject, WikittyTransformerUtil.WIKITTY_CLASS_FQN, "wikitty");
+ addParameter(setterObject, attributeObjectTypeCollectionGeneric, attributeName);
+ String setterObjectBody = ""
+/*{
+ wikitty.setField(<%=extensionVariableName%>, <%=fieldVariableName%>, <%=attributeName%>);
+}*/;
+ setOperationBody(setterObject, setterObjectBody);
+
+ //
+ // ADDALL
+ //
+ String addAllObjectName = "addAll" + attributeNameCapitalized + "Entity";
+ ObjectModelOperation addAllObject = addOperation(
+ helper, addAllObjectName, "void", ObjectModelModifier.STATIC);
+ addParameter(addAllObject, WikittyTransformerUtil.WIKITTY_CLASS_FQN, "wikitty");
+ addParameter(addAllObject, attributeObjectTypeCollectionGeneric, attributeName);
+ String addAllObjectBody = ""
+/*{
+ if(<%=attributeName%> != null){
+ for (<%=attributeObjectType%> v:<%=attributeName%>){
+ add<%=attributeNameCapitalized%>(wikitty, v);
+ }
+ }
+}*/;
+ setOperationBody(addAllObject, addAllObjectBody);
+
+ //
+ // ADD
+ //
+ String addNameObject = "add" + attributeNameCapitalized;
+ ObjectModelOperation adderObject = addOperation(helper, addNameObject, "void", ObjectModelModifier.STATIC);
+ addParameter(adderObject, "Wikitty", "wikitty");
+ addParameter(adderObject, attributeObjectTypeVarargs, "element");
+ String adderObjectBody = ""
+/*{
+ for (<%=attributeObjectType%> v : element) {
+ wikitty.addToField(<%=extensionVariableName%>, <%=fieldVariableName%>, v);
+ }
+}*/;
+ setOperationBody(adderObject, adderObjectBody);
+
+ //
+ // REMOVE
+ //
+ String removeNameObject = "remove" + StringUtils.capitalize(attributeName);
+ ObjectModelOperation removerObject = addOperation(helper, removeNameObject, "void", ObjectModelModifier.STATIC);
+ addParameter(removerObject, "Wikitty", "wikitty");
+ addParameter(removerObject, attributeObjectTypeVarargs, "element");
+ String removerObjectBody = ""
+/*{
+ for (<%=attributeObjectType%> v : element) {
+ wikitty.removeFromField(<%=extensionVariableName%>, <%=fieldVariableName%>, v);
+ }
+}*/;
+ setOperationBody(removerObject, removerObjectBody);
+
+ }
+
} else {
String getFieldMethodName = WikittyTransformerUtil.generateGetFieldAsCall(attribute);
// adding getter and setter to contract
+ //
+ // GETTER
+ //
String getterName = "get" + StringUtils.capitalize(attributeName);
ObjectModelOperation getter = addOperation(helper, getterName, attributeType, ObjectModelModifier.STATIC);
addParameter(getter, "Wikitty", "wikitty");
@@ -221,6 +335,9 @@
return value;
}*/);
+ //
+ // SETTER
+ //
String setterName = "set" + StringUtils.capitalize(attributeName);
ObjectModelOperation setter = addOperation(helper, setterName, attributeType, ObjectModelModifier.STATIC);
addParameter(setter, "Wikitty", "wikitty");
@@ -231,6 +348,42 @@
wikitty.setField(<%=extensionVariableName%>, <%=fieldVariableName%>, <%=attributeName%>);
return oldValue;
}*/);
+
+ //
+ // Pour avoir acces en mode Objet entity
+ //
+ if (attributeObjectType != null) {
+
+ //
+ // GETTER
+ //
+ String getterObjectName = "get" + StringUtils.capitalize(attributeName);
+ ObjectModelOperation getterObject = addOperation(helper,
+ getterObjectName, attributeObjectType, ObjectModelModifier.STATIC);
+ addParameter(getterObject, "Wikitty", "wikitty");
+ addParameter(getterObject, "boolean", "exceptionIfNotLoaded");
+ setOperationBody(getterObject, ""
+/*{
+ <%=attributeObjectType%> value = WikittyUtil.newInstance(<%=attributeObjectType%>.class, wikitty.getFieldAsWikitty(<%=extensionVariableName%>, <%=fieldVariableName%>, exceptionIfNotLoaded));
+ return value;
+}*/);
+
+ //
+ // SETTER
+ //
+ String setterObjectName = "set" + StringUtils.capitalize(attributeName);
+ ObjectModelOperation setterObject = addOperation(helper, setterObjectName, attributeObjectType, ObjectModelModifier.STATIC);
+ addParameter(setterObject, "Wikitty", "wikitty");
+ addParameter(setterObject, attributeObjectType, attributeName);
+ setOperationBody(setterObject, ""
+/*{
+ <%=attributeObjectType%> oldValue = <%=getter.getName()%>(wikitty, false);
+ wikitty.setField(<%=extensionVariableName%>, <%=fieldVariableName%>, <%=attributeName%>);
+ return oldValue;
+}*/);
+
+ }
+
}
}
}
@@ -390,7 +543,8 @@
// needed below, in templates
String fieldVariableName = WikittyTransformerUtil.attributeToFielVariableName(attribute, true);
String attributeType = WikittyTransformerUtil.generateResultType(attribute, false);
-
+ String attributeObjectType = WikittyTransformerUtil.generateResultObjectType(attribute, false);
+
String attributeName = attribute.getName();
if (attribute.hasTagValue(TAG_ALTERNATIVE_NAME)) {
// there is a conflict, purifier transformer give as the right name to use
@@ -406,6 +560,12 @@
"Collection<" + attributeType + ">";
String attributeTypeVarargs = attributeType + "...";
+ String attributeObjectTypeCollectionStrict =
+ WikittyTransformerUtil.generateResultObjectType(attribute, true);
+ String attributeObjectTypeCollectionGeneric =
+ "Collection<" + attributeObjectType + ">";
+ String attributeObjectTypeVarargs = attributeObjectType + "...";
+
String getFieldMethodName = WikittyTransformerUtil.generateGetFieldAsCall(attribute);
String capitalizedAttributeName = StringUtils.capitalize(attributeName);
@@ -447,7 +607,7 @@
String addAllBody = ""
/*{
if(<%=attributeName%> != null){
- for (String id:<%=attributeName%>){
+ for (<%=attributeType%> id:<%=attributeName%>){
add<%=capitalizedAttributeName%>(extensionName, wikitty, id);
}
}
@@ -482,7 +642,7 @@
}
}*/;
setOperationBody(remover, removerBody);
-
+
String clearName = "clear" + capitalizedAttributeName;
ObjectModelOperation clear = addOperation(helper, clearName, "void", ObjectModelModifier.STATIC);
addParameter(clear, "String", "extensionName");
@@ -493,7 +653,91 @@
wikitty.clearField(fieldName);
}*/;
setOperationBody(clear, clearBody);
-
+
+ //
+ // Pour avoir acces en mode Objet entity
+ //
+ if (attributeObjectType != null) {
+ // C'est un BusinessEntity on ajoute les getter et setter specifique
+ String collectionType = WikittyTransformerUtil.getCollectionTypeName(attribute);
+
+ String getterNameObject = "get" + capitalizedAttributeName;
+ ObjectModelOperation getterObject = addOperation(
+ helper, getterNameObject, attributeObjectTypeCollectionStrict,
+ ObjectModelModifier.STATIC);
+ addParameter(getterObject, "String", "extensionName");
+ addParameter(getterObject, WikittyTransformerUtil.WIKITTY_CLASS_FQN, "wikitty");
+ addParameter(getterObject, "boolean", "exceptionIfNotLoaded");
+ String getterObjectBody = ""
+/*{
+ String fqfieldName = getMetaFieldName(extensionName, "<%=attributeName%>");
+ String extName = WikittyExtension.extractExtensionName(fqfieldName);
+ String fieldName = WikittyExtension.extractFieldName(fqfieldName);
+ <%=attributeObjectTypeCollectionStrict%> result = WikittyUtil.newInstance(<%=attributeObjectType%>.class, wikitty.getFieldAsWikitty<%=collectionType%>(extName, fieldName, exceptionIfNotLoaded));
+ return result;
+}*/;
+ setOperationBody(getterObject, getterObjectBody);
+
+ String setterNameObject = "set" + capitalizedAttributeName + "Entity";
+ ObjectModelOperation setterObject = addOperation(
+ helper, setterNameObject, "void", ObjectModelModifier.STATIC);
+ addParameter(setterObject, "String", "extensionName");
+ addParameter(setterObject, WikittyTransformerUtil.WIKITTY_CLASS_FQN, "wikitty");
+ addParameter(setterObject, attributeObjectTypeCollectionGeneric, attributeName);
+ String setterObjectBody = ""
+/*{
+ clear<%=capitalizedAttributeName%>(extensionName, wikitty);
+ addAll<%=capitalizedAttributeName%>Entity(extensionName, wikitty, <%=attributeName%>);
+}*/;
+ setOperationBody(setterObject, setterObjectBody);
+
+ String addAllNameObject = "addAll" + capitalizedAttributeName + "Entity";
+ ObjectModelOperation addAllObject = addOperation(
+ helper, addAllNameObject, "void", ObjectModelModifier.STATIC);
+ addParameter(addAllObject, "String", "extensionName");
+ addParameter(addAllObject, WikittyTransformerUtil.WIKITTY_CLASS_FQN, "wikitty");
+ addParameter(addAllObject, attributeObjectTypeCollectionGeneric, attributeName);
+ String addAllObjectBody = ""
+/*{
+ if(<%=attributeName%> != null){
+ for (<%=attributeObjectType%> e:<%=attributeName%>){
+ add<%=capitalizedAttributeName%>(extensionName, wikitty, e);
+ }
+ }
+}*/;
+ setOperationBody(addAllObject, addAllObjectBody);
+
+ String addNameObject = "add" + capitalizedAttributeName;
+ ObjectModelOperation adderObject = addOperation(
+ helper, addNameObject, "void", ObjectModelModifier.STATIC);
+ addParameter(adderObject, "String", "extensionName");
+ addParameter(adderObject, WikittyTransformerUtil.WIKITTY_CLASS_FQN, "wikitty");
+ addParameter(adderObject, attributeObjectTypeVarargs, "element");
+ String adderObjectBody = ""
+/*{
+ for (<%=attributeObjectType%> v : element) {
+ String fieldName = getMetaFieldName(extensionName, "<%=attributeName%>");
+ wikitty.addToField(fieldName, v);
+ }
+}*/;
+ setOperationBody(adderObject, adderObjectBody);
+
+ String removeNameObject = "remove" + capitalizedAttributeName;
+ ObjectModelOperation removerObject = addOperation(
+ helper, removeNameObject, "void", ObjectModelModifier.STATIC);
+ addParameter(removerObject, "String", "extensionName");
+ addParameter(removerObject, WikittyTransformerUtil.WIKITTY_CLASS_FQN, "wikitty");
+ addParameter(removerObject, attributeObjectTypeVarargs, "element");
+ String removerObjectBody = ""
+/*{
+ for (<%=attributeObjectType%> v : element) {
+ String fieldName = getMetaFieldName(extensionName, "<%=attributeName%>");
+ wikitty.removeFromField(fieldName, v);
+ }
+}*/;
+ setOperationBody(removerObject, removerObjectBody);
+ }
+
} else {
String getFieldMethodName = WikittyTransformerUtil.generateGetFieldAsCall(attribute);
@@ -522,6 +766,41 @@
wikitty.setFqField(fieldName, <%=attributeName%>);
return oldValue;
}*/);
+ //
+ // Pour avoir acces en mode Objet entity
+ //
+ if (attributeObjectType != null) {
+ // C'est un BusinessEntity on ajoute les getter et setter specifique
+
+ String getterNameObject = "get" + StringUtils.capitalize(attributeName);
+ ObjectModelOperation getterObject = addOperation(
+ helper, getterNameObject, attributeObjectType, ObjectModelModifier.STATIC);
+ addParameter(getterObject, "String", "extensionName");
+ addParameter(getterObject, WikittyTransformerUtil.WIKITTY_CLASS_FQN, "wikitty");
+ addParameter(getterObject, "boolean", "exceptionIfNotLoaded");
+ setOperationBody(getterObject, ""
+/*{
+ String fqfieldName = getMetaFieldName(extensionName, "<%=attributeName%>");
+ String extName = WikittyExtension.extractExtensionName(fqfieldName);
+ String fieldName = WikittyExtension.extractFieldName(fqfieldName);
+ <%=attributeObjectType%> value = WikittyUtil.newInstance(<%=attributeObjectType%>.class, wikitty.getFieldAsWikitty(extName, fieldName, exceptionIfNotLoaded));
+ return value;
+}*/);
+
+ String setterNameObject = "set" + StringUtils.capitalize(attributeName);
+ ObjectModelOperation setterObject = addOperation(
+ helper, setterNameObject, attributeObjectType, ObjectModelModifier.STATIC);
+ addParameter(setterObject, "String", "extensionName");
+ addParameter(setterObject, WikittyTransformerUtil.WIKITTY_CLASS_FQN, "wikitty");
+ addParameter(setterObject, attributeObjectType, attributeName);
+ setOperationBody(setterObject, ""
+/*{
+ <%=attributeObjectType%> oldValue = <%=getterObject.getName()%>(extensionName, wikitty, false);
+ String fieldName = getMetaFieldName(extensionName, "<%=attributeName%>");
+ wikitty.setFqField(fieldName, <%=attributeName%>);
+ return oldValue;
+}*/);
+ }
}
}
}
Modified: trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyTransformerUtil.java
===================================================================
--- trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyTransformerUtil.java 2012-03-06 11:08:27 UTC (rev 1443)
+++ trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyTransformerUtil.java 2012-03-06 19:00:56 UTC (rev 1444)
@@ -166,7 +166,27 @@
return simpleTypeName;
}
-
+
+ /**
+ * for a given type of attribute, if is Business Entity return it, otherwize null
+ * @param attribute
+ * @param considerMultiplicity
+ * @return
+ */
+ protected static String generateResultObjectType(ObjectModelAttribute attribute,
+ boolean considerMultiplicity) {
+ String result = FQNtoSimpleName(attribute.getType());
+ if (commonTypes.contains(result) || "Wikitty".equalsIgnoreCase(result)) {
+ // On ne retourne quelque chose que si c'est un business entity type
+ result = null;
+ }
+
+ if (result != null && considerMultiplicity && isAttributeCollection(attribute)) {
+ result = getCollectionTypeName(attribute) + "<" + result + ">";
+ }
+ return result;
+ }
+
protected static String getCollectionTypeName(ObjectModelAttribute attribute) {
String result;
if (attribute.isUnique()) {
1
0
r1443 - in trunk/wikitty-api/src: main/java/org/nuiton/wikitty main/java/org/nuiton/wikitty/entities test/java/org/nuiton/wikitty
by bpoussin@users.nuiton.org 06 Mar '12
by bpoussin@users.nuiton.org 06 Mar '12
06 Mar '12
Author: bpoussin
Date: 2012-03-06 12:08:27 +0100 (Tue, 06 Mar 2012)
New Revision: 1443
Url: http://nuiton.org/repositories/revision/wikitty/1443
Log:
Evolution #1988: Wikitty pre-loading field
methode preload dans le client implantee et testee.
ajout pour pouvoir passer en paramettre des restore les patterns
de restauration et utilise la methode preload dans le store et restore.
Modified:
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyClient.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/Wikitty.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyCopyOnWrite.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyImpl.java
trunk/wikitty-api/src/test/java/org/nuiton/wikitty/WikittyClientTest.java
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyClient.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyClient.java 2012-03-05 19:01:08 UTC (rev 1442)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyClient.java 2012-03-06 11:08:27 UTC (rev 1443)
@@ -238,6 +238,9 @@
// update object
resp.update(w);
+ // on recharge les preload, comme demande au moment du restore initial
+ preload(Collections.singletonList(w));
+
timeLog.log(start, "store");
return w;
}
@@ -306,6 +309,8 @@
for (Wikitty w : wikitties) {
resp.update(w);
}
+ // on recharge les preload, comme demande au moment du restore initial
+ preload(wikitties);
timeLog.log(start, "storeWikitty<list>");
return wikitties;
@@ -411,8 +416,10 @@
*/
protected void preload(Wikitty w, Map<String, Wikitty> available,
Set<String> loaded) {
- for (String p : w.getAllPreloadPattern()) {
- preload(w, available, loaded, p);
+ if (w != null) {
+ for (String p : w.getAllPreloadPattern()) {
+ preload(w, available, loaded, p);
+ }
}
}
@@ -424,7 +431,7 @@
* @param wikitties la liste des wikitties a precharger
* @param preloadPattern la liste des patterns de prechargement a faire
*/
- public void preload(List<Wikitty> wikitties, String ... preloadPattern) {
+ public void preload(Collection<Wikitty> wikitties, String ... preloadPattern) {
String patterns = StringUtils.join(preloadPattern, ";");
Map<String, Wikitty> available = new HashMap<String, Wikitty>();
for (Wikitty w : wikitties) {
@@ -442,7 +449,9 @@
Set<String> loaded = new HashSet<String>();
for (Wikitty w : wikitties) {
- preload(w, available, loaded);
+ if (w != null) {
+ preload(w, available, loaded);
+ }
}
}
@@ -450,9 +459,11 @@
* Restore wikitty entity with specified id or {@code null} if entity can't be be found.
*
* @param id entity ids if null return is empty list
+ * @param preload patterns des liens qu'il faut precharger par exemple:
+ * "Company.employee, Employee.person", "Company.address, Address.*"
* @return wikitty entity with specified id or {@code null} if entity can't be found
*/
- public List<Wikitty> restore(List<String> id) {
+ public List<Wikitty> restore(List<String> id, String ... preload) {
long start = TimeLog.getTime();
List<Wikitty> result;
@@ -460,6 +471,7 @@
result = new ArrayList<Wikitty>();
} else {
result = wikittyService.restore(securityToken, id);
+ preload(result, preload);
}
timeLog.log(start, "restore<list>");
@@ -472,11 +484,11 @@
* @param id entity id
* @return wikitty entity with specified id or {@code null} if entity can't be found
*/
- public Wikitty restore(String id) {
+ public Wikitty restore(String id, String ... preload) {
long start = TimeLog.getTime();
Wikitty result = null;
if (id != null) {
- result = restore(Collections.singletonList(id)).get(0);
+ result = restore(Collections.singletonList(id), preload).get(0);
}
timeLog.log(start, "restore");
@@ -495,13 +507,13 @@
* @return wikitty entity with specified id or {@code null} if entity
* can't be found or if one wikitty don't have extension wanted by E type
*/
- public <E extends BusinessEntity> List<E> restore(
- Class<E> clazz, List<String> id, boolean checkExtension) {
+ public <E extends BusinessEntity> List<E> restore(Class<E> clazz,
+ List<String> id, boolean checkExtension, String ... preload) {
long start = TimeLog.getTime();
List<E> result = new ArrayList<E>();
if (id != null) {
- List<Wikitty> wikitties = restore(id);
+ List<Wikitty> wikitties = restore(id, preload);
Collection<String> businessExtension = null;
if (checkExtension) {
@@ -515,7 +527,8 @@
E dto = null;
if (!checkExtension ||
// on ne check pas les extensions ou ...
- CollectionUtils.subtract(businessExtension, w.getExtensionNames()).isEmpty()) {
+ CollectionUtils.subtract(
+ businessExtension, w.getExtensionNames()).isEmpty()) {
// ... on a retrouve toutes les extensions du wikitty dans l'objet
// on le prend dans les resultats
dto = WikittyUtil.newInstance(clazz, w);
@@ -537,8 +550,9 @@
* @param id entity id
* @return wikitty entity with specified id or {@code null} if entity can't be found
*/
- public <E extends BusinessEntity> E restore(Class<E> clazz, String id) {
- E result = restore(clazz, id, false);
+ public <E extends BusinessEntity> E restore(Class<E> clazz, String id,
+ String ... preload) {
+ E result = restore(clazz, id, false, preload);
return result;
}
@@ -552,43 +566,48 @@
* declared in clazz
* @return wikitty entity with specified id or {@code null} if entity can't be found
*/
- public <E extends BusinessEntity> E restore(Class<E> clazz, String id, boolean checkExtension) {
+ public <E extends BusinessEntity> E restore(Class<E> clazz, String id,
+ boolean checkExtension, String ... preload) {
long start = TimeLog.getTime();
E result = null;
if (id != null) {
- result = restore(clazz, Collections.singletonList(id), checkExtension).get(0);
+ result = restore(clazz, Collections.singletonList(id),
+ checkExtension, preload).get(0);
}
timeLog.log(start, "restore<Business>");
return result;
}
- public <E extends BusinessEntity> List<E> restore(Class<E> clazz, List<String> id) {
- List<E> result = restore(clazz, id, false);
+ public <E extends BusinessEntity> List<E> restore(Class<E> clazz,
+ List<String> id, String ... preload) {
+ List<E> result = restore(clazz, id, false, preload);
return result;
}
- public Set<Wikitty> restore(Set<String> id) {
+ public Set<Wikitty> restore(Set<String> id, String ... preload) {
ArrayList<String> list = null;
if (id != null) {
list = new ArrayList<String>(id);
}
- List<Wikitty> resultList = restore(list);
+ List<Wikitty> resultList = restore(list, preload);
Set<Wikitty> result = new LinkedHashSet<Wikitty>(resultList);
return result;
}
- public <E extends BusinessEntity> Set<E> restore(Class<E> clazz, Set<String> id) {
- Set<E> result = restore(clazz, id, false);
+ public <E extends BusinessEntity> Set<E> restore(Class<E> clazz,
+ Set<String> id, String ... preload) {
+ Set<E> result = restore(clazz, id, false, preload);
return result;
}
- public <E extends BusinessEntity> Set<E> restore(Class<E> clazz, Set<String> id, boolean checkExtension) {
+ public <E extends BusinessEntity> Set<E> restore(Class<E> clazz, Set<String> id,
+ boolean checkExtension, String ... preload) {
ArrayList<String> list = null;
if (id != null) {
list = new ArrayList<String>(id);
}
- List<E> resultList = restore(clazz, list, checkExtension);
+ List<E> resultList = restore(clazz, list, checkExtension, preload);
Set<E> result = new LinkedHashSet<E>(resultList);
return result;
}
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java 2012-03-05 19:01:08 UTC (rev 1442)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java 2012-03-06 11:08:27 UTC (rev 1443)
@@ -1199,6 +1199,24 @@
}
/**
+ * Try to convert object to wikitty, this is possible only if object is
+ * Wikitty or BusinessEntityImpl. If convertion is not possible return null.
+ * @param o object to convert
+ * @return null is convertion is impossible Wikitty otherwize.
+ */
+ static public Wikitty getWikitty(Object o) {
+ Wikitty result = null;
+ if (o instanceof Wikitty) {
+ // W, rien a faire
+ result = (Wikitty)o;
+ } else if (o instanceof BusinessEntityImpl) {
+ // BusinessEntityImpl, il faut recuperer les wikitty
+ result = ((BusinessEntityImpl)o).getWikitty();
+ }
+ return result;
+ }
+
+ /**
*
* @param service
* @param securityToken
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/Wikitty.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/Wikitty.java 2012-03-05 19:01:08 UTC (rev 1442)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/Wikitty.java 2012-03-06 11:08:27 UTC (rev 1443)
@@ -311,6 +311,19 @@
String getFieldAsWikitty(String ext, String fieldName);
/**
+ * return Wikitty for field only if this wikitty is preloaded, null or
+ * exception otherwize.
+ * @param extName extension name where this field must to be
+ * @param fieldName the field name
+ * @param exceptionIfNotLoaded if true and this field is not preloaded
+ * an exception is throw, otherwize null is returned. But if field is null
+ * (never set or set to null) and exceptionIfNotLoaded is true. This method
+ * must return null and not throw exception.
+ * @return Wikitty object or null
+ */
+ Wikitty getFieldAsWikitty(String extName, String fieldName, boolean exceptionIfNotLoaded);
+
+ /**
* If object is a set, it is automatically transform to list.
* @param <E>
* @param clazz
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyCopyOnWrite.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyCopyOnWrite.java 2012-03-05 19:01:08 UTC (rev 1442)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyCopyOnWrite.java 2012-03-06 11:08:27 UTC (rev 1443)
@@ -354,6 +354,11 @@
}
@Override
+ public Wikitty getFieldAsWikitty(String extName, String fieldName, boolean exceptionIfNotLoaded) {
+ return target.getFieldAsWikitty(extName, fieldName, exceptionIfNotLoaded);
+ }
+
+ @Override
public <E> List<E> getFieldAsList(String ext, String fieldName,
Class<E> clazz) {
return target.getFieldAsList(ext, fieldName, clazz);
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyImpl.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyImpl.java 2012-03-05 19:01:08 UTC (rev 1442)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyImpl.java 2012-03-06 11:08:27 UTC (rev 1443)
@@ -588,6 +588,20 @@
Object validValue = fieldType.getValidValue(value);
fieldValue.put(key, validValue);
+ // if user pass in argument object that permit to take wikitty,
+ // we put it, in preload map
+ if (value != null && fieldType.getType() == WikittyTypes.WIKITTY) {
+ if (fieldType.isCollection()) {
+ for ( Object o : (Collection<?>) value ) {
+ Wikitty w = WikittyUtil.getWikitty(o);
+ addPreloaded(w);
+ }
+ } else {
+ Wikitty w = WikittyUtil.getWikitty(value);
+ addPreloaded(w);
+ }
+ }
+
// mark field dirty and call listener
setFieldDirty(ext, fieldName, oldValue, validValue);
}
@@ -771,6 +785,20 @@
return result;
}
+ @Override
+ public Wikitty getFieldAsWikitty(String extName, String fieldName, boolean exceptionIfNotLoaded) {
+ String id = getFieldAsWikitty(extName, fieldName);
+ Wikitty result = null;
+ if (id != null) {
+ result = getPreloaded().get(id);
+ if (exceptionIfNotLoaded && result == null) {
+ throw new WikittyException(String.format(
+ "field %s.%s is not preloaded", extName, fieldName));
+ }
+ }
+ return result;
+ }
+
/*
* @see org.nuiton.wikitty.Wikitty#getFieldAsList(java.lang.String, java.lang.String, java.lang.Class)
*/
@@ -831,25 +859,23 @@
// check upper bound only if col exists,
// because ask upper bound == 0 is ridiculous
- if (fieldType.isUnique()) {
- if (!col.contains(value)) {
- // only add if not already in collection (unique)
- if (col.size() + 1 > fieldType.getUpperBound()) {
- // if upper bound reached, throw an exception
- throw new WikittyException(String.format(
- "Can't add value for field '%s', upper bound is reached",
- ext + "." + fieldName));
- }
- col.add(value);
- setFieldDirty(ext, fieldName, null, col);
- }
+ Object validValue = fieldType.getContainedValidObject(value);
+ if (fieldType.isUnique() && col.contains(validValue)) {
+ // do nothing, only add if not already in unique collection
} else {
if (col.size() + 1 > fieldType.getUpperBound()) {
+ // if upper bound reached, throw an exception
throw new WikittyException(String.format(
"Can't add value for field '%s', upper bound is reached",
ext + "." + fieldName));
}
- col.add(value);
+ col.add(validValue);
+ // if user pass in argument object that permit to take wikitty,
+ // we put it, in preload map
+ if (fieldType.getType() == WikittyTypes.WIKITTY) {
+ Wikitty w = WikittyUtil.getWikitty(value);
+ addPreloaded(w);
+ }
setFieldDirty(ext, fieldName, null, col);
}
}
@@ -869,13 +895,14 @@
Collection col = (Collection) getFieldAsObject(ext, fieldName);
if (col != null) {
FieldType type = getExtension(ext).getFieldType(fieldName);
- if (col.contains(value)) {
+ Object validValue = type.getContainedValidObject(value);
+ if (col.contains(validValue)) {
if (col.size() - 1 < type.getLowerBound()) {
throw new WikittyException(String.format(
"Can't remove value for field '%s', lower bound is reached",
ext + "." + fieldName));
} else {
- if (col.remove(value)) {
+ if (col.remove(validValue)) {
// field is dirty only if remove is done
setFieldDirty(ext, fieldName, null, col);
}
Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/WikittyClientTest.java
===================================================================
--- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/WikittyClientTest.java 2012-03-05 19:01:08 UTC (rev 1442)
+++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/WikittyClientTest.java 2012-03-06 11:08:27 UTC (rev 1443)
@@ -49,6 +49,8 @@
import org.nuiton.wikitty.entities.ElementField;
import org.nuiton.wikitty.entities.ExtensionFactory;
import org.nuiton.wikitty.entities.Wikitty;
+import org.nuiton.wikitty.entities.WikittyAuthorisation;
+import org.nuiton.wikitty.entities.WikittyAuthorisationHelper;
import org.nuiton.wikitty.entities.WikittyAuthorisationImpl;
import org.nuiton.wikitty.entities.WikittyExtension;
import org.nuiton.wikitty.entities.WikittyGroup;
@@ -2478,6 +2480,51 @@
Assert.assertNotNull(groupRestored.getPreloaded().get(l1.getWikittyId()));
Assert.assertNotNull(groupRestored.getPreloaded().get(l2.getWikittyId()));
Assert.assertNotNull(groupRestored.getPreloaded().get(l3.getWikittyId()));
+ }
+ @Test
+ public void testRestoreStoreWithPreload() throws Exception {
+ WikittyUserImpl moi = new WikittyUserImpl();
+ moi.setLogin("moi");
+
+ WikittyAuthorisationImpl auth = new WikittyAuthorisationImpl();
+ auth.setOwner(moi.getWikittyId());
+ wikittyClient.store(moi, auth);
+
+ Wikitty authRestored = wikittyClient.restore(auth.getWikittyId(),
+ "WikittyAuthorisation.owner");
+ // on verifie que moi est bien present dans les preload
+ Assert.assertNotNull(authRestored.getPreloaded().get(moi.getWikittyId()));
+
+ WikittyUserImpl other = new WikittyUserImpl();
+ other.setLogin("other");
+// WikittyAuthorisationHelper.setOwner(authRestored, other);
+ authRestored.setFqField(
+ WikittyAuthorisation.FQ_FIELD_WIKITTYAUTHORISATION_OWNER, other);
+ // on verifie que si on passe un Wikitty en parametre du set, il est
+ // bien ajoute au preload, meme s'il n'est pas encore store
+ Assert.assertNotNull(authRestored.getPreloaded().get(other.getWikittyId()));
+
+ WikittyUserImpl unknown = new WikittyUserImpl();
+ other.setLogin("unknown");
+ wikittyClient.store(unknown);
+
+ authRestored.setFqField(
+ WikittyAuthorisation.FQ_FIELD_WIKITTYAUTHORISATION_OWNER, unknown.getWikittyId());
+ // on verifie que si on passe un id, on a plus rien
+ Assert.assertNull(authRestored.getPreloaded().get(unknown.getWikittyId()));
+ Assert.assertNull(authRestored.getFieldAsWikitty(
+ WikittyAuthorisation.EXT_WIKITTYAUTHORISATION,
+ WikittyAuthorisation.FIELD_WIKITTYAUTHORISATION_OWNER, false));
+
+ authRestored = wikittyClient.store(authRestored);
+ // mais qu'apres un store on l'a a nouveau
+ Assert.assertNotNull(authRestored.getPreloaded().get(unknown.getWikittyId()));
+ Assert.assertNotNull(authRestored.getFieldAsWikitty(
+ WikittyAuthorisation.EXT_WIKITTYAUTHORISATION,
+ WikittyAuthorisation.FIELD_WIKITTYAUTHORISATION_OWNER, false));
+
}
+
+
}
1
0
r1442 - in trunk: src/site/rst/user wikitty-api/src/main/java/org/nuiton/wikitty wikitty-api/src/main/java/org/nuiton/wikitty/entities wikitty-api/src/test/java/org/nuiton/wikitty wikitty-generators/src/main/java/org/nuiton/wikitty/generator
by bpoussin@users.nuiton.org 05 Mar '12
by bpoussin@users.nuiton.org 05 Mar '12
05 Mar '12
Author: bpoussin
Date: 2012-03-05 20:01:08 +0100 (Mon, 05 Mar 2012)
New Revision: 1442
Url: http://nuiton.org/repositories/revision/wikitty/1442
Log:
Evolution #1988: Wikitty pre-loading field
methode preload dans le client implantee et testee.
Il faut maintenant pouvoir passer en paramettre des restore les patterns
de restauration et utilise la methode preload dans le store et restore.
Et ajouter dans les Entity metier genere et les Wikitty les methodes d'acces
Modified:
trunk/src/site/rst/user/generation.rst.vm
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyClient.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/Wikitty.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyCopyOnWrite.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyImpl.java
trunk/wikitty-api/src/test/java/org/nuiton/wikitty/WikittyClientTest.java
trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyTagValue.java
Modified: trunk/src/site/rst/user/generation.rst.vm
===================================================================
--- trunk/src/site/rst/user/generation.rst.vm 2012-03-05 18:57:02 UTC (rev 1441)
+++ trunk/src/site/rst/user/generation.rst.vm 2012-03-05 19:01:08 UTC (rev 1442)
@@ -181,3 +181,8 @@
Person,Employee;Company
Ici il faut que l'objet ait les extensions Person et Employee ou l'extension Company
+
+:preload: s'applique au extension et indique les champs de type Wikitty qui
+ doivent etre preloade lors du chargement de cette extension. Par exemple::
+
+ preload="Company.employee,Employee.person;Company.address"
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyClient.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyClient.java 2012-03-05 18:57:02 UTC (rev 1441)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyClient.java 2012-03-05 19:01:08 UTC (rev 1442)
@@ -35,24 +35,27 @@
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
-
+import java.util.regex.Pattern;
import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
import org.nuiton.util.ApplicationConfig;
import org.nuiton.util.TimeLog;
import org.nuiton.wikitty.entities.BusinessEntity;
import org.nuiton.wikitty.entities.BusinessEntityImpl;
import org.nuiton.wikitty.entities.ElementField;
+import org.nuiton.wikitty.entities.FieldType;
import org.nuiton.wikitty.entities.Wikitty;
import org.nuiton.wikitty.entities.WikittyExtension;
import org.nuiton.wikitty.entities.WikittyField;
import org.nuiton.wikitty.entities.WikittyGroup;
import org.nuiton.wikitty.entities.WikittyTokenHelper;
+import org.nuiton.wikitty.entities.WikittyTypes;
import org.nuiton.wikitty.entities.WikittyUser;
import org.nuiton.wikitty.query.WikittyQuery;
import org.nuiton.wikitty.query.WikittyQueryMaker;
@@ -287,14 +290,8 @@
}
}
- // call the service with Wikitty
- WikittyEvent resp = wikittyService.store(securityToken, wikitties);
+ storeWikitty(wikitties);
- // update object
- for (Wikitty w : wikitties) {
- resp.update(w);
- }
-
timeLog.log(start, "store<list>");
return objets;
}
@@ -320,7 +317,136 @@
//
////////////////////////////////////////////////////////////////////////////
+ protected Set<Wikitty> getWikittyForPreload(Map<String, Wikitty> available,
+ Wikitty w, FieldType type, String fqField) {
+
+ Set<Wikitty> result = new HashSet<Wikitty>();
+
+ // contient tous les ids a recuperer
+ Set<String> ids = new HashSet<String>();
+ if (type.isCollection()) {
+ ids.addAll((Collection)w.getFqField(fqField));
+ } else {
+ ids.add((String)w.getFqField(fqField));
+ }
+
+ // on prend tout ce que l'on peut depuis available
+ Collection<String> availableIds = CollectionUtils.intersection(ids, available.keySet());
+ for (String id : availableIds) {
+ result.add(available.get(id));
+ }
+
+ // et on on fait un restore sur les reste
+ ids.removeAll(availableIds);
+ Set<Wikitty> restored = restore(ids);
+ // on met les objets restore dans available pour la prochaine fois
+ for (Wikitty wikitty : restored) {
+ if (wikitty != null) {
+ available.put(wikitty.getId(), wikitty);
+ }
+ }
+ result.addAll(restored);
+
+ return result;
+ }
+
/**
+ * Load one wikitty with specified preloadPattern (with only ',').
+ *
+ * @param w current wikitty to load
+ * @param available available wikitty (restored)
+ * @param loaded already loaded wikitties + field couple
+ * @param preloadPattern pattern used to load
+ * @return return w with preloaded link
+ */
+ protected void preload(Wikitty w, Map<String, Wikitty> available,
+ Set<String> loaded, String preloadPattern) {
+ // s'il reste encore des champs a precharger
+ String pattern = StringUtils.substringBefore(preloadPattern, ",");
+ if (StringUtils.isNotBlank(pattern)) {
+ pattern = pattern.trim();
+ // on enleve la tete qui va etre traitee maintenant, et le reste
+ // par recursion (nextPattern)
+ String nextPattern = StringUtils.substringAfter(preloadPattern, ",");
+
+ String wid = w.getId();
+ for (String fqField : w.fieldNames()) {
+ // si le couple wid + fqField n'a pas encore ete traite on le fait
+ if (!loaded.contains(wid + "+" + fqField)) {
+ FieldType type = w.getFieldType(fqField);
+ // si le champs est bien de type Wikitty et qu'il respecte
+ // le pattern demande, on le traite
+ if (type.getType() == WikittyTypes.WIKITTY
+ && Pattern.matches(pattern, fqField)) {
+ // on marque le champs comme ayant ete traite, vu qu'on
+ // est en cours (pour eviter les boucles infinies
+ // qui peuvent arriver si une extension declare un champs
+ // pointant sur lui meme
+ loaded.add(wid + "+" + fqField);
+ // on recupere le(s) wikitty(ies) du lien
+ Set<Wikitty> links = getWikittyForPreload(available, w, type, fqField);
+ for (Wikitty link : links) {
+ if (link != null) {
+ // on ajoute ce wikitty dans le preload du wikitty pere
+ w.addPreloaded(link);
+ // si le wikitty a pu etre recupere on fait la suite
+ // sur lui (nextPattern)
+ preload(link, available, loaded, nextPattern);
+ // et on preload aussi pour ses extensions
+ preload(link, available, loaded);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Preload recursivement le wikitty, en fonction de sa chaine preloadPattern
+ * et des tags values des extensions qu'il a..
+ * @param w le wikitty a precharger
+ * @param available la liste des wikitty deja disponible sans restore explicite
+ * @param loaded la liste de couple wid + fqfield deja traite
+ */
+ protected void preload(Wikitty w, Map<String, Wikitty> available,
+ Set<String> loaded) {
+ for (String p : w.getAllPreloadPattern()) {
+ preload(w, available, loaded, p);
+ }
+ }
+
+ /**
+ * Ajoute le preloadPattern comme chaine de preload dans chaque wikitty
+ * et fait le prechargement sur chaque wikitty. En sortie de methode les
+ * wikitty sont tous precharge comme souhaite.
+ *
+ * @param wikitties la liste des wikitties a precharger
+ * @param preloadPattern la liste des patterns de prechargement a faire
+ */
+ public void preload(List<Wikitty> wikitties, String ... preloadPattern) {
+ String patterns = StringUtils.join(preloadPattern, ";");
+ Map<String, Wikitty> available = new HashMap<String, Wikitty>();
+ for (Wikitty w : wikitties) {
+ if (w != null) {
+ available.put(w.getId(), w);
+ if (StringUtils.isNotBlank(patterns)) {
+ // lorsqu'on apelle la methode pour le store, le preloadPattern
+ // est vide mais il ne faut pas perdre ce qu'il y avait avant
+ // dans le wikitty. Donc on ne fait le set que si patterns
+ // n'est pas vide
+ w.setPreloadPattern(patterns);
+ }
+ }
+ }
+ Set<String> loaded = new HashSet<String>();
+
+ for (Wikitty w : wikitties) {
+ preload(w, available, loaded);
+ }
+ }
+
+ /**
* Restore wikitty entity with specified id or {@code null} if entity can't be be found.
*
* @param id entity ids if null return is empty list
@@ -375,7 +501,7 @@
List<E> result = new ArrayList<E>();
if (id != null) {
- List<Wikitty> wikitties = wikittyService.restore(securityToken, id);
+ List<Wikitty> wikitties = restore(id);
Collection<String> businessExtension = null;
if (checkExtension) {
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/Wikitty.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/Wikitty.java 2012-03-05 18:57:02 UTC (rev 1441)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/Wikitty.java 2012-03-05 19:01:08 UTC (rev 1442)
@@ -29,9 +29,12 @@
import java.math.BigDecimal;
import java.util.Collection;
import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import org.nuiton.wikitty.generator.WikittyTagValue;
/**
* Wikitty object, containing data as map.
@@ -77,6 +80,48 @@
PropertyChangeListener listener);
/**
+ * Retourne le pattern de preload demande lors du restore ou null si aucun
+ * preload n'a ete demande.
+ * @return
+ */
+ String getPreloadPattern();
+
+ /**
+ * Modifie le pattern de preload
+ * @param preloadPattern un nouveau pattern ou null
+ */
+ void setPreloadPattern(String preloadPattern);
+
+ /**
+ * Retourne tous les patterns de preload, celui demande lors du restore et
+ * tout ceux defini par le tag value 'preload' sur les extensions. La
+ * Collection contient une liste de chaine qui n'ont comme separateur que
+ * des ','. Car chaque separateur ';' donne une entre differente dans la
+ * collection.
+ * @return Collection with pattern or empty collection if no pattern
+ */
+ Set<String> getAllPreloadPattern();
+
+ /**
+ * Retourne la map des wikitties precharges, si aucun objet n'est precharge
+ * alors retourne une map vide. La collection retournee est non modifiable.
+ * @return Retourne toujours une map au pire elle est vide
+ */
+ Map<String, Wikitty> getPreloaded();
+
+ /**
+ * Modifie la liste des wikitties prechargee
+ * @param preloaded
+ */
+ void setPreloaded(Map<String, Wikitty> preloaded);
+
+ /**
+ * Ajoute un wikitty comme preloaded dans la liste des wikitties prechargee.
+ * @param w le wikitty a ajouter
+ */
+ void addPreloaded(Wikitty w);
+
+ /**
* Replace all field of current wikitty with field found in w.
* This two wikitty must have same id.
*
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyCopyOnWrite.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyCopyOnWrite.java 2012-03-05 18:57:02 UTC (rev 1441)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyCopyOnWrite.java 2012-03-05 19:01:08 UTC (rev 1442)
@@ -27,7 +27,10 @@
import java.beans.PropertyChangeListener;
import java.math.BigDecimal;
import java.util.Collection;
+import java.util.Collections;
import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -36,6 +39,7 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.nuiton.wikitty.WikittyException;
+import org.nuiton.wikitty.generator.WikittyTagValue;
/** this class wrap a wikitty in a proxy that copy the wikitty before applying any change
*
@@ -66,6 +70,45 @@
}
@Override
+ public String getPreloadPattern() {
+ return target.getPreloadPattern();
+ }
+
+ @Override
+ public void setPreloadPattern(String preloadPattern) {
+ if (!ObjectUtils.equals(preloadPattern, getPreloadPattern())) {
+ substituteTargetWithCopy();
+ target.setPreloadPattern(preloadPattern);
+ }
+ }
+
+ @Override
+ public Set<String> getAllPreloadPattern() {
+ return target.getAllPreloadPattern();
+ }
+
+ @Override
+ public Map<String, Wikitty> getPreloaded() {
+ return target.getPreloaded();
+ }
+
+ @Override
+ public void setPreloaded(Map<String, Wikitty> preloaded) {
+ substituteTargetWithCopy();
+ target.setPreloaded(preloaded);
+ }
+
+ @Override
+ public void addPreloaded(Wikitty w) {
+ if (w != null) {
+ if (!getPreloaded().containsKey(w.getId())) {
+ substituteTargetWithCopy();
+ target.addPreloaded(w);
+ }
+ }
+ }
+
+ @Override
public void replaceWith(Wikitty w) {
replaceWith(w, false);
}
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyImpl.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyImpl.java 2012-03-05 18:57:02 UTC (rev 1441)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyImpl.java 2012-03-05 19:01:08 UTC (rev 1442)
@@ -31,6 +31,7 @@
import java.util.AbstractList;
import java.util.AbstractSet;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
@@ -102,8 +103,22 @@
*/
protected Map<String, WikittyExtension> extensions =
new LinkedHashMap<String, WikittyExtension>();
-
+
+ /**
+ * Pattern de prechargement demande par l'utilisateur lors de la restauration
+ * du wikitty. Peut-etre null si aucun prechargement n'est demande.
+ */
+ protected String preloadPattern;
+ /**
+ * Ensemble des liens vers des Wikitty precharge. Cette map peut-etre null
+ * si aucun prechargement n'existe.
+ * <li> key: wikitty id
+ * <li> value: wikitty
+ */
+ // poussin 20120305 peut-etre mettre transient le champs ? a voir a l'usage
+ protected Map<String, Wikitty> preloaded;
+
public WikittyImpl() {
this(null);
}
@@ -116,6 +131,63 @@
}
}
+ @Override
+ public String getPreloadPattern() {
+ return preloadPattern;
+ }
+
+ @Override
+ public void setPreloadPattern(String preloadPattern) {
+ this.preloadPattern = preloadPattern;
+ }
+
+ @Override
+ public Set<String> getAllPreloadPattern() {
+ Set<String> result = new HashSet<String>();
+ String[] preloadPatterns = StringUtils.split(getPreloadPattern(), ";");
+ if (preloadPatterns != null) {
+ result.addAll(Arrays.asList(preloadPatterns));
+ }
+
+ for (WikittyExtension ext : getExtensions()) {
+ preloadPatterns = StringUtils.split(
+ ext.getTagValue(WikittyTagValue.TAG_PRELOAD), ";");
+ if (preloadPatterns != null) {
+ result.addAll(Arrays.asList(preloadPatterns));
+ }
+ }
+ result.remove(null);
+ return result;
+ }
+
+ @Override
+ public Map<String, Wikitty> getPreloaded() {
+ if (preloaded == null) {
+ preloaded = new HashMap<String, Wikitty>();
+ }
+ return Collections.unmodifiableMap(preloaded);
+ }
+
+ @Override
+ public void setPreloaded(Map<String, Wikitty> preloaded) {
+ // on fait une copie et on la rend non modifiable.
+ Map<String, Wikitty> map = new HashMap<String, Wikitty>();
+ if (preloaded != null) {
+ map.putAll(preloaded);
+ }
+ this.preloaded = map;
+ }
+
+ @Override
+ public void addPreloaded(Wikitty w) {
+ if (w != null) {
+ if (preloaded == null) {
+ preloaded = new HashMap<String, Wikitty>();
+ }
+ this.preloaded.put(w.getId(), w);
+ }
+ }
+
/**
* Replace all field of current wikitty with field found in w.
* This two wikitty must have same id.
@@ -149,6 +221,17 @@
replaceWith(((WikittyCopyOnWrite)w).getTarget(), force);
}
if (force || this.getId().equals(w.getId())) {
+ // poussin 20120305 quid des listeners ? ne faudrait-il pas les copier aussi ?
+ // mais si on les copie, comment l'utilisateur sera-t-il qu'il faut les supprimer
+ // ne risque t-il pas d'y avoir des listeners recevant trop de notification.
+ // le plus simple est donc pour l'instant de ne pas copier les listeners, a la
+ // charge du developpeur d'appli, lorsqu'il fait un clone de remettre les listeners
+ // qu'il souhaite
+
+ // copy preload (not in deep copy mode)
+ this.setPreloaded(w.getPreloaded());
+ this.setPreloadPattern(w.getPreloadPattern());
+
this.extensions.clear();
this.fieldValue.clear();
for (WikittyExtension ext : w.getExtensions()) {
Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/WikittyClientTest.java
===================================================================
--- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/WikittyClientTest.java 2012-03-05 18:57:02 UTC (rev 1441)
+++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/WikittyClientTest.java 2012-03-05 19:01:08 UTC (rev 1442)
@@ -49,6 +49,7 @@
import org.nuiton.wikitty.entities.ElementField;
import org.nuiton.wikitty.entities.ExtensionFactory;
import org.nuiton.wikitty.entities.Wikitty;
+import org.nuiton.wikitty.entities.WikittyAuthorisationImpl;
import org.nuiton.wikitty.entities.WikittyExtension;
import org.nuiton.wikitty.entities.WikittyGroup;
import org.nuiton.wikitty.entities.WikittyGroupImpl;
@@ -2414,4 +2415,69 @@
Assert.assertTrue(true);
}
}
+
+ @Test
+ public void testPreloadSimple() throws Exception {
+ WikittyUserImpl user = new WikittyUserImpl();
+ user.setLogin("moi");
+
+ WikittyAuthorisationImpl auth = new WikittyAuthorisationImpl();
+ auth.setOwner(user.getWikittyId());
+ wikittyClient.store(user, auth);
+
+ Wikitty authRestored = wikittyClient.restore(auth.getWikittyId());
+ Assert.assertNull(authRestored.getPreloaded().get(user.getWikittyId()));
+
+ wikittyClient.preload(Arrays.asList(authRestored), "WikittyAuthorisation.owner");
+ Assert.assertNotNull(authRestored.getPreloaded().get(user.getWikittyId()));
+ }
+
+ @Test
+ public void testPreloadBoucle() throws Exception {
+ WikittyUserImpl user = new WikittyUserImpl();
+ user.setLogin("moi");
+
+ WikittyAuthorisationImpl auth = new WikittyAuthorisationImpl();
+ auth.setOwner(user.getWikittyId());
+ auth.setParent(auth.getWikittyId());
+
+ wikittyClient.store(auth, user);
+
+ Wikitty authRestored = wikittyClient.restore(auth.getWikittyId());
+ Assert.assertNull(authRestored.getPreloaded().get(user.getWikittyId()));
+
+ wikittyClient.preload(Arrays.asList(authRestored), "WikittyAuthorisation.parent,WikittyAuthorisation.parent,WikittyAuthorisation.owner");
+ // parent doit avoir ete restorer
+ Assert.assertNotNull(authRestored.getPreloaded().get(auth.getWikittyId()));
+ // mais owner non, car on le demande apres deux fois parent et vu que
+ // parent a deja ete traiter vu qu'on boucle sur nous meme, owner ne
+ // sera pas preloade (comportement normale)
+ Assert.assertNull(authRestored.getPreloaded().get(user.getWikittyId()));
+ }
+
+ @Test
+ public void testPreloadCollection() throws Exception {
+ WikittyLabelImpl l1 = new WikittyLabelImpl();
+ l1.addLabels("l1");
+ WikittyLabelImpl l2 = new WikittyLabelImpl();
+ l2.addLabels("l2");
+ WikittyLabelImpl l3 = new WikittyLabelImpl();
+ l3.addLabels("l3");
+
+ WikittyGroupImpl group = new WikittyGroupImpl();
+ group.addMembers(l1.getWikittyId(), l2.getWikittyId(), l3.getWikittyId());
+
+ wikittyClient.store(group, l1, l2, l3);
+
+ Wikitty groupRestored = wikittyClient.restore(group.getWikittyId());
+ Assert.assertNull(groupRestored.getPreloaded().get(l1.getWikittyId()));
+ Assert.assertNull(groupRestored.getPreloaded().get(l2.getWikittyId()));
+ Assert.assertNull(groupRestored.getPreloaded().get(l3.getWikittyId()));
+
+ wikittyClient.preload(Arrays.asList(groupRestored), "WikittyGroup.members");
+ Assert.assertNotNull(groupRestored.getPreloaded().get(l1.getWikittyId()));
+ Assert.assertNotNull(groupRestored.getPreloaded().get(l2.getWikittyId()));
+ Assert.assertNotNull(groupRestored.getPreloaded().get(l3.getWikittyId()));
+
+ }
}
Modified: trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyTagValue.java
===================================================================
--- trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyTagValue.java 2012-03-05 18:57:02 UTC (rev 1441)
+++ trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyTagValue.java 2012-03-05 19:01:08 UTC (rev 1442)
@@ -123,4 +123,13 @@
*/
public static final String TAG_EXTENSION_ALLOWED = "extensionAllowed";
+ /**
+ * preload: indique les champs de type Wikitty qui doivent etre preloade
+ * lors du chargement de cette extension.
+ * exemple:
+ * <li> preload="Company.employee,Employee.person;Company.address"
+ * <p>
+ * <li> target: extension
+ */
+ public static final String TAG_PRELOAD = "preload";
}
1
0
r1441 - trunk/wikitty-api/src/main/java/org/nuiton/wikitty/storage
by bpoussin@users.nuiton.org 05 Mar '12
by bpoussin@users.nuiton.org 05 Mar '12
05 Mar '12
Author: bpoussin
Date: 2012-03-05 19:57:02 +0100 (Mon, 05 Mar 2012)
New Revision: 1441
Url: http://nuiton.org/repositories/revision/wikitty/1441
Log:
Modification de l'implantation du InMemory pour que le delete fonctionne convenablement avec le copy on write des wikitties
Modified:
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/storage/WikittyStorageInMemory.java
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/storage/WikittyStorageInMemory.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/storage/WikittyStorageInMemory.java 2012-03-05 11:46:38 UTC (rev 1440)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/storage/WikittyStorageInMemory.java 2012-03-05 18:57:02 UTC (rev 1441)
@@ -25,6 +25,7 @@
package org.nuiton.wikitty.storage;
import java.util.Collection;
+import java.util.Collections;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.Map;
@@ -107,8 +108,8 @@
WikittyEvent result = new WikittyEvent(this);
Date now = new Date();
for (String id : idList) {
- Wikitty w = restore(transaction, id);
- if (w != null) {
+ Wikitty w = wikitties.get(id);
+ if (w != null && !w.isDeleted()) {
w.setDeleteDate(now);
result.addRemoveDate(id, now);
}
1
0
r1440 - trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities
by bpoussin@users.nuiton.org 05 Mar '12
by bpoussin@users.nuiton.org 05 Mar '12
05 Mar '12
Author: bpoussin
Date: 2012-03-05 12:46:38 +0100 (Mon, 05 Mar 2012)
New Revision: 1440
Url: http://nuiton.org/repositories/revision/wikitty/1440
Log:
toutes les modifications sur le copy on write doivent cloner le target avant de les faire
donc ajout pour:
- add/remove listener
- setDeleteDate
Modified:
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyCopyOnWrite.java
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyCopyOnWrite.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyCopyOnWrite.java 2012-03-05 01:35:54 UTC (rev 1439)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyCopyOnWrite.java 2012-03-05 11:46:38 UTC (rev 1440)
@@ -31,6 +31,7 @@
import java.util.List;
import java.util.Map;
import java.util.Set;
+import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -144,23 +145,27 @@
@Override
public void addPropertyChangeListener(PropertyChangeListener listener) {
+ substituteTargetWithCopy();
target.addPropertyChangeListener(listener);
}
@Override
public void removePropertyChangeListener(PropertyChangeListener listener) {
+ substituteTargetWithCopy();
target.removePropertyChangeListener(listener);
}
@Override
public void addPropertyChangeListener(String propertyName,
PropertyChangeListener listener) {
+ substituteTargetWithCopy();
target.addPropertyChangeListener(propertyName, listener);
}
@Override
public void removePropertyChangeListener(String propertyName,
PropertyChangeListener listener) {
+ substituteTargetWithCopy();
target.removePropertyChangeListener(propertyName, listener);
}
@@ -181,7 +186,10 @@
@Override
public void setDeleteDate(Date delete) {
- target.setDeleteDate(delete);
+ if (!ObjectUtils.equals(delete, getDeleteDate())) {
+ substituteTargetWithCopy();
+ target.setDeleteDate(delete);
+ }
}
@Override
1
0
Author: bpoussin
Date: 2012-03-05 02:35:54 +0100 (Mon, 05 Mar 2012)
New Revision: 1439
Url: http://nuiton.org/repositories/revision/wikitty/1439
Log:
changement de version de toutes les extensions suite a la modification du generateur
Modified:
trunk/wikitty-api/src/main/xmi/wikitty.properties
Modified: trunk/wikitty-api/src/main/xmi/wikitty.properties
===================================================================
--- trunk/wikitty-api/src/main/xmi/wikitty.properties 2012-03-05 01:35:17 UTC (rev 1438)
+++ trunk/wikitty-api/src/main/xmi/wikitty.properties 2012-03-05 01:35:54 UTC (rev 1439)
@@ -22,11 +22,11 @@
# <http://www.gnu.org/licenses/lgpl-3.0.html>.
# #L%
###
-org.nuiton.wikitty.entities.WikittyAuthorisation.class.tagvalue.version=1.0
-org.nuiton.wikitty.entities.WikittyGroup.class.tagvalue.version=1.0
-org.nuiton.wikitty.entities.WikittyLabel.class.tagvalue.version=1.0
-org.nuiton.wikitty.entities.WikittyToken.class.tagvalue.version=2.0
-org.nuiton.wikitty.entities.WikittyTreeNode.class.tagvalue.version=2.0
-org.nuiton.wikitty.entities.WikittyUser.class.tagvalue.version=1.0
-org.nuiton.wikitty.entities.WikittyI18n.class.tagvalue.version=1.0
-org.nuiton.wikitty.entities.WikittyAccessStat.class.tagvalue.version=1.0
+org.nuiton.wikitty.entities.WikittyAuthorisation.class.tagvalue.version=2.0
+org.nuiton.wikitty.entities.WikittyGroup.class.tagvalue.version=2.0
+org.nuiton.wikitty.entities.WikittyLabel.class.tagvalue.version=2.0
+org.nuiton.wikitty.entities.WikittyToken.class.tagvalue.version=3.0
+org.nuiton.wikitty.entities.WikittyTreeNode.class.tagvalue.version=3.0
+org.nuiton.wikitty.entities.WikittyUser.class.tagvalue.version=2.0
+org.nuiton.wikitty.entities.WikittyI18n.class.tagvalue.version=2.0
+org.nuiton.wikitty.entities.WikittyAccessStat.class.tagvalue.version=2.0
1
0
Author: bpoussin
Date: 2012-03-05 02:35:17 +0100 (Mon, 05 Mar 2012)
New Revision: 1438
Url: http://nuiton.org/repositories/revision/wikitty/1438
Log:
correction du modele:
- Authorisation->Parent n'etait pas du bon type
- un tag/value version trainait sur le champs treeNode->attachment alors que version sert pour les extensions
Modified:
trunk/wikitty-api/src/main/xmi/wikitty.zargo
Modified: trunk/wikitty-api/src/main/xmi/wikitty.zargo
===================================================================
(Binary files differ)
1
0
Author: bpoussin
Date: 2012-03-05 02:27:14 +0100 (Mon, 05 Mar 2012)
New Revision: 1437
Url: http://nuiton.org/repositories/revision/wikitty/1437
Log:
ajout de la doc sur les tags values disponibles
Modified:
trunk/src/site/rst/user/generation.rst.vm
Modified: trunk/src/site/rst/user/generation.rst.vm
===================================================================
--- trunk/src/site/rst/user/generation.rst.vm 2012-03-05 00:52:40 UTC (rev 1436)
+++ trunk/src/site/rst/user/generation.rst.vm 2012-03-05 01:27:14 UTC (rev 1437)
@@ -91,7 +91,7 @@
Vous pourriez être étonné que le lien entre vos entités soit représenté par une
chaîne de caractère. En fait, dans vos entité Wikitty, un lien vers un autre
-Wikitty estreprésenté par son identifiant qui est une chaîne de caractères.
+Wikitty est représenté par son identifiant qui est une chaîne de caractères.
Ainsi, un getXXXXX vous retournera l'identifiant d'un Wikitty qu'il faudra
récupérer en passant par le WikittyClient. Vous pouvez alors utiliser le cache
pour limiter les appels côté serveur.
@@ -114,9 +114,70 @@
Si vous souhaitez qu'une entité crée un arbre, vous avez juste à faire hériter
cette entité de WikittyTreeNode (pas besoin de référence sur elle-même). De
-cette manière, la gestion de l'arbre est assurée par Wikity, de même que
+cette manière, la gestion de l'arbre est assurée par Wikitty, de même que
l'indexation et la recherche.
.. image:: wikittyTree.png
-.. _EUGene::http://maven-site.nuiton.org/eugene/
\ No newline at end of file
+.. _EUGene::http://maven-site.nuiton.org/eugene/
+
+Tag Value disponible
+====================
+
+L'ensemble des tags disponible se trouve dans la classe WikittyTagValue.
+
+:version: s'applique au extension, indique la version de l'extension. Il est
+ obligatoire de modifier la valeur de la version lorsque vous modifiez la
+ définition de votre extension.
+
+:alternativeName: s'applique au champs, ce tag peut etre mis pour qu'a la
+ generation un des accesseur avec un autre nom soit genere.
+
+:documentation: s'applicque au extension et au champs. Il indique la
+ documentation a mettre lors de la generation peut aussi servir de
+ documentation utilisateur a l'execution.
+
+:toString: s'applique au extension et indique la facon de representer une
+ extension textuellement. Par exemple::
+
+ %Person.lastName$s %Person.firstName$s: %Person.birthday$tm %Person.birthday$te,%Person.birthday$tY"
+ "Hello %Person.firstName|unknow$s" if firstName field doesn't exist, unknow is used
+
+:sortOrder: s'applique au extension et indique le tri par defaut pour cette
+ extension. C'est une liste des champs dans l'importance de l'ordre de trie.
+ Il est possible d'ajouter asc ou desc apres le champs pour indique qu'il faut
+ trier en ordre croissant ou decroissant. Par exemple::
+
+ "Person.lastName asc, Person.firstName, Person.birthday desc"
+
+:Unique: s'applique au champs de type collection et indique s'il vaut
+ true que la collection ne peut pas contenir de doublon (Set) si unique
+ est false alors la collection peut contenir des doublons (List).
+
+:notNull: s'applique au champs et indique que le champs ne peut pas etre null,
+ il doit forcement avoir une valeur lors de la sauvegarde.
+
+:pattern: s'applique au champs et indique pour une String indique que le champs
+ doit respecter un certain pattern, sinon la sauvegarde echoue. Pour un numeric
+ ou une date pattern peut-etre utilise comme masque de saisie. Exemple::
+
+ "A.*" le champs doit commencer par 'A'
+ "[0-9]+\.[0-9][0-9]" le nombre doit avoir deux chiffres apres la virgule
+
+:indexed: s'applique au champs et indique si un champs doit etre indexe ou non.
+ par defaut si ce tag value n'existe pas il vaut true. Il faut donc le
+ positionner explicitement a false si on ne veut pas indexer un champs
+
+:crypt: s'applique au champs et indique que le champs doit etre crypte avant
+ d'etre sauve et decrypter lors de la restauration, de plus le champs ne
+ sera pas indexe. Si le cryptage n'est pas possible, la sauvegarde ne se
+ fera pas (Exeption). Par exemple::
+
+ crypt=Blowfish:password
+
+:extensionAllowed: s'applique au champs de type Wikitty et indique que le champs
+ ne peut prendre comme valeur que des wikitties ayant les extensions specifiees.
+ Par exemple::
+
+ Person,Employee;Company
+ Ici il faut que l'objet ait les extensions Person et Employee ou l'extension Company
1
0