Author: mfortun Date: 2011-04-14 17:56:28 +0200 (Thu, 14 Apr 2011) New Revision: 809 Url: http://nuiton.org/repositories/revision/wikitty/809 Log: * resume migration to the new functional requirements * correct constructor in the wikitty publication file system * prepare algorythms : update, delete, existing in the publication sync entry point Modified: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/synchro/WikittyPublication.java trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/synchro/WikittyPublicationFileSystem.java Modified: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/synchro/WikittyPublication.java =================================================================== --- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/synchro/WikittyPublication.java 2011-04-14 15:21:24 UTC (rev 808) +++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/synchro/WikittyPublication.java 2011-04-14 15:56:28 UTC (rev 809) @@ -27,11 +27,11 @@ import java.io.File; import java.io.FileReader; import java.io.FileWriter; +import java.net.URI; import java.util.ArrayList; import java.util.List; import java.util.Properties; -import org.apache.commons.collections.BidiMap; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.util.ApplicationConfig; @@ -39,6 +39,7 @@ import org.nuiton.util.CollectionUtil; import org.nuiton.util.FileUtil; import org.nuiton.wikitty.WikittyProxy; +import org.nuiton.wikitty.WikittyService; import org.nuiton.wikitty.WikittyServiceFactory; import org.nuiton.wikitty.entities.Wikitty; import org.nuiton.wikitty.entities.WikittyLabel; @@ -70,11 +71,10 @@ * static string for allias, wrong named attribut TODO mfortun-2011-04-06 * need to set better name */ - - - static public String HESSIAN_PROTOCOL_KEY = "hessian"; - static public String NO_RECURSION_KEY = "norecursion"; + static public String IS_RECURSION_OPTION = "isRecur"; + static public String IS_DELETE_OPTION = "delete"; + static public String IS_EXISTING_OPTION = "existing"; /** * @param args @@ -82,37 +82,181 @@ */ static public void main(String[] args) throws Exception { - applicationConfig = new ApplicationConfig(); - /* - * TODO mfortun-2011-04-05 once application fixed setdefault value and - * enumclass for initialisation + /* + * TODO mfortun-2011-04-14 construct option def instance to initialize + * correctly application config */ + applicationConfig.setDefaultOption(IS_DELETE_OPTION, "false"); + applicationConfig.setDefaultOption(IS_EXISTING_OPTION, "false"); + applicationConfig.setDefaultOption(IS_RECURSION_OPTION, "true"); + // allias for norecursion applicationConfig.addAlias("--norecursion", "--option", - WikittyPublication.NO_RECURSION_KEY, "true"); - - + WikittyPublication.IS_RECURSION_OPTION, "false"); + + applicationConfig.addAlias("--delete", "--option", IS_DELETE_OPTION, + "true"); + + applicationConfig.addAlias("--existing", "--option", + IS_EXISTING_OPTION, "true"); + // allias for all the action applicationConfig.addAlias("wp sync", "--option", "sync"); applicationConfig .addActionAlias("sync", - "org.nuiton.wikitty.publication.WikittyPublication#synchronisation"); + "org.nuiton.wikitty.publication.synchro.WikittyPublication#synchronisation"); - // parsing applicationConfig.parse(args); + System.out.println("ffff"); + // execution applicationConfig.doAction(0); } - static public void synchronisation ( String uriOrigin, String uriTarget){ - + static public void synchronisation(String origin, String target) + throws Exception { + boolean isRecur = applicationConfig + .getOptionAsBoolean(IS_RECURSION_OPTION); + + applicationConfig.setOption("ponay", "george"); + + /* + * TODO mfortun-2011-04-14 handle exception if uri format does not match + */ + URI uriOrigin = new URI(origin); + + URI uriTarget = new URI(target); + + boolean isDelete = applicationConfig + .getOptionAsBoolean(IS_DELETE_OPTION); + boolean isExisting = applicationConfig + .getOptionAsBoolean(IS_EXISTING_OPTION); + + /* + * TODO mfortun-2011-04-14 add setoption to application config to + * retrieve correct wikitty service with correct args e.g. for file : + */ + if (uriOrigin.getScheme().equals("file")) { + applicationConfig + .setOption("wikitty.WikittyService.components", + "org.nuiton.wikitty.publication.synchro.WikittyPublicationFileSystem"); + } + + WikittyProxy proxyOrigin = new WikittyProxy( + WikittyServiceFactory.buildWikittyService(applicationConfig)); + + WikittyProxy proxyTarget = new WikittyProxy( + WikittyServiceFactory.buildWikittyService(applicationConfig)); + + /* + * TODO mfortun-2011-04-14 voir comment on fait quand les deux uris + * déclare des labels en fragment, si on les composent ensemble ou un + * truc du genre ? + */ + String labelOrigin = uriOrigin.getFragment(); + String labelTarget = uriOrigin.getFragment(); + + Criteria critOrigin = constructCriteriaLabelRecur(labelOrigin, isRecur); + Criteria critTarget = constructCriteriaLabelRecur(labelTarget, isRecur); + + List<String> listOrigin = proxyOrigin.findAllIdByCriteria(critOrigin) + .getAll(); + List<String> listTarget = proxyTarget.findAllIdByCriteria(critTarget) + .getAll(); + + /* + * Algo update origin, target: wikitty service quelconque: -on + * vachercher sur origin les wikitty avec le label ciblé (recur ou non) + * -on va chercher sur target les wikitty avec le label ciblé (recur ou + * non) + * + * Tout ceux qui sont dans origin et pas target on les envois sans se + * poser de question (c'est les nouveaux) + * + * Pour ceux en commun on va faire une différence sur les versions si + * version orign est plus récente que celle sur target on envoit gérer + * ici la problématique de merge ? + * + * sinon pas plus récente on fait rien. + */ + + /* + * Algo delete + * + * origin, target: wikitty service quelconque: -on va chercher sur + * origin les wikitty avec le label ciblé (recur ou non) -on va chercher + * sur target les wikitty avec le label ciblé (recur ou non) + * + * Tout ceux qui sont dans origin et pas target on en fait rien. Ceux en + * commun on n'en fait rien non plus. + * + * Ceux qui sont uniquement dans target on les met à jour en virant le + * label correspondant + */ + + /* + * Algo existing + * + * origin, target: wikitty service quelconque: -on va chercher sur + * origin les wikitty avec le label ciblé (recur ou non) -on va chercher + * sur target les wikitty avec le label ciblé (recur ou non) + * + * Tout ceux qui sont dans origin et pas target on en fait rien, et pour + * le reste application du même algo que pour update classique + * + * Pour ceux en commun on va faire une différence sur les versions si + * version orign est plus récente que celle sur target on envoit gérer + * ici la problématique de merge ? + * + * sinon pas plus récente on fait rien. + */ + } + /** + * Used to construct criteria on wikittypubdata an pubtext on the + * wikittylabel extension + * + * @param label + * @param isRecur + * is recusion + * @return the constructed criteria + */ + static protected Criteria constructCriteriaLabelRecur(String label, + boolean isRecur) { + // Construct the criteria + Criteria labelCriteria; + Search mainRequest = Search.query(); + Search subRoqu = mainRequest.or(); + + // must have the type of wikittypubtext/wikittypubdata + subRoqu.exteq(WikittyPubText.EXT_WIKITTYPUBTEXT).exteq( + WikittyPubData.EXT_WIKITTYPUBDATA); + if (isRecur) { + + // and extension with the name that containt the label (recursivity) + labelCriteria = mainRequest.exteq(WikittyLabel.EXT_WIKITTYLABEL) + .sw(WikittyLabel.FQ_FIELD_WIKITTYLABEL_LABELS, label) + .criteria(); + + } else { + + // and extension with the name strictly equals to the label (no + // recursivity) + labelCriteria = mainRequest.exteq(WikittyLabel.EXT_WIKITTYLABEL) + .eq(WikittyLabel.FQ_FIELD_WIKITTYLABEL_LABELS, label) + .criteria(); + + } + return labelCriteria; + + } + } Modified: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/synchro/WikittyPublicationFileSystem.java =================================================================== --- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/synchro/WikittyPublicationFileSystem.java 2011-04-14 15:21:24 UTC (rev 808) +++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/synchro/WikittyPublicationFileSystem.java 2011-04-14 15:56:28 UTC (rev 809) @@ -38,6 +38,7 @@ import org.apache.commons.collections.bidimap.DualHashBidiMap; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.util.ApplicationConfig; import org.nuiton.util.FileUtil; import org.nuiton.util.MD5InputStream; import org.nuiton.util.StringUtil; @@ -105,23 +106,15 @@ * @param home * the home directory */ - public WikittyPublicationFileSystem(File home, boolean recur, String label) { - this.setHomeFile(home); - this.setRecursion(recur); - this.setLabel(label); - } - - - - public WikittyPublicationFileSystem(File homeFile) { - this(homeFile, true, ""); - + + public WikittyPublicationFileSystem(ApplicationConfig app) { + /* + * TODO mfortun-2011-04-14 use application config to initialize + * correctly the attribut homeFile, recursion and label + */ } - - - public File getHomeFile() { return homeFile; } @@ -166,9 +159,7 @@ @Override public String login(String login, String password) { - // TODO mfortun-2011-04-05 - throw new UnsupportedOperationException("not yet implemented"); - // return null; + return "chausette"; } @@ -341,8 +332,10 @@ Properties metaProperties = new Properties(); metaProperties.load(new FileReader(propertieFile)); // update - metaProperties.setProperty( - WikittyPublicationFileSystem.META_CURRENT_LABEL, ourDir); + metaProperties + .setProperty( + WikittyPublicationFileSystem.META_CURRENT_LABEL, + ourDir); metaProperties.setProperty(name + "." + extension + ".version", w.getVersion()); @@ -429,6 +422,18 @@ @Override public List<Wikitty> restore(String securityToken, List<String> id) { + /* + * FIXME mfortun-2011-04-14 s'assurer que quand on restore on restore + * bien la version correctement, potentiellement si ya eut des + * modifications faites entre la version précédent et actuel on fasse + * gaffe à incrémenter la version "mineur" + * + * + * + * version d'un wikitty sous forme x.y, où x incrémenté par serveur y + * incrémenté à chaque set sur content. + */ + List<Wikitty> result = new ArrayList<Wikitty>(); try { BidiMap locations = harvestLocalWikitties(homeFile, recursion); @@ -536,23 +541,27 @@ String fileName = localisation.getFileName(); // load properties - PropertiesExtended propsProperties = getWikittyPublicationProperties(new File( - path), WikittyPublicationFileSystem.WIKITTY_FILE_META_PROPERTIES_FILE); + PropertiesExtended propsProperties = getWikittyPublicationProperties( + new File(path), + WikittyPublicationFileSystem.WIKITTY_FILE_META_PROPERTIES_FILE); // update + propsProperties + .remove(fileName + + WikittyPublicationFileSystem.META_SUFFIX_KEY_CHECKSUM); propsProperties.remove(fileName - + WikittyPublicationFileSystem.META_SUFFIX_KEY_CHECKSUM); - propsProperties.remove(fileName + WikittyPublicationFileSystem.META_SUFFIX_KEY_ID); - propsProperties.remove(fileName - + WikittyPublicationFileSystem.META_SUFFIX_KEY_VERSION); + propsProperties + .remove(fileName + + WikittyPublicationFileSystem.META_SUFFIX_KEY_VERSION); // resave propsProperties.store(); // load properties - PropertiesExtended idProperties = getWikittyPublicationProperties(new File( - path), WikittyPublicationFileSystem.WIKITTY_ID_PROPERTIES_FILE); + PropertiesExtended idProperties = getWikittyPublicationProperties( + new File(path), + WikittyPublicationFileSystem.WIKITTY_ID_PROPERTIES_FILE); // update idProperties.remove(id); // resave @@ -818,9 +827,6 @@ return result; } - - - /** * Method that create a list of the properties directory * @@ -831,11 +837,11 @@ */ static public List<File> harvestPropertyDirectory(File starts, boolean recursivly) { - + List<File> result = new ArrayList<File>(); - + for (File child : starts.listFiles()) { - + if (child.isDirectory() && child.getName().equals(PROPERTY_DIRECTORY)) { result.add(child); @@ -844,10 +850,9 @@ } } return result; - + } - /** * * Use to search in the file system the directory that containt the .wp dir @@ -859,15 +864,15 @@ */ static protected File searchWikittyPublicationHomeDir(File start) throws Exception { - + if (start != null && start.exists() && start.isDirectory()) { // on va retourner le dossier .wp home - + // method récursiv qui remonte dans les parents pour retrouver. - + File propertyDirectory = new File(start.getCanonicalPath() + File.separator + PROPERTY_DIRECTORY); - + if (propertyDirectory.exists()) { File propertie = new File(propertyDirectory.getCanonicalPath() + File.separator + WIKITTYPUBLICATION_PROPERTIES_FILE); @@ -875,7 +880,7 @@ return propertyDirectory; } } - + return searchWikittyPublicationHomeDir(start.getParentFile()); } else { // Exception @@ -886,9 +891,6 @@ } } - - - /** * * @param starts @@ -919,7 +921,7 @@ String path = propsDir.getParent(); FileSystemWIkittyId value = new FileSystemWIkittyId(name, path); - result.put((String) id, value ); + result.put((String) id, value); } } @@ -935,16 +937,16 @@ return result; } - static public PropertiesExtended getWikittyPublicationProperties(File starts, String name) - throws Exception { + static public PropertiesExtended getWikittyPublicationProperties( + File starts, String name) throws Exception { File propertieDirectory = new File(starts.getCanonicalPath() - + File.separator + WikittyPublicationFileSystem.PROPERTY_DIRECTORY); + + File.separator + + WikittyPublicationFileSystem.PROPERTY_DIRECTORY); // load/create meta propertie file File propertieFile = new File(propertieDirectory.getCanonicalPath() - + File.separator - + name); + + File.separator + name); if (!propertieFile.exists()) { propertieFile.createNewFile(); } @@ -954,7 +956,4 @@ return result; } - - - }