Author: mfortun Date: 2011-04-12 10:50:53 +0200 (Tue, 12 Apr 2011) New Revision: 786 Url: http://nuiton.org/repositories/revision/wikitty/786 Log: * fixed the directory creation before write file, now "recursivly" create all the parents necessary using the "label/path" Modified: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationFileSystem.java 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-12 08:41:03 UTC (rev 785) +++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationFileSystem.java 2011-04-12 08:50:53 UTC (rev 786) @@ -37,6 +37,7 @@ import java.util.List; import java.util.Properties; import java.util.Set; +import java.util.TreeSet; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -205,8 +206,6 @@ public WikittyEvent store(String securityToken, Collection<Wikitty> wikitties, boolean force) { - - // FIXME mfortun-2011-04-11 need to create the directory file first try { for (Wikitty w : wikitties) { @@ -223,98 +222,103 @@ } } - // 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(); - } + // create the directories from the label + boolean pathFilecreated = createFilesFromLabelPath(ourDir, + homeFile); - String name = ""; - String extension = ""; + if (pathFilecreated) { + // create the path with the label + String path = homeFile.getCanonicalFile() + File.separator + + ourDir.replaceAll(".", File.separator); - File wikittyFile = null; - if (w.hasExtension(WikittyPubData.EXT_WIKITTYPUBDATA)) { - name = WikittyPubDataHelper.getName(w); - String mime = WikittyPubDataHelper.getMimeType(w); - byte[] content = WikittyPubDataHelper.getContent(w); + // 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(); + } - extension = extensionFormimeType(mime); + String name = ""; + String extension = ""; - wikittyFile = new File(path + File.separator + name + "." - + extension); + File wikittyFile = null; + if (w.hasExtension(WikittyPubData.EXT_WIKITTYPUBDATA)) { + name = WikittyPubDataHelper.getName(w); + String mime = WikittyPubDataHelper.getMimeType(w); + byte[] content = WikittyPubDataHelper.getContent(w); - wikittyFile.createNewFile(); + extension = extensionFormimeType(mime); - FileUtil.byteToFile(content, wikittyFile); + wikittyFile = new File(path + File.separator + name + + "." + extension); - } else if (w.hasExtension(WikittyPubText.EXT_WIKITTYPUBTEXT)) { - name = WikittyPubTextHelper.getName(w); - String mime = WikittyPubTextHelper.getMimeType(w); - String content = WikittyPubTextHelper.getContent(w); + wikittyFile.createNewFile(); - extension = extensionFormimeType(mime); + FileUtil.byteToFile(content, wikittyFile); - wikittyFile = new File(path + File.separator + name + "." - + extension); + } else if (w + .hasExtension(WikittyPubText.EXT_WIKITTYPUBTEXT)) { + name = WikittyPubTextHelper.getName(w); + String mime = WikittyPubTextHelper.getMimeType(w); + String content = WikittyPubTextHelper.getContent(w); - wikittyFile.createNewFile(); + extension = extensionFormimeType(mime); - FileUtil.writeString(wikittyFile, content); - } + wikittyFile = new File(path + File.separator + name + + "." + extension); - if (wikittyFile != null) { - // prepare for checksum - BufferedInputStream input = new BufferedInputStream( - new FileInputStream(wikittyFile)); + wikittyFile.createNewFile(); - byte[] byt = MD5InputStream.hash(input); + FileUtil.writeString(wikittyFile, content); + } - String localMd5 = StringUtil.asHex(byt); + if (wikittyFile != null) { + // prepare for checksum + BufferedInputStream input = new BufferedInputStream( + new FileInputStream(wikittyFile)); - // 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), ""); + 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), ""); + } } } @@ -332,7 +336,8 @@ // StringUtil.encodeMD5(toEncode) } catch (Exception e) { - + e.printStackTrace(); + //TODO mfortun-2011-04-12 really handle exceptions } WikittyEvent result = new WikittyEvent(this); @@ -591,4 +596,34 @@ } } + /** + * Creates all the file system require from a label path in the working + * directory + * + * @param label + * the path string + * @param starts + * the working directory + * @return if all the path was created + * @throws Exception + */ + static public boolean createFilesFromLabelPath(String label, File starts) + throws Exception { + String[] pathElements = StringUtil.split(label, "."); + + boolean result = false; + + if (starts.exists() && starts.isDirectory()) { + String path = starts.getCanonicalPath(); + + for (int i = 0; i < pathElements.length; i++) { + + path = path + File.separator + pathElements[i]; + File temp = new File(path); + result = result && FileUtil.createDirectoryIfNecessary(temp); + } + } + + return result; + } }