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
November 2010
- 8 participants
- 82 discussions
r536 - trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator
by tchemit@users.nuiton.org 27 Nov '10
by tchemit@users.nuiton.org 27 Nov '10
27 Nov '10
Author: tchemit
Date: 2010-11-27 17:02:36 +0100 (Sat, 27 Nov 2010)
New Revision: 536
Url: http://nuiton.org/repositories/revision/wikitty/536
Log:
- use the new MetaTransformer api
- make works the full eugene chain (transformer then templates, no ore use of the previousTransformer in templates only transformer in the metaTransformer)
- improve with my two cents some dirty codes in generator api (but a lot still has to be done, the generator module is not very clean (I know tastes and colors... about dirty pigs!)
Modified:
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/WikittyImplementationGenerator.java
trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyMetaTransformer.java
trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyPurifierTransformer.java
trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyTransformerUtil.java
Modified: trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyAbstractGenerator.java
===================================================================
--- trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyAbstractGenerator.java 2010-11-27 15:57:22 UTC (rev 535)
+++ trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyAbstractGenerator.java 2010-11-27 16:02:36 UTC (rev 536)
@@ -37,10 +37,15 @@
import org.nuiton.eugene.models.object.ObjectModelOperation;
import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Date;
import java.util.HashMap;
+import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Random;
+import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -151,13 +156,13 @@
addImport(clazz, WikittyTransformerUtil.ENTITY_PACKAGE + ".WikittyTreeNode");
addImport(clazz, WikittyTransformerUtil.ENTITY_PACKAGE + ".WikittyTreeNodeAbstract");
addImport(clazz, WikittyTransformerUtil.ENTITY_PACKAGE + ".WikittyTreeNodeImpl");
- addImport(clazz, java.util.List.class);
- addImport(clazz, java.util.ArrayList.class);
- addImport(clazz, java.util.Collection.class);
- addImport(clazz, java.util.Collections.class);
- addImport(clazz, java.util.Set.class);
- addImport(clazz, java.util.Date.class);
- addImport(clazz, java.util.LinkedHashSet.class);
+ addImport(clazz, List.class);
+ addImport(clazz, ArrayList.class);
+ addImport(clazz, Collection.class);
+ addImport(clazz, Collections.class);
+ addImport(clazz, Set.class);
+ addImport(clazz, Date.class);
+ addImport(clazz, LinkedHashSet.class);
}
protected void addSerialVersionUID(ObjectModelClass clazz) {
@@ -419,6 +424,8 @@
* we B need to import CHelper and A need to import BHelper. But, since A
* has C attributes too, it needs CHelper too. So when we will process B,
* we will save needed imports, A will get them thus import CHelper.
+ * @param businessEntity
+ * @param abstractClass
*/
protected void addInheritedOperations(ObjectModelClass businessEntity, ObjectModelClass abstractClass) {
@@ -491,6 +498,8 @@
*
* will try to replace first {...} by name field value for extension Person.
* if this information is not available, will do unknow.
+ * @param businessEntity
+ * @param abstractClass
*/
protected void addToString(ObjectModelClass businessEntity, ObjectModelClass abstractClass) {
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 2010-11-27 15:57:22 UTC (rev 535)
+++ trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyContractGenerator.java 2010-11-27 16:02:36 UTC (rev 536)
@@ -24,16 +24,20 @@
*/
package org.nuiton.wikitty.generator;
+import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
+import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.LinkedHashSet;
+import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.nuiton.eugene.Transformer;
import org.nuiton.eugene.java.ObjectModelTransformerToJava;
import org.nuiton.eugene.models.object.ObjectModel;
import org.nuiton.eugene.models.object.ObjectModelAttribute;
@@ -53,15 +57,16 @@
private static final Log log = LogFactory.getLog(WikittyContractGenerator.class);
- @Override
- protected Transformer<ObjectModel, ObjectModel> initPreviousTransformer() {
- return new WikittyPurifierTransformer();
- }
+// @Override
+// protected Transformer<ObjectModel, ObjectModel> initPreviousTransformer() {
+// return new WikittyPurifierTransformer();
+// }
- /** will permet to get the result of a processed class
+ /**
+ * Will permet to get the result of a processed class
* it is useful for dealing with inheritence : when an extension depend
* of another. In this case the child can find the processed class of the parent
- * and then look into it to find methods and data to copy
+ * and then look into it to find methods and data to copy.
*/
protected Map<ObjectModelClass, ObjectModelInterface> processedClasses =
new HashMap<ObjectModelClass, ObjectModelInterface>();
@@ -86,7 +91,12 @@
processedEntities.clear();
}
- /** contains code commons to entities and meta-extensions */
+ /**
+ * Contains code commons to entities and meta-extensions.
+ *
+ * @param businessEntity
+ * @return
+ */
protected ObjectModelInterface prepareOutputClass(ObjectModelClass businessEntity) {
ObjectModelInterface contract = processedClasses.get(businessEntity);
@@ -112,13 +122,13 @@
addImport(contract, WikittyTransformerUtil.ENTITY_PACKAGE + ".WikittyTreeNode");
addImport(contract, WikittyTransformerUtil.ENTITY_PACKAGE + ".WikittyTreeNodeAbstract");
addImport(contract, WikittyTransformerUtil.ENTITY_PACKAGE + ".WikittyTreeNodeImpl");
- addImport(contract, java.util.List.class);
- addImport(contract, java.util.ArrayList.class);
- addImport(contract, java.util.Collection.class);
- addImport(contract, java.util.Collections.class);
- addImport(contract, java.util.Set.class);
- addImport(contract, java.util.Date.class);
- addImport(contract, java.util.LinkedHashSet.class);
+ addImport(contract, List.class);
+ addImport(contract, ArrayList.class);
+ addImport(contract, Collection.class);
+ addImport(contract, Collections.class);
+ addImport(contract, Set.class);
+ addImport(contract, Date.class);
+ addImport(contract, LinkedHashSet.class);
String documentation = businessEntity.getDocumentation();
if (businessEntity.hasTagValue(WikittyTransformerUtil.TAG_DOCUMENTATION)) {
@@ -268,7 +278,11 @@
processedEntities.add(businessEntity);
}
- /** add stuff if input model element is stereotyped as "meta" */
+ /**
+ * Add stuff if input model element is stereotyped as "meta".
+ *
+ * @param metaExtension
+ */
protected void processMetaExtension(ObjectModelClass metaExtension) {
// nothing to do
}
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 2010-11-27 15:57:22 UTC (rev 535)
+++ trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyDTOGenerator.java 2010-11-27 16:02:36 UTC (rev 536)
@@ -28,6 +28,7 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Random;
@@ -78,10 +79,10 @@
*/
protected Map<String, String> attributeToGetterName = new HashMap<String, String>();
- @Override
- protected Transformer<ObjectModel, ObjectModel> initPreviousTransformer() {
- return new WikittyPurifierTransformer();
- }
+// @Override
+// protected Transformer<ObjectModel, ObjectModel> initPreviousTransformer() {
+// return new WikittyPurifierTransformer();
+// }
protected List<ObjectModelClass> entitiesWithInheritedOperations =
new ArrayList<ObjectModelClass>();
@@ -98,6 +99,7 @@
for (ObjectModelClass clazz : model.getClasses()) {
if (WikittyTransformerUtil.isBusinessEntity(clazz) ||
WikittyTransformerUtil.isMetaExtension(clazz)) {
+ log.info("will treate class "+clazz.getQualifiedName());
modelBoth.add(clazz);
}
}
@@ -191,14 +193,14 @@
String attributeTypeInSet = WikittyTransformerUtil.generateResultType(attribute, true);
String attributeTypeInSetImpl = null;
String collectionType = WikittyTransformerUtil.getCollectionTypeName(attribute);
- if (collectionType.equals("Set")){
+ if (Set.class.getSimpleName().equals(collectionType)){
addImport(abstractClass, Set.class);
- addImport(abstractClass, "java.util.HashSet");
+ addImport(abstractClass, HashSet.class);
attributeTypeInSetImpl = "HashSet<String>";
}
- if (collectionType.equals("List")){
+ if (List.class.getSimpleName().equals(collectionType)){
addImport(abstractClass, List.class);
- addImport(abstractClass, "java.util.ArrayList");
+ addImport(abstractClass, ArrayList.class);
attributeTypeInSetImpl = "ArrayList<String>";
}
@@ -318,6 +320,8 @@
* we B need to import CHelper and A need to import BHelper. But, since A
* has C attributes too, it needs CHelper too. So when we will process B,
* we will save needed imports, A will get them thus import CHelper.
+ * @param businessEntity
+ * @param abstractClass
*/
protected void addInheritedOperations(ObjectModelClass businessEntity, ObjectModelClass abstractClass) {
@@ -346,6 +350,8 @@
* <p/>
* will try to replace first {...} by name field value for extension Person.
* if this information is not available, will do unknow.
+ * @param businessEntity
+ * @param abstractClass
*/
protected void addToString(ObjectModelClass businessEntity, ObjectModelClass abstractClass) {
@@ -408,6 +414,8 @@
/**
* Method to get the generated class name
+ * @param clazz
+ * @return
*/
protected String businessEntityToDTOName(ObjectModelClass clazz) {
return clazz.getName() + "DTO";
@@ -609,10 +617,10 @@
String attributeName = attribute.getName();
String attributeTypeInSetImpl = null;
String collectionType = WikittyTransformerUtil.getCollectionTypeName(attribute);
- if (collectionType.equals("Set")) {
+ if (Set.class.getSimpleName().equals(collectionType)) {
attributeTypeInSetImpl = "HashSet<String>";
}
- if (collectionType.equals("List")) {
+ if (List.class.getSimpleName().equals(collectionType)) {
attributeTypeInSetImpl = "ArrayList<String>";
}
Modified: trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyHelperGenerator.java
===================================================================
--- trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyHelperGenerator.java 2010-11-27 15:57:22 UTC (rev 535)
+++ trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyHelperGenerator.java 2010-11-27 16:02:36 UTC (rev 536)
@@ -31,6 +31,14 @@
import org.nuiton.eugene.models.object.ObjectModelModifier;
import org.nuiton.eugene.models.object.ObjectModelOperation;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Date;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Set;
+
/*{generator option: writeString = }*/
/*{generator option: parentheses = false}*/
/*{generator option: writeString = +}*/
@@ -45,7 +53,7 @@
@Override
public void transformFromClass(ObjectModelClass clazz) {
- if (WikittyTransformerUtil.isBusinessEntity(clazz) ||(WikittyTransformerUtil.isMetaExtension(clazz))) {
+ if (WikittyTransformerUtil.isBusinessEntity(clazz) || WikittyTransformerUtil.isMetaExtension(clazz)) {
ObjectModelClass helper = createClass(WikittyTransformerUtil.businessEntityToHelperName(clazz),
clazz.getPackageName());
@@ -62,13 +70,13 @@
addImport(helper, WikittyTransformerUtil.ENTITY_PACKAGE + ".WikittyTreeNode");
addImport(helper, WikittyTransformerUtil.ENTITY_PACKAGE + ".WikittyTreeNodeAbstract");
addImport(helper, WikittyTransformerUtil.ENTITY_PACKAGE + ".WikittyTreeNodeImpl");
- addImport(helper, java.util.List.class);
- addImport(helper, java.util.ArrayList.class);
- addImport(helper, java.util.Collection.class);
- addImport(helper, java.util.Collections.class);
- addImport(helper, java.util.Set.class);
- addImport(helper, java.util.Date.class);
- addImport(helper, java.util.LinkedHashSet.class);
+ addImport(helper, List.class);
+ addImport(helper, ArrayList.class);
+ addImport(helper, Collection.class);
+ addImport(helper, Collections.class);
+ addImport(helper, Set.class);
+ addImport(helper, Date.class);
+ addImport(helper, LinkedHashSet.class);
// making constructor for helper class (empty and private)
ObjectModelOperation constructor = addConstructor(helper, ObjectModelModifier.PRIVATE);
@@ -86,7 +94,12 @@
}
}
- /** add operation if input model element has stereotype "entity" */
+ /**
+ * Add operation if input model element has stereotype "entity".
+ *
+ * @param entity
+ * @param helper
+ * */
protected void createOperationsForBusinessEntity(ObjectModelClass entity,
ObjectModelClass helper) {
@@ -233,10 +246,6 @@
}*/;
setOperationBody(equals, equalsBody);
-
-
-
-
// finally, adding isExtension, hasExtension and addExtension
ObjectModelOperation isExtension = addOperation(helper, "isExtension", "boolean", ObjectModelModifier.STATIC);
@@ -268,7 +277,12 @@
}*/);
}
- /** add needed operations if input model element has stereotype "meta" */
+ /**
+ * Add needed operations if input model element has stereotype "meta".
+ *
+ * @param metaExtension
+ * @param helper
+ */
protected void createOperationForMetaExtension(ObjectModelClass metaExtension,
ObjectModelClass helper) {
Modified: trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyImplementationGenerator.java
===================================================================
--- trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyImplementationGenerator.java 2010-11-27 15:57:22 UTC (rev 535)
+++ trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyImplementationGenerator.java 2010-11-27 16:02:36 UTC (rev 536)
@@ -24,9 +24,16 @@
*/
package org.nuiton.wikitty.generator;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Date;
import java.util.HashMap;
+import java.util.LinkedHashSet;
+import java.util.List;
import java.util.Map;
import java.util.Random;
+import java.util.Set;
import org.nuiton.eugene.java.ObjectModelTransformerToJava;
import org.nuiton.eugene.models.object.ObjectModelClass;
@@ -82,13 +89,13 @@
addImport(implementation, WikittyTransformerUtil.ENTITY_PACKAGE + ".WikittyTreeNode");
addImport(implementation, WikittyTransformerUtil.ENTITY_PACKAGE + ".WikittyTreeNodeAbstract");
addImport(implementation, WikittyTransformerUtil.ENTITY_PACKAGE + ".WikittyTreeNodeImpl");
- addImport(implementation, java.util.List.class);
- addImport(implementation, java.util.ArrayList.class);
- addImport(implementation, java.util.Collection.class);
- addImport(implementation, java.util.Collections.class);
- addImport(implementation, java.util.Set.class);
- addImport(implementation, java.util.Date.class);
- addImport(implementation, java.util.LinkedHashSet.class);
+ addImport(implementation, List.class);
+ addImport(implementation, ArrayList.class);
+ addImport(implementation, Collection.class);
+ addImport(implementation, Collections.class);
+ addImport(implementation, Set.class);
+ addImport(implementation, Date.class);
+ addImport(implementation, LinkedHashSet.class);
setSuperClass(implementation, WikittyTransformerUtil.businessEntityToAbstractName(clazz));
Modified: trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyMetaTransformer.java
===================================================================
--- trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyMetaTransformer.java 2010-11-27 15:57:22 UTC (rev 535)
+++ trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyMetaTransformer.java 2010-11-27 16:02:36 UTC (rev 536)
@@ -31,22 +31,20 @@
import org.nuiton.eugene.models.object.ObjectModelClass;
/**
- *
* Wikitty generation steps :
* <ol>
- * <li>transform user model to wikitty intermediate model</li>
- * <li>generate from wikitty intermediate model :
- * <ul>
- * <li>a contract;</li>
- * <li>an abstract class;</li>
- * <li>an implementation;</li>
- * <li>a helper</li>
- * </ul>
- * </li>
+ * <li>transform user model to wikitty intermediate model</li>
+ * <li>generate from wikitty intermediate model :
+ * <ul>
+ * <li>a contract;</li>
+ * <li>an abstract class;</li>
+ * <li>an implementation;</li>
+ * <li>a helper</li>
+ * </ul>
+ * </li>
* </ol>
- *
+ *
* @author bleny
- *
* @plexus.component role="org.nuiton.eugene.Template" role-hint="org.nuiton.wikitty.generator.WikittyMetaGenerator"
*/
@@ -56,40 +54,49 @@
/*{generator option: writeString = +}*/
public class WikittyMetaTransformer extends AbstractMetaTransformer<ObjectModel> {
-
+
private static final Log log = LogFactory.getLog(WikittyMetaTransformer.class);
public WikittyMetaTransformer() {
-
- super(WikittyContractGenerator.class,
- WikittyAbstractGenerator.class,
- WikittyImplementationGenerator.class,
- WikittyHelperGenerator.class
- );
-
+
+// super(WikittyContractGenerator.class,
+// WikittyAbstractGenerator.class,
+// WikittyImplementationGenerator.class,
+// WikittyHelperGenerator.class
+// );
+
+ setTransformerTypes(WikittyPurifierTransformer.class);
+ setTemplateTypes(
+ WikittyContractGenerator.class,
+ WikittyAbstractGenerator.class,
+ WikittyImplementationGenerator.class,
+ WikittyHelperGenerator.class
+ );
+
}
-
- /** */
+
@Override
protected boolean validateModel(ObjectModel model) {
if (model.getClasses().isEmpty()) {
- log.warn("model doesn't contains any class");
+ if (log.isWarnEnabled()) {
+ log.warn("model does not contain any class to generate.");
+ }
}
for (ObjectModelClass clazz : model.getClasses()) {
-
+
// warn user if deprecated stereotype is used
- if (clazz.getStereotypes().contains(WikittyTransformerUtil.BUSINESS_ENTITY_STEREOTYPE_OLD_NAME)) {
+ if (clazz.getStereotypes().contains(WikittyTransformerUtil.BUSINESS_ENTITY_STEREOTYPE_OLD_NAME)) {
log.warn(clazz.getQualifiedName() + " uses deprecated \"" +
- WikittyTransformerUtil.BUSINESS_ENTITY_STEREOTYPE_OLD_NAME
- + "\" stereotype. use \"" +
- WikittyTransformerUtil.BUSINESS_ENTITY_STEREOTYPE_NAME +
- "\" instead");
+ WikittyTransformerUtil.BUSINESS_ENTITY_STEREOTYPE_OLD_NAME
+ + "\" stereotype. use \"" +
+ WikittyTransformerUtil.BUSINESS_ENTITY_STEREOTYPE_NAME +
+ "\" instead");
}
if (!clazz.hasTagValue(WikittyTransformerUtil.TAG_VERSION)) {
- log.warn(clazz.getQualifiedName() + " misses a \"" +
+ log.warn(clazz.getQualifiedName() + " misses a \"" +
WikittyTransformerUtil.TAG_VERSION + "\" tagValue");
}
}
Modified: trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyPurifierTransformer.java
===================================================================
--- trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyPurifierTransformer.java 2010-11-27 15:57:22 UTC (rev 535)
+++ trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyPurifierTransformer.java 2010-11-27 16:02:36 UTC (rev 536)
@@ -45,7 +45,8 @@
*/
public class WikittyPurifierTransformer extends ObjectModelTransformerToJava {
- private static final Log log = LogFactory.getLog(WikittyPurifierTransformer.class);
+ private static final Log log =
+ LogFactory.getLog(WikittyPurifierTransformer.class);
/** for a given class, store all the names used by this class and subClasses */
Map<ObjectModelClass, List<String>> namesUsedByClass = new HashMap<ObjectModelClass, List<String>>();
@@ -62,89 +63,100 @@
* to consider it as a new name. To choose a new name, we look for
* an alternative name provided by the user through a tagValue on this
* attribute. If no alternative provided, we try to generate an alternative
- * name by adding "From<className>" to the attribute name.
+ * name by adding "From<className>" to the attribute name.
+ *
+ * @param clazz the class to process
*/
protected void processClass(ObjectModelClass clazz) {
+
if (processedClasses.contains(clazz)) {
+
// clazz has already been processed, do nothing
- } else {
- // all attributes names that will be used by clazz
- List<String> allUsedNames = new ArrayList<String>();
+ return;
+ }
-
- // first, we have to get all names used by the super classes and
- // its superclasses. So they must have been processed before
- // current class. Thus, we recursively call processClass on
- // superClass.
-
- // process superclass first
- for (ObjectModelClass superClasses : clazz.getSuperclasses()) {
- if (WikittyTransformerUtil.isBusinessEntity(superClasses)) {
- if (!processedClasses.contains(superClasses)) {
- processClass(superClasses);
- allUsedNames.addAll(namesUsedByClass.get(superClasses));
- }
+ if (isVerbose()) {
+ log.info("will purify " + clazz.getQualifiedName());
+ }
+
+ List<String> allUsedNames = new ArrayList<String>();
+
+
+ // first, we have to get all names used by the super classes and
+ // its superclasses. So they must have been processed before
+ // current class. Thus, we recursively call processClass on
+ // superClass.
+
+ // process superclass first
+ for (ObjectModelClass superClasses : clazz.getSuperclasses()) {
+ if (WikittyTransformerUtil.isBusinessEntity(superClasses)) {
+ if (!processedClasses.contains(superClasses)) {
+ processClass(superClasses);
+ allUsedNames.addAll(namesUsedByClass.get(superClasses));
}
}
+ }
- // now, allUsedNames contains all names used by superClass, we
- // have to check current class attributes names for conflict.
- // allUsedNames contains name that we
- // can't use without generating a conflict
- for (ObjectModelAttribute attribute : clazz.getAttributes()) {
-
- // will be null as long as a non-conflicting name is found
- String attributeName = null;
+ // now, allUsedNames contains all names used by superClass, we
+ // have to check current class attributes names for conflict.
+ // allUsedNames contains name that we
+ // can't use without generating a conflict
+ for (ObjectModelAttribute attribute : clazz.getAttributes()) {
- if (attribute.hasTagValue(WikittyTransformerUtil.TAG_ALTERNATIVE_NAME)) {
- attributeName = attribute.getTagValue(WikittyTransformerUtil.TAG_ALTERNATIVE_NAME);
- if (allUsedNames.contains(attributeName)) {
- // using alternative name lead to a conflict
- attribute.getTagValues().remove(WikittyTransformerUtil.TAG_ALTERNATIVE_NAME);
- attributeName = null;
- }
+ // will be null as long as a non-conflicting name is found
+ String attributeName = null;
+
+ if (attribute.hasTagValue(WikittyTransformerUtil.TAG_ALTERNATIVE_NAME)) {
+ attributeName = attribute.getTagValue(WikittyTransformerUtil.TAG_ALTERNATIVE_NAME);
+ if (allUsedNames.contains(attributeName)) {
+ // using alternative name lead to a conflict
+ attribute.getTagValues().remove(WikittyTransformerUtil.TAG_ALTERNATIVE_NAME);
+ attributeName = null;
}
+ }
- if (attributeName == null) {
- attributeName = attribute.getName();
- if (allUsedNames.contains(attributeName)) {
- // using alternative name lead to a conflict
- attributeName = null;
- }
+ if (attributeName == null) {
+ attributeName = attribute.getName();
+ if (allUsedNames.contains(attributeName)) {
+ // using alternative name lead to a conflict
+ attributeName = null;
}
+ }
- if (attributeName == null) {
- attributeName = attribute.getName() + "From" + clazz.getName();
- if (allUsedNames.contains(attributeName)) {
- // using alternative name lead to a conflict
- attributeName = null;
- } else {
- addTagValue(attribute, WikittyTransformerUtil.TAG_ALTERNATIVE_NAME, attributeName);
- }
- }
-
- // finally
- if (attributeName == null) {
- // still no alternative :-(
- log.error("no way to resolve conflict with attribute" +
- attribute.getName() + " from class " + clazz
- + ". You should add or change a tagValue \"" +
- WikittyTransformerUtil.TAG_ALTERNATIVE_NAME +
- "\" on this attribute");
+ if (attributeName == null) {
+ attributeName = attribute.getName() + "From" + clazz.getName();
+ if (allUsedNames.contains(attributeName)) {
+ // using alternative name lead to a conflict
+ attributeName = null;
} else {
- allUsedNames.add(attributeName);
+ addTagValue(attribute, WikittyTransformerUtil.TAG_ALTERNATIVE_NAME, attributeName);
}
}
- // saving all names we used in current class will permit to sub classes
- // to know what names it must not use
- namesUsedByClass.put(clazz, allUsedNames);
+ // finally
+ if (attributeName == null) {
+ // still no alternative :-(
+ log.error("no way to resolve conflict with attribute" +
+ attribute.getName() + " from class " + clazz
+ + ". You should add or change a tagValue \"" +
+ WikittyTransformerUtil.TAG_ALTERNATIVE_NAME +
+ "\" on this attribute");
+ } else {
+ allUsedNames.add(attributeName);
+ }
}
+
+ // saving all names we used in current class will permit to sub classes
+ // to know what names it must not use
+ namesUsedByClass.put(clazz, allUsedNames);
}
@Override
public void transformFromModel(ObjectModel model) {
for (ObjectModelClass clazz : model.getClasses()) {
+ if (isVerbose()) {
+ log.info("Will clone " + clazz.getQualifiedName());
+ }
ObjectModelClass clone = cloneClass(clazz, true);
if (WikittyTransformerUtil.isBusinessEntity(clazz)) {
processClass(clone);
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 2010-11-27 15:57:22 UTC (rev 535)
+++ trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyTransformerUtil.java 2010-11-27 16:02:36 UTC (rev 536)
@@ -24,7 +24,9 @@
*/
package org.nuiton.wikitty.generator;
+import java.util.Date;
import java.util.HashSet;
+import java.util.List;
import java.util.Set;
import org.apache.commons.lang.StringUtils;
@@ -64,7 +66,9 @@
/** given a class called Client will return "EXT_CLIENT"
* should be used as a variable name to store the extension name
+ * @param clazz
* @param withClassNamePrefix add class name as prefix (will return "Client.EXT_CLIENT")
+ * @return
*/
protected static String classToExtensionVariableName(ObjectModelClass clazz,
boolean withClassNamePrefix) {
@@ -77,7 +81,9 @@
}
/** given the field name of the class Client, will return "FIELD_CLIENT_NAME"
+ * @param attribute
* @param withClassNamePrefix add class name as prefix (ie "Client.FIELD_CLIENT_NAME")
+ * @return
*/
protected static String attributeToFielVariableName(ObjectModelAttribute attribute,
boolean withClassNamePrefix) {
@@ -93,7 +99,10 @@
return fieldVariableName;
}
- /** given "my.java.package.MyClass" or "MyClass" return "MyClass" */
+ /** given "my.java.package.MyClass" or "MyClass" return "MyClass"
+ * @param fqn
+ * @return
+ */
protected static String FQNtoSimpleName(String fqn) {
// XXX should use GeneratorUtil#getSimpleName(String)
int lastDotIndex = fqn.lastIndexOf(".");
@@ -119,7 +128,7 @@
* wikitty interface provide getFieldAsString, getFieldAsDate etc. methods
* this method returns the good name of the method to call depending the
* type given as parameter
- * @param typeName a name of a business entity or "String", "Integer" etc.
+ * @param attribute a name of a business entity or "String", "Integer" etc.
* @return the name of a method "getFieldAsInt" for example
*/
protected static String generateGetFieldAsCall(ObjectModelAttribute attribute) {
@@ -137,7 +146,10 @@
return "getFieldAs" + asWhat;
}
- /** for a given type of attribute, the getter returned type must be... */
+ /** for a given type of attribute, the getter returned type must be...
+ * @param attribute
+ * @param considerMultiplicity
+ * @return*/
protected static String generateResultType(ObjectModelAttribute attribute,
boolean considerMultiplicity) {
String simpleTypeName = FQNtoSimpleName(attribute.getType());
@@ -155,9 +167,9 @@
protected static String getCollectionTypeName(ObjectModelAttribute attribute) {
String result;
if (attribute.isUnique()) {
- result = "Set";
+ result = Set.class.getSimpleName();
} else {
- result = "List";
+ result = List.class.getSimpleName();
}
return result;
}
@@ -183,26 +195,28 @@
private static Set<String> commonNumerics;
static {
commonNumerics = new HashSet<String>();
- commonNumerics.add("byte");
- commonNumerics.add("Byte");
- commonNumerics.add("short");
- commonNumerics.add("Short");
- commonNumerics.add("int");
- commonNumerics.add("Integer");
- commonNumerics.add("long");
- commonNumerics.add("Long");
- commonNumerics.add("float");
- commonNumerics.add("Float");
- commonNumerics.add("double");
- commonNumerics.add("Double");
+ commonNumerics.add(byte.class.getSimpleName());
+ commonNumerics.add(Byte.class.getSimpleName());
+ commonNumerics.add(short.class.getSimpleName());
+ commonNumerics.add(Short.class.getSimpleName());
+ commonNumerics.add(int.class.getSimpleName());
+ commonNumerics.add(Integer.class.getSimpleName());
+ commonNumerics.add(long.class.getSimpleName());
+ commonNumerics.add(Long.class.getSimpleName());
+ commonNumerics.add(float.class.getSimpleName());
+ commonNumerics.add(Float.class.getSimpleName());
+ commonNumerics.add(double.class.getSimpleName());
+ commonNumerics.add(Double.class.getSimpleName());
}
private static Set<String> commonStrings;
static {
commonStrings = new HashSet<String>();
- commonStrings.add("char");
+ commonStrings.add(char.class.getSimpleName());
+ commonStrings.add(Character.class.getSimpleName());
+ //FIXME tchemit 2010-11-27 : this does NOT exists in jdk api ?
commonStrings.add("Char");
- commonStrings.add("String");
+ commonStrings.add(String.class.getSimpleName());
}
private static Set<String> commonTypes;
@@ -210,9 +224,9 @@
commonTypes = new HashSet<String>();
commonTypes.addAll(commonNumerics);
commonTypes.addAll(commonStrings);
- commonTypes.add("boolean");
- commonTypes.add("Boolean");
- commonTypes.add("Date");
+ commonTypes.add(boolean.class.getSimpleName());
+ commonTypes.add(Boolean.class.getSimpleName());
+ commonTypes.add(Date.class.getSimpleName());
}
public static String businessEntityToContractName(ObjectModelClass clazz) {
1
0
Author: tchemit
Date: 2010-11-27 16:57:22 +0100 (Sat, 27 Nov 2010)
New Revision: 535
Url: http://nuiton.org/repositories/revision/wikitty/535
Log:
add report to see exposed plexus components
Modified:
trunk/wikitty-generators/pom.xml
Modified: trunk/wikitty-generators/pom.xml
===================================================================
--- trunk/wikitty-generators/pom.xml 2010-11-27 15:56:50 UTC (rev 534)
+++ trunk/wikitty-generators/pom.xml 2010-11-27 15:57:22 UTC (rev 535)
@@ -85,4 +85,29 @@
</build>
+ <profiles>
+ <!-- reporting at release time -->
+ <profile>
+ <id>reporting</id>
+ <activation>
+ <property>
+ <name>performRelease</name>
+ <value>true</value>
+ </property>
+ </activation>
+
+ <reporting>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-maven-plugin</artifactId>
+ <version>1.3.8</version>
+ </plugin>
+ </plugins>
+ </reporting>
+
+ </profile>
+
+ </profiles>
+
</project>
1
0
Author: tchemit
Date: 2010-11-27 16:56:50 +0100 (Sat, 27 Nov 2010)
New Revision: 534
Url: http://nuiton.org/repositories/revision/wikitty/534
Log:
use correctly role on POM
Modified:
trunk/pom.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2010-11-27 15:56:15 UTC (rev 533)
+++ trunk/pom.xml 2010-11-27 15:56:50 UTC (rev 534)
@@ -23,9 +23,9 @@
<module>wikitty-generators</module>
<module>wikitty-api</module>
+ <module>wikitty-dto</module>
<module>wikitty-solr-impl</module>
<module>wikitty-jdbc-impl</module>
- <module>wikitty-dto</module>
<module>wikitty-ui-zk</module>
<module>wikitty-hessian-client</module>
@@ -471,7 +471,8 @@
<organization>CodeLutin</organization>
<timezone>+2</timezone>
<roles>
- <role>Developer, Technical writer</role>
+ <role>Developer</role>
+ <role>Technical writer</role>
</roles>
</developer>
1
0
Author: tchemit
Date: 2010-11-27 16:56:15 +0100 (Sat, 27 Nov 2010)
New Revision: 533
Url: http://nuiton.org/repositories/revision/wikitty/533
Log:
While expose classifier tests, must also expose his javadoc and sources in release-profile
Modified:
trunk/wikitty-api/pom.xml
Modified: trunk/wikitty-api/pom.xml
===================================================================
--- trunk/wikitty-api/pom.xml 2010-11-27 15:05:13 UTC (rev 532)
+++ trunk/wikitty-api/pom.xml 2010-11-27 15:56:15 UTC (rev 533)
@@ -159,7 +159,7 @@
<phase>generate-sources</phase>
<configuration>
<inputs>
- <input>zargo:src/main/xmi/:*.zargo</input>
+ <input>zargo</input>
</inputs>
<fullPackagePath>org.nuiton.wikitty.entities</fullPackagePath>
<defaultPackage>org.nuiton.wikitty.entities</defaultPackage>
@@ -173,7 +173,7 @@
</executions>
</plugin>
- <!-- Create a jar that includes all tests -->
+ <!-- Creates and deploy also tests classifier -->
<!-- Needed for wikitty-solr-impl tests -->
<plugin>
<artifactId>maven-jar-plugin</artifactId>
@@ -190,4 +190,50 @@
</build>
+ <profiles>
+ <!-- perform only on a release stage when using the maven-release-plugin -->
+ <profile>
+ <id>release-profile</id>
+ <activation>
+ <property>
+ <name>performRelease</name>
+ <value>true</value>
+ </property>
+ </activation>
+
+ <build>
+ <plugins>
+
+ <!-- always compute tests source jar -->
+ <plugin>
+ <artifactId>maven-source-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>attach-test-sources</id>
+ <goals>
+ <goal>test-jar</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+
+ <!-- always compute tests source jar -->
+ <plugin>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>attach-test-javadoc</id>
+ <goals>
+ <goal>test-jar</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+
+ </plugins>
+ </build>
+ </profile>
+
+ </profiles>
+
</project>
1
0
r532 - in trunk: wikitty-api/src/main/resources/org/nuiton wikitty-dto wikitty-dto/src/main wikitty-dto/src/main/java/org/nuiton/wikitty wikitty-dto/src/main/resources wikitty-dto/src/main/resources/org.nuiton wikitty-jdbc-impl/src/license wikitty-solr-impl/src/license
by jcouteau@users.nuiton.org 27 Nov '10
by jcouteau@users.nuiton.org 27 Nov '10
27 Nov '10
Author: jcouteau
Date: 2010-11-27 16:05:13 +0100 (Sat, 27 Nov 2010)
New Revision: 532
Url: http://nuiton.org/repositories/revision/wikitty/532
Log:
Make everythin work in GWT
Added:
trunk/wikitty-dto/src/main/resources/
trunk/wikitty-dto/src/main/resources/org.nuiton/
trunk/wikitty-dto/src/main/resources/org.nuiton/WikittyDTO.gwt.xml
Removed:
trunk/wikitty-dto/src/main/java/org/nuiton/wikitty/generator/
Modified:
trunk/wikitty-api/src/main/resources/org/nuiton/WikittyAPI.gwt.xml
trunk/wikitty-dto/pom.xml
trunk/wikitty-jdbc-impl/src/license/THIRD-PARTY.properties
trunk/wikitty-solr-impl/src/license/THIRD-PARTY.properties
Modified: trunk/wikitty-api/src/main/resources/org/nuiton/WikittyAPI.gwt.xml
===================================================================
--- trunk/wikitty-api/src/main/resources/org/nuiton/WikittyAPI.gwt.xml 2010-11-27 14:06:32 UTC (rev 531)
+++ trunk/wikitty-api/src/main/resources/org/nuiton/WikittyAPI.gwt.xml 2010-11-27 15:05:13 UTC (rev 532)
@@ -6,7 +6,7 @@
$Id$
$HeadURL$
%%
- Copyright (C) 2009 - 2010 CodeLutin, Benjamin Poussin
+ Copyright (C) 2009 - 2010 CodeLutin, Jean Couteau
%%
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as
@@ -27,6 +27,22 @@
<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 1.6.4//EN" "http://google-web-toolkit.googlecode.com/svn/tags/1.6.4/distro-source/core/…">
<module>
+ <source path="wikitty">
+ <exclude name="WikittyConfig.java"/>
+ <exclude name="*Abstract.java"/>
+ <exclude name="*Impl.java"/>
+ <exclude name="*Helper.java"/>
+ <exclude name="WikittyProxy.java"/>
+ <exclude name="WikittyService.java"/>
+ <exclude name="WikittyServiceFactory.java"/>
+ <exclude name="WikittyTree.java"/>
+ <exclude name="WikittyUtil.java"/>
+ <exclude name="addons/**/*.java"/>
+ <exclude name="search/**/*.java"/>
+ <exclude name="services/**/*.java"/>
+ <exclude name="storage/**/*.java"/>
+ </source>
+
<source path="wikitty/entities">
<exclude name="*Impl.java"/>
<exclude name="*Abstract.java"/>
Modified: trunk/wikitty-dto/pom.xml
===================================================================
--- trunk/wikitty-dto/pom.xml 2010-11-27 14:06:32 UTC (rev 531)
+++ trunk/wikitty-dto/pom.xml 2010-11-27 15:05:13 UTC (rev 532)
@@ -27,14 +27,10 @@
</dependency>
<dependency>
- <groupId>org.nuiton.eugene</groupId>
- <artifactId>eugene</artifactId>
- <scope>provided</scope>
- </dependency>
- <dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</dependency>
+
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
@@ -83,23 +79,15 @@
<executions>
<execution>
<id>api-dto-generation</id>
- <phase>generate-sources</phase>
+ <phase>process-sources</phase>
<configuration>
<inputs>
<input>classpath:model:/:wikitty.objectmodel</input>
</inputs>
- <fullPackagePath>
- org.nuiton.wikitty.entities
- </fullPackagePath>
- <defaultPackage>
- org.nuiton.wikitty.entities
- </defaultPackage>
- <extractedPackages>
- org.nuiton.wikitty.entities
- </extractedPackages>
- <templates>
- org.nuiton.wikitty.generator.WikittyDTOGenerator
- </templates>
+ <fullPackagePath>org.nuiton.wikitty.entities</fullPackagePath>
+ <defaultPackage>org.nuiton.wikitty.entities</defaultPackage>
+ <extractedPackages>org.nuiton.wikitty.entities</extractedPackages>
+ <templates>org.nuiton.wikitty.generator.WikittyDTOGenerator</templates>
</configuration>
<goals>
<goal>smart-generate</goal>
@@ -107,19 +95,6 @@
</execution>
</executions>
</plugin>
-
- <!-- expose new plexus components -->
- <plugin>
- <groupId>org.codehaus.plexus</groupId>
- <artifactId>plexus-component-metadata</artifactId>
- <executions>
- <execution>
- <goals>
- <goal>generate-metadata</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
</plugins>
</build>
Added: trunk/wikitty-dto/src/main/resources/org.nuiton/WikittyDTO.gwt.xml
===================================================================
--- trunk/wikitty-dto/src/main/resources/org.nuiton/WikittyDTO.gwt.xml (rev 0)
+++ trunk/wikitty-dto/src/main/resources/org.nuiton/WikittyDTO.gwt.xml 2010-11-27 15:05:13 UTC (rev 532)
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ #%L
+ Wikitty :: api
+
+ $Id$
+ $HeadURL$
+ %%
+ Copyright (C) 2009 - 2010 CodeLutin, Jean Couteau
+ %%
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation, either version 3 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Lesser Public License for more details.
+
+ You should have received a copy of the GNU General Lesser Public
+ License along with this program. If not, see
+ <http://www.gnu.org/licenses/lgpl-3.0.html>.
+ #L%
+ -->
+
+<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 1.6.4//EN"
+ "http://google-web-toolkit.googlecode.com/svn/tags/2.1.0/distro-source/core/…">
+<module>
+ <source path="wikitty/entities" />
+</module>
\ No newline at end of file
Modified: trunk/wikitty-jdbc-impl/src/license/THIRD-PARTY.properties
===================================================================
--- trunk/wikitty-jdbc-impl/src/license/THIRD-PARTY.properties 2010-11-27 14:06:32 UTC (rev 531)
+++ trunk/wikitty-jdbc-impl/src/license/THIRD-PARTY.properties 2010-11-27 15:05:13 UTC (rev 532)
@@ -11,6 +11,7 @@
# - COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0
# - Common Public License Version 1.0
# - Eclipse Public License - Version 1.0
+# - Indiana University Extreme! Lab Software License
# - Indiana University Extreme! Lab Software License, vesion 1.1.1
# - LGPL 2.1
# - LGPL 2.1 / The Apache Software License - Version 2.0
Modified: trunk/wikitty-solr-impl/src/license/THIRD-PARTY.properties
===================================================================
--- trunk/wikitty-solr-impl/src/license/THIRD-PARTY.properties 2010-11-27 14:06:32 UTC (rev 531)
+++ trunk/wikitty-solr-impl/src/license/THIRD-PARTY.properties 2010-11-27 15:05:13 UTC (rev 532)
@@ -9,6 +9,7 @@
# - COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0
# - Common Development and Distribution License (CDDL) v1.0
# - Common Public License Version 1.0
+# - Indiana University Extreme! Lab Software License
# - Indiana University Extreme! Lab Software License, vesion 1.1.1
# - LGPL 2.1
# - LGPL 2.1 / The Apache Software License - Version 2.0
1
0
Author: jcouteau
Date: 2010-11-27 15:06:32 +0100 (Sat, 27 Nov 2010)
New Revision: 531
Url: http://nuiton.org/repositories/revision/wikitty/531
Log:
Put back wrongly removed tests jar creation. Add a comment so that it is not removed again in the future.
Modified:
trunk/wikitty-api/pom.xml
Modified: trunk/wikitty-api/pom.xml
===================================================================
--- trunk/wikitty-api/pom.xml 2010-11-26 16:02:33 UTC (rev 530)
+++ trunk/wikitty-api/pom.xml 2010-11-27 14:06:32 UTC (rev 531)
@@ -172,6 +172,20 @@
</execution>
</executions>
</plugin>
+
+ <!-- Create a jar that includes all tests -->
+ <!-- Needed for wikitty-solr-impl tests -->
+ <plugin>
+ <artifactId>maven-jar-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>attach-test</id>
+ <goals>
+ <goal>test-jar</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
</plugins>
</build>
1
0
r530 - trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc
by sletellier@users.nuiton.org 26 Nov '10
by sletellier@users.nuiton.org 26 Nov '10
26 Nov '10
Author: sletellier
Date: 2010-11-26 17:02:33 +0100 (Fri, 26 Nov 2010)
New Revision: 530
Url: http://nuiton.org/repositories/revision/wikitty/530
Log:
Log error because PicoContainer eat them :(
Modified:
trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyJDBCUtil.java
Modified: trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyJDBCUtil.java
===================================================================
--- trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyJDBCUtil.java 2010-11-26 14:26:53 UTC (rev 529)
+++ trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyJDBCUtil.java 2010-11-26 16:02:33 UTC (rev 530)
@@ -277,9 +277,13 @@
return connection;
} catch(Exception eee) {
- throw new WikittyException(String.format(
- "Can't connect to database %s %s with login %s",
- driver, host, username), eee);
+
+ String msg = String.format(
+ "Can't connect to database %s %s with login %s and password %s",
+ driver, host, username, password);
+
+ log.error(msg, eee);
+ throw new WikittyException(msg, eee);
}
}
1
0
r529 - trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services
by bpoussin@users.nuiton.org 26 Nov '10
by bpoussin@users.nuiton.org 26 Nov '10
26 Nov '10
Author: bpoussin
Date: 2010-11-26 15:26:53 +0100 (Fri, 26 Nov 2010)
New Revision: 529
Url: http://nuiton.org/repositories/revision/wikitty/529
Log:
fix possible problem in RemoteNotifierEvent (possible infinit loop event)
Modified:
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceNotifier.java
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceNotifier.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceNotifier.java 2010-11-26 14:05:01 UTC (rev 528)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceNotifier.java 2010-11-26 14:26:53 UTC (rev 529)
@@ -598,7 +598,10 @@
if (transporter != null) {
// add this as listener when transporter is created without error
- ws.addWikittyServiceListener(this, WikittyService.ServiceListenerType.ALL); // weak reference
+ // FIX poussin 201O1126 remplacement du ALL par LOCAL
+ // sinon on renvoie des events qui nous ont ete envoyes :(
+ // ca risque de boucler :(
+ ws.addWikittyServiceListener(this, WikittyService.ServiceListenerType.LOCAL); // weak reference
}
}
if (log.isInfoEnabled()) {
1
0
r528 - trunk/wikitty-api/src/test/java/org/nuiton/wikitty/entities
by bpoussin@users.nuiton.org 26 Nov '10
by bpoussin@users.nuiton.org 26 Nov '10
26 Nov '10
Author: bpoussin
Date: 2010-11-26 15:05:01 +0100 (Fri, 26 Nov 2010)
New Revision: 528
Url: http://nuiton.org/repositories/revision/wikitty/528
Log:
fix test error
Modified:
trunk/wikitty-api/src/test/java/org/nuiton/wikitty/entities/WikittyCopyOnWriteTest.java
Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/entities/WikittyCopyOnWriteTest.java
===================================================================
--- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/entities/WikittyCopyOnWriteTest.java 2010-11-26 13:57:13 UTC (rev 527)
+++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/entities/WikittyCopyOnWriteTest.java 2010-11-26 14:05:01 UTC (rev 528)
@@ -32,8 +32,6 @@
WikittyLabelHelper.addLabels(copy, "titi");
- System.out.println("copy:" + copy);
-
// test de replaceWith d'un WImpl vers un WCopyOnWrite
{
Assert.assertFalse(WikittyLabelHelper.getLabels(w).equals(WikittyLabelHelper.getLabels(copy)));
@@ -57,9 +55,9 @@
Assert.assertEquals(copy.getExtensionNames(), Collections.singleton("WikittyLabel"));
}
- System.out.println("copy:" + copy + "\n" + copy2);
// test de replaceWith d'un WCopyOnWrite vers un WCopyOnWrite
{
+ WikittyLabelHelper.addLabels(copy2, "lala");
Assert.assertFalse(WikittyLabelHelper.getLabels(copy).equals(WikittyLabelHelper.getLabels(copy2)));
Assert.assertEquals(copy.getExtensionNames(), Collections.singleton("WikittyLabel"));
Assert.assertEquals(copy2.getExtensionNames(), Collections.singleton("WikittyLabel"));
1
0
Author: bpoussin
Date: 2010-11-26 14:57:13 +0100 (Fri, 26 Nov 2010)
New Revision: 527
Url: http://nuiton.org/repositories/revision/wikitty/527
Log:
rename method 'Wikitty.replace' to 'Wikitty.replaceWith'
rename class 'WikittyServiceImpl' to 'WikittyServiceStorage'
move bad package test entities to right place
add test on Wikitty.replaceWith method
fix bug in Wikitty.replaceWith method
Added:
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceStorage.java
trunk/wikitty-api/src/test/java/org/nuiton/wikitty/entities/
trunk/wikitty-api/src/test/java/org/nuiton/wikitty/entities/BusinessEntityImplTest.java
trunk/wikitty-api/src/test/java/org/nuiton/wikitty/entities/WikittyCopyOnWriteTest.java
Removed:
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceImpl.java
Modified:
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyConfig.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyService.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/main/java/org/nuiton/wikitty/services/WikittyEvent.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyExtensionMigrationRename.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceInMemory.java
trunk/wikitty-api/src/main/resources/wikitty-config-sample-inmemory.properties
trunk/wikitty-api/src/main/resources/wikitty-config-sample-server-slave.properties
trunk/wikitty-api/src/main/resources/wikitty-config-sample-server.properties
trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/WikittyUtilTest.java
trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyServiceJDBC.java
trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/services/WikittyServiceInMemoryJdbcSolr.java
trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/solr/test/WikittyServiceSolr.java
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyConfig.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyConfig.java 2010-11-26 13:57:08 UTC (rev 526)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyConfig.java 2010-11-26 13:57:13 UTC (rev 527)
@@ -44,7 +44,7 @@
* <li> pas de notification reseau
* <li> /tmp pour les exports
*
- * Si on utilise WikittyServiceImpl au lieu de WikittyServiceInMemory par defaut
+ * Si on utilise WikittyServiceStorage au lieu de WikittyServiceInMemory par defaut
* <li> base h2 embarque
* <li> solr
*
@@ -182,7 +182,7 @@
WIKITTY_WIKITTYSERVICE_COMPONENTS(
"wikitty.WikittyService.components",
_("WikittyService to use (list must be in right order. "
- + "ex: org.nuiton.wikitty.WikittyServiceImpl,org.nuiton.wikitty.WikittyServiceNotifier,org.nuiton.wikitty.WikittyServiceCached,org.nuiton.wikitty.WikittyServiceSecurity)"),
+ + "ex: org.nuiton.wikitty.WikittyServiceStorage,org.nuiton.wikitty.WikittyServiceNotifier,org.nuiton.wikitty.WikittyServiceCached,org.nuiton.wikitty.WikittyServiceSecurity)"),
WikittyServiceInMemory.class.getName(), String.class, false, false),
WIKITTY_WIKITTYSERVICEINMEMORY_PERSISTENCE(
@@ -195,9 +195,9 @@
"/tmp/wikitty-inmemory.ser", File.class, false, false),
- WIKITTY_WIKITTYSERVICEIMPL_COMPONENTS(
- "wikitty.WikittyServiceImpl.components",
- _("WikittyServiceImpl component to use (ExtensionStorage, WikittyStorage, SearchEngine)"),
+ WIKITTY_WIKITTYSERVICESTORAGE_COMPONENTS(
+ "wikitty.WikittyServiceStorage.components",
+ _("WikittyServiceStorage component to use (ExtensionStorage, WikittyStorage, SearchEngine)"),
"org.nuiton.wikitty.jdbc.WikittyExtensionStorageJDBC,"
+ "org.nuiton.wikitty.jdbc.WikittyStorageJDBC,"
+ "org.nuiton.wikitty.solr.WikittySearchEnginSolr", String.class, false, false),
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyService.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyService.java 2010-11-26 13:57:08 UTC (rev 526)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyService.java 2010-11-26 13:57:13 UTC (rev 527)
@@ -39,10 +39,10 @@
/**
* Wikitty service.
*
- * The main implementation for this interface is {@link WikittyServiceImpl}.
+ * The main implementation for this interface is {@link WikittyServiceStorage}.
* It can be used alone but this implementation doesn't deal with all
* stuffs described in this interface. Thus, other functionalities are added
- * to the implementation through objects that decorate WikittyServiceImpl :
+ * to the implementation through objects that decorate WikittyServiceStorage :
*
* <dl>
* <dt>{@link WikittyServiceCached}</dt>
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java 2010-11-26 13:57:08 UTC (rev 526)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java 2010-11-26 13:57:13 UTC (rev 527)
@@ -219,7 +219,7 @@
if(tagValues != null) {
for (String tag : tagValues.keySet()) {
String value = tagValues.get(tag);
- // replace " in string with \"
+ // replaceWith " in string with \"
value = value.replaceAll("\"", "\\\\\"");
// quote value with "..."
result += " " + tag + "=\"" + tagValues.get(tag) +"\"";
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 2010-11-26 13:57:08 UTC (rev 526)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/Wikitty.java 2010-11-26 13:57:13 UTC (rev 527)
@@ -49,7 +49,7 @@
* This two wikitty must have same id
* @param w wikitty where we take information
*/
- void replace(Wikitty w);
+ void replaceWith(Wikitty w);
String getId();
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 2010-11-26 13:57:08 UTC (rev 526)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyCopyOnWrite.java 2010-11-26 13:57:13 UTC (rev 527)
@@ -64,25 +64,19 @@
}
@Override
- public void replace(Wikitty w) {
- // test make a the copy once
- if (targetIsACopy) {
- target.replace(w);
- } else {
- try {
- target = w.clone();
- if (log.isTraceEnabled()) {
- log.trace(this + " now has for target " + target);
- }
- } catch (CloneNotSupportedException eee) {
- throw new WikittyException(String.format(
- "unable to clone wikitty %s", target), eee);
- }
- targetIsACopy = true;
+ public void replaceWith(Wikitty w) {
+ if (this == w) {
+ return;
}
+ substituteTargetWithCopy();
+ target.replaceWith(w);
}
- /** replace {@link #target} with a clone
+ public Wikitty getTarget() {
+ return target;
+ }
+
+ /** replaceWith {@link #target} with a clone
*
* this method must be called to prevent any modification on target
*/
@@ -91,6 +85,7 @@
if (! targetIsACopy) {
try {
target = target.clone();
+ targetIsACopy = true;
if (log.isTraceEnabled()) {
log.trace(this + " now has for target " + target);
}
@@ -98,7 +93,6 @@
throw new WikittyException(String.format(
"unable to clone wikitty %s", target), eee);
}
- targetIsACopy = true;
}
}
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 2010-11-26 13:57:08 UTC (rev 526)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyImpl.java 2010-11-26 13:57:13 UTC (rev 527)
@@ -120,12 +120,16 @@
* @param w wikitty where we take information
*/
@Override
- public void replace(Wikitty w) {
+ public void replaceWith(Wikitty w) {
// il faut que ce soit le meme objet mais pas la meme instance
// car ca ne sert a rien de copier un objet sur lui meme
if (this == w) {
return;
}
+ // all time search for WikittyImpl to do copy (prevent error)
+ if (w instanceof WikittyCopyOnWrite) {
+ replaceWith(((WikittyCopyOnWrite)w).getTarget());
+ }
if (this.getId().equals(w.getId())) {
this.extensions.clear();
this.fieldValue.clear();
@@ -926,7 +930,7 @@
@Override
public WikittyImpl clone() throws CloneNotSupportedException {
WikittyImpl result = new WikittyImpl(this.id);
- result.replace(this);
+ result.replaceWith(this);
return result;
}
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyEvent.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyEvent.java 2010-11-26 13:57:08 UTC (rev 526)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyEvent.java 2010-11-26 13:57:13 UTC (rev 527)
@@ -273,7 +273,7 @@
} else {
if (type.contains(WikittyEventType.PUT_WIKITTY)) {
Wikitty newWikitty = getWikitties().get(id);
- e.replace(newWikitty);
+ e.replaceWith(newWikitty);
}
if (type.contains(WikittyEventType.REMOVE_WIKITTY)) {
Date date = getRemoveDate().get(id);
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyExtensionMigrationRename.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyExtensionMigrationRename.java 2010-11-26 13:57:08 UTC (rev 526)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyExtensionMigrationRename.java 2010-11-26 13:57:13 UTC (rev 527)
@@ -90,7 +90,7 @@
Wikitty result = new WikittyImpl(wikittyId);
result.setVersion(wikittyVersion);
- // Add all extension and replace old by the new
+ // Add all extension and replaceWith old by the new
for (WikittyExtension extension : wikitty.getExtensions()) {
// add one by one to manage require
Deleted: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceImpl.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceImpl.java 2010-11-26 13:57:08 UTC (rev 526)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceImpl.java 2010-11-26 13:57:13 UTC (rev 527)
@@ -1,1150 +0,0 @@
-/*
- * #%L
- * Wikitty :: api
- *
- * $Id$
- * $HeadURL$
- * %%
- * Copyright (C) 2009 - 2010 CodeLutin, Benjamin Poussin
- * %%
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>.
- * #L%
- */
-
-package org.nuiton.wikitty.services;
-
-import org.nuiton.wikitty.storage.WikittyExtensionStorage;
-import org.nuiton.wikitty.storage.WikittySearchEngin;
-import org.nuiton.wikitty.storage.WikittyStorage;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.AbstractMap.SimpleEntry;
-import java.util.LinkedHashSet;
-import java.util.Map.Entry;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.nuiton.wikitty.search.Criteria;
-import org.nuiton.wikitty.entities.FieldType;
-import org.nuiton.wikitty.search.PagedResult;
-import org.nuiton.wikitty.entities.Wikitty;
-import org.nuiton.wikitty.WikittyException;
-import org.nuiton.wikitty.entities.WikittyExtension;
-import org.nuiton.wikitty.WikittyService;
-import org.nuiton.wikitty.WikittyTree;
-import org.nuiton.wikitty.entities.WikittyTreeNode;
-import org.nuiton.wikitty.entities.WikittyTreeNodeHelper;
-import org.nuiton.wikitty.entities.WikittyTreeNodeImpl;
-import org.nuiton.wikitty.WikittyUtil;
-import org.nuiton.wikitty.entities.ExtensionFactory;
-import org.nuiton.wikitty.search.Search;
-import org.nuiton.wikitty.search.operators.Element;
-
-/**
- * WikittyService is main service
- *
- * @author poussin
- * @version $Revision$
- *
- * Last update: $Date$
- * by : $Author$
- */
-public class WikittyServiceImpl implements WikittyService {
-
- /** to use log facility, just put in your code: log.info(\"...\"); */
- static private Log log = LogFactory.getLog(WikittyServiceImpl.class);
-
- /** Default migration use to migrate a wikitty in last extension version */
- protected WikittyExtensionMigration defaultExtensionMigration =
- new WikittyExtensionMigrationRename();
-
- protected WikittySearchEngin searchEngin;
- protected WikittyExtensionStorage extensionStorage;
- protected WikittyStorage wikittyStorage;
-
- /**
- * TODO poussin 20101027 remove it when all used WikittyServiceHelper.build
- *
- * Used by specific child
- * {@link org.nuiton.wikitty.jdbc.WikittyServiceJDBC}
- * {@link org.nuiton.wikitty.jdbc.WikittyServiceJPA}
- * {@link org.nuiton.wikitty.jdbc.WikittyServiceHbase}
- */
- protected WikittyServiceImpl() {
- }
-
- public WikittyServiceImpl(WikittyExtensionStorage extensionStorage,
- WikittyStorage wikittyStorage,
- WikittySearchEngin searchEngin) {
- this.extensionStorage = extensionStorage;
- this.wikittyStorage = wikittyStorage;
- this.searchEngin = searchEngin;
- }
-
- protected WikittySearchEngin getSearchEngin() {
- return searchEngin;
- }
-
- protected WikittyExtensionStorage getExtensionStorage() {
- return extensionStorage;
- }
-
- protected WikittyStorage getWikittyStorage() {
- return wikittyStorage;
- }
-
- /*
- * @see org.nuiton.wikitty.WikittyService#addWikittyServiceListener(org.nuiton.wikitty.WikittyListener, org.nuiton.wikitty.WikittyService.ServiceListenerType)
- */
- @Override
- public void addWikittyServiceListener(WikittyListener listener, ServiceListenerType type) {
- throw new UnsupportedOperationException("Can't add listener on " + WikittyServiceImpl.class.getName());
- }
-
- /*
- * @see org.nuiton.wikitty.WikittyService#removeWikittyServiceListener(org.nuiton.wikitty.WikittyListener, org.nuiton.wikitty.WikittyService.ServiceListenerType)
- */
- @Override
- public void removeWikittyServiceListener(WikittyListener listener, ServiceListenerType type) {
- throw new UnsupportedOperationException("Can't remove listener on " + WikittyServiceImpl.class.getName());
- }
-
- @Override
- public String login(String login, String password) {
- log.warn("login asked, but there is no security service");
- return null;
- }
-
- @Override
- public void logout(String securityToken) {
- log.warn("logout asked, but there is no security service");
- }
-
- @Override
- public boolean canWrite(String securityToken, Wikitty wikitty) {
- return true;
- }
-
- @Override
- public boolean canDelete(String securityToken, String wikittyId) {
- return true;
- }
-
- @Override
- public boolean canRead(String securityToken, String wikittyId) {
- return true;
- }
-
- protected void checkConstraint(Collection<Wikitty> wikitties) {
- for(Wikitty w : wikitties) {
- for(WikittyExtension ext : w.getExtensions()) {
- for (String fieldName : ext.getFieldNames()) {
- FieldType type = ext.getFieldType(fieldName);
- if (type.isNotNull()) {
- if (null == w.getFieldAsObject(ext.getName(), fieldName)) {
- throw new WikittyException(String.format(
- "Field %s must not be null", fieldName));
- }
- }
- }
- }
- }
- }
-
-// @Override
-// public UpdateResponse store(String securityToken, WikittyTransaction transaction,
-// Collection<Wikitty> wikitties, boolean force) {
-// if (!(wikitties instanceof Set)) {
-// // use all time Set to prevent duplicated wikitty in collection
-// wikitties = new LinkedHashSet<Wikitty>(wikitties);
-// }
-// checkConstraint(wikitties);
-//
-// // update/store extension if necessary
-// Set<WikittyExtension> allExtensions = new LinkedHashSet<WikittyExtension>();
-// for (Wikitty w : wikitties) {
-// // collect all extensions used by all wikitties
-// allExtensions.addAll(w.getExtensions());
-// }
-//
-// // try to commit command
-// UpdateResponse extUpdate = getExtensionStorage().store(transaction, allExtensions);
-// UpdateResponse wikUpdate = getWikittyStorage().store(transaction, wikitties, force);
-// UpdateResponse indexUpdate = getSearchEngin().store(transaction, wikitties);
-//
-// UpdateResponse result = new UpdateResponse();
-// // prepare update client response
-// result.add(extUpdate);
-// result.add(wikUpdate);
-// result.add(indexUpdate);
-//
-// return result;
-// }
- @Override
- public WikittyEvent store(String securityToken,
- Collection<Wikitty> wikitties, boolean force) {
- WikittyEvent result = store(securityToken, null, wikitties, force);
- return result;
- }
-
- protected WikittyEvent store(String securityToken,
- WikittyTransaction transaction,
- Collection<Wikitty> wikitties, boolean force) {
- if (!(wikitties instanceof Set)) {
- // use all time Set to prevent duplicated wikitty in collection
- wikitties = new LinkedHashSet<Wikitty>(wikitties);
- }
- checkConstraint(wikitties);
-
- // update/store extension if necessary
- Set<WikittyExtension> allExtensions = new LinkedHashSet<WikittyExtension>();
- for (Wikitty w : wikitties) {
- // collect all extensions used by all wikitties
- allExtensions.addAll(w.getExtensions());
- }
-
- boolean txCreated = false;
- try {
- if (transaction == null) {
- transaction = new WikittyTransaction();
- txCreated = true;
- transaction.begin();
- }
-
- // try to commit command
- WikittyEvent extUpdate =
- getExtensionStorage().store(transaction, allExtensions);
- WikittyEvent wikUpdate =
- getWikittyStorage().store(transaction, wikitties, force);
- getSearchEngin().store(transaction, wikitties);
-
- WikittyEvent result = new WikittyEvent(this);
- // prepare update client response
- result.add(extUpdate);
- result.add(wikUpdate);
-
- if (txCreated) {
- transaction.commit();
- }
- return result;
- } catch (WikittyException ex) {
- if (transaction != null) {
- transaction.rollback();
- }
- throw ex;
- } catch (Exception eee) {
- if (transaction != null) {
- transaction.rollback();
- }
- throw new WikittyException("Can't store wikitty", eee);
- }
- }
-
- @Override
- public List<String> getAllExtensionIds(String securityToken) {
- WikittyTransaction transaction = new WikittyTransaction();
- try {
- transaction.begin();
-
- List<String> result = getExtensionStorage().getAllExtensionIds(transaction);
-
- transaction.commit();
- return result;
- } catch (Exception eee) {
- transaction.rollback();
- throw new WikittyException("Can't retrieve all extension's ids", eee);
- }
- }
-
- @Override
- public List<String> getAllExtensionsRequires(
- String securityToken, String extensionName) {
- WikittyTransaction transaction = new WikittyTransaction();
- try {
- transaction.begin();
-
- List<String> result = getExtensionStorage()
- .getAllExtensionsRequires(transaction, extensionName);
-
- transaction.commit();
- return result;
- } catch (Exception eee) {
- transaction.rollback();
- throw new WikittyException(String.format(
- "Can't retrieve all required extension for %s", extensionName), eee);
- }
- }
-
- @Override
- public WikittyEvent storeExtension(
- String securityToken, Collection<WikittyExtension> exts) {
- WikittyEvent result = storeExtension(securityToken, null, exts);
- return result;
- }
-
- @Override
- public WikittyEvent deleteExtension(
- String securityToken, Collection<String> extNames) {
- WikittyEvent result = deleteExtension(securityToken, null, extNames);
- return result;
- }
-
- protected WikittyEvent storeExtension(String securityToken,
- WikittyTransaction transaction, Collection<WikittyExtension> exts) {
- boolean txCreated = false;
- try {
- if (transaction == null) {
- transaction = new WikittyTransaction();
- txCreated = true;
- transaction.begin();
- }
-
- WikittyEvent result =
- getExtensionStorage().store(transaction, exts);
-
- if (txCreated) {
- transaction.commit();
- }
- return result;
- } catch (WikittyException ex) {
- if (transaction != null) {
- transaction.rollback();
- }
- throw ex;
- } catch (Exception eee) {
- if (transaction != null) {
- transaction.rollback();
- }
- throw new WikittyException("Can't store extensions", eee);
- }
- }
-
- protected WikittyEvent deleteExtension(String securityToken,
- WikittyTransaction transaction, Collection<String> extNames) {
- boolean txCreated = false;
- try {
- if (transaction == null) {
- transaction = new WikittyTransaction();
- txCreated = true;
- transaction.begin();
- }
-
- // check that all extensions are not used
- for(String name : extNames) {
- // only name are stored in index, search only on name
- Criteria criteria = Search.query().eq(Element.ELT_EXTENSION, name).criteria();
- criteria.setEndIndex(0); // result is not use, just numFound
- PagedResult<String> wikittyWithExt = findAllByCriteria(
- securityToken, transaction, criteria);
- int numFound = wikittyWithExt.getNumFound();
- if (numFound > 0) {
- throw new WikittyException(String.format(
- "Can't delete %s extension, this extension"
- + " is in used by %s wikitty",
- name, numFound));
- }
- }
-
- WikittyEvent result =
- getExtensionStorage().delete(transaction, extNames);
-
- if (txCreated) {
- transaction.commit();
- }
- return result;
- } catch (WikittyException ex) {
- if (transaction != null) {
- transaction.rollback();
- }
- throw ex;
- } catch (Exception eee) {
- if (transaction != null) {
- transaction.rollback();
- }
- throw new WikittyException("Can't delete extensions", eee);
- }
- }
-
- @Override
- public WikittyExtension restoreExtension(
- String securityToken, String extensionId) {
- WikittyExtension result = restoreExtension(securityToken, null, extensionId);
- return result;
- }
-
- protected WikittyExtension restoreExtension(
- String securityToken, WikittyTransaction transaction, String extensionId) {
- boolean txCreated = false;
- try {
- if (transaction == null) {
- transaction = new WikittyTransaction();
- txCreated = true;
- transaction.begin();
- }
-
- //split the id to ensure that version is normalized
- String name = WikittyExtension.computeName(extensionId);
- String version = WikittyExtension.computeVersion(extensionId);
-
- WikittyExtension result = getExtensionStorage().restore(transaction, name, version);
-
- if (txCreated) {
- transaction.commit();
- }
- return result;
- } catch (WikittyException ex) {
- if (transaction != null) {
- transaction.rollback();
- }
- throw ex;
- } catch (Exception eee) {
- if (transaction != null) {
- transaction.rollback();
- }
- throw new WikittyException("Can't restore extensions", eee);
- }
- }
-
- @Override
- public WikittyExtension restoreExtensionLastVersion(
- String securityToken, String name) {
- WikittyExtension result = restoreExtensionLastVersion(securityToken, null, name);
- return result;
- }
-
- protected WikittyExtension restoreExtensionLastVersion(String securityToken,
- WikittyTransaction transaction, String name) {
- String version = getExtensionStorage().getLastVersion(transaction, name);
- if(version == null) {
- return null;
- }
-
- boolean txCreated = false;
- try {
- if (transaction == null) {
- transaction = new WikittyTransaction();
- txCreated = true;
- transaction.begin();
- }
-
- WikittyExtension result = getExtensionStorage().restore(transaction, name, version);
-
- if (txCreated) {
- transaction.commit();
- }
- return result;
- } catch (WikittyException ex) {
- if (transaction != null) {
- transaction.rollback();
- }
- throw ex;
- } catch (Exception eee) {
- if (transaction != null) {
- transaction.rollback();
- }
- throw new WikittyException("Can't store extensions", eee);
- }
- }
-
- protected Wikitty restore(String securityToken,
- WikittyTransaction transaction, String id) {
- if (id == null) {
- return null;
- }
- if (!getWikittyStorage().exists(transaction, id)) {
- // object doesn't exist, we return null
- return null;
- }
-
- if (getWikittyStorage().isDeleted(transaction, id)) {
- // object deleted, we return null
- return null;
- }
- Wikitty result = getWikittyStorage().restore(transaction, id);
- if(result != null) {
- result = upgradeData(securityToken, transaction, result);
- }
- return result;
- }
-
- @Override
- public List<Wikitty> restore(String securityToken, List<String> ids) {
- List<Wikitty> result = restore(securityToken, null, ids);
- return result;
- }
-
- protected List<Wikitty> restore(String securityToken,
- WikittyTransaction transaction, List<String> ids) {
-
- List<Wikitty> result = new ArrayList<Wikitty>();
- boolean txCreated = false;
- try {
- if (transaction == null) {
- transaction = new WikittyTransaction();
- txCreated = true;
- transaction.begin();
- }
-
- for (String id : ids) {
- Wikitty w = restore(securityToken, transaction, id);
- // on l'ajoutde tout le temps, meme si w est nul lorsqu'il y a
- // une demande et qu'elle echoue on ajout
- // bien null, pour qu'il y ait une correspondance 1 pour 1
- // avec la demande
- result.add(w);
- }
- if (txCreated) {
- transaction.commit();
- }
- return result;
- } catch (WikittyException ex) {
- if (transaction != null) {
- transaction.rollback();
- }
- throw ex;
- } catch (Exception eee) {
- if (transaction != null) {
- transaction.rollback();
- }
- throw new WikittyException("Can't restore wikitty", eee);
- }
- }
-
- // FIXME poussin 20101029 use WikittyServiceTransaction and remove other transaction
- protected Wikitty upgradeData(String securityToken,
- WikittyTransaction transaction, Wikitty wikitty) {
- Wikitty result = wikitty;
-
- Collection<WikittyExtension> extensions = wikitty.getExtensions();
- for (WikittyExtension extension : extensions) {
- String extensionName = extension.getName();
-
- if (log.isDebugEnabled()) {
- log.debug("extensionName=" + extensionName);
- }
-
- WikittyExtension currentExtension = extension;
- String currentExtensionVersion = currentExtension.getVersion();
-
- WikittyExtension lastExtension = restoreExtensionLastVersion(
- securityToken, transaction, extensionName);
- String lastExtensionVersion = lastExtension.getVersion();
-
- if (log.isDebugEnabled()) {
- log.debug("lastExtensionVersion=" + lastExtensionVersion);
- }
-
- WikittyExtensionMigration migration =
- WikittyExtensionMigration.migrationRegistry.get(extensionName);
- if (migration == null) {
- migration = defaultExtensionMigration;
- }
-
- // Loop on between extension in wikitty and last version
- while(WikittyUtil.versionGreaterThan(lastExtensionVersion, currentExtensionVersion)) {
-
- // Get extension after the current version
- String nextExtensionVersion =
- WikittyUtil.incrementMajorRevision(currentExtensionVersion);
- String nextExtensionId =
- WikittyExtension.computeId(extensionName, nextExtensionVersion);
- WikittyExtension nextExtension = restoreExtension(
- securityToken, transaction, nextExtensionId);
-
- if (log.isDebugEnabled()) {
- log.debug("currentExtensionVersion=" + currentExtensionVersion);
- log.debug("nextExtensionVersion=" + nextExtensionVersion);
- }
-
- // Test if extension is never use in this version
- if(nextExtension != null) {
- result = migration.migrate(this, result,
- currentExtension, nextExtension);
- currentExtension = nextExtension;
- }
-
- // Follow
- currentExtensionVersion = nextExtensionVersion;
- }
- }
-
- return result;
- }
-
- protected WikittyEvent delete(String securityToken, WikittyTransaction transaction,
- Collection<String> ids) throws WikittyException {
- // work only on valid id
- Collection<Wikitty> storedWikitties = new LinkedHashSet<Wikitty>();
- // copy ids because we can remove some element, and modify it
- // use set to prevent id duplication and preformance (contains method call)
- Set<String> idSet = new LinkedHashSet<String>(ids);
- for (Iterator<String> i = idSet.iterator(); i.hasNext();) {
- String id = i.next();
- // test if wikitty exists
- if (!getWikittyStorage().exists(transaction, id)) {
- // don't exist, remove this id in id list
- i.remove();
- // go to the next id, because this id doesn't exist and can't
- // be used in tree
- continue;
- }
- if (getWikittyStorage().isDeleted(transaction, id)) {
- // already deleted, remove this id in id list
- i.remove();
- // go to the next id, because this id already deleted and can't
- // be used in tree
- continue;
- }
-
- // Store node with have deleted node as parent
- Criteria criteria =
- Search.query().eq(WikittyTreeNode.FQ_FIELD_WIKITTYTREENODE_PARENT, id).criteria();
- List<String> wikittyNodesId = findAllByCriteria(
- securityToken, transaction, criteria).getAll();
- for (String wikittyNodeId : wikittyNodesId) {
- if(!idSet.contains(wikittyNodeId)) {
- Wikitty treeNode = restore(
- securityToken, transaction, wikittyNodeId);
- WikittyTreeNodeHelper.setParent(treeNode, null);
- storedWikitties.add(treeNode);
- }
- }
-
- // Store node with have deleted child
- criteria = Search.query().eq(WikittyTreeNode.FQ_FIELD_WIKITTYTREENODE_ATTACHMENT, id).criteria();
- wikittyNodesId = findAllByCriteria(
- securityToken, transaction, criteria).getAll();
- for (String wikittyNodeId : wikittyNodesId) {
- if(!idSet.contains(wikittyNodeId)) {
- Wikitty treeNode = restore(
- securityToken, transaction, wikittyNodeId);
- WikittyTreeNodeHelper.removeAttachment(treeNode, id);
- storedWikitties.add(treeNode);
- }
- }
- }
-
- WikittyEvent eventDelete =
- getWikittyStorage().delete(transaction, idSet);
- getSearchEngin().delete(transaction, idSet);
-
- WikittyEvent eventStore =
- store(securityToken, transaction, storedWikitties, false);
-
- WikittyEvent result = new WikittyEvent(this);
- result.add(eventDelete);
- result.add(eventStore);
-
- return result;
- }
-
- @Override
- public WikittyEvent delete(String securityToken, Collection<String> ids){
- WikittyTransaction transaction = new WikittyTransaction();
- try {
- transaction.begin();
-
- WikittyEvent result = delete(securityToken, transaction, ids);
-
- transaction.commit();
- return result;
- } catch (Exception eee) {
- transaction.rollback();
- throw new WikittyException("Can't delete wikitty", eee);
- }
- }
-
- /**
- * Use with caution : It will delete ALL indexes from search engine !
- * This operation should be disabled in production environment.
- */
- @Override
- public WikittyEvent clear(String securityToken) {
- WikittyTransaction transaction = new WikittyTransaction();
- try {
- transaction.begin();
-
-
- WikittyEvent result = clear(securityToken, transaction);
-
- transaction.commit();
- return result;
- } catch (Exception eee) {
- transaction.rollback();
- throw new WikittyException("Can't clear all data", eee);
- }
- }
-
- /**
- * Use with caution : It will delete ALL indexes from search engine !
- * This operation should be disabled in production environment.
- */
- protected WikittyEvent clear(String securityToken, WikittyTransaction tx) {
- getSearchEngin().clear(tx);
- WikittyEvent eventWik = getWikittyStorage().clear(tx);
- WikittyEvent eventExt = getExtensionStorage().clear(tx);
-
- WikittyEvent result = new WikittyEvent(this);
- result.add(eventWik);
- result.add(eventExt);
- return result;
- }
-
- /**
- * Assume that this PagedResult contains wikitty id as result and
- * return new PagedResult with Wikitty instance
- */
- @Override
- public PagedResult<String> findAllByCriteria(
- String securityToken, Criteria criteria) {
- PagedResult<String> result = findAllByCriteria(securityToken, null, criteria);
- return result;
- }
-
- protected PagedResult<String> findAllByCriteria(String securityToken,
- WikittyTransaction transaction, Criteria criteria) {
- try {
- boolean txCreated = false;
- if (transaction == null) {
- transaction = new WikittyTransaction();
- txCreated = true;
- transaction.begin();
- }
-
- PagedResult<String> result =
- getSearchEngin().findAllByCriteria(transaction, criteria);
- if (txCreated) {
- transaction.commit();
- }
- return result;
- } catch (WikittyException ex) {
- if (transaction != null) {
- transaction.rollback();
- }
- throw ex;
- } catch (Exception eee) {
- if (transaction != null) {
- transaction.rollback();
- }
- throw new WikittyException("Error during find", eee);
- }
- }
-
- @Override
- public Wikitty findByCriteria(String securityToken, Criteria criteria) {
- Wikitty result = findByCriteria(securityToken, null, criteria);
- return result;
- }
-
- protected Wikitty findByCriteria(String securityToken,
- WikittyTransaction transaction, Criteria criteria) {
- try {
- boolean txCreated = false;
- if (transaction == null) {
- transaction = new WikittyTransaction();
- txCreated = true;
- transaction.begin();
- }
-
- criteria.setFirstIndex(0).setEndIndex(1);
- PagedResult<String> pages = findAllByCriteria(
- securityToken, transaction, criteria);
-
- Wikitty result = null;
- if (pages.size() > 0) {
- String id = pages.getFirst();
- result = restore(securityToken, transaction, id);
- }
-
- if (txCreated) {
- transaction.commit();
- }
- return result;
- } catch (WikittyException ex) {
- if (transaction != null) {
- transaction.rollback();
- }
- throw ex;
- } catch (Exception eee) {
- if (transaction != null) {
- transaction.rollback();
- }
- throw new WikittyException("Error during find", eee);
- }
- }
-
- protected WikittyTree restoreTree(String securityToken,
- WikittyTransaction transaction, String wikittyId) {
- Wikitty w = restore(securityToken, transaction, wikittyId);
- if(w == null) {
- return null;
- }
-
- if ( !w.hasExtension(WikittyTreeNode.EXT_WIKITTYTREENODE) ) {
- throw new WikittyException(String.format(
- "Wikitty '%s' do not handle extension %s",
- wikittyId, WikittyTreeNode.EXT_WIKITTYTREENODE ));
- }
- WikittyTree tree = new WikittyTree();
- WikittyTreeNode node = new WikittyTreeNodeImpl(w);
- tree.setNode(node);
-
- WikittyTreeNodeImpl exempleNode = new WikittyTreeNodeImpl();
- exempleNode.setParent(wikittyId);
-
- Criteria criteria = Search.query(exempleNode.getWikitty()).criteria()
- .setFirstIndex(0).setEndIndex(Criteria.ALL_ELEMENTS);
- PagedResult<String> childNodesId = findAllByCriteria(
- securityToken, transaction, criteria);
- for (String childNodeId : childNodesId.getAll()) {
- tree.addChild(restoreTree(securityToken, transaction, childNodeId));
- }
-
- return tree;
- }
-
- @Override
- public WikittyTree restoreTree(String securityToken, String wikittyId) {
- WikittyTransaction transaction = new WikittyTransaction();
- try {
- transaction.begin();
-
- WikittyTree tree = restoreTree(securityToken, transaction, wikittyId);
-
- transaction.commit();
- return tree;
- } catch (Exception eee) {
- transaction.rollback();
- throw new WikittyException("Can't restore tree", eee);
- }
- }
-
- @Override
- public WikittyEvent deleteTree(String securityToken, String thesaurusId) {
- WikittyTransaction transaction = new WikittyTransaction();
- try {
- transaction.begin();
-
- WikittyEvent result = deleteTree(securityToken, transaction, thesaurusId);
-
- transaction.commit();
- return result;
- } catch (Exception eee) {
- transaction.rollback();
- throw new WikittyException("Can't delete tree", eee);
- }
- }
-
- /**
- * Delete specified treenode and sub treenode.
- *
- * @param securityToken security token
- * @param transaction transaction
- * @param treeNodeId thesaurusId to delete
- * @return all id of delete nodes
- */
- protected WikittyEvent deleteTree(String securityToken, WikittyTransaction transaction, String treeNodeId) {
- List<String> allTreeNodeId = getRecursiveTreeNodeId(securityToken, transaction, treeNodeId);
- WikittyEvent result = delete(securityToken, transaction, allTreeNodeId);
- return result;
- }
-
- /**
- * Get recursive id of tree node children of {@code treeNodeId}.
- *
- * @param securityToken security token
- * @param transaction transaction
- * @param treeNodeId tree node id
- * @return all id of {@code treeNodeId}'s children
- */
- protected List<String> getRecursiveTreeNodeId(String securityToken, WikittyTransaction transaction, String treeNodeId) {
-
- Search search = Search.query();
- search = search.eq(WikittyTreeNode.FQ_FIELD_WIKITTYTREENODE_PARENT, treeNodeId);
- Criteria criteria = search.criteria();
-
- PagedResult<String> childTreeNodeIds = findAllByCriteria(securityToken, transaction, criteria);
- List<String> treeNodeIds = new ArrayList<String>();
- treeNodeIds.add(treeNodeId);
- for (String childTreeNodeId : childTreeNodeIds.getAll()) {
- List<String> subTreeNodeIds = getRecursiveTreeNodeId(securityToken, transaction, childTreeNodeId);
- treeNodeIds.addAll(subTreeNodeIds);
- }
- return treeNodeIds;
- }
-
- @Override
- public Map.Entry<WikittyTreeNode, Integer> restoreNode(String securityToken,
- String wikittyId, Criteria filter) {
- WikittyTransaction transaction = new WikittyTransaction();
- try {
- transaction.begin();
-
- Wikitty w = restore(securityToken, transaction, wikittyId);
- if(w == null) {
- transaction.commit();
- return null;
- }
-
- if ( !w.hasExtension(WikittyTreeNode.EXT_WIKITTYTREENODE) ) {
- throw new WikittyException(String.format(
- "Wikitty '%s' do not handle extension %s",
- wikittyId, WikittyTreeNode.EXT_WIKITTYTREENODE ));
- }
-
- WikittyTreeNode node = new WikittyTreeNodeImpl(w);
- Integer count = getSearchEngin().findNodeCount(transaction, w, filter);
-
- HashMap.SimpleEntry<WikittyTreeNode, Integer> result =
- new SimpleEntry<WikittyTreeNode, Integer>(node, count);
-
- transaction.commit();
- return result;
- } catch (Exception eee) {
- transaction.rollback();
- throw new WikittyException("Can't restore node", eee);
- }
- }
-
- @Override
- public Map<WikittyTreeNode, Integer> restoreChildren(String securityToken,
- String wikittyId, Criteria filter) {
- WikittyTransaction transaction = new WikittyTransaction();
- try {
- transaction.begin();
-
- Wikitty w = restore(securityToken, transaction, wikittyId);
- if(w == null) {
- transaction.commit();
- return null;
- }
-
- if ( !w.hasExtension(WikittyTreeNode.EXT_WIKITTYTREENODE) ) {
- throw new WikittyException(String.format(
- "Wikitty '%s' do not handle extension %s",
- wikittyId, WikittyTreeNode.EXT_WIKITTYTREENODE ));
- }
-
- Map<WikittyTreeNode, Integer> result = new LinkedHashMap<WikittyTreeNode, Integer>();
-
- Map<String, Integer> search = getSearchEngin().findAllChildrenCount(
- transaction, w, filter);
- Set<Entry<String, Integer>> children = search.entrySet();
- for (Entry<String, Integer> child : children) {
- Integer count = child.getValue();
-
- String id = child.getKey();
- Wikitty wikitty = restore(securityToken, transaction, id);
- WikittyTreeNode node = new WikittyTreeNodeImpl(wikitty);
-
- result.put(node, count);
- }
-
- transaction.commit();
- return result;
- } catch (Exception eee) {
- transaction.rollback();
- throw new WikittyException("Can't restore children", eee);
- }
- }
-
- @Override
- public Wikitty restoreVersion(String securityToken,
- String wikittyId, String version) {
- throw new UnsupportedOperationException("Not supported yet.");
- }
-
- @Override
- public void syncEngin(final String securityToken) {
- final WikittyTransaction transaction = new WikittyTransaction();
- try {
- final int numberForCommit = 1000;
- final WikittySearchEngin searchEngin = getSearchEngin();
- final List<Wikitty> wikitties = new ArrayList<Wikitty>(numberForCommit);
-
- transaction.begin();
- searchEngin.clear(transaction);
- transaction.commit();
- transaction.begin();
-
- getWikittyStorage().scanWikitties(transaction, new WikittyStorage.Scanner() {
- int count = 0;
-
- @Override
- public void scan(String wikittyId) {
- Wikitty wikitty = restore(securityToken, transaction, wikittyId);
- Date deleteDate = wikitty.getDeleteDate();
- if(deleteDate == null) {
- count ++;
- wikitties.add(wikitty);
-
- if(count == numberForCommit) {
- // Reindex
- searchEngin.store(transaction, wikitties);
- transaction.commit();
- // Reinit
- count = 0;
- wikitties.clear();
- transaction.begin();
- }
- }
- }
- });
-
- // Last wikitties
- searchEngin.store(transaction, wikitties);
- transaction.commit();
- } catch (Exception eee) {
- transaction.rollback();
- throw new WikittyException("Can't sync searchable index with data", eee);
- }
- }
-
- /**
- * Question:
- * <li> on ne force pas le store de wikitty, ils vont donc avoir potentiellement
- * des versions differentes sur plusieurs serveurs, est-ce problematique ?
- * <li> on ne passe pas la date de suppression des wikitties, ils vont donc
- * avoir différente date de suppression sur différent serveur, est-ce problematique ?
- *
- *
- * @param securityToken
- * @param events
- * @return
- */
- @Override
- public WikittyEvent replay(
- String securityToken, List<WikittyEvent> events, boolean force) {
- // indique qu'il faut vider la base avant de faire les ajouts
- boolean mustClear = false;
-
- // tous les objets a sauver
- Map<String, Wikitty> toAddWikitty = new LinkedHashMap<String, Wikitty>();
- // tous les id a supprimer
- Map<String, Date> toRemoveWikitty = new LinkedHashMap<String, Date>();
-
- // toutes les extensions a sauver
- Set<WikittyExtension> toAddExt = new LinkedHashSet<WikittyExtension>();
- // toutes les extensions a supprimer
- Set<String> toDeleteExt = new LinkedHashSet<String>();
-
- // recherche un event avec un clear pour ne pas jouer des events inutiles
- // recherche un store + delete du meme wikitty
- // recherche le dernier store du wikitty
- for (WikittyEvent e : events) {
- // check clear must be the first, if event have clear and other type
- // clear is all time play first
- if (e.getType().contains(
- WikittyEvent.WikittyEventType.CLEAR_WIKITTY)
- || e.getType().contains(
- WikittyEvent.WikittyEventType.CLEAR_EXTENSION)) {
- mustClear = true;
- toAddWikitty.clear();
- toRemoveWikitty.clear();
- toAddExt.clear();
- }
- if (e.getType().contains(WikittyEvent.WikittyEventType.PUT_WIKITTY)) {
- for (Wikitty w : e.getWikitties().values()) {
- toAddWikitty.put(w.getId(), w);
- }
- }
- if (e.getType().contains(WikittyEvent.WikittyEventType.REMOVE_WIKITTY)) {
- for (Map.Entry<String, Date> entry : e.getRemoveDate().entrySet()) {
- toAddWikitty.remove(entry.getKey());
- toRemoveWikitty.put(entry.getKey(), entry.getValue());
- }
- }
- if (e.getType().contains(WikittyEvent.WikittyEventType.PUT_EXTENSION)) {
- for (WikittyExtension ext : e.getExtensions().values()) {
- toAddExt.add(ext);
- }
- }
- if (e.getType().contains(WikittyEvent.WikittyEventType.REMOVE_EXTENSION)) {
- for (String extName : e.getDeletedExtensions()) {
- toDeleteExt.add(extName);
- }
- }
- }
-
- WikittyTransaction tx = new WikittyTransaction();
- try {
- tx.begin();
-
- WikittyEvent result = new WikittyEvent(this);
- if (mustClear) {
- WikittyEvent eventClear = clear(securityToken, tx);
- result.add(eventClear);
- }
- WikittyEvent eventStoreExtension =
- storeExtension(securityToken, tx, toAddExt);
- result.add(eventStoreExtension);
-
- WikittyEvent eventDeleteExtension =
- deleteExtension(securityToken, tx, toDeleteExt);
- result.add(eventDeleteExtension);
-
- WikittyEvent eventStoreWikitty =
- store(securityToken, tx, toAddWikitty.values(), force);
- result.add(eventStoreWikitty);
-
- WikittyEvent eventDeleteWikitty =
- delete(securityToken, tx, toRemoveWikitty.keySet());
- result.add(eventDeleteWikitty);
-
- tx.commit();
- return result;
- } catch (Exception eee) {
- tx.rollback();
- throw new WikittyException("Can't replay data", eee);
- }
-
- }
-
- @Override
- public boolean exists(String securityToken, String wikittyId) {
- WikittyTransaction tx = new WikittyTransaction();
- try {
- tx.begin();
- boolean result = getWikittyStorage().exists(null, wikittyId);
- tx.commit();
- return result;
- } catch (Exception eee) {
- tx.rollback();
- throw new WikittyException("Can't test existance", eee);
- }
- }
-
- @Override
- public boolean isDeleted(String securityToken, String wikittyId) {
- WikittyTransaction tx = new WikittyTransaction();
- try {
- tx.begin();
- boolean result = getWikittyStorage().isDeleted(tx, wikittyId);
- tx.commit();
- return result;
- } catch (Exception eee) {
- tx.rollback();
- throw new WikittyException("Can't test existance", eee);
- }
- }
-
-}
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceInMemory.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceInMemory.java 2010-11-26 13:57:08 UTC (rev 526)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceInMemory.java 2010-11-26 13:57:13 UTC (rev 527)
@@ -53,7 +53,7 @@
* Last update: $Date$
* by : $Author$
*/
-public class WikittyServiceInMemory extends WikittyServiceImpl {
+public class WikittyServiceInMemory extends WikittyServiceStorage {
//TODO InMemory implementation is not usable for production. Must be reviewed.
//TODO The version increment must be done in 'prepare' method
Copied: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceStorage.java (from rev 519, trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceImpl.java)
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceStorage.java (rev 0)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceStorage.java 2010-11-26 13:57:13 UTC (rev 527)
@@ -0,0 +1,1149 @@
+/*
+ * #%L
+ * Wikitty :: api
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2009 - 2010 CodeLutin, Benjamin Poussin
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Lesser Public License for more details.
+ *
+ * You should have received a copy of the GNU General Lesser Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/lgpl-3.0.html>.
+ * #L%
+ */
+
+package org.nuiton.wikitty.services;
+
+import org.nuiton.wikitty.storage.WikittyExtensionStorage;
+import org.nuiton.wikitty.storage.WikittySearchEngin;
+import org.nuiton.wikitty.storage.WikittyStorage;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.AbstractMap.SimpleEntry;
+import java.util.LinkedHashSet;
+import java.util.Map.Entry;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.nuiton.wikitty.search.Criteria;
+import org.nuiton.wikitty.entities.FieldType;
+import org.nuiton.wikitty.search.PagedResult;
+import org.nuiton.wikitty.entities.Wikitty;
+import org.nuiton.wikitty.WikittyException;
+import org.nuiton.wikitty.entities.WikittyExtension;
+import org.nuiton.wikitty.WikittyService;
+import org.nuiton.wikitty.WikittyTree;
+import org.nuiton.wikitty.entities.WikittyTreeNode;
+import org.nuiton.wikitty.entities.WikittyTreeNodeHelper;
+import org.nuiton.wikitty.entities.WikittyTreeNodeImpl;
+import org.nuiton.wikitty.WikittyUtil;
+import org.nuiton.wikitty.search.Search;
+import org.nuiton.wikitty.search.operators.Element;
+
+/**
+ * WikittyService is main service
+ *
+ * @author poussin
+ * @version $Revision$
+ *
+ * Last update: $Date$
+ * by : $Author$
+ */
+public class WikittyServiceStorage implements WikittyService {
+
+ /** to use log facility, just put in your code: log.info(\"...\"); */
+ static private Log log = LogFactory.getLog(WikittyServiceStorage.class);
+
+ /** Default migration use to migrate a wikitty in last extension version */
+ protected WikittyExtensionMigration defaultExtensionMigration =
+ new WikittyExtensionMigrationRename();
+
+ protected WikittySearchEngin searchEngin;
+ protected WikittyExtensionStorage extensionStorage;
+ protected WikittyStorage wikittyStorage;
+
+ /**
+ * TODO poussin 20101027 remove it when all used WikittyServiceHelper.build
+ *
+ * Used by specific child
+ * {@link org.nuiton.wikitty.jdbc.WikittyServiceJDBC}
+ * {@link org.nuiton.wikitty.jdbc.WikittyServiceJPA}
+ * {@link org.nuiton.wikitty.jdbc.WikittyServiceHbase}
+ */
+ protected WikittyServiceStorage() {
+ }
+
+ public WikittyServiceStorage(WikittyExtensionStorage extensionStorage,
+ WikittyStorage wikittyStorage,
+ WikittySearchEngin searchEngin) {
+ this.extensionStorage = extensionStorage;
+ this.wikittyStorage = wikittyStorage;
+ this.searchEngin = searchEngin;
+ }
+
+ protected WikittySearchEngin getSearchEngin() {
+ return searchEngin;
+ }
+
+ protected WikittyExtensionStorage getExtensionStorage() {
+ return extensionStorage;
+ }
+
+ protected WikittyStorage getWikittyStorage() {
+ return wikittyStorage;
+ }
+
+ /*
+ * @see org.nuiton.wikitty.WikittyService#addWikittyServiceListener(org.nuiton.wikitty.WikittyListener, org.nuiton.wikitty.WikittyService.ServiceListenerType)
+ */
+ @Override
+ public void addWikittyServiceListener(WikittyListener listener, ServiceListenerType type) {
+ throw new UnsupportedOperationException("Can't add listener on " + WikittyServiceStorage.class.getName());
+ }
+
+ /*
+ * @see org.nuiton.wikitty.WikittyService#removeWikittyServiceListener(org.nuiton.wikitty.WikittyListener, org.nuiton.wikitty.WikittyService.ServiceListenerType)
+ */
+ @Override
+ public void removeWikittyServiceListener(WikittyListener listener, ServiceListenerType type) {
+ throw new UnsupportedOperationException("Can't remove listener on " + WikittyServiceStorage.class.getName());
+ }
+
+ @Override
+ public String login(String login, String password) {
+ log.warn("login asked, but there is no security service");
+ return null;
+ }
+
+ @Override
+ public void logout(String securityToken) {
+ log.warn("logout asked, but there is no security service");
+ }
+
+ @Override
+ public boolean canWrite(String securityToken, Wikitty wikitty) {
+ return true;
+ }
+
+ @Override
+ public boolean canDelete(String securityToken, String wikittyId) {
+ return true;
+ }
+
+ @Override
+ public boolean canRead(String securityToken, String wikittyId) {
+ return true;
+ }
+
+ protected void checkConstraint(Collection<Wikitty> wikitties) {
+ for(Wikitty w : wikitties) {
+ for(WikittyExtension ext : w.getExtensions()) {
+ for (String fieldName : ext.getFieldNames()) {
+ FieldType type = ext.getFieldType(fieldName);
+ if (type.isNotNull()) {
+ if (null == w.getFieldAsObject(ext.getName(), fieldName)) {
+ throw new WikittyException(String.format(
+ "Field %s must not be null", fieldName));
+ }
+ }
+ }
+ }
+ }
+ }
+
+// @Override
+// public UpdateResponse store(String securityToken, WikittyTransaction transaction,
+// Collection<Wikitty> wikitties, boolean force) {
+// if (!(wikitties instanceof Set)) {
+// // use all time Set to prevent duplicated wikitty in collection
+// wikitties = new LinkedHashSet<Wikitty>(wikitties);
+// }
+// checkConstraint(wikitties);
+//
+// // update/store extension if necessary
+// Set<WikittyExtension> allExtensions = new LinkedHashSet<WikittyExtension>();
+// for (Wikitty w : wikitties) {
+// // collect all extensions used by all wikitties
+// allExtensions.addAll(w.getExtensions());
+// }
+//
+// // try to commit command
+// UpdateResponse extUpdate = getExtensionStorage().store(transaction, allExtensions);
+// UpdateResponse wikUpdate = getWikittyStorage().store(transaction, wikitties, force);
+// UpdateResponse indexUpdate = getSearchEngin().store(transaction, wikitties);
+//
+// UpdateResponse result = new UpdateResponse();
+// // prepare update client response
+// result.add(extUpdate);
+// result.add(wikUpdate);
+// result.add(indexUpdate);
+//
+// return result;
+// }
+ @Override
+ public WikittyEvent store(String securityToken,
+ Collection<Wikitty> wikitties, boolean force) {
+ WikittyEvent result = store(securityToken, null, wikitties, force);
+ return result;
+ }
+
+ protected WikittyEvent store(String securityToken,
+ WikittyTransaction transaction,
+ Collection<Wikitty> wikitties, boolean force) {
+ if (!(wikitties instanceof Set)) {
+ // use all time Set to prevent duplicated wikitty in collection
+ wikitties = new LinkedHashSet<Wikitty>(wikitties);
+ }
+ checkConstraint(wikitties);
+
+ // update/store extension if necessary
+ Set<WikittyExtension> allExtensions = new LinkedHashSet<WikittyExtension>();
+ for (Wikitty w : wikitties) {
+ // collect all extensions used by all wikitties
+ allExtensions.addAll(w.getExtensions());
+ }
+
+ boolean txCreated = false;
+ try {
+ if (transaction == null) {
+ transaction = new WikittyTransaction();
+ txCreated = true;
+ transaction.begin();
+ }
+
+ // try to commit command
+ WikittyEvent extUpdate =
+ getExtensionStorage().store(transaction, allExtensions);
+ WikittyEvent wikUpdate =
+ getWikittyStorage().store(transaction, wikitties, force);
+ getSearchEngin().store(transaction, wikitties);
+
+ WikittyEvent result = new WikittyEvent(this);
+ // prepare update client response
+ result.add(extUpdate);
+ result.add(wikUpdate);
+
+ if (txCreated) {
+ transaction.commit();
+ }
+ return result;
+ } catch (WikittyException ex) {
+ if (transaction != null) {
+ transaction.rollback();
+ }
+ throw ex;
+ } catch (Exception eee) {
+ if (transaction != null) {
+ transaction.rollback();
+ }
+ throw new WikittyException("Can't store wikitty", eee);
+ }
+ }
+
+ @Override
+ public List<String> getAllExtensionIds(String securityToken) {
+ WikittyTransaction transaction = new WikittyTransaction();
+ try {
+ transaction.begin();
+
+ List<String> result = getExtensionStorage().getAllExtensionIds(transaction);
+
+ transaction.commit();
+ return result;
+ } catch (Exception eee) {
+ transaction.rollback();
+ throw new WikittyException("Can't retrieve all extension's ids", eee);
+ }
+ }
+
+ @Override
+ public List<String> getAllExtensionsRequires(
+ String securityToken, String extensionName) {
+ WikittyTransaction transaction = new WikittyTransaction();
+ try {
+ transaction.begin();
+
+ List<String> result = getExtensionStorage()
+ .getAllExtensionsRequires(transaction, extensionName);
+
+ transaction.commit();
+ return result;
+ } catch (Exception eee) {
+ transaction.rollback();
+ throw new WikittyException(String.format(
+ "Can't retrieve all required extension for %s", extensionName), eee);
+ }
+ }
+
+ @Override
+ public WikittyEvent storeExtension(
+ String securityToken, Collection<WikittyExtension> exts) {
+ WikittyEvent result = storeExtension(securityToken, null, exts);
+ return result;
+ }
+
+ @Override
+ public WikittyEvent deleteExtension(
+ String securityToken, Collection<String> extNames) {
+ WikittyEvent result = deleteExtension(securityToken, null, extNames);
+ return result;
+ }
+
+ protected WikittyEvent storeExtension(String securityToken,
+ WikittyTransaction transaction, Collection<WikittyExtension> exts) {
+ boolean txCreated = false;
+ try {
+ if (transaction == null) {
+ transaction = new WikittyTransaction();
+ txCreated = true;
+ transaction.begin();
+ }
+
+ WikittyEvent result =
+ getExtensionStorage().store(transaction, exts);
+
+ if (txCreated) {
+ transaction.commit();
+ }
+ return result;
+ } catch (WikittyException ex) {
+ if (transaction != null) {
+ transaction.rollback();
+ }
+ throw ex;
+ } catch (Exception eee) {
+ if (transaction != null) {
+ transaction.rollback();
+ }
+ throw new WikittyException("Can't store extensions", eee);
+ }
+ }
+
+ protected WikittyEvent deleteExtension(String securityToken,
+ WikittyTransaction transaction, Collection<String> extNames) {
+ boolean txCreated = false;
+ try {
+ if (transaction == null) {
+ transaction = new WikittyTransaction();
+ txCreated = true;
+ transaction.begin();
+ }
+
+ // check that all extensions are not used
+ for(String name : extNames) {
+ // only name are stored in index, search only on name
+ Criteria criteria = Search.query().eq(Element.ELT_EXTENSION, name).criteria();
+ criteria.setEndIndex(0); // result is not use, just numFound
+ PagedResult<String> wikittyWithExt = findAllByCriteria(
+ securityToken, transaction, criteria);
+ int numFound = wikittyWithExt.getNumFound();
+ if (numFound > 0) {
+ throw new WikittyException(String.format(
+ "Can't delete %s extension, this extension"
+ + " is in used by %s wikitty",
+ name, numFound));
+ }
+ }
+
+ WikittyEvent result =
+ getExtensionStorage().delete(transaction, extNames);
+
+ if (txCreated) {
+ transaction.commit();
+ }
+ return result;
+ } catch (WikittyException ex) {
+ if (transaction != null) {
+ transaction.rollback();
+ }
+ throw ex;
+ } catch (Exception eee) {
+ if (transaction != null) {
+ transaction.rollback();
+ }
+ throw new WikittyException("Can't delete extensions", eee);
+ }
+ }
+
+ @Override
+ public WikittyExtension restoreExtension(
+ String securityToken, String extensionId) {
+ WikittyExtension result = restoreExtension(securityToken, null, extensionId);
+ return result;
+ }
+
+ protected WikittyExtension restoreExtension(
+ String securityToken, WikittyTransaction transaction, String extensionId) {
+ boolean txCreated = false;
+ try {
+ if (transaction == null) {
+ transaction = new WikittyTransaction();
+ txCreated = true;
+ transaction.begin();
+ }
+
+ //split the id to ensure that version is normalized
+ String name = WikittyExtension.computeName(extensionId);
+ String version = WikittyExtension.computeVersion(extensionId);
+
+ WikittyExtension result = getExtensionStorage().restore(transaction, name, version);
+
+ if (txCreated) {
+ transaction.commit();
+ }
+ return result;
+ } catch (WikittyException ex) {
+ if (transaction != null) {
+ transaction.rollback();
+ }
+ throw ex;
+ } catch (Exception eee) {
+ if (transaction != null) {
+ transaction.rollback();
+ }
+ throw new WikittyException("Can't restore extensions", eee);
+ }
+ }
+
+ @Override
+ public WikittyExtension restoreExtensionLastVersion(
+ String securityToken, String name) {
+ WikittyExtension result = restoreExtensionLastVersion(securityToken, null, name);
+ return result;
+ }
+
+ protected WikittyExtension restoreExtensionLastVersion(String securityToken,
+ WikittyTransaction transaction, String name) {
+ String version = getExtensionStorage().getLastVersion(transaction, name);
+ if(version == null) {
+ return null;
+ }
+
+ boolean txCreated = false;
+ try {
+ if (transaction == null) {
+ transaction = new WikittyTransaction();
+ txCreated = true;
+ transaction.begin();
+ }
+
+ WikittyExtension result = getExtensionStorage().restore(transaction, name, version);
+
+ if (txCreated) {
+ transaction.commit();
+ }
+ return result;
+ } catch (WikittyException ex) {
+ if (transaction != null) {
+ transaction.rollback();
+ }
+ throw ex;
+ } catch (Exception eee) {
+ if (transaction != null) {
+ transaction.rollback();
+ }
+ throw new WikittyException("Can't store extensions", eee);
+ }
+ }
+
+ protected Wikitty restore(String securityToken,
+ WikittyTransaction transaction, String id) {
+ if (id == null) {
+ return null;
+ }
+ if (!getWikittyStorage().exists(transaction, id)) {
+ // object doesn't exist, we return null
+ return null;
+ }
+
+ if (getWikittyStorage().isDeleted(transaction, id)) {
+ // object deleted, we return null
+ return null;
+ }
+ Wikitty result = getWikittyStorage().restore(transaction, id);
+ if(result != null) {
+ result = upgradeData(securityToken, transaction, result);
+ }
+ return result;
+ }
+
+ @Override
+ public List<Wikitty> restore(String securityToken, List<String> ids) {
+ List<Wikitty> result = restore(securityToken, null, ids);
+ return result;
+ }
+
+ protected List<Wikitty> restore(String securityToken,
+ WikittyTransaction transaction, List<String> ids) {
+
+ List<Wikitty> result = new ArrayList<Wikitty>();
+ boolean txCreated = false;
+ try {
+ if (transaction == null) {
+ transaction = new WikittyTransaction();
+ txCreated = true;
+ transaction.begin();
+ }
+
+ for (String id : ids) {
+ Wikitty w = restore(securityToken, transaction, id);
+ // on l'ajoutde tout le temps, meme si w est nul lorsqu'il y a
+ // une demande et qu'elle echoue on ajout
+ // bien null, pour qu'il y ait une correspondance 1 pour 1
+ // avec la demande
+ result.add(w);
+ }
+ if (txCreated) {
+ transaction.commit();
+ }
+ return result;
+ } catch (WikittyException ex) {
+ if (transaction != null) {
+ transaction.rollback();
+ }
+ throw ex;
+ } catch (Exception eee) {
+ if (transaction != null) {
+ transaction.rollback();
+ }
+ throw new WikittyException("Can't restore wikitty", eee);
+ }
+ }
+
+ // FIXME poussin 20101029 use WikittyServiceTransaction and remove other transaction
+ protected Wikitty upgradeData(String securityToken,
+ WikittyTransaction transaction, Wikitty wikitty) {
+ Wikitty result = wikitty;
+
+ Collection<WikittyExtension> extensions = wikitty.getExtensions();
+ for (WikittyExtension extension : extensions) {
+ String extensionName = extension.getName();
+
+ if (log.isDebugEnabled()) {
+ log.debug("extensionName=" + extensionName);
+ }
+
+ WikittyExtension currentExtension = extension;
+ String currentExtensionVersion = currentExtension.getVersion();
+
+ WikittyExtension lastExtension = restoreExtensionLastVersion(
+ securityToken, transaction, extensionName);
+ String lastExtensionVersion = lastExtension.getVersion();
+
+ if (log.isDebugEnabled()) {
+ log.debug("lastExtensionVersion=" + lastExtensionVersion);
+ }
+
+ WikittyExtensionMigration migration =
+ WikittyExtensionMigration.migrationRegistry.get(extensionName);
+ if (migration == null) {
+ migration = defaultExtensionMigration;
+ }
+
+ // Loop on between extension in wikitty and last version
+ while(WikittyUtil.versionGreaterThan(lastExtensionVersion, currentExtensionVersion)) {
+
+ // Get extension after the current version
+ String nextExtensionVersion =
+ WikittyUtil.incrementMajorRevision(currentExtensionVersion);
+ String nextExtensionId =
+ WikittyExtension.computeId(extensionName, nextExtensionVersion);
+ WikittyExtension nextExtension = restoreExtension(
+ securityToken, transaction, nextExtensionId);
+
+ if (log.isDebugEnabled()) {
+ log.debug("currentExtensionVersion=" + currentExtensionVersion);
+ log.debug("nextExtensionVersion=" + nextExtensionVersion);
+ }
+
+ // Test if extension is never use in this version
+ if(nextExtension != null) {
+ result = migration.migrate(this, result,
+ currentExtension, nextExtension);
+ currentExtension = nextExtension;
+ }
+
+ // Follow
+ currentExtensionVersion = nextExtensionVersion;
+ }
+ }
+
+ return result;
+ }
+
+ protected WikittyEvent delete(String securityToken, WikittyTransaction transaction,
+ Collection<String> ids) throws WikittyException {
+ // work only on valid id
+ Collection<Wikitty> storedWikitties = new LinkedHashSet<Wikitty>();
+ // copy ids because we can remove some element, and modify it
+ // use set to prevent id duplication and preformance (contains method call)
+ Set<String> idSet = new LinkedHashSet<String>(ids);
+ for (Iterator<String> i = idSet.iterator(); i.hasNext();) {
+ String id = i.next();
+ // test if wikitty exists
+ if (!getWikittyStorage().exists(transaction, id)) {
+ // don't exist, remove this id in id list
+ i.remove();
+ // go to the next id, because this id doesn't exist and can't
+ // be used in tree
+ continue;
+ }
+ if (getWikittyStorage().isDeleted(transaction, id)) {
+ // already deleted, remove this id in id list
+ i.remove();
+ // go to the next id, because this id already deleted and can't
+ // be used in tree
+ continue;
+ }
+
+ // Store node with have deleted node as parent
+ Criteria criteria =
+ Search.query().eq(WikittyTreeNode.FQ_FIELD_WIKITTYTREENODE_PARENT, id).criteria();
+ List<String> wikittyNodesId = findAllByCriteria(
+ securityToken, transaction, criteria).getAll();
+ for (String wikittyNodeId : wikittyNodesId) {
+ if(!idSet.contains(wikittyNodeId)) {
+ Wikitty treeNode = restore(
+ securityToken, transaction, wikittyNodeId);
+ WikittyTreeNodeHelper.setParent(treeNode, null);
+ storedWikitties.add(treeNode);
+ }
+ }
+
+ // Store node with have deleted child
+ criteria = Search.query().eq(WikittyTreeNode.FQ_FIELD_WIKITTYTREENODE_ATTACHMENT, id).criteria();
+ wikittyNodesId = findAllByCriteria(
+ securityToken, transaction, criteria).getAll();
+ for (String wikittyNodeId : wikittyNodesId) {
+ if(!idSet.contains(wikittyNodeId)) {
+ Wikitty treeNode = restore(
+ securityToken, transaction, wikittyNodeId);
+ WikittyTreeNodeHelper.removeAttachment(treeNode, id);
+ storedWikitties.add(treeNode);
+ }
+ }
+ }
+
+ WikittyEvent eventDelete =
+ getWikittyStorage().delete(transaction, idSet);
+ getSearchEngin().delete(transaction, idSet);
+
+ WikittyEvent eventStore =
+ store(securityToken, transaction, storedWikitties, false);
+
+ WikittyEvent result = new WikittyEvent(this);
+ result.add(eventDelete);
+ result.add(eventStore);
+
+ return result;
+ }
+
+ @Override
+ public WikittyEvent delete(String securityToken, Collection<String> ids){
+ WikittyTransaction transaction = new WikittyTransaction();
+ try {
+ transaction.begin();
+
+ WikittyEvent result = delete(securityToken, transaction, ids);
+
+ transaction.commit();
+ return result;
+ } catch (Exception eee) {
+ transaction.rollback();
+ throw new WikittyException("Can't delete wikitty", eee);
+ }
+ }
+
+ /**
+ * Use with caution : It will delete ALL indexes from search engine !
+ * This operation should be disabled in production environment.
+ */
+ @Override
+ public WikittyEvent clear(String securityToken) {
+ WikittyTransaction transaction = new WikittyTransaction();
+ try {
+ transaction.begin();
+
+
+ WikittyEvent result = clear(securityToken, transaction);
+
+ transaction.commit();
+ return result;
+ } catch (Exception eee) {
+ transaction.rollback();
+ throw new WikittyException("Can't clear all data", eee);
+ }
+ }
+
+ /**
+ * Use with caution : It will delete ALL indexes from search engine !
+ * This operation should be disabled in production environment.
+ */
+ protected WikittyEvent clear(String securityToken, WikittyTransaction tx) {
+ getSearchEngin().clear(tx);
+ WikittyEvent eventWik = getWikittyStorage().clear(tx);
+ WikittyEvent eventExt = getExtensionStorage().clear(tx);
+
+ WikittyEvent result = new WikittyEvent(this);
+ result.add(eventWik);
+ result.add(eventExt);
+ return result;
+ }
+
+ /**
+ * Assume that this PagedResult contains wikitty id as result and
+ * return new PagedResult with Wikitty instance
+ */
+ @Override
+ public PagedResult<String> findAllByCriteria(
+ String securityToken, Criteria criteria) {
+ PagedResult<String> result = findAllByCriteria(securityToken, null, criteria);
+ return result;
+ }
+
+ protected PagedResult<String> findAllByCriteria(String securityToken,
+ WikittyTransaction transaction, Criteria criteria) {
+ try {
+ boolean txCreated = false;
+ if (transaction == null) {
+ transaction = new WikittyTransaction();
+ txCreated = true;
+ transaction.begin();
+ }
+
+ PagedResult<String> result =
+ getSearchEngin().findAllByCriteria(transaction, criteria);
+ if (txCreated) {
+ transaction.commit();
+ }
+ return result;
+ } catch (WikittyException ex) {
+ if (transaction != null) {
+ transaction.rollback();
+ }
+ throw ex;
+ } catch (Exception eee) {
+ if (transaction != null) {
+ transaction.rollback();
+ }
+ throw new WikittyException("Error during find", eee);
+ }
+ }
+
+ @Override
+ public Wikitty findByCriteria(String securityToken, Criteria criteria) {
+ Wikitty result = findByCriteria(securityToken, null, criteria);
+ return result;
+ }
+
+ protected Wikitty findByCriteria(String securityToken,
+ WikittyTransaction transaction, Criteria criteria) {
+ try {
+ boolean txCreated = false;
+ if (transaction == null) {
+ transaction = new WikittyTransaction();
+ txCreated = true;
+ transaction.begin();
+ }
+
+ criteria.setFirstIndex(0).setEndIndex(1);
+ PagedResult<String> pages = findAllByCriteria(
+ securityToken, transaction, criteria);
+
+ Wikitty result = null;
+ if (pages.size() > 0) {
+ String id = pages.getFirst();
+ result = restore(securityToken, transaction, id);
+ }
+
+ if (txCreated) {
+ transaction.commit();
+ }
+ return result;
+ } catch (WikittyException ex) {
+ if (transaction != null) {
+ transaction.rollback();
+ }
+ throw ex;
+ } catch (Exception eee) {
+ if (transaction != null) {
+ transaction.rollback();
+ }
+ throw new WikittyException("Error during find", eee);
+ }
+ }
+
+ protected WikittyTree restoreTree(String securityToken,
+ WikittyTransaction transaction, String wikittyId) {
+ Wikitty w = restore(securityToken, transaction, wikittyId);
+ if(w == null) {
+ return null;
+ }
+
+ if ( !w.hasExtension(WikittyTreeNode.EXT_WIKITTYTREENODE) ) {
+ throw new WikittyException(String.format(
+ "Wikitty '%s' do not handle extension %s",
+ wikittyId, WikittyTreeNode.EXT_WIKITTYTREENODE ));
+ }
+ WikittyTree tree = new WikittyTree();
+ WikittyTreeNode node = new WikittyTreeNodeImpl(w);
+ tree.setNode(node);
+
+ WikittyTreeNodeImpl exempleNode = new WikittyTreeNodeImpl();
+ exempleNode.setParent(wikittyId);
+
+ Criteria criteria = Search.query(exempleNode.getWikitty()).criteria()
+ .setFirstIndex(0).setEndIndex(Criteria.ALL_ELEMENTS);
+ PagedResult<String> childNodesId = findAllByCriteria(
+ securityToken, transaction, criteria);
+ for (String childNodeId : childNodesId.getAll()) {
+ tree.addChild(restoreTree(securityToken, transaction, childNodeId));
+ }
+
+ return tree;
+ }
+
+ @Override
+ public WikittyTree restoreTree(String securityToken, String wikittyId) {
+ WikittyTransaction transaction = new WikittyTransaction();
+ try {
+ transaction.begin();
+
+ WikittyTree tree = restoreTree(securityToken, transaction, wikittyId);
+
+ transaction.commit();
+ return tree;
+ } catch (Exception eee) {
+ transaction.rollback();
+ throw new WikittyException("Can't restore tree", eee);
+ }
+ }
+
+ @Override
+ public WikittyEvent deleteTree(String securityToken, String thesaurusId) {
+ WikittyTransaction transaction = new WikittyTransaction();
+ try {
+ transaction.begin();
+
+ WikittyEvent result = deleteTree(securityToken, transaction, thesaurusId);
+
+ transaction.commit();
+ return result;
+ } catch (Exception eee) {
+ transaction.rollback();
+ throw new WikittyException("Can't delete tree", eee);
+ }
+ }
+
+ /**
+ * Delete specified treenode and sub treenode.
+ *
+ * @param securityToken security token
+ * @param transaction transaction
+ * @param treeNodeId thesaurusId to delete
+ * @return all id of delete nodes
+ */
+ protected WikittyEvent deleteTree(String securityToken, WikittyTransaction transaction, String treeNodeId) {
+ List<String> allTreeNodeId = getRecursiveTreeNodeId(securityToken, transaction, treeNodeId);
+ WikittyEvent result = delete(securityToken, transaction, allTreeNodeId);
+ return result;
+ }
+
+ /**
+ * Get recursive id of tree node children of {@code treeNodeId}.
+ *
+ * @param securityToken security token
+ * @param transaction transaction
+ * @param treeNodeId tree node id
+ * @return all id of {@code treeNodeId}'s children
+ */
+ protected List<String> getRecursiveTreeNodeId(String securityToken, WikittyTransaction transaction, String treeNodeId) {
+
+ Search search = Search.query();
+ search = search.eq(WikittyTreeNode.FQ_FIELD_WIKITTYTREENODE_PARENT, treeNodeId);
+ Criteria criteria = search.criteria();
+
+ PagedResult<String> childTreeNodeIds = findAllByCriteria(securityToken, transaction, criteria);
+ List<String> treeNodeIds = new ArrayList<String>();
+ treeNodeIds.add(treeNodeId);
+ for (String childTreeNodeId : childTreeNodeIds.getAll()) {
+ List<String> subTreeNodeIds = getRecursiveTreeNodeId(securityToken, transaction, childTreeNodeId);
+ treeNodeIds.addAll(subTreeNodeIds);
+ }
+ return treeNodeIds;
+ }
+
+ @Override
+ public Map.Entry<WikittyTreeNode, Integer> restoreNode(String securityToken,
+ String wikittyId, Criteria filter) {
+ WikittyTransaction transaction = new WikittyTransaction();
+ try {
+ transaction.begin();
+
+ Wikitty w = restore(securityToken, transaction, wikittyId);
+ if(w == null) {
+ transaction.commit();
+ return null;
+ }
+
+ if ( !w.hasExtension(WikittyTreeNode.EXT_WIKITTYTREENODE) ) {
+ throw new WikittyException(String.format(
+ "Wikitty '%s' do not handle extension %s",
+ wikittyId, WikittyTreeNode.EXT_WIKITTYTREENODE ));
+ }
+
+ WikittyTreeNode node = new WikittyTreeNodeImpl(w);
+ Integer count = getSearchEngin().findNodeCount(transaction, w, filter);
+
+ HashMap.SimpleEntry<WikittyTreeNode, Integer> result =
+ new SimpleEntry<WikittyTreeNode, Integer>(node, count);
+
+ transaction.commit();
+ return result;
+ } catch (Exception eee) {
+ transaction.rollback();
+ throw new WikittyException("Can't restore node", eee);
+ }
+ }
+
+ @Override
+ public Map<WikittyTreeNode, Integer> restoreChildren(String securityToken,
+ String wikittyId, Criteria filter) {
+ WikittyTransaction transaction = new WikittyTransaction();
+ try {
+ transaction.begin();
+
+ Wikitty w = restore(securityToken, transaction, wikittyId);
+ if(w == null) {
+ transaction.commit();
+ return null;
+ }
+
+ if ( !w.hasExtension(WikittyTreeNode.EXT_WIKITTYTREENODE) ) {
+ throw new WikittyException(String.format(
+ "Wikitty '%s' do not handle extension %s",
+ wikittyId, WikittyTreeNode.EXT_WIKITTYTREENODE ));
+ }
+
+ Map<WikittyTreeNode, Integer> result = new LinkedHashMap<WikittyTreeNode, Integer>();
+
+ Map<String, Integer> search = getSearchEngin().findAllChildrenCount(
+ transaction, w, filter);
+ Set<Entry<String, Integer>> children = search.entrySet();
+ for (Entry<String, Integer> child : children) {
+ Integer count = child.getValue();
+
+ String id = child.getKey();
+ Wikitty wikitty = restore(securityToken, transaction, id);
+ WikittyTreeNode node = new WikittyTreeNodeImpl(wikitty);
+
+ result.put(node, count);
+ }
+
+ transaction.commit();
+ return result;
+ } catch (Exception eee) {
+ transaction.rollback();
+ throw new WikittyException("Can't restore children", eee);
+ }
+ }
+
+ @Override
+ public Wikitty restoreVersion(String securityToken,
+ String wikittyId, String version) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void syncEngin(final String securityToken) {
+ final WikittyTransaction transaction = new WikittyTransaction();
+ try {
+ final int numberForCommit = 1000;
+ final WikittySearchEngin searchEngin = getSearchEngin();
+ final List<Wikitty> wikitties = new ArrayList<Wikitty>(numberForCommit);
+
+ transaction.begin();
+ searchEngin.clear(transaction);
+ transaction.commit();
+ transaction.begin();
+
+ getWikittyStorage().scanWikitties(transaction, new WikittyStorage.Scanner() {
+ int count = 0;
+
+ @Override
+ public void scan(String wikittyId) {
+ Wikitty wikitty = restore(securityToken, transaction, wikittyId);
+ Date deleteDate = wikitty.getDeleteDate();
+ if(deleteDate == null) {
+ count ++;
+ wikitties.add(wikitty);
+
+ if(count == numberForCommit) {
+ // Reindex
+ searchEngin.store(transaction, wikitties);
+ transaction.commit();
+ // Reinit
+ count = 0;
+ wikitties.clear();
+ transaction.begin();
+ }
+ }
+ }
+ });
+
+ // Last wikitties
+ searchEngin.store(transaction, wikitties);
+ transaction.commit();
+ } catch (Exception eee) {
+ transaction.rollback();
+ throw new WikittyException("Can't sync searchable index with data", eee);
+ }
+ }
+
+ /**
+ * Question:
+ * <li> on ne force pas le store de wikitty, ils vont donc avoir potentiellement
+ * des versions differentes sur plusieurs serveurs, est-ce problematique ?
+ * <li> on ne passe pas la date de suppression des wikitties, ils vont donc
+ * avoir différente date de suppression sur différent serveur, est-ce problematique ?
+ *
+ *
+ * @param securityToken
+ * @param events
+ * @return
+ */
+ @Override
+ public WikittyEvent replay(
+ String securityToken, List<WikittyEvent> events, boolean force) {
+ // indique qu'il faut vider la base avant de faire les ajouts
+ boolean mustClear = false;
+
+ // tous les objets a sauver
+ Map<String, Wikitty> toAddWikitty = new LinkedHashMap<String, Wikitty>();
+ // tous les id a supprimer
+ Map<String, Date> toRemoveWikitty = new LinkedHashMap<String, Date>();
+
+ // toutes les extensions a sauver
+ Set<WikittyExtension> toAddExt = new LinkedHashSet<WikittyExtension>();
+ // toutes les extensions a supprimer
+ Set<String> toDeleteExt = new LinkedHashSet<String>();
+
+ // recherche un event avec un clear pour ne pas jouer des events inutiles
+ // recherche un store + delete du meme wikitty
+ // recherche le dernier store du wikitty
+ for (WikittyEvent e : events) {
+ // check clear must be the first, if event have clear and other type
+ // clear is all time play first
+ if (e.getType().contains(
+ WikittyEvent.WikittyEventType.CLEAR_WIKITTY)
+ || e.getType().contains(
+ WikittyEvent.WikittyEventType.CLEAR_EXTENSION)) {
+ mustClear = true;
+ toAddWikitty.clear();
+ toRemoveWikitty.clear();
+ toAddExt.clear();
+ }
+ if (e.getType().contains(WikittyEvent.WikittyEventType.PUT_WIKITTY)) {
+ for (Wikitty w : e.getWikitties().values()) {
+ toAddWikitty.put(w.getId(), w);
+ }
+ }
+ if (e.getType().contains(WikittyEvent.WikittyEventType.REMOVE_WIKITTY)) {
+ for (Map.Entry<String, Date> entry : e.getRemoveDate().entrySet()) {
+ toAddWikitty.remove(entry.getKey());
+ toRemoveWikitty.put(entry.getKey(), entry.getValue());
+ }
+ }
+ if (e.getType().contains(WikittyEvent.WikittyEventType.PUT_EXTENSION)) {
+ for (WikittyExtension ext : e.getExtensions().values()) {
+ toAddExt.add(ext);
+ }
+ }
+ if (e.getType().contains(WikittyEvent.WikittyEventType.REMOVE_EXTENSION)) {
+ for (String extName : e.getDeletedExtensions()) {
+ toDeleteExt.add(extName);
+ }
+ }
+ }
+
+ WikittyTransaction tx = new WikittyTransaction();
+ try {
+ tx.begin();
+
+ WikittyEvent result = new WikittyEvent(this);
+ if (mustClear) {
+ WikittyEvent eventClear = clear(securityToken, tx);
+ result.add(eventClear);
+ }
+ WikittyEvent eventStoreExtension =
+ storeExtension(securityToken, tx, toAddExt);
+ result.add(eventStoreExtension);
+
+ WikittyEvent eventDeleteExtension =
+ deleteExtension(securityToken, tx, toDeleteExt);
+ result.add(eventDeleteExtension);
+
+ WikittyEvent eventStoreWikitty =
+ store(securityToken, tx, toAddWikitty.values(), force);
+ result.add(eventStoreWikitty);
+
+ WikittyEvent eventDeleteWikitty =
+ delete(securityToken, tx, toRemoveWikitty.keySet());
+ result.add(eventDeleteWikitty);
+
+ tx.commit();
+ return result;
+ } catch (Exception eee) {
+ tx.rollback();
+ throw new WikittyException("Can't replay data", eee);
+ }
+
+ }
+
+ @Override
+ public boolean exists(String securityToken, String wikittyId) {
+ WikittyTransaction tx = new WikittyTransaction();
+ try {
+ tx.begin();
+ boolean result = getWikittyStorage().exists(null, wikittyId);
+ tx.commit();
+ return result;
+ } catch (Exception eee) {
+ tx.rollback();
+ throw new WikittyException("Can't test existance", eee);
+ }
+ }
+
+ @Override
+ public boolean isDeleted(String securityToken, String wikittyId) {
+ WikittyTransaction tx = new WikittyTransaction();
+ try {
+ tx.begin();
+ boolean result = getWikittyStorage().isDeleted(tx, wikittyId);
+ tx.commit();
+ return result;
+ } catch (Exception eee) {
+ tx.rollback();
+ throw new WikittyException("Can't test existance", eee);
+ }
+ }
+
+}
Modified: trunk/wikitty-api/src/main/resources/wikitty-config-sample-inmemory.properties
===================================================================
--- trunk/wikitty-api/src/main/resources/wikitty-config-sample-inmemory.properties 2010-11-26 13:57:08 UTC (rev 526)
+++ trunk/wikitty-api/src/main/resources/wikitty-config-sample-inmemory.properties 2010-11-26 13:57:13 UTC (rev 527)
@@ -32,11 +32,11 @@
wikitty.storage.jdbc.xadatasource.org.h2.jdbcx.JdbcDataSource.user=${wikitty.storage.jdbc.login}
wikitty.storage.jdbc.xadatasource.org.h2.jdbcx.JdbcDataSource.password=${wikitty.storage.jdbc.password}
wikitty.searchengine.solr.directory.factory=solr.RAMDirectoryFactory
-wikitty.WikittyService.components=org.nuiton.wikitty.services.WikittyServiceImpl,\
+wikitty.WikittyService.components=org.nuiton.wikitty.services.WikittyServiceStorage,\
org.nuiton.wikitty.services.WikittyServiceNotifier,\
org.nuiton.wikitty.services.WikittyServiceCached,\
org.nuiton.wikitty.services.WikittyServiceSecurity
-wikitty.WikittyServiceImpl.components=org.nuiton.wikitty.jdbc.WikittyExtensionStorageJDBC,\
+wikitty.WikittyServiceStorage.components=org.nuiton.wikitty.jdbc.WikittyExtensionStorageJDBC,\
org.nuiton.wikitty.jdbc.WikittyStorageJDBC,\
org.nuiton.wikitty.solr.WikittySearchEnginSolr
wikitty.addon.export.threadnumber=1
Modified: trunk/wikitty-api/src/main/resources/wikitty-config-sample-server-slave.properties
===================================================================
--- trunk/wikitty-api/src/main/resources/wikitty-config-sample-server-slave.properties 2010-11-26 13:57:08 UTC (rev 526)
+++ trunk/wikitty-api/src/main/resources/wikitty-config-sample-server-slave.properties 2010-11-26 13:57:13 UTC (rev 527)
@@ -33,13 +33,13 @@
wikitty.storage.jdbc.xadatasource.org.h2.jdbcx.JdbcDataSource.password=${wikitty.storage.jdbc.password}
wikitty.searchengine.solr.directory.data=/var/lib/wikitty/data/solr
wikitty.searchengine.solr.directory.factory=solr.StandardDirectoryFactory
-wikitty.WikittyService.components=org.nuiton.wikitty.services.WikittyServiceImpl,\
+wikitty.WikittyService.components=org.nuiton.wikitty.services.WikittyServiceStorage,\
org.nuiton.wikitty.services.WikittyServiceSlave,\
org.nuiton.wikitty.services.WikittyServiceNotifier,\
org.nuiton.wikitty.services.WikittyServiceCached,\
org.nuiton.wikitty.services.WikittyServiceSecurity,\
org.nuiton.wikitty.services.WikittyServiceHessianServer
-wikitty.WikittyServiceImpl.components=org.nuiton.wikitty.jdbc.WikittyExtensionStorageJDBC,\
+wikitty.WikittyServiceStorage.components=org.nuiton.wikitty.jdbc.WikittyExtensionStorageJDBC,\
org.nuiton.wikitty.jdbc.WikittyStorageJDBC,\
org.nuiton.wikitty.solr.WikittySearchEnginSolr
wikitty.service.server.url=http://services-slave.codelutin.com/wikitty
Modified: trunk/wikitty-api/src/main/resources/wikitty-config-sample-server.properties
===================================================================
--- trunk/wikitty-api/src/main/resources/wikitty-config-sample-server.properties 2010-11-26 13:57:08 UTC (rev 526)
+++ trunk/wikitty-api/src/main/resources/wikitty-config-sample-server.properties 2010-11-26 13:57:13 UTC (rev 527)
@@ -33,12 +33,12 @@
wikitty.storage.jdbc.xadatasource.org.h2.jdbcx.JdbcDataSource.password=${wikitty.storage.jdbc.password}
wikitty.searchengine.solr.directory.data=/var/lib/wikitty/data/solr
wikitty.searchengine.solr.directory.factory=solr.StandardDirectoryFactory
-wikitty.WikittyService.components=org.nuiton.wikitty.services.WikittyServiceImpl,\
+wikitty.WikittyService.components=org.nuiton.wikitty.services.WikittyServiceStorage,\
org.nuiton.wikitty.services.WikittyServiceNotifier,\
org.nuiton.wikitty.services.WikittyServiceCached,\
org.nuiton.wikitty.services.WikittyServiceSecurity,\
org.nuiton.wikitty.services.WikittyServiceHessianServer
-wikitty.WikittyServiceImpl.components=org.nuiton.wikitty.jdbc.WikittyExtensionStorageJDBC,\
+wikitty.WikittyServiceStorage.components=org.nuiton.wikitty.jdbc.WikittyExtensionStorageJDBC,\
org.nuiton.wikitty.jdbc.WikittyStorageJDBC,\
org.nuiton.wikitty.solr.WikittySearchEnginSolr
wikitty.service.server.url=http://services.codelutin.com/wikitty
Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/WikittyUtilTest.java
===================================================================
--- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/WikittyUtilTest.java 2010-11-26 13:57:08 UTC (rev 526)
+++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/WikittyUtilTest.java 2010-11-26 13:57:13 UTC (rev 527)
@@ -25,7 +25,7 @@
package org.nuiton.wikitty.api;
-import entities.BusinessEntityImplTest;
+import org.nuiton.wikitty.entities.BusinessEntityImplTest;
import java.beans.PropertyChangeListener;
import java.math.BigDecimal;
import java.text.ParseException;
Copied: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/entities/BusinessEntityImplTest.java (from rev 519, trunk/wikitty-api/src/test/java/entities/BusinessEntityImplTest.java)
===================================================================
--- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/entities/BusinessEntityImplTest.java (rev 0)
+++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/entities/BusinessEntityImplTest.java 2010-11-26 13:57:13 UTC (rev 527)
@@ -0,0 +1,43 @@
+package org.nuiton.wikitty.entities;
+
+
+import java.beans.PropertyDescriptor;
+import java.util.Arrays;
+import org.apache.commons.beanutils.BeanUtils;
+import org.apache.commons.beanutils.BeanUtilsBean;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.junit.Assert;
+import org.junit.Test;
+import org.nuiton.wikitty.WikittyUtil;
+import org.nuiton.wikitty.entities.WikittyLabel;
+import org.nuiton.wikitty.entities.WikittyLabelImpl;
+
+/**
+ *
+ * @author poussin
+ * @version $Revision$
+ *
+ * Last update: $Date$
+ * by : $Author$
+ */
+public class BusinessEntityImplTest {
+
+ /** to use log facility, just put in your code: log.info(\"...\"); */
+ static private Log log = LogFactory.getLog(BusinessEntityImplTest.class);
+
+ @Test
+ public void testCopyFrom() throws Exception {
+ WikittyLabel source = new WikittyLabelImpl();
+ source.addLabels("1erLabel");
+ source.addLabels("2emeLabel");
+
+ WikittyLabel dest = new WikittyLabelImpl();
+
+ dest.copyFrom(source);
+ Assert.assertFalse(source.getWikittyId().equals(dest.getWikittyId()));
+ Assert.assertEquals(source.getWikittyVersion(), dest.getWikittyVersion());
+ Assert.assertEquals(source.getLabels(), dest.getLabels());
+ }
+
+}
Added: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/entities/WikittyCopyOnWriteTest.java
===================================================================
--- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/entities/WikittyCopyOnWriteTest.java (rev 0)
+++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/entities/WikittyCopyOnWriteTest.java 2010-11-26 13:57:13 UTC (rev 527)
@@ -0,0 +1,73 @@
+package org.nuiton.wikitty.entities;
+
+
+import java.util.Collection;
+import java.util.Collections;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ *
+ * @author poussin
+ * @version $Revision$
+ *
+ * Last update: $Date$
+ * by : $Author$
+ */
+public class WikittyCopyOnWriteTest {
+
+ /** to use log facility, just put in your code: log.info(\"...\"); */
+ static private Log log = LogFactory.getLog(WikittyCopyOnWriteTest.class);
+
+ @Test
+ public void testReplace() throws Exception {
+ WikittyLabelImpl label = new WikittyLabelImpl();
+ label.addLabels("toto");
+
+ Wikitty w = label.getWikitty();
+ WikittyCopyOnWrite copy = new WikittyCopyOnWrite(w);
+ WikittyCopyOnWrite copy2 = new WikittyCopyOnWrite(w);
+
+ WikittyLabelHelper.addLabels(copy, "titi");
+
+ System.out.println("copy:" + copy);
+
+ // test de replaceWith d'un WImpl vers un WCopyOnWrite
+ {
+ Assert.assertFalse(WikittyLabelHelper.getLabels(w).equals(WikittyLabelHelper.getLabels(copy)));
+ Assert.assertEquals(w.getExtensionNames(), Collections.singleton("WikittyLabel"));
+ Assert.assertEquals(copy.getExtensionNames(), Collections.singleton("WikittyLabel"));
+ w.replaceWith(copy);
+ Assert.assertEquals(WikittyLabelHelper.getLabels(w), WikittyLabelHelper.getLabels(copy));
+ Assert.assertEquals(w.getExtensionNames(), Collections.singleton("WikittyLabel"));
+ Assert.assertEquals(copy.getExtensionNames(), Collections.singleton("WikittyLabel"));
+ }
+
+ // test de replaceWith d'un WCopyOnWrite vers un WImpl
+ {
+ WikittyLabelHelper.addLabels(w, "tyty");
+ Assert.assertFalse(WikittyLabelHelper.getLabels(w).equals(WikittyLabelHelper.getLabels(copy)));
+ Assert.assertEquals(w.getExtensionNames(), Collections.singleton("WikittyLabel"));
+ Assert.assertEquals(copy.getExtensionNames(), Collections.singleton("WikittyLabel"));
+ copy.replaceWith(w);
+ Assert.assertEquals(WikittyLabelHelper.getLabels(w), WikittyLabelHelper.getLabels(copy));
+ Assert.assertEquals(w.getExtensionNames(), Collections.singleton("WikittyLabel"));
+ Assert.assertEquals(copy.getExtensionNames(), Collections.singleton("WikittyLabel"));
+ }
+
+ System.out.println("copy:" + copy + "\n" + copy2);
+ // test de replaceWith d'un WCopyOnWrite vers un WCopyOnWrite
+ {
+ Assert.assertFalse(WikittyLabelHelper.getLabels(copy).equals(WikittyLabelHelper.getLabels(copy2)));
+ Assert.assertEquals(copy.getExtensionNames(), Collections.singleton("WikittyLabel"));
+ Assert.assertEquals(copy2.getExtensionNames(), Collections.singleton("WikittyLabel"));
+ copy2.replaceWith(copy);
+ Assert.assertEquals(WikittyLabelHelper.getLabels(copy), WikittyLabelHelper.getLabels(copy2));
+ Assert.assertEquals(copy.getExtensionNames(), Collections.singleton("WikittyLabel"));
+ Assert.assertEquals(copy2.getExtensionNames(), Collections.singleton("WikittyLabel"));
+ }
+
+ }
+}
Modified: trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyServiceJDBC.java
===================================================================
--- trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyServiceJDBC.java 2010-11-26 13:57:08 UTC (rev 526)
+++ trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyServiceJDBC.java 2010-11-26 13:57:13 UTC (rev 527)
@@ -28,7 +28,7 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.nuiton.util.ApplicationConfig;
-import org.nuiton.wikitty.services.WikittyServiceImpl;
+import org.nuiton.wikitty.services.WikittyServiceStorage;
import org.nuiton.wikitty.solr.WikittySearchEnginSolr;
/**
@@ -38,7 +38,7 @@
* Last update: $Date$
* by : $Author$
*/
-public class WikittyServiceJDBC extends WikittyServiceImpl {
+public class WikittyServiceJDBC extends WikittyServiceStorage {
/** to use log facility, just put in your code: log.info(\"...\"); */
static private Log log = LogFactory.getLog(WikittyServiceJDBC.class);
Modified: trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/services/WikittyServiceInMemoryJdbcSolr.java
===================================================================
--- trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/services/WikittyServiceInMemoryJdbcSolr.java 2010-11-26 13:57:08 UTC (rev 526)
+++ trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/services/WikittyServiceInMemoryJdbcSolr.java 2010-11-26 13:57:13 UTC (rev 527)
@@ -43,7 +43,7 @@
* Last update: $Date$
* by : $Author$
*/
-public class WikittyServiceInMemoryJdbcSolr extends WikittyServiceImpl {
+public class WikittyServiceInMemoryJdbcSolr extends WikittyServiceStorage {
/** to use log facility, just put in your code: log.info(\"...\"); */
static private Log log = LogFactory.getLog(WikittyServiceInMemoryJdbcSolr.class);
Modified: trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/solr/test/WikittyServiceSolr.java
===================================================================
--- trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/solr/test/WikittyServiceSolr.java 2010-11-26 13:57:08 UTC (rev 526)
+++ trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/solr/test/WikittyServiceSolr.java 2010-11-26 13:57:13 UTC (rev 527)
@@ -26,7 +26,7 @@
package org.nuiton.wikitty.solr.test;
import org.nuiton.util.ApplicationConfig;
-import org.nuiton.wikitty.services.WikittyServiceImpl;
+import org.nuiton.wikitty.services.WikittyServiceStorage;
import org.nuiton.wikitty.solr.WikittySearchEnginSolr;
import org.nuiton.wikitty.storage.WikittyExtensionStorageInMemory;
import org.nuiton.wikitty.storage.WikittyStorageInMemory;
@@ -39,7 +39,7 @@
* Last update: $Date$
* by : $Author$
*/
-public class WikittyServiceSolr extends WikittyServiceImpl {
+public class WikittyServiceSolr extends WikittyServiceStorage {
public WikittyServiceSolr(ApplicationConfig config) {
extensionStorage = new WikittyExtensionStorageInMemory();
1
0