r783 - trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication
Author: mfortun Date: 2011-04-11 18:02:52 +0200 (Mon, 11 Apr 2011) New Revision: 783 Url: http://nuiton.org/repositories/revision/wikitty/783 Log: * checkout works basically * store method almost terminated need to be fixed directories need to be create before file. Modified: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublication.java trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationFileSystem.java Modified: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublication.java =================================================================== --- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublication.java 2011-04-11 15:54:11 UTC (rev 782) +++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublication.java 2011-04-11 16:02:52 UTC (rev 783) @@ -3,7 +3,10 @@ import java.io.File; import java.io.FileReader; import java.io.FileWriter; +import java.lang.reflect.Array; +import java.lang.reflect.Method; import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Properties; @@ -20,7 +23,9 @@ import org.nuiton.wikitty.publication.entities.WikittyPubData; import org.nuiton.wikitty.publication.entities.WikittyPubText; import org.nuiton.wikitty.search.Criteria; +import org.nuiton.wikitty.search.PagedResult; import org.nuiton.wikitty.search.Search; +import org.nuiton.wikitty.services.WikittyServiceCajoClient; /** @@ -44,6 +49,10 @@ * static string for allias, wrong named attribut TODO mfortun-2011-04-06 * need to set better name */ + + /* + * FIXME mfortun-2011-04-11 need to migrate static value to another class ? + */ static public String WITTY_SERVICE_KEY = "wikitty.service.server.url"; static public String NO_RECURSION_KEY = "norecursion"; static public String DIRECTORY_KEY = "directory"; @@ -263,11 +272,22 @@ + dir.getAbsolutePath() + "Label a checkout " + label + "HessianProtocol=" + hessianProtocole); + if (hessianProtocole) { + applicationConfig.setOption("wikitty.WikittyService.components", + "org.nuiton.wikitty.services.WikittyServiceHessianClient"); + } else { + applicationConfig.setOption("wikitty.WikittyService.components", + "org.nuiton.wikitty.services.WikittyServiceCajoClient"); + } + WikittyProxy remoteWikittyService = new WikittyProxy( WikittyServiceFactory.buildWikittyService(applicationConfig)); WikittyPublicationFileSystem localWikittyService = new WikittyPublicationFileSystem( - dir); + dir, noRecur, label); + + + // Construct the criteria Criteria labelCriteria; Search mainRequest = Search.query(); @@ -290,10 +310,22 @@ .criteria(); } + + // request to the proxy - List<Wikitty> wikittiesToWrite = remoteWikittyService - .findAllByCriteria(labelCriteria).getAll(); - + PagedResult<Wikitty> pageResult= remoteWikittyService.findAllByCriteria(labelCriteria); + + List<Wikitty> wikittiesToWrite = pageResult.getAll(); + + for ( Wikitty w : wikittiesToWrite){ + System.out.println(w); + + } + + + // write the proper properties file! + writeHomePropertyFile(dir); + // write the wikities localWikittyService.store("", wikittiesToWrite, true); @@ -302,28 +334,8 @@ * the appropriate wikittyservice ! */ - // write the proper properties file! - Properties props = new Properties(); - props.put(WITTY_SERVICE_KEY, wikittyService); - if (hessianProtocole) { - props.put("wikitty.WikittyService.components", - "org.nuiton.wikitty.services.WikittyServiceHessianClient"); - } else { - props.put("wikitty.WikittyService.components", - "org.nuiton.wikitty.services.WikittyServiceCajoClient"); - } - - // create the properties directory - File wpDirectory = new File(dir.getCanonicalPath() + File.separator - + PROPERTY_DIRECTORY + File.separator); - if (!wpDirectory.exists()) { - wpDirectory.createNewFile(); - } - - File propertiesFiles = new File(wpDirectory.getCanonicalPath() - + File.separator + WIKITTYPUBLICATION_PROPERTIES_FILE); - - props.store(new FileWriter(propertiesFiles), ""); + + /* * on va commencer par vérifier les arguments ''wp checkout * [--norecursion] [url du WikittyService] [Label à extraire] [directory @@ -710,4 +722,41 @@ } + + static protected void writeHomePropertyFile(File homeDir) throws Exception{ + + + if (homeDir.exists()) { + File dir = applicationConfig.getOptionAsFile(DIRECTORY_KEY); + String wikittyService = applicationConfig + .getOption(WITTY_SERVICE_KEY); + boolean hessianProtocole = applicationConfig + .getOptionAsBoolean(HESSIAN_PROTOCOL_KEY); + + + //TODO mfortun-2011-04-11 find a better way to manage component property + String propertyCompo = applicationConfig + .getOption("wikitty.WikittyService.components"); + // write the proper properties file! + Properties props = new Properties(); + props.put(WITTY_SERVICE_KEY, wikittyService); + + props.put("wikitty.WikittyService.components", propertyCompo); + + // create the properties directory + File wpDirectory = new File(homeDir.getCanonicalPath() + + File.separator + PROPERTY_DIRECTORY + File.separator); + if (!wpDirectory.exists() ) { + wpDirectory.mkdir(); + } + + + File propertiesFiles = new File(wpDirectory.getCanonicalPath() + + File.separator + WIKITTYPUBLICATION_PROPERTIES_FILE); + + + + props.store(new FileWriter(propertiesFiles), ""); + } + } } Modified: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationFileSystem.java =================================================================== --- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationFileSystem.java 2011-04-11 15:54:11 UTC (rev 782) +++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationFileSystem.java 2011-04-11 16:02:52 UTC (rev 783) @@ -6,13 +6,18 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileReader; +import java.io.FileWriter; import java.io.InputStreamReader; import java.util.Collection; +import java.util.HashSet; import java.util.List; +import java.util.Properties; +import java.util.Set; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.util.FileUtil; +import org.nuiton.util.MD5InputStream; import org.nuiton.util.StringUtil; import org.nuiton.wikitty.WikittyService; import org.nuiton.wikitty.entities.Wikitty; @@ -21,8 +26,10 @@ import org.nuiton.wikitty.entities.WikittyLabel; import org.nuiton.wikitty.entities.WikittyLabelHelper; import org.nuiton.wikitty.entities.WikittyLabelImpl; +import org.nuiton.wikitty.publication.entities.WikittyPubData; import org.nuiton.wikitty.publication.entities.WikittyPubDataHelper; import org.nuiton.wikitty.publication.entities.WikittyPubDataImpl; +import org.nuiton.wikitty.publication.entities.WikittyPubText; import org.nuiton.wikitty.publication.entities.WikittyPubTextHelper; import org.nuiton.wikitty.publication.entities.WikittyPubTextImpl; import org.nuiton.wikitty.search.Criteria; @@ -40,6 +47,8 @@ static public String WIKITTYLABEL_SEPARATOR = "."; protected File homeFile; + protected boolean recursion; + protected String label; /** * Constructor with the working directory @@ -47,8 +56,10 @@ * @param home * the home directory */ - public WikittyPublicationFileSystem(File home) { + public WikittyPublicationFileSystem(File home, boolean recur, String label) { this.setHomeFile(home); + this.setRecursion(recur); + this.setLabel(label); } public File getHomeFile() { @@ -59,6 +70,22 @@ this.homeFile = homeFile; } + public boolean isRecursion() { + return recursion; + } + + public void setRecursion(boolean recursion) { + this.recursion = recursion; + } + + public String getLabel() { + return label; + } + + public void setLabel(String label) { + this.label = label; + } + @Override public void addWikittyServiceListener(WikittyListener listener, ServiceListenerType type) { @@ -154,10 +181,139 @@ public WikittyEvent store(String securityToken, Collection<Wikitty> wikitties, boolean force) { - // StringUtil.encodeMD5(toEncode) + + // FIXME mfortun-2011-04-11 need to create the directory file first + try { - // TODO mfortun-2011-04-05 - throw new UnsupportedOperationException("not yet implemented"); + for (Wikitty w : wikitties) { + + Set<String> set = WikittyLabelHelper.getLabels(w); + String ourDir = ""; + + // search for our label + for (String name : set) { + if (!recursion && name.equalsIgnoreCase(label)) { + ourDir = name; + } else if (recursion && name.startsWith(label)) { + ourDir = name; + } + } + + // create the path with the label + String path = homeFile.getCanonicalFile() + File.separator + + ourDir.replaceAll(".", File.separator); + // create the directory + File directory = new File(path); + if (!directory.exists() || !directory.isDirectory()) { + directory.mkdir(); + } + // create the propertie directory if necessary + File propertieDirectory = new File(path + File.separator + + WikittyPublication.PROPERTY_DIRECTORY); + if (!propertieDirectory.exists() + || !propertieDirectory.isDirectory()) { + propertieDirectory.mkdir(); + } + // load/create meta propertie file + File propertieFile = new File( + propertieDirectory.getCanonicalPath() + + File.separator + + WikittyPublication.WIKITTY_FILE_META_PROPERTIES_FILE); + if (!propertieFile.exists()) { + propertieFile.createNewFile(); + } + // load/create id propertie file + File idPropertieFile = new File( + propertieDirectory.getCanonicalPath() + File.separator + + WikittyPublication.WIKITTY_ID_PROPERTIES_FILE); + if (!idPropertieFile.exists()) { + idPropertieFile.createNewFile(); + } + + String name = ""; + String extension = ""; + + File wikittyFile = null; + if (w.hasExtension(WikittyPubData.EXT_WIKITTYPUBDATA)) { + name = WikittyPubDataHelper.getName(w); + String mime = WikittyPubDataHelper.getMimeType(w); + byte[] content = WikittyPubDataHelper.getContent(w); + + extension = extensionFormimeType(mime); + + wikittyFile = new File(path + File.separator + name + "." + + extension); + + wikittyFile.createNewFile(); + + FileUtil.byteToFile(content, wikittyFile); + + } else if (w.hasExtension(WikittyPubText.EXT_WIKITTYPUBTEXT)) { + name = WikittyPubTextHelper.getName(w); + String mime = WikittyPubTextHelper.getMimeType(w); + String content = WikittyPubTextHelper.getContent(w); + + extension = extensionFormimeType(mime); + + wikittyFile = new File(path + File.separator + name + "." + + extension); + + wikittyFile.createNewFile(); + + FileUtil.writeString(wikittyFile, content); + } + + if (wikittyFile != null) { + // prepare for checksum + BufferedInputStream input = new BufferedInputStream( + new FileInputStream(wikittyFile)); + + byte[] byt = MD5InputStream.hash(input); + + String localMd5 = StringUtil.asHex(byt); + + // load meta properties + Properties metaProperties = new Properties(); + metaProperties.load(new FileReader(propertieFile)); + // update + metaProperties.setProperty(name + "." + extension + + ".version", w.getVersion()); + metaProperties.setProperty(name + "." + extension + ".id", + w.getVersion()); + metaProperties.setProperty(name + "." + extension + + ".checksum", localMd5); + // save + metaProperties.store(new FileWriter(propertieFile), ""); + // load id properties + Properties idProperties = new Properties(); + idProperties.load(new FileReader(idPropertieFile)); + // update + idProperties.setProperty(w.getId(), name + "." + extension); + // save + idProperties.store(new FileWriter(idPropertieFile), ""); + } + } + + /* + * pour chaque wikitty en fonction du type on va aller écrire le + * fichier avec la bonne extention en fonction du mime. + * + * Et niveau propriété : double entré d'id, checksum, version aussi. + * + * + * faire en deux passes, pour mettre les labels et labels courant + * aussi les ranger et tout. + */ + + // StringUtil.encodeMD5(toEncode) + + } catch (Exception e) { + + } + + WikittyEvent result = new WikittyEvent(this); + + return result; // return null; } @@ -246,7 +402,8 @@ } @Override - public List<String> findByCriteria(String securityToken, List<Criteria> criteria) { + public List<String> findByCriteria(String securityToken, + List<Criteria> criteria) { // TODO mfortun-2011-04-05 throw new UnsupportedOperationException("not yet implemented"); // return null; @@ -317,8 +474,7 @@ Wikitty result = new WikittyImpl(); result.addExtension(WikittyLabelImpl.extensionWikittyLabel); - - //creation of the label + // creation of the label /* * TODO mfortun-2011-04-08 find a better way to do this ? */ @@ -338,7 +494,6 @@ WikittyLabelHelper.addLabels(result, label); - // complete with the correct extension with content if (isMimeWikittyPubText(mimeType)) { result.addExtension(WikittyPubTextImpl.extensionWikittyPubText); @@ -366,8 +521,8 @@ */ static public String mimeTypeForExtension(String ext) { /* - * TODO mfortun-2011-04-08 really implements this method - * + * TODO mfortun-2011-04-08 really implements this method create a double + * hashMap for this kind of key/value collection */ if (ext.equalsIgnoreCase("ws")) { return "application/javascript"; @@ -378,6 +533,24 @@ } /** + * Return the extension for a mime type opposite to mimeTypeForExtension + * + * @param ext + * @return + */ + static public String extensionFormimeType(String mime) { + /* + * TODO mfortun-2011-04-11 really implements this method + */ + if (mime.equalsIgnoreCase("ws")) { + return "application/javascript"; + } else { + return "image/png"; + } + + } + + /** * return if the mime type is associate to a wikittypubtext * * @param mime @@ -386,7 +559,6 @@ static public boolean isMimeWikittyPubText(String mime) { /* * TODO mfortun-2011-04-08 really implements this method - * */ if (mime.equalsIgnoreCase("application/javascript")) { return true;
participants (1)
-
mfortun@users.nuiton.org