r452 - in trunk: . wikitty-api/src/main/java/org/nuiton/wikitty wikitty-api/src/main/java/org/nuiton/wikitty/importexport wikitty-api/src/test/java/org/nuiton/wikitty/conform wikitty-api/src/test/java/org/nuiton/wikitty/importexport wikitty-api/src/test/java/org/nuiton/wikitty/layers wikitty-api/src/test/java/org/nuiton/wikitty/memory wikitty-api/src/test/java/org/nuiton/wikitty/notification wikitty-hessian-client/src/main/java/org/wikitty/hessian wikitty-hessian-server/src/main/java/org/n
Author: bpoussin Date: 2010-10-27 11:04:19 +0200 (Wed, 27 Oct 2010) New Revision: 452 Url: http://nuiton.org/repositories/revision/wikitty/452 Log: Each WikittyService modification method must return WikittyServiceEvent http://www.nuiton.org/issues/show/944 Simplify WikittyService Interface to simplify maintenance and additional service layer http://www.nuiton.org/issues/show/994 Added: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceEnhanced.java Removed: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/UpdateResponse.java Modified: trunk/pom.xml trunk/wikitty-api/src/main/java/org/nuiton/wikitty/PagedResult.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/Wikitty.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyCache.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyCopyOnWrite.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyExtensionStorage.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyImpl.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyProxy.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittySearchEngin.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyService.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceCached.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceDelegator.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceEvent.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceImpl.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceInMemory.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceNotifier.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceSecurity.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyStorage.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/importexport/ImportExportCSV.java trunk/wikitty-api/src/test/java/org/nuiton/wikitty/conform/AbstractTestConformance.java trunk/wikitty-api/src/test/java/org/nuiton/wikitty/conform/ImportExportTest.java trunk/wikitty-api/src/test/java/org/nuiton/wikitty/conform/PerformanceBenchMark.java trunk/wikitty-api/src/test/java/org/nuiton/wikitty/conform/SearchTest.java trunk/wikitty-api/src/test/java/org/nuiton/wikitty/conform/StorageTest.java trunk/wikitty-api/src/test/java/org/nuiton/wikitty/importexport/ImportExportCSVTest.java trunk/wikitty-api/src/test/java/org/nuiton/wikitty/layers/AbstractWikittyServiceTest.java trunk/wikitty-api/src/test/java/org/nuiton/wikitty/layers/WikittyServiceCachedTest.java trunk/wikitty-api/src/test/java/org/nuiton/wikitty/layers/WikittyServiceSecurityTest.java trunk/wikitty-api/src/test/java/org/nuiton/wikitty/memory/InMemoryStorageTest.java trunk/wikitty-api/src/test/java/org/nuiton/wikitty/notification/WikittyServiceNotificationTest.java trunk/wikitty-api/src/test/java/org/nuiton/wikitty/notification/XMPPNotificationTest.java trunk/wikitty-hessian-client/src/main/java/org/wikitty/hessian/WikittyHessianFactory.java trunk/wikitty-hessian-server/src/main/java/org/nuiton/wikitty/hessian/WikittyServiceHessianDelegator.java trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyExtensionStorageJDBC.java trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyStorageJDBC.java trunk/wikitty-solr-impl/src/main/java/org/nuiton/wikitty/solr/WikittySearchEnginSolr.java trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/solr/test/AbstractTestSolr.java trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/solr/test/TreeTest.java trunk/wikitty-ui-zk/src/main/java/org/nuiton/wikitty/ui/Model.java Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2010-10-26 12:58:09 UTC (rev 451) +++ trunk/pom.xml 2010-10-27 09:04:19 UTC (rev 452) @@ -140,7 +140,7 @@ <dependency> <groupId>org.nuiton</groupId> <artifactId>nuiton-utils</artifactId> - <version>1.5</version> + <version>1.6-SNAPSHOT</version> <scope>compile</scope> </dependency> @@ -503,7 +503,6 @@ </plugin> </plugins> </pluginManagement> - </build> <profiles> Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/PagedResult.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/PagedResult.java 2010-10-26 12:58:09 UTC (rev 451) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/PagedResult.java 2010-10-27 09:04:19 UTC (rev 452) @@ -118,7 +118,7 @@ // Si ce n'est pas le cas, ca veut dire que le developpeur utilisant // ce PagedResult ne sait pas ce qu'il fait :) List<String> ids = (List<String>) results; - castedResult = ws.restore(securityToken, ids); + castedResult = ws.restore(securityToken, null, ids); } else { throw new ClassCastException("PagedResult don't contains" + " wikitty String id but " + results.get(0).getClass()); Deleted: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/UpdateResponse.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/UpdateResponse.java 2010-10-26 12:58:09 UTC (rev 451) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/UpdateResponse.java 2010-10-27 09:04:19 UTC (rev 452) @@ -1,91 +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; - -import java.io.Serializable; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; - -public class UpdateResponse implements Serializable { - - /** serialVersionUID. */ - private static final long serialVersionUID = -5908785223965002731L; - - protected Map<String, String> idVersionMap = new HashMap<String, String>(); - protected Map<String, Date> idDeletionDateMap = new HashMap<String, Date>(); - - public UpdateResponse() { - super(); - idVersionMap = new HashMap<String, String>(); - } - - /** - * Merge all update passed in argument in local update list - * @param update - */ - public void add(UpdateResponse update) { - idVersionMap.putAll(update.idVersionMap); - idDeletionDateMap.putAll(update.idDeletionDateMap); - } - - public void addVersionUpdate( String id, String version ) { - idVersionMap.put(id, version); - } - - public void addDeletionDateUpdate(String id, Date date) { - idDeletionDateMap.put(id, date); - } -// @Deprecated -// public void update(BusinessEntity e) { -// update((BusinessEntityWikitty) e); -// } - -// @Deprecated -// public void update(BusinessEntityWikitty e) { -// update(e.getWikitty()); -// } - - /** - * Update data directly in object passed in argument. - * Actualy only version and deletion date are updated. - * And internaly wikitty object is marked clean (not dirty) - * @param e - */ - public void update(Wikitty e) { - // update version - String id = e.getId(); - String version = idVersionMap.get(id); - if (version != null) { - e.setVersion(version); - } - Date date = idDeletionDateMap.get(id); - if (date != null) { - e.setDeleteDate(date); - } - e.clearDirty(); - } - -} Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/Wikitty.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/Wikitty.java 2010-10-26 12:58:09 UTC (rev 451) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/Wikitty.java 2010-10-27 09:04:19 UTC (rev 452) @@ -44,6 +44,13 @@ void removePropertyChangeListener(String propertyName, PropertyChangeListener listener); + /** + * Replace all field of current wikitty with field found in w. + * This two wikitty must have same id + * @param w wikitty where we take information + */ + void replace(Wikitty w); + String getId(); boolean isDeleted(); Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyCache.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyCache.java 2010-10-26 12:58:09 UTC (rev 451) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyCache.java 2010-10-27 09:04:19 UTC (rev 452) @@ -164,21 +164,8 @@ */ @Override public void putWikitty(WikittyServiceEvent event) { - - Collection<String> ids = event.getIds(); - Map<String, String> idsVersions = event.getIdVersions(); - - for (String id : ids) { - // put on server, remove it from local cache - Wikitty currentWikitty = getWikitty(id); - if (currentWikitty != null) { - String version = idsVersions.get(id); - if (WikittyUtil.versionGreaterThan(version, currentWikitty.getVersion())) { - removeWikitty(id); - } - } - } - + Collection<Wikitty> wikitties = event.getWikitties().values(); + putAllWikitty(wikitties); } /* @@ -186,7 +173,7 @@ */ @Override public void removeWikitty(WikittyServiceEvent event) { - for (String id : event.getIds()) { + for (String id : event.getRemoveDate().keySet()) { removeWikitty(id); } } Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyCopyOnWrite.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyCopyOnWrite.java 2010-10-26 12:58:09 UTC (rev 451) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyCopyOnWrite.java 2010-10-27 09:04:19 UTC (rev 452) @@ -61,7 +61,26 @@ protected WikittyCopyOnWrite(Wikitty target) { this.target = target; } - + + @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; + } + } + /** replace {@link #target} with a clone * * this method must be called to prevent any modification on target @@ -74,8 +93,9 @@ if (log.isTraceEnabled()) { log.trace(this + " now has for target " + target); } - } catch (CloneNotSupportedException e) { - log.error("unable to clone wikitty " + target, e); + } catch (CloneNotSupportedException eee) { + throw new WikittyException(String.format( + "unable to clone wikitty %s", target), eee); } targetIsACopy = true; } Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyExtensionStorage.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyExtensionStorage.java 2010-10-26 12:58:09 UTC (rev 451) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyExtensionStorage.java 2010-10-27 09:04:19 UTC (rev 452) @@ -45,7 +45,8 @@ * @param extensions the extensions to store * @return information usefull for client side update data */ - UpdateResponse store(WikittyTransaction transaction, Collection<WikittyExtension> extensions); + WikittyServiceEvent store(WikittyTransaction transaction, + Collection<WikittyExtension> extensions); /** * Return true if id exists in storage. @@ -101,6 +102,6 @@ * * @param transaction transaction */ - public void clear(WikittyTransaction transaction); + public WikittyServiceEvent clear(WikittyTransaction transaction); } Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyImpl.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyImpl.java 2010-10-26 12:58:09 UTC (rev 451) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyImpl.java 2010-10-27 09:04:19 UTC (rev 452) @@ -40,6 +40,10 @@ import java.util.List; import java.util.Map; import java.util.Set; +import java.util.logging.Level; +import java.util.logging.Logger; +import org.apache.commons.lang.ObjectUtils; +import org.nuiton.util.ObjectUtil; /** * Wikitty implementation. @@ -104,6 +108,57 @@ } /** + * Replace all field of current wikitty with field found in w. + * This two wikitty must have same id. + * + * This method is used to clone Wikitty too + * + * @param w wikitty where we take information + */ + @Override + public void replace(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; + } + if (this.getId().equals(w.getId())) { + this.extensions.clear(); + this.fieldValue.clear(); + for (WikittyExtension ext : w.getExtensions()) { + String extName = ext.getName(); + this.extensions.put(extName, ext); + for(String fieldName : ext.getFieldNames()) { + Object value = w.getFieldAsObject(extName, fieldName); + if (value != null) { + // seul les collections sont a cloner, sinon ce ne sont + // que des types primitifs immutable + if (value instanceof Collection && value instanceof Cloneable) { + try { + value = ObjectUtil.clone((Cloneable) value); + } catch (CloneNotSupportedException eee) { + throw new WikittyException(String.format( + "Can't copy field %s.%s", + ext.getName(), fieldName), eee); + } + } + this.setField(extName, fieldName, value); + } + } + } + + // we must change version after field value copy, because + // copy increment version because it use setField method + this.version = w.getVersion(); + this.deleteDate = w.getDeleteDate(); + + clearDirty(); + } else { + throw new IllegalArgumentException("Wikitty in argument don't have same id"); + } + } + + /** * Always call this method because field is transient. * * @return @@ -260,7 +315,7 @@ @Override public void addExtension(List<WikittyExtension> exts) { for (WikittyExtension ext : exts) { - extensions.put(ext.name, ext); + addExtension(ext); } } @@ -571,7 +626,7 @@ return null; } catch (Exception eee) { throw new WikittyException(String.format( - "Can't add value to field '%s'", + "Can't get value to field '%s'", ext + "." + fieldName), eee); } } @@ -614,7 +669,7 @@ return result; } catch (Exception eee) { throw new WikittyException(String.format( - "Can't add value to field '%s'", + "Can't get value to field '%s'", ext + "." + fieldName), eee); } } @@ -849,16 +904,16 @@ return str; } + /** + * Clone is deep for extension and values + * @return + * @throws CloneNotSupportedException + */ @Override public WikittyImpl clone() throws CloneNotSupportedException { - WikittyImpl clone = (WikittyImpl) super.clone(); - // deep copy of field and values - clone.fieldValue = new HashMap<String, Object>(); - for (Map.Entry<String, Object> aFieldValue : fieldValue.entrySet()) { - clone.fieldValue.put(aFieldValue.getKey(), aFieldValue.getValue()); - } - clone.clearDirty(); - return clone; + WikittyImpl result = new WikittyImpl(this.id); + result.replace(this); + return result; } } Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyProxy.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyProxy.java 2010-10-26 12:58:09 UTC (rev 451) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyProxy.java 2010-10-27 09:04:19 UTC (rev 452) @@ -54,7 +54,7 @@ public class WikittyProxy { /** Delegated wikitty service. */ - protected WikittyService wikittyService; + protected WikittyServiceEnhanced wikittyService; /** * Security token. @@ -77,7 +77,7 @@ */ public WikittyProxy(WikittyService wikittyService) { this(); - this.wikittyService = wikittyService; + setWikittyService(wikittyService); } public String login(String login, String password) { @@ -99,11 +99,11 @@ } public WikittyService getWikittyService() { - return wikittyService; + return wikittyService.getDelegate(); } public void setWikittyService(WikittyService wikittyService) { - this.wikittyService = wikittyService; + this.wikittyService = new WikittyServiceEnhanced(wikittyService); } /** @@ -122,7 +122,8 @@ public <E extends BusinessEntity> E store(E e) { Wikitty w = ((BusinessEntityWikitty)e).getWikitty(); - UpdateResponse resp = wikittyService.store(securityToken, w); + WikittyServiceEvent resp = wikittyService.store(securityToken, w); + // update object resp.update(w); return e; } @@ -143,7 +144,7 @@ } // call the service with Wikitty - UpdateResponse resp = wikittyService.store(securityToken, wikitties); + WikittyServiceEvent resp = wikittyService.store(securityToken, wikitties); // update object for (Wikitty w : wikitties) { @@ -417,8 +418,8 @@ * @param treeNodeId tree node id to delete * @return {@true} if at least one node has been deleted */ - public List<String> deleteTree(String treeNodeId) { - List<String> result = wikittyService.deleteTree(securityToken, treeNodeId); + public WikittyServiceEvent deleteTree(String treeNodeId) { + WikittyServiceEvent result = wikittyService.deleteTree(securityToken,treeNodeId); return result; } @@ -555,8 +556,9 @@ * @param ext extension to be persisted * @return update response */ - public UpdateResponse storeExtension(WikittyExtension ext) { - UpdateResponse response = wikittyService.storeExtension(securityToken, ext); + public WikittyServiceEvent storeExtension(WikittyExtension ext) { + WikittyServiceEvent response = + wikittyService.storeExtension(securityToken, ext); return response; } @@ -566,8 +568,9 @@ * @param exts list of wikitty extension to be persisted * @return update response */ - public UpdateResponse storeExtension(Collection<WikittyExtension> exts) { - UpdateResponse response = wikittyService.storeExtension(securityToken, exts); + public WikittyServiceEvent storeExtension(Collection<WikittyExtension> exts) { + WikittyServiceEvent response = + wikittyService.storeExtension(securityToken, exts); return response; } @@ -619,8 +622,9 @@ * Use with caution : It will delete ALL indexes from search engine ! * This operation should be disabled in production environment. */ - public void clear() { - wikittyService.clear(securityToken); + public WikittyServiceEvent clear() { + WikittyServiceEvent result = wikittyService.clear(securityToken); + return result; } /** @@ -629,9 +633,8 @@ * * @return update response */ - public UpdateResponse syncEngin() { - UpdateResponse result = wikittyService.syncEngin(securityToken); - return result; + public void syncEngin() { + wikittyService.syncEngin(securityToken); } } Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittySearchEngin.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittySearchEngin.java 2010-10-26 12:58:09 UTC (rev 451) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittySearchEngin.java 2010-10-27 09:04:19 UTC (rev 452) @@ -49,7 +49,7 @@ * Store wikitty in storage * @return information usefull for client side update data */ - public UpdateResponse store(WikittyTransaction transaction, + public void store(WikittyTransaction transaction, Collection<Wikitty> wikitties); /** @@ -59,7 +59,7 @@ * @return <code>UpdateResponse</code>> * @throws WikittyException */ - public UpdateResponse delete(WikittyTransaction transaction, + public void delete(WikittyTransaction transaction, Collection<String> idList) throws WikittyException; /** Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyService.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyService.java 2010-10-26 12:58:09 UTC (rev 451) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyService.java 2010-10-27 09:04:19 UTC (rev 452) @@ -122,12 +122,16 @@ * * @param securityToken security token */ - public void clear(String securityToken); + public WikittyServiceEvent clear(String securityToken); /** * Verifie si l'utilisateur lie au securityToken a le droit d'ecrire - * le Wikitty passe en argument + * le Wikitty passe en argument. * + * On ne peut pas passer seulement l'id du wikitty en parametre car de + * nouvelles extensions ont peut lui etre ajouter depuis la derniere + * sauvegarde + * * @param securityToken le token de securite qui permet de retrouver * l'utilisateur et ainsi verifier les droits * @param wikitty le wikitty a sauver @@ -163,48 +167,18 @@ public boolean canRead(String securityToken, String wikittyId); /** - * Manage Update and creation. - * - * @param securityToken security token - * @param wikitty contains an id all the time. - * @return update response containing version and id of stored wikitty - */ - public UpdateResponse store(String securityToken, Wikitty wikitty); - - /** - * Manage Update and creation. - * - * @param securityToken security token - * @param wikitties list of wikitty to be persisted - * @return update response containing version and id of stored wikitty - */ - public UpdateResponse store(String securityToken, Collection<Wikitty> wikitties); - - /** - * Manage Update and creation. - * - * @param securityToken security token - * @param wikitties list of wikitty to be persisted - * @param force boolean force non version version increment on saved wikitty - * or force version on wikitty creation (version 0.0) - * @return update response - */ - public UpdateResponse store(String securityToken, Collection<Wikitty> wikitties, - boolean force); - - - /** * Manage Update and creation, action is done in transaction passed in * argument. * * @param securityToken security token - * @param transaction transaction used to do the action (must not be null) + * @param transaction transaction used to do the action (can be null, if we + * want new transaction) * @param wikitties list of wikitty to be persisted * @param force boolean force non version version increment on saved wikitty * or force version on wikitty creation (version 0.0) * @return update response */ - public UpdateResponse store(String securityToken, WikittyTransaction transaction, + public WikittyServiceEvent store(String securityToken, WikittyTransaction transaction, Collection<Wikitty> wikitties, boolean force); /** @@ -226,50 +200,25 @@ public List<String> getAllExtensionsRequires(String securityToken, String extensionName); /** - * Manage Update and creation. - * - * @param securityToken security token - * @param ext extension to be persisted - * @return update response - */ - public UpdateResponse storeExtension(String securityToken, WikittyExtension ext); - - /** - * Manage Update and creation. - * - * @param securityToken security token - * @param exts list of wikitty extension to be persisted - * @return update response - */ - public UpdateResponse storeExtension(String securityToken, - Collection<WikittyExtension> exts); - - /** * Manage Update and creation, action is done in transaction passed in * argument * * @param securityToken security token - * @param transaction transaction used to do the action (must not be null) + * @param transaction transaction used to do the action (can be null if we + * want new transaction) * @param exts list of wikitty extension to be persisted * @return update response */ - public UpdateResponse storeExtension(String securityToken, + public WikittyServiceEvent storeExtension(String securityToken, WikittyTransaction transaction, Collection<WikittyExtension> exts); /** * Load extension from id. Id is 'name[version]'. - * - * @param securityToken security token - * @param extensionId extension id to restore - * @return the corresponding object, exception if no such object found. - */ - public WikittyExtension restoreExtension(String securityToken, String extensionId); - - /** * Action is done in transaction passed in argument. * * @param securityToken security token - * @param transaction transaction used to do the action (must not be null) + * @param transaction transaction used to do the action (can be null if we + * want new transaction) * @param extensionId * @return the corresponding object, exception if no such object found. */ @@ -280,84 +229,41 @@ * Search extension with name in last version. * * @param securityToken security token + * @param transaction transaction used to do the action (can be null if we + * want new transaction) * @param name extension name * @return the corresponding object, exception if no such object found. */ public WikittyExtension restoreExtensionLastVersion( - String securityToken, String name); - - /** - * Search extension with name in last version. - * - * @param securityToken security token - * @param transaction transaction used to do the action (must not be null) - * @param name extension name - * @return the corresponding object, exception if no such object found. - */ - public WikittyExtension restoreExtensionLastVersion( String securityToken, WikittyTransaction transaction, String name); /** - * - * @param securityToken security token - * @param id object id to restore - * @return the corresponding object, or null if object doesn't exist, is - * deleted or you don't have authorisation (you can check authorisation - * before call restore with {@link #canRead(java.lang.String, java.lang.String)} - */ - public Wikitty restore(String securityToken, String id); - - /** - * - * @param securityToken security token - * @param id list of wikitty ids to restore - * @return list of corresponding wikitty, if one id is not valid (no object - * or deleted or no authorisation) this id is skip and result list have less - * elements than collection argument - */ - public List<Wikitty> restore(String securityToken, List<String> id); - - /** * Restore wikitty using opened transaction. * * @param securityToken security token - * @param transaction transaction to use + * @param transaction transaction to use (can be null if we + * want new transaction) * @param id list of wikitty ids to restore * @return list of corresponding wikitty, if one id is not valid (no object - * or deleted or no authorisation) this id is skip and result list have less - * elements than collection argument + * or deleted or no authorisation) this id return null and result list can + * have null elements */ - public List<Wikitty> restore(String securityToken, WikittyTransaction transaction, List<String> id); + public List<Wikitty> restore(String securityToken, + WikittyTransaction transaction, List<String> id); /** - * Delete object if id exists. - * - * @param securityToken security token - * @param id object's id to remove - */ - public void delete(String securityToken, String id); - - /** * Delete all object if id exists. * * @param securityToken security token * @param ids object's ids to remove */ - public void delete(String securityToken, Collection<String> ids); + public WikittyServiceEvent delete(String securityToken, Collection<String> ids); /** - * - * @param securityToken security token - * @param criteria - * @return - */ - public PagedResult<String> findAllByCriteria( - String securityToken, Criteria criteria); - - /** * * @param securityToken security token - * @param transaction + * @param transaction (can be null if we + * want new transaction) * @param criteria * @return */ @@ -365,27 +271,18 @@ WikittyTransaction transaction, Criteria criteria); /** - * Fist lonely (or first one) wikitty object that match criteria, if no + * First lonely (or first one) wikitty object that match criteria, if no * wikitty found or first retrived is not authorized for the user return * null * * @param securityToken security token * @param criteria + * @param transaction (can be null if we + * want new transaction) * @return wikitty object or null */ - public Wikitty findByCriteria(String securityToken, Criteria criteria); - - /** - * Fist lonely (or first one) wikitty object that match criteria, if no - * wikitty found or first retrived is not authorized for the user return - * null - * - * @param securityToken security token - * @param criteria - * @param transaction - * @return wikitty object or null - */ - public Wikitty findByCriteria(String securityToken, WikittyTransaction transaction, Criteria criteria); + public Wikitty findByCriteria(String securityToken, + WikittyTransaction transaction, Criteria criteria); /* * Classification @@ -409,7 +306,7 @@ * @param treeNodeId tree node id to delete * @return delete wikitty ids */ - public List<String> deleteTree(String securityToken, String treeNodeId); + public WikittyServiceEvent deleteTree(String securityToken, String treeNodeId); /** * Retrieve wikitty node with count. Wikitty reference by wikittyId MUST @@ -456,8 +353,7 @@ * reindex all wikitties. * * @param securityToken security token - * @return update response */ - public UpdateResponse syncEngin(String securityToken); + public void syncEngin(String securityToken); } Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceCached.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceCached.java 2010-10-26 12:58:09 UTC (rev 451) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceCached.java 2010-10-27 09:04:19 UTC (rev 452) @@ -179,47 +179,25 @@ } @Override - public void clear(String securityToken) { - ws.clear(securityToken); + public WikittyServiceEvent clear(String securityToken) { + WikittyServiceEvent result = ws.clear(securityToken); cache.clearWikitty(); + return result; } /** - * delete object in cache - * @param id - */ - @Override - public void delete(String securityToken, String id) { - ws.delete(securityToken, id); - cache.removeWikitty(id); - } - - /** * delete objets in cache * @param ids */ @Override - public void delete(String securityToken, Collection<String> ids) { - ws.delete(securityToken, ids); + public WikittyServiceEvent delete(String securityToken, Collection<String> ids) { + WikittyServiceEvent result = ws.delete(securityToken, ids); cache.removeAllWikitty(ids); + return result; } /** * just wrap service method - * - * @param criteria - * @return - */ - @Override - public PagedResult<String> findAllByCriteria( - String securityToken, Criteria criteria) { - // if we want to add cache for this method, we must clear cache when - // addLabel, store, storeExtension are called - return ws.findAllByCriteria(securityToken, criteria); - } - - /** - * just wrap service method * * @param criteria * @return @@ -236,19 +214,6 @@ /** * just wrap service method * - * @param criteria - * @return - */ - @Override - public Wikitty findByCriteria(String securityToken, Criteria criteria) { - // if we want to add cache for this method, we must clear cache when - // addLabel, store, storeExtension are called - return ws.findByCriteria(securityToken, criteria); - } - - /** - * just wrap service method - * * @param securityToken * @param criteria * @param transaction @@ -288,79 +253,6 @@ } /** - * just wrap service method - * - * @param id - * @return - */ - @Override - public Wikitty restore(String securityToken, String id) { - Wikitty result = cache.getWikitty(id); - if (result == null) { - if (log.isTraceEnabled()) { - log.trace("Wikitty " + id + " not found in cache"); - } - result = ws.restore(securityToken, id); - - // Dont store in cache if restored wikitty is null - if (result != null) { - cache.putWikitty(result); - } - } else { - if (log.isTraceEnabled()) { - log.trace("Use cached wikitty " + id); - } - } - - // wrap wikitty to prevent conflict in cache modification - result = wrapWikitty(result); - return result; - } - - /** - * Overriden to put all restored object from server in cache. - * - * @param ids id to restore - * @return restored wikitties - */ - @Override - public List<Wikitty> restore(String securityToken, List<String> ids) { - ArrayList<String> notInCache = new ArrayList<String>(); - // linked to maintains the order - LinkedHashMap<String, Wikitty> fromCache = - new LinkedHashMap<String, Wikitty>(); - for (String id : ids) { - Wikitty w = cache.getWikitty(id); - fromCache.put(id, w); // put all to maintains order - if (w == null) { // if not found on cache, ask the server - notInCache.add(id); - } - } - - // retrieve missing object - List<Wikitty> missingInCache = ws.restore(securityToken, notInCache); - - cache.putAllWikitty(missingInCache); - - for (Wikitty w : missingInCache) { - if (w != null) { - // add missing object - fromCache.put(w.getId(), w); - } - } - - Collection<Wikitty> tmp = fromCache.values(); - - // wrap the resulting wikitties to prevent cache conflicts - ArrayList<Wikitty> result = new ArrayList<Wikitty>(); - for (Wikitty w : tmp) { - result.add(wrapWikitty(w)); - } - - return result; - } - - /** * Overriden to put all restored object from server in cache * * @param securityToken security token @@ -420,36 +312,11 @@ /** * just wrap service method * - * @param id - * @return - */ - @Override - public WikittyExtension restoreExtension(String securityToken, String id) { - // TODO poussin 20100412: perhaps use cache for extension ? - return ws.restoreExtension(securityToken, id); - } - - /** - * just wrap service method - * * @param name * @return */ @Override public WikittyExtension restoreExtensionLastVersion( - String securityToken, String name) { - // TODO poussin 20100412: perhaps use cache for extension ? - return ws.restoreExtensionLastVersion(securityToken, name); - } - - /** - * just wrap service method - * - * @param name - * @return - */ - @Override - public WikittyExtension restoreExtensionLastVersion( String securityToken, WikittyTransaction transaction, String name) { // TODO poussin 20100412: perhaps use cache for extension ? // if use cache use transaction.getCache() @@ -489,113 +356,36 @@ * @return */ @Override - public List<String> deleteTree(String securityToken, String wikittyId) { + public WikittyServiceEvent deleteTree(String securityToken, String wikittyId) { return ws.deleteTree(securityToken, wikittyId); } /** - * Overriden to update wikitty and put it in cache - * @param wikitty - * @return - */ - @Override - public UpdateResponse store(String securityToken, Wikitty wikitty) { - UpdateResponse result = ws.store(securityToken, wikitty); - - result.update(wikitty); - cache.putWikitty(wikitty); - - return result; - } - - /** * Overriden to put wikitty in cache * * @param wikitties - * @return - */ - @Override - public UpdateResponse store(String securityToken, Collection<Wikitty> wikitties) { - UpdateResponse result = ws.store(securityToken, wikitties); - - for (Wikitty w : wikitties) { - result.update(w); - } - cache.putAllWikitty(wikitties); - - return result; - } - - /** - * Overriden to put wikitty in cache - * - * @param wikitties * @param force boolean force non version version increment on saved wikitty * or force version on wikitty creation (version 0.0) * @return */ @Override - public UpdateResponse store(String securityToken, + public WikittyServiceEvent store(String securityToken, WikittyTransaction transaction, Collection<Wikitty> wikitties, boolean force) { - UpdateResponse result = ws.store(securityToken, wikitties, force); - - for (Wikitty w : wikitties) { - result.update(w); - } - cache.putAllWikitty(wikitties); - - return result; - } - - /** - * Overriden to put wikitty in cache - * - * @param wikitties - * @param force boolean force non version version increment on saved wikitty - * or force version on wikitty creation (version 0.0) - * @return - */ - @Override - public UpdateResponse store(String securityToken, WikittyTransaction transaction, - Collection<Wikitty> wikitties, boolean force) { - UpdateResponse result = ws.store(securityToken, transaction, + WikittyServiceEvent result = ws.store(securityToken, transaction, wikitties, force); - for (Wikitty w : wikitties) { - result.update(w); + if (transaction != null) { + for (Wikitty w : wikitties) { + result.update(w); + } + transaction.getCache().putAllWikitty(wikitties); } - transaction.getCache().putAllWikitty(wikitties); return result; } - - /** - * just wrap service method - * - * @param ext - * @return - */ @Override - public UpdateResponse storeExtension(String securityToken, WikittyExtension ext) { - // TODO poussin 20100412: perhaps use cache for extension ? - return ws.storeExtension(securityToken, ext); - } - - /** - * just wrap service method - * - * @param exts - * @return - */ - @Override - public UpdateResponse storeExtension(String securityToken, Collection<WikittyExtension> exts) { - // TODO poussin 20100412: perhaps use cache for extension ? - return ws.storeExtension(securityToken, exts); - } - - @Override - public UpdateResponse storeExtension(String securityToken, + public WikittyServiceEvent storeExtension(String securityToken, WikittyTransaction transaction, Collection<WikittyExtension> exts) { // si on implante le cache pour cette methode, utiliser transaction.getCache() //throw new UnsupportedOperationException("Not supported yet."); @@ -632,8 +422,8 @@ } @Override - public UpdateResponse syncEngin(String securityToken) { - return ws.syncEngin(securityToken); + public void syncEngin(String securityToken) { + ws.syncEngin(securityToken); } } Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceDelegator.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceDelegator.java 2010-10-26 12:58:09 UTC (rev 451) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceDelegator.java 2010-10-27 09:04:19 UTC (rev 452) @@ -28,7 +28,6 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; -import java.util.Set; /** * Wikitty service delegator. @@ -44,6 +43,13 @@ /** Delegated wikitty service. */ protected WikittyService delegate; + public WikittyServiceDelegator() { + } + + public WikittyServiceDelegator(WikittyService delegate) { + setDelegate(delegate); + } + /** * Get delegated service. * @@ -85,29 +91,12 @@ } @Override - public void clear(String securityToken) { - delegate.clear(securityToken); + public WikittyServiceEvent clear(String securityToken) { + return delegate.clear(securityToken); } @Override - public UpdateResponse store(String securityToken, Wikitty wikitty) { - return delegate.store(securityToken, wikitty); - } - - @Override - public UpdateResponse store(String securityToken, - Collection<Wikitty> wikitties) { - return delegate.store(securityToken, wikitties); - } - - @Override - public UpdateResponse store(String securityToken, - Collection<Wikitty> wikitties, boolean force) { - return delegate.store(securityToken, wikitties, force); - } - - @Override - public UpdateResponse store(String securityToken, + public WikittyServiceEvent store(String securityToken, WikittyTransaction transaction, Collection<Wikitty> wikitties, boolean force) { return delegate.store(securityToken, transaction, wikitties, force); @@ -125,29 +114,12 @@ } @Override - public UpdateResponse storeExtension(String securityToken, - WikittyExtension ext) { - return delegate.storeExtension(securityToken, ext); - } - - @Override - public UpdateResponse storeExtension(String securityToken, - Collection<WikittyExtension> exts) { - return delegate.storeExtension(securityToken, exts); - } - - @Override - public UpdateResponse storeExtension(String securityToken, + public WikittyServiceEvent storeExtension(String securityToken, WikittyTransaction transaction, Collection<WikittyExtension> exts) { return delegate.storeExtension(securityToken, transaction, exts); } @Override - public WikittyExtension restoreExtension(String securityToken, String id) { - return delegate.restoreExtension(securityToken, id); - } - - @Override public WikittyExtension restoreExtension(String securityToken, WikittyTransaction transaction, String id) { return delegate.restoreExtension(securityToken, transaction, id); @@ -155,61 +127,31 @@ @Override public WikittyExtension restoreExtensionLastVersion(String securityToken, - String name) { - return delegate.restoreExtensionLastVersion(securityToken, name); - } - - @Override - public WikittyExtension restoreExtensionLastVersion(String securityToken, WikittyTransaction transaction, String name) { return delegate.restoreExtensionLastVersion(securityToken, transaction, name); } @Override - public Wikitty restore(String securityToken, String id) { - return delegate.restore(securityToken, id); - } - - @Override - public List<Wikitty> restore(String securityToken, List<String> id) { - return delegate.restore(securityToken, id); - } - - @Override - public List<Wikitty> restore(String securityToken, WikittyTransaction transaction, List<String> id) { + public List<Wikitty> restore(String securityToken, + WikittyTransaction transaction, List<String> id) { return delegate.restore(securityToken, transaction, id); } @Override - public void delete(String securityToken, String id) { - delegate.delete(securityToken, id); + public WikittyServiceEvent delete(String securityToken, Collection<String> ids) { + return delegate.delete(securityToken, ids); } @Override - public void delete(String securityToken, Collection<String> ids) { - delegate.delete(securityToken, ids); - } - - @Override public PagedResult<String> findAllByCriteria(String securityToken, - Criteria criteria) { - return delegate.findAllByCriteria(securityToken, criteria); - } - - @Override - public PagedResult<String> findAllByCriteria(String securityToken, WikittyTransaction transaction, Criteria criteria) { return delegate.findAllByCriteria(securityToken, transaction, criteria); } @Override - public Wikitty findByCriteria(String securityToken, Criteria criteria) { - return delegate.findByCriteria(securityToken, criteria); - } - - @Override - public Wikitty findByCriteria(String securityToken, WikittyTransaction transaction, Criteria criteria) { + public Wikitty findByCriteria(String securityToken, + WikittyTransaction transaction, Criteria criteria) { return delegate.findByCriteria(securityToken, transaction, criteria); } @@ -219,7 +161,7 @@ } @Override - public List<String> deleteTree(String securityToken, String wikittyId) { + public WikittyServiceEvent deleteTree(String securityToken, String wikittyId) { return delegate.deleteTree(securityToken, wikittyId); } @@ -242,8 +184,8 @@ } @Override - public UpdateResponse syncEngin(String securityToken) { - return delegate.syncEngin(securityToken); + public void syncEngin(String securityToken) { + delegate.syncEngin(securityToken); } @Override Added: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceEnhanced.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceEnhanced.java (rev 0) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceEnhanced.java 2010-10-27 09:04:19 UTC (rev 452) @@ -0,0 +1,111 @@ +package org.nuiton.wikitty; + +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * Same as delegator but with some helpfull method for developer. This new + * methods are methods with less arguments or simple argument and not collection + * + * @author poussin + * @version $Revision$ + * + * Last update: $Date$ + * by : $Author$ + */ +public class WikittyServiceEnhanced extends WikittyServiceDelegator { + + /** to use log facility, just put in your code: log.info(\"...\"); */ + static private Log log = LogFactory.getLog(WikittyServiceEnhanced.class); + + public WikittyServiceEnhanced(WikittyService service) { + super(service); + } + + public WikittyServiceEvent store(String securityToken, Wikitty wikitty) { + return store(securityToken, null, Collections.singleton(wikitty), false); + } + + public WikittyServiceEvent store(String securityToken, + Collection<Wikitty> wikitties) { + return store(securityToken, null, wikitties, false); + } + + public WikittyServiceEvent store(String securityToken, + Collection<Wikitty> wikitties, boolean force) { + return store(securityToken, null, wikitties, force); + } + + public WikittyServiceEvent storeExtension(String securityToken, + WikittyExtension ext) { + return storeExtension(securityToken, null, Collections.singleton(ext)); + } + + public WikittyServiceEvent storeExtension(String securityToken, + Collection<WikittyExtension> exts) { + return storeExtension(securityToken, null, exts); + } + + public WikittyExtension restoreExtension(String securityToken, String id) { + return restoreExtension(securityToken, null, id); + } + + public WikittyExtension restoreExtensionLastVersion(String securityToken, + String name) { + return restoreExtensionLastVersion(securityToken, null, name); + } + + /** + * + * @param securityToken security token + * @param id object id to restore + * @return the corresponding object, or null if object doesn't exist, is + * deleted or you don't have authorisation (you can check authorisation + * before call restore with {@link #canRead(java.lang.String, java.lang.String)} + */ + public Wikitty restore(String securityToken, String id) { + Wikitty result = restore(this, securityToken, id); + return result; + } + + public List<Wikitty> restore(String securityToken, List<String> id) { + return restore(securityToken, null, id); + } + + public WikittyServiceEvent delete(String securityToken, String id) { + return delete(securityToken, Collections.singleton(id)); + } + + public PagedResult<String> findAllByCriteria(String securityToken, + Criteria criteria) { + return findAllByCriteria(securityToken, null, criteria); + } + + public Wikitty findByCriteria(String securityToken, Criteria criteria) { + return findByCriteria(securityToken, null, criteria); + } + + /** + * Conveniant static method usefull in other WikittyService implementation + * where we don't wan't instanciate WikittyServiceEnhanced + * + * @param securityToken security token + * @param id object id to restore + * @return the corresponding object, or null if object doesn't exist, is + * deleted or you don't have authorisation (you can check authorisation + * before call restore with {@link #canRead(java.lang.String, java.lang.String)} + */ + static public Wikitty restore(WikittyService ws, String securityToken, String id) { + Wikitty result = null; + List<Wikitty> resultList = ws.restore(securityToken, null, + Collections.singletonList(id)); + if (resultList != null && resultList.size() > 0) { + result = resultList.get(0); + } + return result; + } + +} Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceEvent.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceEvent.java 2010-10-26 12:58:09 UTC (rev 451) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceEvent.java 2010-10-27 09:04:19 UTC (rev 452) @@ -26,7 +26,13 @@ package org.nuiton.wikitty; import com.thoughtworks.xstream.XStream; +import java.util.Collection; +import java.util.Date; +import java.util.EnumSet; import java.util.EventObject; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; import java.util.Map; import java.util.Set; @@ -36,9 +42,9 @@ * Contains : * <ul> * <li>Wikitty service as source - * <li>ids : wikitty ids or extensions ids - * <li>ids & version : only for put : version of added wikitties - * <li>ids & extension : only for put : extension of added ids + * <li>wikitties : wikitty added if type contains PUT_WIKITTY + * <li>ids & remove date : if type contains REMOVE_WIKITTY + * <li>extensions : extension added if type contains PUT_EXTENSION * </ul> * * @author chatellier @@ -69,51 +75,39 @@ } + /** unique event id, each event must have eventId, and event is sequence + * without hole. (ex: 0,1,2,3,4,5,6,...) */ + protected long eventId; + /** Remote event (received from server). */ protected boolean remote; - /** event type */ - protected WikittyEventType type; + /** event type, one event can have multiple type + * (ex: PUT_WIKITTY + PUT_EXTENSION */ + protected EnumSet<WikittyEventType> type; /** heure de creation de l'event */ protected long time; - /** - * Id managed by event. - * - * Can be : - * <ul> - * <li>wikitty ids (uuid) - * <li>extension ids (ex : toto[2.1]) - * </ul> - */ - protected Set<String> ids; - - /** - * Map between extensions set for each id. - * Not used for extension event - */ - protected Map<String, Set<String>> idExtensions; - - /** - * Map between versions for each id. - */ - protected Map<String, String> idVersions; + /** Use by PUT_WIKITTY, all wikitties added */ + protected Map<String, Wikitty> wikitties; - /** - * Map between deletion date for each id, if event is REMOVE. - */ - protected Map<String, String> idDeletionDate; + /** Use by REMOVE_WIKITTY. key: wikittyId, value: removed date */ + protected Map<String, Date> removeDate; + /** Use by PUT_EXTENSION, all extensions added */ + protected Map<String, WikittyExtension> extensions; + /** * Constructor with source {@link WikittyService}. * * @param source wikitty service + * @param eventId unique event id */ - public WikittyServiceEvent(Object source, WikittyEventType type) { + public WikittyServiceEvent(Object source) { super(source); this.time = System.currentTimeMillis(); - this.type = type; + this.type = EnumSet.noneOf(WikittyEventType.class); } /** @@ -133,12 +127,15 @@ this.source = source; } - public WikittyEventType getType() { + public EnumSet<WikittyEventType> getType() { return type; } - public void setType(WikittyEventType type) { - this.type = type; + /** + * @param type + */ + public void addType(WikittyEventType type) { + this.type.add(type); } /** @@ -159,66 +156,128 @@ this.remote = remote; } - /** - * Get ids. - * - * @return ids or {@code null} if no ids is related to event - */ - public Set<String> getIds() { - return ids; + public long getEventId() { + return eventId; } /** - * Set ids. - * - * @param ids ids to set + * This method must be call with right id, just before send message + * notification + * @param eventId */ - public void setIds(Set<String> ids) { - this.ids = ids; + public void setEventId(long eventId) { + this.eventId = eventId; } - /** - * Get id and extensions map. - * - * @return map with extension set for each id or {@code null} if no ids is related to event - */ - public Map<String, Set<String>> getIdExtensions() { - return idExtensions; + public Map<String, Wikitty> getWikitties() { + return wikitties; } - /** - * Change id and extensions map. - * - * @param idExtensions id and extensions map - */ - public void setIdExtensions(Map<String, Set<String>> idExtensions) { - this.idExtensions = idExtensions; + public void addWikitty(Wikitty wikitty) { + if (wikitties == null) { + wikitties = new LinkedHashMap<String, Wikitty>(); + addType(WikittyEventType.PUT_WIKITTY); + } + this.wikitties.put(wikitty.getId(), wikitty); } - + + public Map<String, Date> getRemoveDate() { + return removeDate; + } + + public void addRemoveDate(String wikittyId, Date date) { + if (removeDate == null) { + removeDate = new HashMap<String, Date>(); + addType(WikittyEventType.REMOVE_WIKITTY); + } + removeDate.put(wikittyId, date); + } + + public Map<String, WikittyExtension> getExtensions() { + return extensions; + } + + public void addExtension(WikittyExtension extension) { + if (extensions == null) { + extensions = new LinkedHashMap<String, WikittyExtension>(); + addType(WikittyEventType.PUT_EXTENSION); + } + extensions.put(extension.getId(), extension); + } + /** - * Get id and version map. - * - * @return map with version for each id + * Merge this event with event passed in arguement. Merged datas are: + * <li> type + * <li> wikitties + * <li> extensions + * <li> removeDate + * + * @param e */ - public Map<String, String> getIdVersions() { - return idVersions; + public void add(WikittyServiceEvent e) { + getType().addAll(e.getType()); + if (e.getWikitties() != null) { + for (Map.Entry<String, Wikitty> i : e.getWikitties().entrySet()) { + addWikitty(i.getValue()); + } + } + if (e.getExtensions() != null) { + for (Map.Entry<String, WikittyExtension> i : e.getExtensions().entrySet()) { + addExtension(i.getValue()); + } + } + if (e.getRemoveDate() != null) { + for (Map.Entry<String, Date> i : e.getRemoveDate().entrySet()) { + addRemoveDate(i.getKey(), i.getValue()); + } + } } /** - * Set id and version map. - * - * @param idVersions id and versions + * Update data directly in object passed in argument. + * Actualy only version and deletion date are updated. + * <p> + * rem: during store action, no migration has done. Migration is only + * done during restore process. This implies that extension don't change + * after store. But another client, may can load wikitty with migration + * and store it, or add manualy some extension. In that case, stored wikitty + * has new/more extension that another client. + * <p> + * And internaly wikitty object is marked clean (not dirty) + * @param e + * @return wikitty passed in arguement or null, if event is CLEAR_WIKITTY */ - public void setIdVersions(Map<String, String> idVersions) { - this.idVersions = idVersions; + public Wikitty update(Wikitty e) { + // update version + String id = e.getId(); + if (type.contains(WikittyEventType.CLEAR_WIKITTY)) { + e = null; + } else { + if (type.contains(WikittyEventType.PUT_WIKITTY)) { + Wikitty newWikitty = getWikitties().get(id); + e.replace(newWikitty); + } + if (type.contains(WikittyEventType.REMOVE_WIKITTY)) { + Date date = getRemoveDate().get(id); + e.setDeleteDate(date); + } + e.clearDirty(); + } + return e; } @Override public String toString() { - String toString = getClass().getName() + "[source=" + source + - ", type=" + type + - ", remote=" + remote + ", ids=" + ids + ", idExtensions=" + idExtensions + - ", idVersions=" + idVersions + ", idDeletionDate=" + idVersions + "]"; + String toString = getClass().getName() + + "[source=" + source + + ", eventId=" + eventId + + ", time=" + time + + ", type=" + type + + ", remote=" + remote + + ", wikitties=" + wikitties + + ", removeDate=" + removeDate + + ", extensions=" + extensions + + "]"; return toString; } Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceImpl.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceImpl.java 2010-10-26 12:58:09 UTC (rev 451) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceImpl.java 2010-10-27 09:04:19 UTC (rev 452) @@ -26,14 +26,11 @@ package org.nuiton.wikitty; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collection; import java.util.Date; import java.util.HashMap; -import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashMap; -import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Set; @@ -155,8 +152,38 @@ } } +// @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 UpdateResponse store(String securityToken, WikittyTransaction transaction, + public WikittyServiceEvent store(String securityToken, + WikittyTransaction transaction, Collection<Wikitty> wikitties, boolean force) { if (!(wikitties instanceof Set)) { // use all time Set to prevent duplicated wikitty in collection @@ -171,103 +198,44 @@ 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; - } - - /** - * Store and index wikitty object - * @param wikitty - */ - @Override - public UpdateResponse store(String securityToken, Wikitty wikitty) { - if (wikitty != null) { - WikittyTransaction transaction = new WikittyTransaction(); - try { + boolean txCreated = false; + try { + if (transaction == null) { + transaction = new WikittyTransaction(); + txCreated = true; transaction.begin(); - - List<Wikitty> wikitties = Arrays.asList(wikitty); - UpdateResponse result = store( - securityToken, transaction, wikitties, false); - - transaction.commit(); - return result; - } catch (WikittyException ex) { - transaction.rollback(); - throw ex; - } catch (Exception eee) { - transaction.rollback(); - throw new WikittyException("Can't store wikitty", eee); } - } else { - throw new WikittyException("You can't store null wikitty object"); - } - } - /** - * Store and index wikitties object. - * - * @param wikitties - */ - @Override - public UpdateResponse store(String securityToken, Collection<Wikitty> wikitties) { - WikittyTransaction transaction = new WikittyTransaction(); - try { - transaction.begin(); + // try to commit command + WikittyServiceEvent extUpdate = + getExtensionStorage().store(transaction, allExtensions); + WikittyServiceEvent wikUpdate = + getWikittyStorage().store(transaction, wikitties, force); + getSearchEngin().store(transaction, wikitties); - UpdateResponse result = store( - securityToken, transaction, wikitties, false); + WikittyServiceEvent result = new WikittyServiceEvent(this); + // prepare update client response + result.add(extUpdate); + result.add(wikUpdate); - transaction.commit(); + if (txCreated) { + transaction.commit(); + } return result; } catch (WikittyException ex) { - transaction.rollback(); + if (transaction != null) { + transaction.rollback(); + } throw ex; } catch (Exception eee) { - transaction.rollback(); + if (transaction != null) { + transaction.rollback(); + } throw new WikittyException("Can't store wikitty", eee); } } - /** - * Store and index wikitties object. - * - * @param wikitties - * @param force boolean force non version version increment on saved wikitty - * or force version on wikitty creation (version 0.0) - */ @Override - public UpdateResponse store(String securityToken, - Collection<Wikitty> wikitties, boolean force) { - WikittyTransaction transaction = new WikittyTransaction(); - try { - transaction.begin(); - - UpdateResponse result = store(securityToken, - transaction, wikitties, force); - - transaction.commit(); - return result; - } catch (WikittyException ex) { - transaction.rollback(); - throw ex; - } catch (Exception eee) { - transaction.rollback(); - throw new WikittyException("Can't store wikitty", eee); - } - } - - @Override public List<String> getAllExtensionIds(String securityToken) { WikittyTransaction transaction = new WikittyTransaction(); try { @@ -303,87 +271,71 @@ } @Override - public UpdateResponse storeExtension(String securityToken, + public WikittyServiceEvent storeExtension(String securityToken, WikittyTransaction transaction, Collection<WikittyExtension> exts) { - UpdateResponse result = getExtensionStorage().store(transaction, exts); - return result; - } - - /** - * Save several extension. - * - * @param exts - */ - @Override - public UpdateResponse storeExtension(String securityToken, - Collection<WikittyExtension> exts) { - WikittyTransaction transaction = new WikittyTransaction(); + boolean txCreated = false; try { - transaction.begin(); + if (transaction == null) { + transaction = new WikittyTransaction(); + txCreated = true; + transaction.begin(); + } - UpdateResponse result = storeExtension( - securityToken, transaction, exts); - - transaction.commit(); + WikittyServiceEvent result = + getExtensionStorage().store(transaction, exts); + + if (txCreated) { + transaction.commit(); + } return result; + } catch (WikittyException ex) { + if (transaction != null) { + transaction.rollback(); + } + throw ex; } catch (Exception eee) { - transaction.rollback(); + if (transaction != null) { + transaction.rollback(); + } throw new WikittyException("Can't store extensions", eee); } } @Override - public UpdateResponse storeExtension(String securityToken, WikittyExtension ext) { - WikittyTransaction transaction = new WikittyTransaction(); - try { - transaction.begin(); - - UpdateResponse result = storeExtension( - securityToken, transaction, Arrays.asList(ext)); - - transaction.commit(); - return result; - } catch (Exception eee) { - transaction.rollback(); - throw new WikittyException("Can't store extension", eee); - } - } - - @Override public WikittyExtension restoreExtension( String securityToken, WikittyTransaction transaction, String extensionId) { - //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); - return result; - } - - /** - * Load extension from id. Id is 'name[version]'. - * - * @param extensionId extension id to restore - * @return extension - */ - @Override - public WikittyExtension restoreExtension(String securityToken, String extensionId) { - WikittyTransaction transaction = new WikittyTransaction(); + boolean txCreated = false; try { - transaction.begin(); + if (transaction == null) { + transaction = new WikittyTransaction(); + txCreated = true; + transaction.begin(); + } - WikittyExtension result = restoreExtension( - securityToken, transaction, extensionId); + //split the id to ensure that version is normalized + String name = WikittyExtension.computeName(extensionId); + String version = WikittyExtension.computeVersion(extensionId); - transaction.commit(); + 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) { - transaction.rollback(); - throw new WikittyException("can't restore extensions", eee); + if (transaction != null) { + transaction.rollback(); + } + throw new WikittyException("Can't restore extensions", eee); } - } + @Override public WikittyExtension restoreExtensionLastVersion(String securityToken, WikittyTransaction transaction, String name) { String version = getExtensionStorage().getLastVersion(transaction, name); @@ -391,25 +343,30 @@ return null; } - WikittyExtension result = getExtensionStorage().restore(transaction, name, version); - return result; - } - - @Override - public WikittyExtension restoreExtensionLastVersion( - String securityToken, String name) { - WikittyTransaction transaction = new WikittyTransaction(); + boolean txCreated = false; try { - transaction.begin(); + if (transaction == null) { + transaction = new WikittyTransaction(); + txCreated = true; + transaction.begin(); + } - WikittyExtension result = restoreExtensionLastVersion( - securityToken, transaction, name); + WikittyExtension result = getExtensionStorage().restore(transaction, name, version); - transaction.commit(); + if (txCreated) { + transaction.commit(); + } return result; + } catch (WikittyException ex) { + if (transaction != null) { + transaction.rollback(); + } + throw ex; } catch (Exception eee) { - transaction.rollback(); - throw new WikittyException("Can't restore extension", eee); + if (transaction != null) { + transaction.rollback(); + } + throw new WikittyException("Can't store extensions", eee); } } @@ -437,51 +394,57 @@ @Override public List<Wikitty> restore(String securityToken, WikittyTransaction transaction, List<String> ids) { + List<Wikitty> result = new ArrayList<Wikitty>(); - for(String id : ids) { - Wikitty w = restore(securityToken, transaction, id); - if (w != null) { - result.add(w); + boolean txCreated = false; + try { + if (transaction == null) { + transaction = new WikittyTransaction(); + txCreated = true; + transaction.begin(); } - } - return result; - } - @Override - public List<Wikitty> restore(String securityToken, List<String> ids) { - WikittyTransaction transaction = new WikittyTransaction(); - try { - transaction.begin(); - - List<Wikitty> result = restore(securityToken, transaction, ids); - - transaction.commit(); + 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 (log.isErrorEnabled()) { - log.error("Can't restore wikitty collection", eee); + if (transaction != null) { + transaction.rollback(); } - transaction.rollback(); throw new WikittyException("Can't restore wikitty", eee); } } - @Override - public Wikitty restore(String securityToken, String id) { - WikittyTransaction transaction = new WikittyTransaction(); - try { - transaction.begin(); +// @Override +// public Wikitty restore(String securityToken, String id) { +// WikittyTransaction transaction = new WikittyTransaction(); +// try { +// transaction.begin(); +// +// Wikitty result = restore(securityToken, transaction, id); +// +// transaction.commit(); +// return result; +// } catch (Exception eee) { +// transaction.rollback(); +// throw new WikittyException("Can't restore wikitty", eee); +// } +// } - Wikitty result = restore(securityToken, transaction, id); - - transaction.commit(); - return result; - } catch (Exception eee) { - transaction.rollback(); - throw new WikittyException("Can't restore wikitty", eee); - } - } - protected Wikitty upgradeData(String securityToken, WikittyTransaction transaction, Wikitty wikitty) { Wikitty result = wikitty; @@ -505,7 +468,8 @@ log.debug("lastExtensionVersion=" + lastExtensionVersion); } - WikittyExtensionMigration migration = WikittyExtensionMigration.migrationRegistry.get(extensionName); + WikittyExtensionMigration migration = + WikittyExtensionMigration.migrationRegistry.get(extensionName); if (migration == null) { migration = defaultExtensionMigration; } @@ -514,8 +478,10 @@ while(WikittyUtil.versionGreaterThan(lastExtensionVersion, currentExtensionVersion)) { // Get extension after the current version - String nextExtensionVersion = WikittyUtil.incrementMajorRevision(currentExtensionVersion); - String nextExtensionId = WikittyExtension.computeId(extensionName, nextExtensionVersion); + String nextExtensionVersion = + WikittyUtil.incrementMajorRevision(currentExtensionVersion); + String nextExtensionId = + WikittyExtension.computeId(extensionName, nextExtensionVersion); WikittyExtension nextExtension = restoreExtension( securityToken, transaction, nextExtensionId); @@ -539,7 +505,7 @@ return result; } - protected void delete(String securityToken, WikittyTransaction transaction, + protected WikittyServiceEvent delete(String securityToken, WikittyTransaction transaction, Collection<String> ids) throws WikittyException { // work only on valid id Collection<Wikitty> storedWikitties = new LinkedHashSet<Wikitty>(); @@ -592,37 +558,30 @@ } } - getWikittyStorage().delete(transaction, idSet); + WikittyServiceEvent eventDelete = + getWikittyStorage().delete(transaction, idSet); getSearchEngin().delete(transaction, idSet); - store(securityToken, transaction, storedWikitties, false); + WikittyServiceEvent eventStore = + store(securityToken, transaction, storedWikitties, false); + + WikittyServiceEvent result = new WikittyServiceEvent(this); + result.add(eventDelete); + result.add(eventStore); + + return result; } @Override - public void delete(String securityToken, String id) { + public WikittyServiceEvent delete(String securityToken, Collection<String> ids){ WikittyTransaction transaction = new WikittyTransaction(); try { transaction.begin(); - - List<String> ids = Arrays.asList(id); - delete(securityToken, transaction, ids); - - transaction.commit(); - } catch (Exception eee) { - transaction.rollback(); - throw new WikittyException("Can't delete wikitty", eee); - } - } - - @Override - public void delete(String securityToken, Collection<String> ids){ - WikittyTransaction transaction = new WikittyTransaction(); - try { - transaction.begin(); - delete(securityToken, transaction, ids); + WikittyServiceEvent result = delete(securityToken, transaction, ids); transaction.commit(); + return result; } catch (Exception eee) { transaction.rollback(); throw new WikittyException("Can't delete wikitty", eee); @@ -634,16 +593,21 @@ * This operation should be disabled in production environment. */ @Override - public void clear(String securityToken) { + public WikittyServiceEvent clear(String securityToken) { WikittyTransaction transaction = new WikittyTransaction(); try { transaction.begin(); getSearchEngin().clear(transaction); - getWikittyStorage().clear(transaction); - getExtensionStorage().clear(transaction); + WikittyServiceEvent eventWik = getWikittyStorage().clear(transaction); + WikittyServiceEvent eventExt = getExtensionStorage().clear(transaction); + WikittyServiceEvent result = new WikittyServiceEvent(this); + result.add(eventWik); + result.add(eventExt); + transaction.commit(); + return result; } catch (Exception eee) { transaction.rollback(); throw new WikittyException("Can't clear all data", eee); @@ -657,61 +621,70 @@ @Override public PagedResult<String> findAllByCriteria(String securityToken, WikittyTransaction transaction, Criteria criteria) { - PagedResult<String> result = - getSearchEngin().findAllByCriteria(transaction, criteria); - return result; - } - - @Override - public PagedResult<String> findAllByCriteria( - String securityToken, Criteria criteria) { - WikittyTransaction transaction = new WikittyTransaction(); try { - transaction.begin(); + boolean txCreated = false; + if (transaction == null) { + transaction = new WikittyTransaction(); + txCreated = true; + transaction.begin(); + } - PagedResult<String> result = findAllByCriteria( - securityToken, transaction, criteria); - - transaction.commit(); + 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) { - transaction.rollback(); + if (transaction != null) { + transaction.rollback(); + } throw new WikittyException("Error during find", eee); } } - + public Wikitty findByCriteria(String securityToken, WikittyTransaction transaction, Criteria criteria) { - 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); - } - - return result; - } - - @Override - public Wikitty findByCriteria(String securityToken, Criteria criteria) { - WikittyTransaction transaction = new WikittyTransaction(); try { - transaction.begin(); + boolean txCreated = false; + if (transaction == null) { + transaction = new WikittyTransaction(); + txCreated = true; + transaction.begin(); + } - Wikitty result = findByCriteria( + criteria.setFirstIndex(0).setEndIndex(1); + PagedResult<String> pages = findAllByCriteria( securityToken, transaction, criteria); - - transaction.commit(); + + 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) { - transaction.rollback(); + 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); @@ -759,21 +732,19 @@ } @Override - public List<String> deleteTree(String securityToken, String thesaurusId) { - List<String> deletedIds = null; + public WikittyServiceEvent deleteTree(String securityToken, String thesaurusId) { WikittyTransaction transaction = new WikittyTransaction(); try { transaction.begin(); - deletedIds = deleteTree(securityToken, transaction, thesaurusId); + WikittyServiceEvent result = deleteTree(securityToken, transaction, thesaurusId); transaction.commit(); + return result; } catch (Exception eee) { transaction.rollback(); throw new WikittyException("Can't delete tree", eee); } - - return deletedIds; } /** @@ -784,10 +755,10 @@ * @param treeNodeId thesaurusId to delete * @return all id of delete nodes */ - public List<String> deleteTree(String securityToken, WikittyTransaction transaction, String treeNodeId) { + protected WikittyServiceEvent deleteTree(String securityToken, WikittyTransaction transaction, String treeNodeId) { List<String> allTreeNodeId = getRecursiveTreeNodeId(securityToken, transaction, treeNodeId); - delete(securityToken, transaction, allTreeNodeId); - return allTreeNodeId; + WikittyServiceEvent result = delete(securityToken, transaction, allTreeNodeId); + return result; } /** @@ -896,12 +867,11 @@ } @Override - public UpdateResponse syncEngin(final String securityToken) { + public void syncEngin(final String securityToken) { final WikittyTransaction transaction = new WikittyTransaction(); try { final int numberForCommit = 1000; final WikittySearchEngin searchEngin = getSearchEngin(); - final UpdateResponse result = new UpdateResponse(); final List<Wikitty> wikitties = new ArrayList<Wikitty>(numberForCommit); transaction.begin(); @@ -922,8 +892,7 @@ if(count == numberForCommit) { // Reindex - UpdateResponse response = searchEngin.store(transaction, wikitties); - result.add(response); + searchEngin.store(transaction, wikitties); transaction.commit(); // Reinit count = 0; @@ -935,11 +904,8 @@ }); // Last wikitties - UpdateResponse response = searchEngin.store(transaction, wikitties); - result.add(response); - + searchEngin.store(transaction, wikitties); transaction.commit(); - return result; } catch (Exception eee) { transaction.rollback(); throw new WikittyException("Can't sync searchable index with data", eee); Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceInMemory.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceInMemory.java 2010-10-26 12:58:09 UTC (rev 451) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceInMemory.java 2010-10-27 09:04:19 UTC (rev 452) @@ -71,9 +71,17 @@ protected Map<String, Wikitty> wikitties = new LinkedHashMap<String, Wikitty>(); @Override - public UpdateResponse store(WikittyTransaction transaction, Collection<Wikitty> wikitties, boolean force) { - UpdateResponse result = new UpdateResponse(); + public WikittyServiceEvent store(WikittyTransaction transaction, + Collection<Wikitty> wikitties, boolean force) { + WikittyServiceEvent result = new WikittyServiceEvent(this); for (Wikitty wikitty : wikitties) { + // begin with clone of wikitty to prevent modification of + // wikitty passed as argument + try { + wikitty = wikitty.clone(); + } catch (CloneNotSupportedException eee) { + throw new WikittyException("Can't clone ?", eee); + } String actualVersion = null; Wikitty inMemoryWikitty = this.wikitties.get(wikitty.getId()); @@ -123,24 +131,22 @@ try { this.wikitties.put(wikitty.getId(), wikitty.clone()); - } catch (CloneNotSupportedException ex) { - if (log.isErrorEnabled()) { - log.error("Can't clone ?", ex); - } + } catch (CloneNotSupportedException eee) { + throw new WikittyException("Can't clone ?", eee); } - result.addVersionUpdate(wikitty.getId(), wikitty.getVersion()); + result.addWikitty(wikitty); } return result; } @Override - public UpdateResponse delete(WikittyTransaction transaction, Collection<String> idList) throws WikittyException { - UpdateResponse result = new UpdateResponse(); + public WikittyServiceEvent delete(WikittyTransaction transaction, Collection<String> idList) throws WikittyException { + WikittyServiceEvent result = new WikittyServiceEvent(this); Date now = new Date(); for (String id : idList) { Wikitty w = restore(transaction, id); w.setDeleteDate(now); - result.addDeletionDateUpdate(id, now); + result.addRemoveDate(id, now); } return result; } @@ -184,8 +190,11 @@ } @Override - public void clear(WikittyTransaction transaction) { + public WikittyServiceEvent clear(WikittyTransaction transaction) { wikitties = new LinkedHashMap<String, Wikitty>(); + WikittyServiceEvent result = new WikittyServiceEvent(this); + result.addType(WikittyServiceEvent.WikittyEventType.CLEAR_WIKITTY); + return result; } } @@ -197,13 +206,16 @@ } @Override - public UpdateResponse store(WikittyTransaction transaction, + public WikittyServiceEvent store(WikittyTransaction transaction, Collection<WikittyExtension> exts) throws WikittyException { + WikittyServiceEvent result = new WikittyServiceEvent(this); for (WikittyExtension ext : exts) { - extensions.put(ext.getId(), ext); + // on ajoute que s'il n'y est pas deja + if (!extensions.containsKey(ext.getId())) { + extensions.put(ext.getId(), ext); + result.addExtension(ext); + } } - // nothing to do in UpdateResponse - UpdateResponse result = new UpdateResponse(); return result; } @@ -262,8 +274,11 @@ } @Override - public void clear(WikittyTransaction transaction) { + public WikittyServiceEvent clear(WikittyTransaction transaction) { extensions = new HashMap<String, WikittyExtension>(); + WikittyServiceEvent result = new WikittyServiceEvent(this); + result.addType(WikittyServiceEvent.WikittyEventType.CLEAR_EXTENSION); + return result; } } @@ -281,17 +296,13 @@ } @Override - public UpdateResponse store(WikittyTransaction transaction, + public void store(WikittyTransaction transaction, Collection<Wikitty> wikitties) { - // do nothing - return new UpdateResponse(); } @Override - public UpdateResponse delete(WikittyTransaction transaction, + public void delete(WikittyTransaction transaction, Collection<String> idList) throws WikittyException { - // do nothing - return new UpdateResponse(); } Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceNotifier.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceNotifier.java 2010-10-26 12:58:09 UTC (rev 451) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceNotifier.java 2010-10-27 09:04:19 UTC (rev 452) @@ -190,60 +190,21 @@ } @Override - public void clear(String securityToken) { - // FIXME poussin 20101015 pourquoi n'y a t il pas d'event pour un clear total ? - // il faut prévenir les clients de synchro de ce vider totalement aussi - ws.clear(securityToken); + public WikittyServiceEvent clear(String securityToken) { + WikittyServiceEvent result = ws.clear(securityToken); + fireEvent(result); + return result; } @Override - public UpdateResponse store(String securityToken, Wikitty wikitty) { - UpdateResponse updateResponse = ws.store(securityToken, wikitty); - // update wikitty - updateResponse.update(wikitty); - // notify listeners - firePutWikitty(wikitty); - return updateResponse; - } - - @Override - public UpdateResponse store(String securityToken, Collection<Wikitty> wikitties) { - UpdateResponse updateResponse = ws.store(securityToken, wikitties); - // update wikitty - for (Wikitty wikitty : wikitties) { - updateResponse.update(wikitty); - } - // notify listeners - firePutWikitty(wikitties.toArray(new Wikitty[wikitties.size()])); - return updateResponse; - } - - @Override - public UpdateResponse store(String securityToken, Collection<Wikitty> wikitties, - boolean force) { - UpdateResponse updateResponse = ws.store( - securityToken, wikitties, force); - // update wikitty - for (Wikitty wikitty : wikitties) { - updateResponse.update(wikitty); - } - // notify listeners - firePutWikitty(wikitties.toArray(new Wikitty[wikitties.size()])); - return updateResponse; - } - - @Override - public UpdateResponse store(String securityToken, WikittyTransaction transaction, + public WikittyServiceEvent store(String securityToken, WikittyTransaction transaction, Collection<Wikitty> wikitties, boolean force) { - UpdateResponse updateResponse = ws.store(securityToken, transaction, + WikittyServiceEvent result = ws.store(securityToken, transaction, wikitties, force); - // update wikitty - for (Wikitty wikitty : wikitties) { - updateResponse.update(wikitty); - } + // notify listeners - firePutWikitty(wikitties.toArray(new Wikitty[wikitties.size()])); - return updateResponse; + fireEvent(result); + return result; } @Override @@ -260,38 +221,15 @@ } @Override - public UpdateResponse storeExtension(String securityToken, WikittyExtension ext) { - UpdateResponse updateResponse = ws.storeExtension(securityToken, ext); - // notify listeners - firePutExtension(ext); - return updateResponse; - } - - @Override - public UpdateResponse storeExtension( - String securityToken, Collection<WikittyExtension> exts) { - UpdateResponse updateResponse = ws.storeExtension(securityToken, exts); - // notify listeners - firePutExtension(exts.toArray(new WikittyExtension[exts.size()])); - return updateResponse; - } - - @Override - public UpdateResponse storeExtension(String securityToken, + public WikittyServiceEvent storeExtension(String securityToken, WikittyTransaction transaction, Collection<WikittyExtension> exts) { - UpdateResponse updateResponse = ws.storeExtension( + WikittyServiceEvent result = ws.storeExtension( securityToken, transaction, exts); - // no notification called by #storeExtension(Collection<WikittyExtension>) - return updateResponse; + fireEvent(result); + return result; } @Override - public WikittyExtension restoreExtension(String securityToken, String id) { - // no notification - return ws.restoreExtension(securityToken, id); - } - - @Override public WikittyExtension restoreExtension(String securityToken, WikittyTransaction transaction, String id) { // no notification @@ -300,57 +238,27 @@ @Override public WikittyExtension restoreExtensionLastVersion( - String securityToken, String name) { - // no notification - return ws.restoreExtensionLastVersion(securityToken, name); - } - - @Override - public WikittyExtension restoreExtensionLastVersion( String securityToken, WikittyTransaction transaction, String name) { // no notification return ws.restoreExtensionLastVersion(securityToken, transaction, name); } @Override - public Wikitty restore(String securityToken, String id) { + public List<Wikitty> restore(String securityToken, + WikittyTransaction transaction, List<String> ids) { // no notification - return ws.restore(securityToken, id); - } - - @Override - public List<Wikitty> restore(String securityToken, List<String> ids) { - // no notification - return ws.restore(securityToken, ids); - } - - @Override - public List<Wikitty> restore(String securityToken, WikittyTransaction transaction, List<String> ids) { - // no notification return ws.restore(securityToken, transaction, ids); } @Override - public void delete(String securityToken, String id) { - ws.delete(securityToken, id); + public WikittyServiceEvent delete(String securityToken, Collection<String> ids) { + WikittyServiceEvent result = ws.delete(securityToken, ids); // notify listeners - fireRemoveWikitty(id); + fireEvent(result); + return result; } @Override - public void delete(String securityToken, Collection<String> ids) { - ws.delete(securityToken, ids); - // notify listeners - fireRemoveWikitty(ids.toArray(new String[ids.size()])); - } - - @Override - public PagedResult<String> findAllByCriteria(String securityToken, Criteria criteria) { - // no notification - return ws.findAllByCriteria(securityToken, criteria); - } - - @Override public PagedResult<String> findAllByCriteria(String securityToken, WikittyTransaction transaction, Criteria criteria) { // no notification @@ -358,14 +266,9 @@ } @Override - public Wikitty findByCriteria(String securityToken, Criteria criteria) { + public Wikitty findByCriteria(String securityToken, + WikittyTransaction transaction, Criteria criteria) { // no notification - return ws.findByCriteria(securityToken, criteria); - } - - @Override - public Wikitty findByCriteria(String securityToken, WikittyTransaction transaction, Criteria criteria) { - // no notification return ws.findByCriteria(securityToken, transaction, criteria); } @@ -376,10 +279,9 @@ } @Override - public List<String> deleteTree(String securityToken, String wikittyId) { - // no notification - List<String> result = ws.deleteTree(securityToken, wikittyId); - fireRemoveWikitty(result.toArray(new String[result.size()])); + public WikittyServiceEvent deleteTree(String securityToken, String wikittyId) { + WikittyServiceEvent result = ws.deleteTree(securityToken, wikittyId); + fireEvent(result); return result; } @@ -405,128 +307,12 @@ } @Override - public UpdateResponse syncEngin(String securityToken) { + public void syncEngin(String securityToken) { // no notification - return ws.syncEngin(securityToken); + ws.syncEngin(securityToken); } /** - * Build event to fire and call {@link #firePutWikitty(WikittyServiceEvent)}. - * - * @param ws data - */ - protected void firePutWikitty(Wikitty... ws) { - WikittyServiceEvent event = new WikittyServiceEvent(ws, - WikittyServiceEvent.WikittyEventType.PUT_WIKITTY); - Set<String> ids = new HashSet<String>(); - Map<String, Set<String>> idsExtension = new HashMap<String, Set<String>>(); - Map<String, String> idsVersion = new HashMap<String, String>(); - - for (Wikitty w : ws) { - // ids - ids.add(w.getId()); - // extension - Set<String> extension = new HashSet<String>(); - extension.addAll(w.getExtensionNames()); - idsExtension.put(w.getId(), extension); - // version - idsVersion.put(w.getId(), w.getVersion()); - } - - event.setIds(ids); - event.setIdExtensions(idsExtension); - event.setIdVersions(idsVersion); - fireEvent(event); - } - - /** - * Build event to fire and call {@link #fireRemoveWikitty(WikittyServiceEvent)}. - * - * @param wikittyIds wikitty ids - */ - protected void fireRemoveWikitty(String... wikittyIds) { - WikittyServiceEvent event = new WikittyServiceEvent(ws, - WikittyServiceEvent.WikittyEventType.REMOVE_WIKITTY); - Set<String> ids = new HashSet<String>(); - - for (String wikittyId : wikittyIds) { - // ids - ids.add(wikittyId); - } - - event.setIds(ids); - fireEvent(event); - } - - /** - * Build event to fire and call {@link #fireClearWikitty(WikittyServiceEvent)}. - */ - protected void fireClearWikitty() { - WikittyServiceEvent event = new WikittyServiceEvent(ws, - WikittyServiceEvent.WikittyEventType.CLEAR_WIKITTY); - fireEvent(event); - } - - /** - * Build event to fire and call {@link #firePutExtension(WikittyServiceEvent)}. - * - * @param ws data - */ - protected void firePutExtension(WikittyExtension... exts) { - WikittyServiceEvent event = new WikittyServiceEvent(ws, - WikittyServiceEvent.WikittyEventType.PUT_EXTENSION); - Set<String> ids = new HashSet<String>(); - Map<String, Set<String>> idsExtension = new HashMap<String, Set<String>>(); - - for (WikittyExtension ext : exts) { - // ids - ids.add(ext.getId()); - // extension - Set<String> extension = new HashSet<String>(); - extension.add(ext.getName()); - - // also add requires fields - extension.add(ext.requires); - - idsExtension.put(ext.getId(), extension); - } - - event.setIds(ids); - event.setIdExtensions(idsExtension); - fireEvent(event); - } - - /** - * Build event to fire and call {@link #fireRemoveExtension(WikittyServiceEvent)}. - * - * @param ws data - */ - protected void fireRemoveExtension(WikittyExtension... exts) { - WikittyServiceEvent event = new WikittyServiceEvent(ws, - WikittyServiceEvent.WikittyEventType.REMOVE_EXTENSION); - Set<String> ids = new HashSet<String>(); - - for (WikittyExtension ext : exts) { - // ids - ids.add(ext.getId()); - } - - event.setIds(ids); - fireEvent(event); - } - - /** - * Build event to fire and call {@link #fireClearExtension(WikittyServiceEvent)}. - * - * @param ws data - */ - protected void fireClearExtension() { - WikittyServiceEvent event = new WikittyServiceEvent(ws, - WikittyServiceEvent.WikittyEventType.CLEAR_EXTENSION); - fireEvent(event); - } - - /** * Fire event to all registred listener. * * Take care about {@link WikittyServiceEvent#isRemote()} for fire. @@ -683,8 +469,10 @@ while (null != (event = eventToSend.poll(5, TimeUnit.SECONDS))) { try { synchronized (allWikittyServiceListeners) { - allWikittyServiceListeners.fire( - event.getType().listenerMethodName, event); + for(WikittyServiceEvent.WikittyEventType type : event.getType()) { + allWikittyServiceListeners.fire( + type.listenerMethodName, event); + } } } catch (Exception eee) { log.error("Can't notify listener", eee); @@ -692,13 +480,17 @@ try { if (event.isRemote()) { synchronized (remoteWikittyServiceListeners) { - remoteWikittyServiceListeners.fire( - event.getType().listenerMethodName, event); + for (WikittyServiceEvent.WikittyEventType type : event.getType()) { + remoteWikittyServiceListeners.fire( + type.listenerMethodName, event); + } } } else { synchronized (localWikittyServiceListeners) { - localWikittyServiceListeners.fire( - event.getType().listenerMethodName, event); + for (WikittyServiceEvent.WikittyEventType type : event.getType()) { + localWikittyServiceListeners.fire( + type.listenerMethodName, event); + } } } } catch (Exception eee) { Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceSecurity.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceSecurity.java 2010-10-26 12:58:09 UTC (rev 451) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceSecurity.java 2010-10-27 09:04:19 UTC (rev 452) @@ -53,13 +53,13 @@ /** to use log facility, just put in your code: log.info(\"...\"); */ static private Log log = LogFactory.getLog(WikittyServiceSecurity.class); - protected WikittyService ws; + protected WikittyServiceEnhanced ws; /** cache de l'id du groupe AppAdmin */ transient protected String appAdminGroupId = null; public WikittyServiceSecurity(WikittyService ws) { - this.ws = ws; + this.ws = new WikittyServiceEnhanced(ws); } @Override @@ -74,7 +74,7 @@ @Override public String login(String login, String password) { - Wikitty user = ws.findByCriteria(null, Search.query().eq( + Wikitty user = ws.findByCriteria(null, null, Search.query().eq( WikittyUser.FQ_FIELD_WIKITTYUSER_LOGIN, login).criteria()); if (user == null) { throw new IllegalArgumentException(String.format("no such account '%s'", login)); @@ -86,7 +86,7 @@ // force add extension to wikitty WikittyTokenHelper.addExtension(wikittyToken); WikittyTokenHelper.setUser(wikittyToken, user.getId()); - ws.store(null, wikittyToken); + ws.store(null, null, Arrays.asList(wikittyToken), false); log.debug(String.format("token '%s' is for login '%s'", tokenId, login)); return tokenId; @@ -102,16 +102,17 @@ throw new IllegalArgumentException("security token is null"); } else { getUserId(securityToken); // will throw exception if token is not valid - ws.delete(securityToken, securityToken); + ws.delete(securityToken, Arrays.asList(securityToken)); } } @Override - public void clear(String securityToken) { + public WikittyServiceEvent clear(String securityToken) { String userId = getUserId(securityToken); if (isAppAdmin(securityToken, userId)) { // seul les AppAdmin on le droit a cette method - ws.clear(securityToken); + WikittyServiceEvent result = ws.clear(securityToken); + return result; } else { throw new SecurityException(_("user %s can't clear data", userId)); } @@ -140,34 +141,13 @@ } @Override - public UpdateResponse store(String securityToken, Wikitty wikitty) { - Collection<Wikitty> wikitties = Arrays.asList(wikitty); - wikitties = checkStore(securityToken, wikitties); - UpdateResponse result = ws.store(securityToken, wikitties); - return result; - } - - @Override - public UpdateResponse store(String securityToken, Collection<Wikitty> wikitties) { + public WikittyServiceEvent store(String securityToken, + WikittyTransaction transaction, Collection<Wikitty> wikitties, boolean force) { Collection<Wikitty> wikittiesToStore = checkStore(securityToken, wikitties); - UpdateResponse result = ws.store(securityToken, wikittiesToStore); + WikittyServiceEvent result = ws.store(securityToken, transaction, wikittiesToStore, force); return result; } - - @Override - public UpdateResponse store(String securityToken, Collection<Wikitty> wikitties, boolean force) { - Collection<Wikitty> wikittiesToStore = checkStore(securityToken, wikitties); - UpdateResponse result = ws.store(securityToken, wikittiesToStore, force); - return result; - } - @Override - public UpdateResponse store(String securityToken, WikittyTransaction transaction, Collection<Wikitty> wikitties, boolean force) { - Collection<Wikitty> wikittiesToStore = checkStore(securityToken, wikitties); - UpdateResponse result = ws.store(securityToken, transaction, wikittiesToStore, force); - return result; - } - protected Collection<Wikitty> checkStore(String securityToken, Collection<Wikitty> wikitties) { String userId = getUserId(securityToken); List<Wikitty> wikittiesToStore = new ArrayList<Wikitty>(); @@ -239,31 +219,13 @@ } @Override - public Wikitty restore(String securityToken, String id) { - String userId = getUserId(securityToken); - Wikitty wikitty = ws.restore(securityToken, id); - if (wikitty != null) { - refuseUnauthorizedRead(securityToken, userId, wikitty); - } - return wikitty; - } - - @Override - public List<Wikitty> restore(String securityToken, List<String> ids) { - String userId = getUserId(securityToken); - List<Wikitty> wikitties = ws.restore(securityToken, ids); - for (Wikitty wikitty : wikitties) { - refuseUnauthorizedRead(securityToken, userId, wikitty); - } - return wikitties; - } - - @Override public List<Wikitty> restore(String securityToken, WikittyTransaction transaction, List<String> ids) { String userId = getUserId(securityToken); List<Wikitty> wikitties = ws.restore(securityToken, transaction, ids); for (Wikitty wikitty : wikitties) { - refuseUnauthorizedRead(securityToken, userId, wikitty); + if (wikitty != null) { + refuseUnauthorizedRead(securityToken, userId, wikitty); + } } return wikitties; } @@ -357,16 +319,10 @@ } @Override - public void delete(String securityToken, String id) { - Collection<String> ids = Arrays.asList(id); - delete(securityToken, ids); - } - - @Override - public void delete(String securityToken, Collection<String> ids) { + public WikittyServiceEvent delete(String securityToken, Collection<String> ids) { String userId = getUserId(securityToken); List<String> idsAsList = new ArrayList<String>(ids); - List<Wikitty> wikitties = ws.restore(securityToken, idsAsList); + List<Wikitty> wikitties = ws.restore(securityToken, null, idsAsList); for (Wikitty wikitty : wikitties) { for (String extensionName : wikitty.getExtensionNames()) { if ( ! canWrite(securityToken, userId, extensionName, wikitty)) { @@ -376,25 +332,51 @@ } } } - ws.delete(securityToken, ids); + WikittyServiceEvent result = ws.delete(securityToken, ids); + return result; } @Override - @Deprecated public boolean canWrite(String securityToken, Wikitty wikitty) { - throw new UnsupportedOperationException(); + boolean result = true; + String userId = getUserId(securityToken); + for (String extName : wikitty.getExtensionNames()) { + result = result && isWriter(securityToken, userId, wikitty, extName); + if (!result) { + break; + } + } + return result; } @Override - @Deprecated public boolean canDelete(String securityToken, String wikittyId) { - throw new UnsupportedOperationException(); + boolean result = true; + Wikitty wikitty = WikittyServiceEnhanced.restore(ws, securityToken, wikittyId); + if (wikitty != null) { + String userId = getUserId(securityToken); + for (String extName : wikitty.getExtensionNames()) { + result = result && isWriter(securityToken, userId, wikitty, extName); + if (!result) { + break; + } + } + } + return result; } @Override - @Deprecated public boolean canRead(String securityToken, String wikittyId) { - throw new UnsupportedOperationException(); + boolean result = true; + String userId = getUserId(securityToken); + Wikitty wikitty = WikittyServiceEnhanced.restore(ws, securityToken, wikittyId); + for (String extName : wikitty.getExtensionNames()) { + result = result && isReader(securityToken, userId, wikitty, extName); + if (!result) { + break; + } + } + return result; } @Override @@ -408,17 +390,8 @@ String securityToken, String extensionName) { // All people can read extension return ws.getAllExtensionsRequires(securityToken, extensionName); - } - - @Override - public UpdateResponse storeExtension(String securityToken, WikittyExtension ext) { - Collection<WikittyExtension> exts = Arrays.asList(ext); - checkStoreExtension(securityToken, exts); - return storeExtension(securityToken, exts); - } - + } - /* *** storing and restoring extensions ***/ protected void checkStoreExtension(String securityToken, @@ -439,26 +412,13 @@ } @Override - public UpdateResponse storeExtension(String securityToken, - Collection<WikittyExtension> exts) { - checkStoreExtension(securityToken, exts); - return ws.storeExtension(securityToken, exts); - } - - @Override - public UpdateResponse storeExtension(String securityToken, + public WikittyServiceEvent storeExtension(String securityToken, WikittyTransaction transaction, Collection<WikittyExtension> exts) { checkStoreExtension(securityToken, exts); return ws.storeExtension(securityToken, transaction, exts); } @Override - public WikittyExtension restoreExtension(String securityToken, String id) { - // All people can read extension - return ws.restoreExtension(securityToken, id); - } - - @Override public WikittyExtension restoreExtension(String securityToken, WikittyTransaction transaction, String id) { // All people can read extension @@ -466,13 +426,6 @@ } @Override - public WikittyExtension restoreExtensionLastVersion(String securityToken, - String name) { - // All people can read extension - return ws.restoreExtensionLastVersion(securityToken, name); - } - - @Override public WikittyExtension restoreExtensionLastVersion( String securityToken, WikittyTransaction transaction, String name) { // All people can read extension @@ -480,13 +433,6 @@ } @Override - public PagedResult<String> findAllByCriteria(String securityToken, Criteria criteria) { - // All people can read PagedResult that contains only id - PagedResult<String> result = ws.findAllByCriteria(securityToken, criteria); - return result; - } - - @Override public PagedResult<String> findAllByCriteria(String securityToken, WikittyTransaction transaction, Criteria criteria) { // All people can read PagedResult that contains only id @@ -496,14 +442,6 @@ } @Override - public Wikitty findByCriteria(String securityToken, Criteria criteria) { - String userId = getUserId(securityToken); - Wikitty wikitty = ws.findByCriteria(securityToken, criteria); - refuseUnauthorizedRead(securityToken, userId, wikitty); - return wikitty; - } - - @Override public WikittyTree restoreTree(String securityToken, String wikittyId) { String userId = getUserId(securityToken); WikittyTree restoredTree = ws.restoreTree(securityToken, wikittyId); @@ -544,7 +482,7 @@ } @Override - public List<String> deleteTree(String securityToken, String treeNodeId) { + public WikittyServiceEvent deleteTree(String securityToken, String treeNodeId) { WikittyTreeNode treeNode = ws.restoreNode(securityToken, treeNodeId, null).getKey(); Collection<Wikitty> wikitties = Arrays.asList(treeNode.getWikitty()); checkStore(securityToken, wikitties); @@ -569,11 +507,11 @@ } @Override - public UpdateResponse syncEngin(String securityToken) { + public void syncEngin(String securityToken) { String userId = getUserId(securityToken); if (isAppAdmin(securityToken, userId)) { // seul les AppAdmin on le droit a cette method - return ws.syncEngin(securityToken); + ws.syncEngin(securityToken); } else { throw new SecurityException(_("user %s can't sync search engine", getUserId(securityToken))); @@ -743,7 +681,7 @@ Wikitty group; if (appAdminGroupId == null) { // 1er fois, on le recherche - group = ws.findByCriteria(securityToken, Search.query().eq( + group = ws.findByCriteria(securityToken, null, Search.query().eq( WikittyGroup.FQ_FIELD_WIKITTYGROUP_NAME, WikittySecurityHelper.WIKITTY_APPADMIN_GROUP_NAME).criteria()); // group peut-etre null s'il n'existe pas Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyStorage.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyStorage.java 2010-10-26 12:58:09 UTC (rev 451) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyStorage.java 2010-10-27 09:04:19 UTC (rev 452) @@ -48,7 +48,7 @@ * * @return information usefull for client side update data */ - public UpdateResponse store(WikittyTransaction transaction, Collection<Wikitty> wikitties, boolean force); + public WikittyServiceEvent store(WikittyTransaction transaction, Collection<Wikitty> wikitties, boolean force); /** * Return true if id exists in storage. @@ -89,7 +89,7 @@ * @return delete response * @throws WikittyException If id is not valid or don't exist. */ - public UpdateResponse delete(WikittyTransaction transaction, Collection<String> idList) throws WikittyException; + public WikittyServiceEvent delete(WikittyTransaction transaction, Collection<String> idList) throws WikittyException; /** * Scan all wikitties with specific scanner, even if the wikitty is deleted. @@ -97,7 +97,7 @@ * @param transaction transaction * @param scanner scanner */ - void scanWikitties(WikittyTransaction transaction, Scanner scanner); + public void scanWikitties(WikittyTransaction transaction, Scanner scanner); /** * Call each time wikitty is scan. @@ -111,6 +111,6 @@ * * @param transaction transaction */ - public void clear(WikittyTransaction transaction); + public WikittyServiceEvent clear(WikittyTransaction transaction); } Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java 2010-10-26 12:58:09 UTC (rev 451) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java 2010-10-27 09:04:19 UTC (rev 452) @@ -743,7 +743,8 @@ String oldVersion = oldExt.getVersion(); if (WikittyUtil.versionGreaterThan(newVersion, oldVersion)) { - wikittyService.storeExtension(securityToken, Arrays.asList(ext)); + wikittyService.storeExtension( + securityToken, null, Arrays.asList(ext)); upgradeData = true; } } @@ -751,7 +752,8 @@ if (upgradeData) { String wikittyId = wikitty.getId(); - result = wikittyService.restore(securityToken, wikittyId); + result = WikittyServiceEnhanced.restore( + wikittyService, securityToken, wikittyId); } return result; Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/importexport/ImportExportCSV.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/importexport/ImportExportCSV.java 2010-10-26 12:58:09 UTC (rev 451) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/importexport/ImportExportCSV.java 2010-10-27 09:04:19 UTC (rev 452) @@ -177,7 +177,7 @@ // restore works (database) but solr criteria won't List<Wikitty> wikitties = ws.restore(securityToken, transaction, Collections.singletonList(multiplesValue)); - if ( wikitties != null && wikitties.size() == 1) { + if ( wikitties != null && wikitties.size() == 1 && wikitties.get(0) != null) { currentWikitty.addToField(extName, fieldName, multiplesValue); } } @@ -191,7 +191,7 @@ // restore works (database) but solr criteria won't List<Wikitty> wikitties = ws.restore(securityToken, transaction, Collections.singletonList(value)); - if ( wikitties != null && wikitties.size() == 1) { + if ( wikitties != null && wikitties.size() == 1 && wikitties.get(0) != null) { currentWikitty.setField(extName, fieldName, value); } } Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/conform/AbstractTestConformance.java =================================================================== --- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/conform/AbstractTestConformance.java 2010-10-26 12:58:09 UTC (rev 451) +++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/conform/AbstractTestConformance.java 2010-10-27 09:04:19 UTC (rev 452) @@ -26,6 +26,7 @@ import java.text.ParseException; import java.util.ArrayList; +import java.util.Collections; import java.util.Date; import java.util.LinkedHashMap; import java.util.Map.Entry; @@ -153,7 +154,7 @@ Wikitty w = createWikitty( wValue, EXTNAME, EXT_TEST ); result.add( w ); } - ws.store(null, result); + ws.store(null, null, result, false); return result; } Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/conform/ImportExportTest.java =================================================================== --- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/conform/ImportExportTest.java 2010-10-26 12:58:09 UTC (rev 451) +++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/conform/ImportExportTest.java 2010-10-27 09:04:19 UTC (rev 452) @@ -163,7 +163,7 @@ "7ca86742-5957-4659-b12f-4915cbef9193", "77d7640c-573d-421c-a7e9-9b70bd025983" }; - List<Wikitty> wikitties = ws.restore(null, Arrays.asList(ids)); + List<Wikitty> wikitties = ws.restore(null, null, Arrays.asList(ids)); assertEquals(3, wikitties.size()); } } Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/conform/PerformanceBenchMark.java =================================================================== --- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/conform/PerformanceBenchMark.java 2010-10-26 12:58:09 UTC (rev 451) +++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/conform/PerformanceBenchMark.java 2010-10-27 09:04:19 UTC (rev 452) @@ -26,6 +26,7 @@ package org.nuiton.wikitty.conform; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.Random; @@ -77,7 +78,7 @@ FieldType fieldType = new FieldType(FieldType.TYPE.STRING, 1, 1); extension.addField("field" + i, fieldType); } - wikittyService.storeExtension(null, extension); + wikittyService.storeExtension(null, null, Arrays.asList(extension)); Collection<Wikitty> wikitties = new ArrayList<Wikitty>(WIKITTY_SIZE); for (int i = 0; i < WIKITTY_SIZE; i++) { @@ -89,7 +90,7 @@ wikitties.add(wikitty); } long start = System.currentTimeMillis(); - wikittyService.store(null, wikitties); + wikittyService.store(null, null, wikitties, false); long end = System.currentTimeMillis(); log.info("[Performance" + fieldSize + "] Write times : " + ((end - start) / 1000) + "s"); @@ -97,7 +98,7 @@ start = System.currentTimeMillis(); for (int i = 0; i < WIKITTY_SIZE; i++) { int nextInt = random.nextInt(WIKITTY_SIZE); - wikittyService.restore(null, "Performance" + fieldSize + "id" + nextInt); + wikittyService.restore(null, null, Arrays.asList("Performance" + fieldSize + "id" + nextInt)); } end = System.currentTimeMillis(); log.info("[Performance" + fieldSize + "] Read times : " + ((end - start) / 1000) + "s"); Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/conform/SearchTest.java =================================================================== --- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/conform/SearchTest.java 2010-10-26 12:58:09 UTC (rev 451) +++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/conform/SearchTest.java 2010-10-27 09:04:19 UTC (rev 452) @@ -37,6 +37,7 @@ import org.nuiton.wikitty.Wikitty; import org.nuiton.wikitty.WikittyExtension; import org.nuiton.wikitty.WikittyImpl; +import org.nuiton.wikitty.WikittyServiceEnhanced; import org.nuiton.wikitty.search.Search; public class SearchTest extends AbstractTestConformance { @@ -83,72 +84,72 @@ w.setField(ext.getName(), "birth", "19/04/1968 15:12"); wikitties.add( w ); - ws.store(null, wikitties); + ws.store(null, null, wikitties, false); // Testing search on a date criteria Criteria criteria = Search.query() .gt("testExt.birth", "19/04/1968 15:00") .criteria(); - PagedResult<String> result = ws.findAllByCriteria(null, criteria); + PagedResult<String> result = ws.findAllByCriteria(null, null, criteria); List<String> found = result.getAll(); assertEquals(1, found.size()); - Wikitty wikittyFound = ws.restore(null, found.get(0)); + Wikitty wikittyFound = WikittyServiceEnhanced.restore(ws, null, found.get(0)); log.info( wikittyFound.getFieldAsString(ext.getName(), "birth") ); // Testing search on a date criteria criteria = Search.query() .ge("testExt.birth", "19/04/1968") .criteria(); - result = ws.findAllByCriteria(null, criteria); + result = ws.findAllByCriteria(null, null, criteria); found = result.getAll(); assertEquals(2, found.size()); - wikittyFound = ws.restore(null, found.get(0)); + wikittyFound = WikittyServiceEnhanced.restore(ws, null, found.get(0)); log.info( wikittyFound.getFieldAsString(ext.getName(), "birth") ); criteria = Search.query() .eq("testExt.name", "Guillaume") .criteria(); - result = ws.findAllByCriteria(null, criteria); + result = ws.findAllByCriteria(null, null, criteria); found = result.getAll(); assertEquals(1, found.size()); - wikittyFound = ws.restore(null, found.get(0)); + wikittyFound = WikittyServiceEnhanced.restore(ws, null, found.get(0)); log.info( wikittyFound.getFieldAsString(ext.getName(), "name") ); criteria = Search.query() .eq("testExt.age", "125") .criteria(); - result = ws.findAllByCriteria(null, criteria); + result = ws.findAllByCriteria(null, null, criteria); found = result.getAll(); assertEquals(1, found.size()); - wikittyFound = ws.restore(null, found.get(0)); + wikittyFound = WikittyServiceEnhanced.restore(ws, null, found.get(0)); log.info( wikittyFound.getFieldAsString(ext.getName(), "name") ); criteria = Search.query() .gt("testExt.age", "10") .criteria(); - result = ws.findAllByCriteria(null, criteria); + result = ws.findAllByCriteria(null, null, criteria); found = result.getAll(); assertEquals(2, found.size()); - wikittyFound = ws.restore(null, found.get(0)); + wikittyFound = WikittyServiceEnhanced.restore(ws, null, found.get(0)); log.info( wikittyFound.getFieldAsString(ext.getName(), "name") ); - wikittyFound = ws.restore(null, found.get(1)); + wikittyFound = WikittyServiceEnhanced.restore(ws, null, found.get(1)); log.info( wikittyFound.getFieldAsString(ext.getName(), "name") ); Wikitty exemple = new WikittyImpl(); exemple.addExtension(ext); exemple.setField(ext.getName(), "name", "Guillaume"); exemple.setField(ext.getName(), "age", "27"); - result = ws.findAllByCriteria(null, Search.query(exemple).criteria() ); + result = ws.findAllByCriteria(null, null, Search.query(exemple).criteria() ); found = result.getAll(); assertEquals(1, found.size()); - wikittyFound = ws.restore(null, found.get(0)); + wikittyFound = WikittyServiceEnhanced.restore(ws, null, found.get(0)); log.info( wikittyFound.getFieldAsString(ext.getName(), "name") ); exemple = new WikittyImpl(); exemple.addExtension(ext); exemple.setField(ext.getName(), "name", "Guillaume"); exemple.setField(ext.getName(), "age", "125"); - result = ws.findAllByCriteria(null, Search.query(exemple).criteria() ); + result = ws.findAllByCriteria(null, null, Search.query(exemple).criteria() ); found = result.getAll(); assertEquals(0, found.size()); // log.info( found.get(0).getFieldAsString(ext.getName(), "name") ); Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/conform/StorageTest.java =================================================================== --- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/conform/StorageTest.java 2010-10-26 12:58:09 UTC (rev 451) +++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/conform/StorageTest.java 2010-10-27 09:04:19 UTC (rev 452) @@ -51,7 +51,6 @@ import org.nuiton.wikitty.WikittyTree; import org.nuiton.wikitty.WikittyTreeNode; import org.nuiton.wikitty.WikittyTreeNodeImpl; -import org.nuiton.wikitty.UpdateResponse; import org.nuiton.wikitty.Wikitty; import org.nuiton.wikitty.WikittyException; import org.nuiton.wikitty.WikittyExtension; @@ -59,6 +58,8 @@ import org.nuiton.wikitty.WikittyLabelUtil; import org.nuiton.wikitty.WikittyObsoleteException; import org.nuiton.wikitty.WikittyProxy; +import org.nuiton.wikitty.WikittyServiceEnhanced; +import org.nuiton.wikitty.WikittyServiceEvent; import org.nuiton.wikitty.WikittyUtil; import org.nuiton.wikitty.search.Element; import org.nuiton.wikitty.search.Search; @@ -71,8 +72,8 @@ public void testStoreRestoreBasics() throws Exception { Wikitty w = createBasicWikitty(); String id = w.getId(); - ws.store(null, w); - w = ws.restore(null, id); + ws.store(null, null, Collections.singletonList(w), false); + w = WikittyServiceEnhanced.restore(ws, null, id); assertTrue(w.hasExtension(EXTNAME)); for ( int i = 0; i < 3; i++ ) { assertTrue( w.hasField(EXTNAME, "fieldName" + i)); @@ -81,11 +82,11 @@ @Test public void testExtensionMethod() throws Exception { - ws.storeExtension(null, Arrays.asList(EXT_TEST)); + ws.storeExtension(null, null, Collections.singletonList(EXT_TEST)); List<String> extIds = ws.getAllExtensionIds(null); log.debug("extIds: " + extIds); assertEquals(1, extIds.size()); - WikittyExtension ext = ws.restoreExtension(null, extIds.get(0)); + WikittyExtension ext = ws.restoreExtension(null, null, extIds.get(0)); assertEquals(EXT_TEST.getName(), ext.getName()); assertEquals(EXT_TEST.getVersion(), ext.getVersion()); assertEquals(EXT_TEST, ext); @@ -93,12 +94,12 @@ @Test public void testExtensionRequires() throws Exception { - ws.storeExtension(null, Arrays.asList(EXT_REQUIRED, EXT_REQUIRES)); + ws.storeExtension(null, null, Arrays.asList(EXT_REQUIRED, EXT_REQUIRES)); List<String> extIds = ws.getAllExtensionsRequires(null, EXTREQUIRED); log.debug("extIds: " + extIds); assertEquals(1, extIds.size()); - WikittyExtension ext = ws.restoreExtension(null, extIds.get(0)); + WikittyExtension ext = ws.restoreExtension(null, null, extIds.get(0)); assertEquals(EXT_REQUIRES.getName(), ext.getName()); assertEquals(EXT_REQUIRES.getVersion(), ext.getVersion()); assertEquals(EXT_REQUIRES, ext); @@ -129,9 +130,9 @@ wikitties.add( w ); ids.add( w.getId() ); } - ws.store(null, wikitties); + ws.store(null, null, wikitties, false); - wikitties = ws.restore(null, ids); + wikitties = ws.restore(null, null, ids); int wIndex = 0; for ( String wValue : wValues ) { Wikitty w = wikitties.get(wIndex); @@ -169,7 +170,7 @@ Wikitty w = null; // should be ignored (?) try { - ws.store(null, w); + ws.store(null, null, Collections.singletonList(w), false); fail("store(null) Must throw an exception !"); } catch (Exception e) { // OK ! @@ -177,8 +178,8 @@ w = new WikittyImpl(); String id = w.getId(); - ws.store(null, w); - w = ws.restore(null, id); + ws.store(null, null, Collections.singletonList(w), false); + w = WikittyServiceEnhanced.restore(ws, null, id); assertEquals( id, w.getId() ); } @@ -191,12 +192,12 @@ "String other[0-n] unique=true notNull=true" )); - ws.storeExtension(null, Arrays.asList(ext)); + ws.storeExtension(null, null, Collections.singletonList(ext)); Wikitty w = new WikittyImpl(); w.addExtension(ext); try { - ws.store(null, w); + ws.store(null, null, Collections.singletonList(w), false); Assert.fail("not null contraint don't work on String"); } catch (WikittyException eee) { eee.printStackTrace(); @@ -205,7 +206,7 @@ w.setField("TestConstraint", "id", "toto"); try { - ws.store(null, w); + ws.store(null, null, Collections.singletonList(w), false); Assert.fail("not null contraint don't work in Collection"); } catch (WikittyException eee) { eee.printStackTrace(); @@ -213,18 +214,18 @@ } w.addToField("TestConstraint", "other", "titi"); - ws.store(null, w); + ws.store(null, null, Collections.singletonList(w), false); w.addToField("TestConstraint", "ext", "tata"); w.addToField("TestConstraint", "ext", "titi"); - ws.store(null, w); + ws.store(null, null, Collections.singletonList(w), false); - Wikitty w2 = ws.restore(null, w.getId()); + Wikitty w2 = WikittyServiceEnhanced.restore(ws, null, w.getId()); w2.addToField("TestConstraint", "ext", "tata"); // tata ne doit pas s'ajouter w2.addToField("TestConstraint", "ext", "toto"); - ws.store(null, w2); - Wikitty w3 = ws.restore(null, w.getId()); + ws.store(null, null, Collections.singletonList(w2), false); + Wikitty w3 = WikittyServiceEnhanced.restore(ws, null, w.getId()); HashSet set = new HashSet(Arrays.asList("tata", "titi", "toto")); assertEquals(set, w3.getFieldAsSet("TestConstraint", "ext", String.class)); @@ -255,7 +256,7 @@ Wikitty w = createWikitty( wValue, EXTNAME, EXT_TEST ); wikitties.add( w ); } - ws.store(null, wikitties); + ws.store(null, null, wikitties, false); // search test Wikitty w = new WikittyImpl(); @@ -263,10 +264,10 @@ w.setField(EXT_TEST.getName(), "fieldName1", "003309"); Criteria criteria = Search.query(w).criteria() .addSortDescending(EXT_TEST.getName() + ".fieldName0"); - PagedResult<String> resultFind = ws.findAllByCriteria(null, criteria); + PagedResult<String> resultFind = ws.findAllByCriteria(null, null, criteria); assertEquals(2, resultFind.size()); - List<Wikitty> wikittyFind = ws.restore(null, resultFind.getAll()); + List<Wikitty> wikittyFind = ws.restore(null, null, resultFind.getAll()); assertEquals(wikitties.subList(0, 2), wikittyFind); } @@ -300,7 +301,7 @@ Wikitty w = createWikitty( wValue, EXTNAME, EXT_TEST ); wikitties.add( w ); } - ws.store(null, wikitties); + ws.store(null, null, wikitties, false); // search test Wikitty w = new WikittyImpl(); @@ -310,7 +311,7 @@ .setFirstIndex(0).setEndIndex(Criteria.ALL_ELEMENTS) .addFacetField(EXT_TEST.getName()+".fieldName0") .addFacetField(EXT_TEST.getName()+".fieldName1"); - PagedResult<String> resultFind = ws.findAllByCriteria(null, criteria); + PagedResult<String> resultFind = ws.findAllByCriteria(null, null, criteria); List<String> facetNames = new ArrayList<String>(resultFind.getFacetNames()); Collections.sort(facetNames); @@ -352,7 +353,7 @@ for( Wikitty w : wikitties ) { oldIdVersion.put(w.getId(), w.getVersion()); } - UpdateResponse response = ws.store(null, wikitties); + WikittyServiceEvent response = ws.store(null, null, wikitties, false); for (Wikitty w : wikitties) { response.update(w); String v1 = w.getVersion(); @@ -367,7 +368,7 @@ w.addExtension(EXT_TEST); w.setField(EXT_TEST.getName(), "fieldName0", "chaiseICI"); Criteria criteria = Search.query(w).criteria(); - Wikitty resultFind = ws.findByCriteria(null, criteria); + Wikitty resultFind = ws.findByCriteria(null, null, criteria); Wikitty wikittySource = wikitties.get(1); assertEquals(w.getFieldAsString(EXT_TEST.getName(), "fieldName0"), @@ -388,17 +389,18 @@ // test to find deleted wikitty // test if solr index is coherent with database Criteria criteria1 = Search.query().eq(Element.ELT_ID, wikittySource.getId()).criteria(); - Wikitty searchedWikitty1 = ws.findByCriteria(null, criteria1); + Wikitty searchedWikitty1 = ws.findByCriteria(null, null, criteria1); Assert.assertNotNull(searchedWikitty1); - ws.delete(null, wikittySource.getId()); - Wikitty deletedObject = ws.restore(null, wikittySource.getId()); + ws.delete(null, Collections.singletonList(wikittySource.getId())); + Wikitty deletedObject = + WikittyServiceEnhanced.restore(ws, null, wikittySource.getId()); assertNull(deletedObject); // test to find deleted wikitty // test if solr index is coherent with database Criteria criteria2 = Search.query().eq(Element.ELT_ID, wikittySource.getId()).criteria(); - Wikitty searchedWikitty2 = ws.findByCriteria(null, criteria2); + Wikitty searchedWikitty2 = ws.findByCriteria(null, null, criteria2); Assert.assertNull(searchedWikitty2); } @@ -462,7 +464,7 @@ // leaf.addChild( subLeaf.getWikittyId() ); } } - ws.store(null, wikittyNodes); // store treeNodes. + ws.store(null, null, wikittyNodes, false); // store treeNodes. Wikitty table = wikitties.get(0); Wikitty chaise = wikitties.get(1); @@ -487,8 +489,8 @@ Criteria criteria = Search.query(node.getWikitty()).criteria() .setFirstIndex(0).setEndIndex(Criteria.ALL_ELEMENTS); - List<String> wikittiesId = ws.findAllByCriteria(null, criteria).getAll(); - List<Wikitty> wikitties = ws.restore(null, wikittiesId); + List<String> wikittiesId = ws.findAllByCriteria(null, null, criteria).getAll(); + List<Wikitty> wikitties = ws.restore(null, null, wikittiesId); for ( Wikitty child : wikitties ) { if (!child.hasExtension(WikittyTreeNode.EXT_WIKITTYTREENODE)) { continue; @@ -502,7 +504,7 @@ fail( "Unable to find node " + nodeName + " inside " + currentNode.getName() ); } currentNode.addAttachment(wikitty.getId()); - ws.store(null, currentNode.getWikitty()); + ws.store(null, null, Collections.singletonList(currentNode.getWikitty()), false); } /** @@ -555,23 +557,23 @@ Wikitty myWikitty = new WikittyImpl(); myWikitty.addExtension(WikittyTreeNodeImpl.extensions); myWikitty.setField(WikittyTreeNode.EXT_WIKITTYTREENODE, WikittyTreeNode.FIELD_WIKITTYTREENODE_NAME, "name"); - ws.store(null, myWikitty); + ws.store(null, null, Collections.singletonList(myWikitty), false); Assert.assertEquals("1.0", myWikitty.getVersion()); // store 2 : no modification - ws.store(null, myWikitty); + ws.store(null, null, Collections.singletonList(myWikitty), false); Assert.assertEquals("1.0", myWikitty.getVersion()); // store 3 : modification myWikitty.setField(WikittyTreeNode.EXT_WIKITTYTREENODE, WikittyTreeNode.FIELD_WIKITTYTREENODE_NAME, "new name"); - ws.store(null, myWikitty); + ws.store(null, null, Collections.singletonList(myWikitty), false); Assert.assertEquals("2.0", myWikitty.getVersion()); // store 4 : new wikitty with same wikitty id (obsolete) Wikitty myNewWikitty = new WikittyImpl(myWikitty.getId()); myWikitty.setField(WikittyTreeNode.EXT_WIKITTYTREENODE, WikittyTreeNode.FIELD_WIKITTYTREENODE_NAME, "new wikitty"); try { - ws.store(null, myNewWikitty); + ws.store(null, null, Collections.singletonList(myNewWikitty), false); Assert.fail("Test must throw WikittyObsoleteException"); } catch (WikittyObsoleteException ex) { @@ -581,12 +583,12 @@ } // store 4 : same but with force (increased by force) - ws.store(null, Collections.singletonList(myNewWikitty), true); + ws.store(null, null, Collections.singletonList(myNewWikitty), true); Assert.assertEquals("3.0", myNewWikitty.getVersion()); // store 5 : fix version (not increased by force) myNewWikitty.setVersion("11.0"); - ws.store(null, Collections.singletonList(myNewWikitty), true); + ws.store(null, null, Collections.singletonList(myNewWikitty), true); Assert.assertEquals("11.0", myNewWikitty.getVersion()); } @@ -600,16 +602,18 @@ Wikitty myWikitty = new WikittyImpl(); myWikitty.addExtension(WikittyTreeNodeImpl.extensions); myWikitty.setField(WikittyTreeNode.EXT_WIKITTYTREENODE, WikittyTreeNode.FIELD_WIKITTYTREENODE_NAME, "name"); - ws.store(null, myWikitty); + ws.store(null, null, Collections.singletonList(myWikitty), false); // delete - ws.delete(null, myWikitty.getId()); - Wikitty restoredWikitty = ws.restore(null, myWikitty.getId()); + ws.delete(null, Collections.singletonList(myWikitty.getId())); + Wikitty restoredWikitty = + WikittyServiceEnhanced.restore(ws, null, myWikitty.getId()); Assert.assertNull(restoredWikitty); // store again - ws.store(null, myWikitty); - restoredWikitty = ws.restore(null, myWikitty.getId()); + ws.store(null, null, Collections.singletonList(myWikitty), false); + restoredWikitty = + WikittyServiceEnhanced.restore(ws, null, myWikitty.getId()); Assert.assertNotNull(restoredWikitty); } } Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/importexport/ImportExportCSVTest.java =================================================================== --- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/importexport/ImportExportCSVTest.java 2010-10-26 12:58:09 UTC (rev 451) +++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/importexport/ImportExportCSVTest.java 2010-10-27 09:04:19 UTC (rev 452) @@ -176,15 +176,15 @@ // test extension support Criteria criteria = Search.query().eq(Element.ELT_EXTENSION, extensionTag.getName()).criteria(); - PagedResult<String> pagedResult = ws.findAllByCriteria(null, criteria); + PagedResult<String> pagedResult = ws.findAllByCriteria(null, null, criteria); Assert.assertEquals(1, pagedResult.getNumFound()); // test normal import Criteria criteria2 = Search.query().eq(extensionClient.getName() + ".name", "Toto").criteria(); - PagedResult<String> pagedResult2 = ws.findAllByCriteria(null, criteria2); + PagedResult<String> pagedResult2 = ws.findAllByCriteria(null, null, criteria2); Assert.assertEquals(1, pagedResult2.getNumFound()); - // test non existant wikitty tree node childreen deletion + // import attachment id that not exist, must be not imported Criteria criteria3 = Search.query().eq(WikittyTreeNode.FQ_FIELD_WIKITTYTREENODE_NAME, "MyTreeNode").criteria(); PagedResult<WikittyTreeNode> pagedResult3 = proxy.findAllByCriteria(WikittyTreeNode.class, criteria3); Assert.assertEquals(1, pagedResult3.getNumFound()); Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/layers/AbstractWikittyServiceTest.java =================================================================== --- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/layers/AbstractWikittyServiceTest.java 2010-10-26 12:58:09 UTC (rev 451) +++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/layers/AbstractWikittyServiceTest.java 2010-10-27 09:04:19 UTC (rev 452) @@ -31,11 +31,12 @@ import org.nuiton.wikitty.WikittyExtension; import org.nuiton.wikitty.WikittyImpl; import org.nuiton.wikitty.WikittyService; +import org.nuiton.wikitty.WikittyServiceEnhanced; public abstract class AbstractWikittyServiceTest { /** a wikitty service (in memory) with a cache */ - protected WikittyService service; + protected WikittyServiceEnhanced service; protected static final String EXT_NAME = "myextension"; protected static final String FIELD_NAME = "myfield"; @@ -45,19 +46,30 @@ protected WikittyExtension extension; /** a wikitty with extension */ - protected Wikitty aWikitty; + private Wikitty aWikitty ; protected String token; - + + public void setService(WikittyService service) { + this.service = new WikittyServiceEnhanced(service); + } + /** create a service, an extension, a wikitty, login, and store wikitty */ @Before public void setUp() throws Exception { extension = ExtensionFactory.create(EXT_NAME, "1") .addField(FIELD_NAME, TYPE.STRING) .extension(); - aWikitty = new WikittyImpl(); - aWikitty.addExtension(extension); - aWikitty.setField(EXT_NAME, FIELD_NAME, VALUE); } + public Wikitty getaWikitty() { + if (aWikitty == null) { + aWikitty = new WikittyImpl(); + aWikitty.addExtension(extension); + aWikitty.setField(EXT_NAME, FIELD_NAME, VALUE); + } + return aWikitty; + } + + } Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/layers/WikittyServiceCachedTest.java =================================================================== --- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/layers/WikittyServiceCachedTest.java 2010-10-26 12:58:09 UTC (rev 451) +++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/layers/WikittyServiceCachedTest.java 2010-10-27 09:04:19 UTC (rev 452) @@ -28,6 +28,7 @@ import static org.junit.Assert.assertNotSame; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Properties; @@ -42,15 +43,15 @@ @Before public void setUpWikittyServiceCachedTest() { - service = new WikittyServiceCached(new WikittyServiceInMemory()); + setService(new WikittyServiceCached(new WikittyServiceInMemory())); token = service.login(null, null); - service.store(token, aWikitty); + service.store(token, null, Collections.singletonList(getaWikitty()), false); } /** setting a field value doesn't corrupt cache */ @Test public void testRestore() throws Exception { - Wikitty anotherWikitty = service.restore(token, aWikitty.getId()); + Wikitty anotherWikitty = service.restore(token, getaWikitty().getId()); // we set the value of a field anotherWikitty.setField(EXT_NAME, FIELD_NAME, "myothervalue"); @@ -68,9 +69,9 @@ public void testRestoreMultipleIds() throws Exception { // now, let's do the same test, just by using others restore() available List<String> idsToRestore = new ArrayList<String>(); - idsToRestore.add(aWikitty.getId()); + idsToRestore.add(getaWikitty().getId()); - List<Wikitty> otherWikitties = service.restore(token, idsToRestore); + List<Wikitty> otherWikitties = service.restore(token, null, idsToRestore); Wikitty anotherWikitty = otherWikitties.get(0); // we set the value of a field @@ -78,7 +79,7 @@ // now let's suppose, the user cancel its modification // we don't have call store() - otherWikitties = service.restore(token, idsToRestore); + otherWikitties = service.restore(token, null, idsToRestore); anotherWikitty = otherWikitties.get(0); // the remaining wikitty should hold old value @@ -92,12 +93,12 @@ Properties props = new Properties(); props.setProperty(WikittyServiceCached.WIKITTY_CACHE_ALLWAYS_RESTORE_COPIES_POLICY_OPTION, "true"); - service = new WikittyServiceCached(new WikittyServiceInMemory(), props); + setService(new WikittyServiceCached(new WikittyServiceInMemory(), props)); token = service.login(null, null); - service.store(token, aWikitty); + service.store(token, null, Collections.singletonList(getaWikitty()), false); // restoring two times the same wikitty should produces two different copies - Wikitty anotherWikitty = service.restore(token, aWikitty.getId()); + Wikitty anotherWikitty = service.restore(token, getaWikitty().getId()); Wikitty yetAnotherWikitty = service.restore(token, anotherWikitty.getId()); assertEquals(anotherWikitty, yetAnotherWikitty); Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/layers/WikittyServiceSecurityTest.java =================================================================== --- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/layers/WikittyServiceSecurityTest.java 2010-10-26 12:58:09 UTC (rev 451) +++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/layers/WikittyServiceSecurityTest.java 2010-10-27 09:04:19 UTC (rev 452) @@ -24,6 +24,7 @@ */ package org.nuiton.wikitty.layers; +import java.util.Collections; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; @@ -56,7 +57,7 @@ private static final Log log = LogFactory.getLog(WikittyServiceSecurityTest.class); - protected WikittyServiceSecurity securityService; +// protected WikittyServiceSecurity securityService; protected String noRightsToken; protected String readerToken; @@ -68,7 +69,7 @@ public void setUpWikittyServiceSecurityTest() { WikittyService inMemoryService = new WikittyServiceInMemory(); - securityService = new WikittyServiceSecurity(inMemoryService); + WikittyServiceSecurity securityService = new WikittyServiceSecurity(inMemoryService); /** / // FIXME 20101005 bleny implementation should be able to allow @@ -76,12 +77,12 @@ securityService = new WikittyServiceSecurity(securityService); /**/ - service = securityService; + setService(securityService); // token = service.login(APPADMIN_LOGIN, APPADMIN_PASSWORD); token = null; - WikittyProxy proxy = new WikittyProxy(securityService); + WikittyProxy proxy = new WikittyProxy(service); proxy.setSecurityToken(token); WikittyUser anonymous = new WikittyUserImpl(); @@ -107,9 +108,8 @@ WikittyUser owner = new WikittyUserImpl(); owner.setLogin("owner"); owner.setPassword(""); - proxy.store(owner); + owner = proxy.store(owner); - Wikitty authorizations = WikittySecurityHelper.createExtensionAuthorisation(owner, extension); WikittyAuthorisationHelper.addReader(authorizations, reader.getWikittyId()); WikittyAuthorisationHelper.addWriter(authorizations, writer.getWikittyId()); @@ -118,8 +118,8 @@ log.debug("initial wikitty rights" + authorizations); - securityService.storeExtension(token, extension); - securityService.store(token, authorizations); + service.storeExtension(token, null, Collections.singletonList(extension)); + service.store(token, null, Collections.singletonList(authorizations), false); // Wikitty extensionAuthorisation = @@ -152,16 +152,16 @@ // try to store with invalid token String invalidToken = WikittyUtil.genSecurityTokenId(); try { - service.store(invalidToken, aWikitty); + service.store(invalidToken, getaWikitty()); fail(); } catch (SecurityException e) {} // now storing the wikitty for next tests - service.store(readerToken, aWikitty); + service.store(readerToken, getaWikitty()); // try to make operations on the stored wikitty with a bad token try { - service.restore(invalidToken, aWikitty.getId()); + service.restore(invalidToken, getaWikitty().getId()); fail(); } catch (SecurityException e) {} @@ -173,7 +173,7 @@ // now try to make a valid token invalid service.logout(readerToken); try { - service.store(readerToken, aWikitty); + service.store(readerToken, null, Collections.singletonList(getaWikitty()), false); fail(); } catch (SecurityException e) {} } @@ -182,20 +182,20 @@ @Test public void testReaderRightOnWikitty() { - aWikitty.addExtension(WikittyAuthorisationAbstract.extensionWikittyAuthorisation); - WikittyAuthorisation auth = new WikittyAuthorisationImpl(aWikitty); + getaWikitty().addExtension(WikittyAuthorisationAbstract.extensionWikittyAuthorisation); + WikittyAuthorisation auth = new WikittyAuthorisationImpl(getaWikitty()); - WikittyProxy proxy = new WikittyProxy(securityService); + WikittyProxy proxy = new WikittyProxy(service); String readerId = WikittySecurityHelper.getUserWikittyId(proxy, "reader"); auth.clearReader(); auth.addReader(readerId); - log.debug("will store wikitty" + aWikitty); - service.store(ownerToken, aWikitty); + log.debug("will store wikitty" + getaWikitty()); + service.store(ownerToken, null, Collections.singletonList(getaWikitty()), false); try { - Wikitty restoredWikitty = service.restore(null, aWikitty.getId()); + Wikitty restoredWikitty = service.restore(null, getaWikitty().getId()); log.debug("restored wikitty is " + restoredWikitty); fail("an exception should have been raised"); } catch (SecurityException e) { @@ -205,11 +205,11 @@ @Test public void testWriterRightOnWikitty() { - aWikitty.addExtension(WikittyAuthorisationAbstract.extensionWikittyAuthorisation); - WikittyAuthorisation auth = new WikittyAuthorisationImpl(aWikitty); - service.store(ownerToken, aWikitty); + getaWikitty().addExtension(WikittyAuthorisationAbstract.extensionWikittyAuthorisation); + WikittyAuthorisation auth = new WikittyAuthorisationImpl(getaWikitty()); + service.store(ownerToken, null, Collections.singletonList(getaWikitty()), false); - WikittyProxy proxy = new WikittyProxy(securityService); + WikittyProxy proxy = new WikittyProxy(service); String adminId = WikittySecurityHelper.getUserWikittyId(proxy, "admin"); auth.clearReader(); @@ -217,16 +217,16 @@ auth.clearAdmin(); auth.addAdmin(adminId); - log.debug("will store wikitty" + aWikitty); + log.debug("will store wikitty" + getaWikitty()); try { - service.store(writerToken, aWikitty); + service.store(writerToken, null, Collections.singletonList(getaWikitty()), false); fail("an exception should have been raised"); } catch (SecurityException e) { log.info("raised exception : " + e); } - Wikitty restoredWikitty = service.restore(null, aWikitty.getId()); + Wikitty restoredWikitty = service.restore(null, getaWikitty().getId()); log.debug("restored wikitty is " + restoredWikitty); assertNotNull(restoredWikitty); } @@ -238,28 +238,28 @@ public void checkReaderRightOnExtension() { try { - service.store(noRightsToken, aWikitty); + service.store(noRightsToken, null, Collections.singletonList(getaWikitty()), false); fail("an exception should have been raised"); } catch (SecurityException e) { log.debug("creating a wikitty without rights", e); } try { - service.restoreExtension(noRightsToken, extension.getId()); + service.restoreExtension(noRightsToken, null, extension.getId()); } catch (SecurityException e) { fail("no exception should have been raised"); } try { - service.restoreExtensionLastVersion(noRightsToken, extension.getName()); + service.restoreExtensionLastVersion(noRightsToken, null, extension.getName()); } catch (SecurityException e) { fail("no exception should have been raised"); } try { - service.store(readerToken, aWikitty); - service.restoreExtension(readerToken, extension.getId()); - service.restoreExtensionLastVersion(readerToken, extension.getName()); + service.store(readerToken, null, Collections.singletonList(getaWikitty()), false); + service.restoreExtension(readerToken, null, extension.getId()); + service.restoreExtensionLastVersion(readerToken, null, extension.getName()); } catch (SecurityException e) { fail("an exception has been raised"); } @@ -271,16 +271,16 @@ FieldType fieldType = new FieldType(FieldType.TYPE.STRING, 0, 1); - service.restoreExtensionLastVersion(writerToken, extension.getName()); + service.restoreExtensionLastVersion(writerToken, null, extension.getName()); extension.addField("new_field", fieldType); try { - service.storeExtension(readerToken, extension); + service.storeExtension(readerToken, null, Collections.singletonList(extension)); fail("an exception should have been raised"); } catch (SecurityException e) {} try { - service.storeExtension(writerToken, extension); + service.storeExtension(writerToken, null, Collections.singletonList(extension)); } catch (SecurityException e) { fail("an exception has been raised"); } @@ -290,7 +290,7 @@ public void checkAdminRightOnExtension() { // TODO 20100923 bleny check that store with no sufficient rights fail - WikittyProxy adminProxy = new WikittyProxy(securityService); + WikittyProxy adminProxy = new WikittyProxy(service); adminProxy.setSecurityToken(adminToken); Wikitty extensionAuthorisation = WikittySecurityHelper.restoreExtensionAuthorisation(adminProxy, extension); @@ -311,11 +311,11 @@ log.debug("will store rights " + extensionAuthorisation); try { - securityService.store(writerToken, extensionAuthorisation); + service.store(writerToken, null, Collections.singletonList(extensionAuthorisation), false); fail("an exception should habe raised"); } catch (SecurityException e) {} - securityService.store(adminToken, extensionAuthorisation); + service.store(adminToken, null, Collections.singletonList(extensionAuthorisation), false); // now, restore and check that rights are preserved extensionAuthorisation = Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/memory/InMemoryStorageTest.java =================================================================== --- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/memory/InMemoryStorageTest.java 2010-10-26 12:58:09 UTC (rev 451) +++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/memory/InMemoryStorageTest.java 2010-10-27 09:04:19 UTC (rev 452) @@ -32,6 +32,7 @@ import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Collection; +import java.util.Collections; import java.util.Date; import org.junit.Before; @@ -41,6 +42,7 @@ import org.nuiton.wikitty.Wikitty; import org.nuiton.wikitty.WikittyExtension; import org.nuiton.wikitty.WikittyImpl; +import org.nuiton.wikitty.WikittyServiceEnhanced; import org.nuiton.wikitty.WikittyServiceInMemory; import org.nuiton.wikitty.WikittyUtil; import org.nuiton.wikitty.api.AbstractTestApi; @@ -84,11 +86,11 @@ ext ); String id = w.getId(); - wikittyService.store(null, w); + wikittyService.store(null, null, Collections.singletonList(w), false); ((WikittyServiceInMemory)wikittyService).saveToPersistenceFile(); wikittyService = new WikittyServiceInMemory( tempPersistFile ); - w = wikittyService.restore(null, id); + w = WikittyServiceEnhanced.restore(wikittyService, null, id); assertTrue( w.hasField(extName, "fieldName0") ); assertEquals( 123, w.getFieldAsInt(extName, "fieldName0") ); assertTrue( w.hasField(extName, "fieldName1") ); Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/notification/WikittyServiceNotificationTest.java =================================================================== --- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/notification/WikittyServiceNotificationTest.java 2010-10-26 12:58:09 UTC (rev 451) +++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/notification/WikittyServiceNotificationTest.java 2010-10-27 09:04:19 UTC (rev 452) @@ -1,6 +1,7 @@ package org.nuiton.wikitty.notification; +import java.util.EnumSet; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.junit.Assert; @@ -25,7 +26,7 @@ /** to use log facility, just put in your code: log.info(\"...\"); */ static private Log log = LogFactory.getLog(WikittyServiceNotificationTest.class); - protected WikittyServiceEvent.WikittyEventType lastEvent = null; + protected EnumSet<WikittyServiceEvent.WikittyEventType> lastEvent = null; protected int nbEvent = 0; /** @@ -59,12 +60,13 @@ */ protected void sendEvent(WikittyServiceNotifier wsn, boolean hasListener) throws Exception { { - WikittyServiceEvent event = new WikittyServiceEvent("test", - WikittyServiceEvent.WikittyEventType.PUT_WIKITTY); + WikittyServiceEvent event = new WikittyServiceEvent("test"); + event.addType(WikittyServiceEvent.WikittyEventType.PUT_WIKITTY); wsn.processRemoteEvent(event); wsn.getEventThread().waitFor(event.getTime()); if (hasListener) { - Assert.assertEquals(WikittyServiceEvent.WikittyEventType.PUT_WIKITTY, + Assert.assertEquals( + EnumSet.of(WikittyServiceEvent.WikittyEventType.PUT_WIKITTY), lastEvent); } else { Assert.assertEquals(null, lastEvent); @@ -72,12 +74,13 @@ lastEvent = null; } { - WikittyServiceEvent event = new WikittyServiceEvent("test", - WikittyServiceEvent.WikittyEventType.REMOVE_WIKITTY); + WikittyServiceEvent event = new WikittyServiceEvent("test"); + event.addType(WikittyServiceEvent.WikittyEventType.REMOVE_WIKITTY); wsn.processRemoteEvent(event); wsn.getEventThread().waitFor(event.getTime()); if (hasListener) { - Assert.assertEquals(WikittyServiceEvent.WikittyEventType.REMOVE_WIKITTY, + Assert.assertEquals( + EnumSet.of(WikittyServiceEvent.WikittyEventType.REMOVE_WIKITTY), lastEvent); } else { Assert.assertEquals(null, lastEvent); @@ -85,12 +88,13 @@ lastEvent = null; } { - WikittyServiceEvent event = new WikittyServiceEvent("test", - WikittyServiceEvent.WikittyEventType.CLEAR_WIKITTY); + WikittyServiceEvent event = new WikittyServiceEvent("test"); + event.addType(WikittyServiceEvent.WikittyEventType.CLEAR_WIKITTY); wsn.processRemoteEvent(event); wsn.getEventThread().waitFor(event.getTime()); if (hasListener) { - Assert.assertEquals(WikittyServiceEvent.WikittyEventType.CLEAR_WIKITTY, + Assert.assertEquals( + EnumSet.of(WikittyServiceEvent.WikittyEventType.CLEAR_WIKITTY), lastEvent); } else { Assert.assertEquals(null, lastEvent); @@ -98,12 +102,13 @@ lastEvent = null; } { - WikittyServiceEvent event = new WikittyServiceEvent("test", - WikittyServiceEvent.WikittyEventType.PUT_EXTENSION); + WikittyServiceEvent event = new WikittyServiceEvent("test"); + event.addType(WikittyServiceEvent.WikittyEventType.PUT_EXTENSION); wsn.processRemoteEvent(event); wsn.getEventThread().waitFor(event.getTime()); if (hasListener) { - Assert.assertEquals(WikittyServiceEvent.WikittyEventType.PUT_EXTENSION, + Assert.assertEquals( + EnumSet.of(WikittyServiceEvent.WikittyEventType.PUT_EXTENSION), lastEvent); } else { Assert.assertEquals(null, lastEvent); @@ -111,12 +116,13 @@ lastEvent = null; } { - WikittyServiceEvent event = new WikittyServiceEvent("test", - WikittyServiceEvent.WikittyEventType.REMOVE_EXTENSION); + WikittyServiceEvent event = new WikittyServiceEvent("test"); + event.addType(WikittyServiceEvent.WikittyEventType.REMOVE_EXTENSION); wsn.processRemoteEvent(event); wsn.getEventThread().waitFor(event.getTime()); if (hasListener) { - Assert.assertEquals(WikittyServiceEvent.WikittyEventType.REMOVE_EXTENSION, + Assert.assertEquals( + EnumSet.of(WikittyServiceEvent.WikittyEventType.REMOVE_EXTENSION), lastEvent); } else { Assert.assertEquals(null, lastEvent); @@ -124,12 +130,13 @@ lastEvent = null; } { - WikittyServiceEvent event = new WikittyServiceEvent("test", - WikittyServiceEvent.WikittyEventType.CLEAR_EXTENSION); + WikittyServiceEvent event = new WikittyServiceEvent("test"); + event.addType(WikittyServiceEvent.WikittyEventType.CLEAR_EXTENSION); wsn.processRemoteEvent(event); wsn.getEventThread().waitFor(event.getTime()); if (hasListener) { - Assert.assertEquals(WikittyServiceEvent.WikittyEventType.CLEAR_EXTENSION, + Assert.assertEquals( + EnumSet.of(WikittyServiceEvent.WikittyEventType.CLEAR_EXTENSION), lastEvent); } else { Assert.assertEquals(null, lastEvent); @@ -146,7 +153,8 @@ @Override public void putWikitty(WikittyServiceEvent event) { nbEvent++; - Assert.assertEquals(WikittyServiceEvent.WikittyEventType.PUT_WIKITTY, + Assert.assertEquals( + EnumSet.of(WikittyServiceEvent.WikittyEventType.PUT_WIKITTY), event.getType()); lastEvent = event.getType(); } @@ -154,7 +162,8 @@ @Override public void removeWikitty(WikittyServiceEvent event) { nbEvent++; - Assert.assertEquals(WikittyServiceEvent.WikittyEventType.REMOVE_WIKITTY, + Assert.assertEquals( + EnumSet.of(WikittyServiceEvent.WikittyEventType.REMOVE_WIKITTY), event.getType()); lastEvent = event.getType(); } @@ -162,7 +171,8 @@ @Override public void clearWikitty(WikittyServiceEvent event) { nbEvent++; - Assert.assertEquals(WikittyServiceEvent.WikittyEventType.CLEAR_WIKITTY, + Assert.assertEquals( + EnumSet.of(WikittyServiceEvent.WikittyEventType.CLEAR_WIKITTY), event.getType()); lastEvent = event.getType(); } @@ -170,7 +180,8 @@ @Override public void putExtension(WikittyServiceEvent event) { nbEvent++; - Assert.assertEquals(WikittyServiceEvent.WikittyEventType.PUT_EXTENSION, + Assert.assertEquals( + EnumSet.of(WikittyServiceEvent.WikittyEventType.PUT_EXTENSION), event.getType()); lastEvent = event.getType(); } @@ -178,7 +189,8 @@ @Override public void removeExtension(WikittyServiceEvent event) { nbEvent++; - Assert.assertEquals(WikittyServiceEvent.WikittyEventType.REMOVE_EXTENSION, + Assert.assertEquals( + EnumSet.of(WikittyServiceEvent.WikittyEventType.REMOVE_EXTENSION), event.getType()); lastEvent = event.getType(); } @@ -186,7 +198,8 @@ @Override public void clearExtension(WikittyServiceEvent event) { nbEvent++; - Assert.assertEquals(WikittyServiceEvent.WikittyEventType.CLEAR_EXTENSION, + Assert.assertEquals( + EnumSet.of(WikittyServiceEvent.WikittyEventType.CLEAR_EXTENSION), event.getType()); lastEvent = event.getType(); } Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/notification/XMPPNotificationTest.java =================================================================== --- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/notification/XMPPNotificationTest.java 2010-10-26 12:58:09 UTC (rev 451) +++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/notification/XMPPNotificationTest.java 2010-10-27 09:04:19 UTC (rev 452) @@ -25,6 +25,7 @@ package org.nuiton.wikitty.notification; +import java.util.Date; import java.util.HashSet; import java.util.Properties; import java.util.Set; @@ -64,13 +65,9 @@ // Envoi d'un message avec le transporter normal XMPPNotifierTransporter xmpp = new XMPPNotifierTransporter(null, props); - WikittyServiceEvent event = new WikittyServiceEvent("test", - WikittyServiceEvent.WikittyEventType.PUT_WIKITTY); - Set<String> ids = new HashSet<String>(); - ids.add("id1"); - ids.add("id2"); - ids.add("id3"); - event.setIds(ids); + WikittyServiceEvent event = new WikittyServiceEvent("test"); + event.addRemoveDate("theId", new Date()); + xmpp.sendMessage(event); Modified: trunk/wikitty-hessian-client/src/main/java/org/wikitty/hessian/WikittyHessianFactory.java =================================================================== --- trunk/wikitty-hessian-client/src/main/java/org/wikitty/hessian/WikittyHessianFactory.java 2010-10-26 12:58:09 UTC (rev 451) +++ trunk/wikitty-hessian-client/src/main/java/org/wikitty/hessian/WikittyHessianFactory.java 2010-10-27 09:04:19 UTC (rev 452) @@ -5,7 +5,7 @@ * $Id$ * $HeadURL$ * %% - * Copyright (C) 2010 CodeLutin + * Copyright (C) 2010 CodeLutin, Chatellier Eric * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as @@ -22,23 +22,6 @@ * <http://www.gnu.org/licenses/lgpl-3.0.html>. * #L% */ -/* *##% - * Copyright (C) 2010 Code Lutin, Chatellier Eric - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * 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 Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - *##%*/ package org.wikitty.hessian; Modified: trunk/wikitty-hessian-server/src/main/java/org/nuiton/wikitty/hessian/WikittyServiceHessianDelegator.java =================================================================== --- trunk/wikitty-hessian-server/src/main/java/org/nuiton/wikitty/hessian/WikittyServiceHessianDelegator.java 2010-10-26 12:58:09 UTC (rev 451) +++ trunk/wikitty-hessian-server/src/main/java/org/nuiton/wikitty/hessian/WikittyServiceHessianDelegator.java 2010-10-27 09:04:19 UTC (rev 452) @@ -5,7 +5,7 @@ * $Id$ * $HeadURL$ * %% - * Copyright (C) 2010 CodeLutin + * Copyright (C) 2010 CodeLutin, Chatellier Eric * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as @@ -22,23 +22,6 @@ * <http://www.gnu.org/licenses/lgpl-3.0.html>. * #L% */ -/* *##% - * Copyright (C) 2010 Code Lutin, Chatellier Eric - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * 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 Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - *##%*/ package org.nuiton.wikitty.hessian; Modified: trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyExtensionStorageJDBC.java =================================================================== --- trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyExtensionStorageJDBC.java 2010-10-26 12:58:09 UTC (rev 451) +++ trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyExtensionStorageJDBC.java 2010-10-27 09:04:19 UTC (rev 452) @@ -64,10 +64,10 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.wikitty.FieldType; -import org.nuiton.wikitty.UpdateResponse; import org.nuiton.wikitty.WikittyException; import org.nuiton.wikitty.WikittyExtension; import org.nuiton.wikitty.WikittyExtensionStorage; +import org.nuiton.wikitty.WikittyServiceEvent; import org.nuiton.wikitty.WikittyTransaction; import org.nuiton.wikitty.WikittyUtil; @@ -129,9 +129,10 @@ } @Override - public UpdateResponse store(WikittyTransaction transaction, + public WikittyServiceEvent store(WikittyTransaction transaction, Collection<WikittyExtension> extensions) throws WikittyException { + WikittyServiceEvent result = new WikittyServiceEvent(this); Connection connection = getConnection(conf); try { for (WikittyExtension ext : extensions) { @@ -146,6 +147,7 @@ //if the data is not already recorded if (!versionResultSet.next()) { + result.addExtension(ext); doQuery(connection, conf.getProperty(QUERY_INSERT_EXTENSION_ADMIN), ext.getId(), ext.getName(), @@ -167,8 +169,7 @@ // FIXME poussin 20100114 put that in abstractService after commit, because must remove cache only when tx is commited // modification in extension, remove the cache lastVersion = null; - // nothing to put in result - UpdateResponse result = new UpdateResponse(); + return result; } catch (SQLException eee) { throw new WikittyException("Can't store extension", eee); @@ -347,12 +348,14 @@ } @Override - public void clear(WikittyTransaction transaction) { + public WikittyServiceEvent clear(WikittyTransaction transaction) { Connection connection = getConnection(conf); try { lastVersion = null; doQuery(connection, conf.getProperty(QUERY_CLEAR_EXTENSION)); - + WikittyServiceEvent result = new WikittyServiceEvent(this); + result.addType(WikittyServiceEvent.WikittyEventType.CLEAR_EXTENSION); + return result; } catch (Exception eee) { throw new WikittyException("Can't clear all extension", eee); } finally { Modified: trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyStorageJDBC.java =================================================================== --- trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyStorageJDBC.java 2010-10-26 12:58:09 UTC (rev 451) +++ trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyStorageJDBC.java 2010-10-27 09:04:19 UTC (rev 452) @@ -77,13 +77,13 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.wikitty.FieldType; -import org.nuiton.wikitty.UpdateResponse; import org.nuiton.wikitty.Wikitty; import org.nuiton.wikitty.WikittyException; import org.nuiton.wikitty.WikittyExtension; import org.nuiton.wikitty.WikittyExtensionStorage; import org.nuiton.wikitty.WikittyImpl; import org.nuiton.wikitty.WikittyObsoleteException; +import org.nuiton.wikitty.WikittyServiceEvent; import org.nuiton.wikitty.WikittyStorage; import org.nuiton.wikitty.WikittyTransaction; import org.nuiton.wikitty.WikittyUtil; @@ -168,11 +168,11 @@ } @Override - public UpdateResponse store(WikittyTransaction transaction, + public WikittyServiceEvent store(WikittyTransaction transaction, Collection<Wikitty> wikitties, boolean force) throws WikittyException { Connection connection = getConnection(conf); try { - UpdateResponse result = new UpdateResponse(); + WikittyServiceEvent result = new WikittyServiceEvent(this); for (Wikitty wikitty : wikitties) { String query = String.format(conf.getProperty(QUERY_SELECT_TWO_WHERE), COL_VERSION, COL_DELETION_DATE, TABLE_WIKITTY_ADMIN, COL_ID); @@ -190,7 +190,7 @@ actualVersion = versionResultSet.getString(COL_VERSION); deletionDate = versionResultSet.getDate(COL_DELETION_DATE); } - + // compute new version, but not change wikitty String newVersion = null; if (force) { @@ -234,8 +234,6 @@ } - result.addVersionUpdate(wikitty.getId(), newVersion); - for (WikittyExtension ext : wikitty.getExtensions()) { extensionList += "," + ext.getId(); for (String fieldName : ext.getFieldNames()) { @@ -290,6 +288,7 @@ wikitty.setVersion(newVersion); wikitty.clearDirty(); + result.addWikitty(wikitty); } return result; @@ -383,10 +382,10 @@ } @Override - public UpdateResponse delete(WikittyTransaction transaction, Collection<String> ids) throws WikittyException { + public WikittyServiceEvent delete(WikittyTransaction transaction, Collection<String> ids) throws WikittyException { Connection connection = getConnection(conf); try { - UpdateResponse result = new UpdateResponse(); + WikittyServiceEvent result = new WikittyServiceEvent(this); Date now = new Date(); for (String id : ids) { @@ -401,7 +400,7 @@ } // addVersionUpdate delete date field doQuery(connection, conf.getProperty(QUERY_DELETE_WIKITTY_ADMIN), id); - result.addDeletionDateUpdate(id, now); + result.addRemoveDate(id, now); } @@ -558,11 +557,13 @@ } @Override - public void clear(WikittyTransaction transaction) { + public WikittyServiceEvent clear(WikittyTransaction transaction) { Connection connection = getConnection(conf); try { doQuery(connection, conf.getProperty(QUERY_CLEAR_WIKITTY)); - + WikittyServiceEvent result = new WikittyServiceEvent(this); + result.addType(WikittyServiceEvent.WikittyEventType.CLEAR_WIKITTY); + return result; } catch (SQLException eee) { throw new WikittyException("Can't clear wikitty data", eee); } finally { Modified: trunk/wikitty-solr-impl/src/main/java/org/nuiton/wikitty/solr/WikittySearchEnginSolr.java =================================================================== --- trunk/wikitty-solr-impl/src/main/java/org/nuiton/wikitty/solr/WikittySearchEnginSolr.java 2010-10-26 12:58:09 UTC (rev 451) +++ trunk/wikitty-solr-impl/src/main/java/org/nuiton/wikitty/solr/WikittySearchEnginSolr.java 2010-10-27 09:04:19 UTC (rev 452) @@ -54,7 +54,6 @@ import org.nuiton.wikitty.FieldType.TYPE; import org.nuiton.wikitty.PagedResult; import org.nuiton.wikitty.WikittyTreeNode; -import org.nuiton.wikitty.UpdateResponse; import org.nuiton.wikitty.Wikitty; import org.nuiton.wikitty.WikittyException; import org.nuiton.wikitty.WikittyExtension; @@ -531,7 +530,7 @@ } @Override - public UpdateResponse store(WikittyTransaction transaction, Collection<Wikitty> wikitties) { + public void store(WikittyTransaction transaction, Collection<Wikitty> wikitties) { try { solrResource.init(); ReindexChildTreeNode reindexChildTreeNode = @@ -574,19 +573,14 @@ } // Reindex child in tree node - reindexChildTreeNode.reindex(); - - // no specific result needed - UpdateResponse result = new UpdateResponse(); - return result; - + reindexChildTreeNode.reindex(); } catch (Exception eee) { throw new WikittyException("Can't store wikitty", eee); } } @Override - public UpdateResponse delete(WikittyTransaction transaction, Collection<String> ids) throws WikittyException { + public void delete(WikittyTransaction transaction, Collection<String> ids) throws WikittyException { try { solrResource.init(); ReindexChildTreeNode reindexChildTreeNode = @@ -609,11 +603,6 @@ // Reindex child in tree node reindexChildTreeNode.reindex(); - - // No specific result needed - UpdateResponse result = new UpdateResponse(); - return result; - } catch (Exception eee) { throw new WikittyException("Can't delete wikitty in index", eee); } Modified: trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/solr/test/AbstractTestSolr.java =================================================================== --- trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/solr/test/AbstractTestSolr.java 2010-10-26 12:58:09 UTC (rev 451) +++ trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/solr/test/AbstractTestSolr.java 2010-10-27 09:04:19 UTC (rev 452) @@ -25,16 +25,16 @@ package org.nuiton.wikitty.solr.test; import org.junit.Before; -import org.nuiton.wikitty.WikittyService; +import org.nuiton.wikitty.WikittyServiceEnhanced; public abstract class AbstractTestSolr { - protected WikittyService ws = new WikittyServiceSolr(); + protected WikittyServiceEnhanced ws = + new WikittyServiceEnhanced(new WikittyServiceSolr()); @Before public void deleteAll() throws Exception { - WikittyServiceSolr hbaseService = ((WikittyServiceSolr) ws); - hbaseService.clear(null); + ws.clear(null); } } Modified: trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/solr/test/TreeTest.java =================================================================== --- trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/solr/test/TreeTest.java 2010-10-26 12:58:09 UTC (rev 451) +++ trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/solr/test/TreeTest.java 2010-10-27 09:04:19 UTC (rev 452) @@ -47,6 +47,7 @@ import org.nuiton.wikitty.Wikitty; import org.nuiton.wikitty.WikittyExtension; import org.nuiton.wikitty.WikittyImpl; +import org.nuiton.wikitty.WikittyServiceEvent; import org.nuiton.wikitty.conform.StorageTest; import org.nuiton.wikitty.search.Search; @@ -399,7 +400,8 @@ WikittyTreeNodeImpl child = new WikittyTreeNodeImpl(); child.setParent(parent.getWikittyId()); - ws.store(null, child.getWikitty()); + WikittyServiceEvent event = ws.store(null, child.getWikitty()); + event.update(child.getWikitty()); Map<WikittyTreeNode, Integer> children = ws.restoreChildren(null, parent.getWikittyId(), null); Modified: trunk/wikitty-ui-zk/src/main/java/org/nuiton/wikitty/ui/Model.java =================================================================== --- trunk/wikitty-ui-zk/src/main/java/org/nuiton/wikitty/ui/Model.java 2010-10-26 12:58:09 UTC (rev 451) +++ trunk/wikitty-ui-zk/src/main/java/org/nuiton/wikitty/ui/Model.java 2010-10-27 09:04:19 UTC (rev 452) @@ -30,6 +30,7 @@ import org.nuiton.wikitty.Wikitty; import org.nuiton.wikitty.WikittyExtension; import org.nuiton.wikitty.WikittyService; +import org.nuiton.wikitty.WikittyServiceEnhanced; import org.nuiton.wikitty.search.Element; import org.nuiton.wikitty.search.Search; @@ -39,10 +40,10 @@ */ public class Model { - protected WikittyService _service = null; + protected WikittyServiceEnhanced _service = null; public Model(WikittyService service) { - _service = service; + _service = new WikittyServiceEnhanced(service); } /*
participants (1)
-
bpoussin@users.nuiton.org