Author: mfortun Date: 2011-07-11 17:37:11 +0200 (Mon, 11 Jul 2011) New Revision: 1074 Url: http://nuiton.org/repositories/revision/wikitty/1074 Log: * add property to save separator used to write label inside properties * implemented restore/exist/is delete/constructor for wikitty service jar loader Modified: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/externalize/WikittyPublicationExternalize.java trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/externalize/WikittyServiceJarLoader.java Modified: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/externalize/WikittyPublicationExternalize.java =================================================================== --- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/externalize/WikittyPublicationExternalize.java 2011-07-11 09:00:59 UTC (rev 1073) +++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/externalize/WikittyPublicationExternalize.java 2011-07-11 15:37:11 UTC (rev 1074) @@ -45,6 +45,7 @@ public static String SOURCE_EXTENSION = ".java"; public static String COMPILED_EXTENSION = ".class"; + public static String PATH_SEPARATOR="path.separator"; /* * Class don't have to be instantiate @@ -100,6 +101,8 @@ PropertiesExtended metaProperties = new PropertiesExtended( filePropertiesMeta); + + metaProperties.setProperty(PATH_SEPARATOR, File.separator); // iterate wikitty // - write file // - write property @@ -296,14 +299,8 @@ } - - - classContent += "\n}\n}\n"; - - - - + return classContent; } Modified: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/externalize/WikittyServiceJarLoader.java =================================================================== --- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/externalize/WikittyServiceJarLoader.java 2011-07-11 09:00:59 UTC (rev 1073) +++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/externalize/WikittyServiceJarLoader.java 2011-07-11 15:37:11 UTC (rev 1074) @@ -1,10 +1,38 @@ package org.nuiton.wikitty.publication.externalize; +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.BufferedReader; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; import java.util.Collection; +import java.util.LinkedList; import java.util.List; +import java.util.Properties; +import java.util.jar.JarEntry; +import java.util.jar.JarFile; +import org.nuiton.util.ApplicationConfig; +import org.nuiton.util.StringUtil; +import org.nuiton.wikitty.WikittyConfigOption; +import org.nuiton.wikitty.WikittyProxy; +import org.nuiton.wikitty.WikittyServiceFactory; import org.nuiton.wikitty.entities.Wikitty; import org.nuiton.wikitty.entities.WikittyExtension; +import org.nuiton.wikitty.entities.WikittyImpl; +import org.nuiton.wikitty.entities.WikittyLabelHelper; +import org.nuiton.wikitty.entities.WikittyLabelImpl; +import org.nuiton.wikitty.publication.entities.WikittyPubDataHelper; +import org.nuiton.wikitty.publication.entities.WikittyPubDataImpl; +import org.nuiton.wikitty.publication.entities.WikittyPubTextCompiledHelper; +import org.nuiton.wikitty.publication.entities.WikittyPubTextCompiledImpl; +import org.nuiton.wikitty.publication.entities.WikittyPubTextHelper; +import org.nuiton.wikitty.publication.entities.WikittyPubTextImpl; import org.nuiton.wikitty.publication.synchro.AbstractWikittyFileService; +import org.nuiton.wikitty.publication.synchro.MimeTypePubHelper; +import org.nuiton.wikitty.publication.synchro.WikittyPublicationFileSystem; import org.nuiton.wikitty.search.Criteria; import org.nuiton.wikitty.search.PagedResult; import org.nuiton.wikitty.search.TreeNodeResult; @@ -15,24 +43,66 @@ * Wikitty service use to load wikitty store inside jar file * * @author mfortun - * + * */ public class WikittyServiceJarLoader extends AbstractWikittyFileService { - - + + public static String JAR_LOCATION_KEY = "wikitty.publication.repository.jar"; + + protected JarFile wikittyJarRepository; + + protected Properties wikittyIndex; + protected Properties wikittyMetadata; + /* * Implementer : - * - * restore - * findByCriteria - * findAllByCriteria - * exist ? * - * - * + * restore findByCriteria findAllByCriteria */ - - + + static public void main(String[] args) { + + ApplicationConfig config = new ApplicationConfig(); + config.setOption(JAR_LOCATION_KEY, + "/home/Manou/testWP/pub-externalized.jar"); + config.setOption( + WikittyConfigOption.WIKITTY_WIKITTYSERVICE_COMPONENTS.getKey(), + WikittyServiceJarLoader.class.getName()); + WikittyProxy proxy = new WikittyProxy( + WikittyServiceFactory.buildWikittyService(config)); + + System.out.println(proxy + .restore("e443dbbe-b461-41bd-b5b6-b612e964cb0d")); + + } + + public WikittyServiceJarLoader(ApplicationConfig config) { + try { + File jarLocation = new File(config.getOption(JAR_LOCATION_KEY)); + + wikittyJarRepository = new JarFile(jarLocation); + + JarEntry metaEntry = wikittyJarRepository + .getJarEntry("meta.properties"); + JarEntry idEntry = wikittyJarRepository + .getJarEntry("ids.properties"); + + wikittyIndex = new Properties(); + wikittyIndex.load(wikittyJarRepository.getInputStream(idEntry)); + + wikittyMetadata = new Properties(); + wikittyMetadata + .load(wikittyJarRepository.getInputStream(metaEntry)); + + System.out.println(wikittyMetadata); + System.out.println(wikittyIndex); + + } catch (IOException e) { + // TODO mfortun-2011-07-11 realy handle exception + e.printStackTrace(); + } + } + @Override public void addWikittyServiceListener(WikittyListener listener, ServiceListenerType type) { @@ -55,7 +125,7 @@ public String login(String login, String password) { // TODO mfortun throw new UnsupportedOperationException("not yet implemented"); - //return null; + // return null; } @@ -71,7 +141,7 @@ public WikittyEvent clear(String securityToken) { // TODO mfortun throw new UnsupportedOperationException("not yet implemented"); - //return null; + // return null; } @@ -79,7 +149,7 @@ public boolean canWrite(String securityToken, Wikitty wikitty) { // TODO mfortun throw new UnsupportedOperationException("not yet implemented"); - //return false; + // return false; } @@ -87,7 +157,7 @@ public boolean canDelete(String securityToken, String wikittyId) { // TODO mfortun throw new UnsupportedOperationException("not yet implemented"); - //return false; + // return false; } @@ -95,24 +165,18 @@ public boolean canRead(String securityToken, String wikittyId) { // TODO mfortun throw new UnsupportedOperationException("not yet implemented"); - //return false; + // return false; } @Override public boolean exists(String securityToken, String wikittyId) { - // TODO mfortun - throw new UnsupportedOperationException("not yet implemented"); - //return false; - + return wikittyIndex.containsKey(wikittyId); } @Override public boolean isDeleted(String securityToken, String wikittyId) { - // TODO mfortun - throw new UnsupportedOperationException("not yet implemented"); - //return false; - + return false; } @Override @@ -120,7 +184,7 @@ boolean force) { // TODO mfortun throw new UnsupportedOperationException("not yet implemented"); - //return null; + // return null; } @@ -129,7 +193,7 @@ Collection<Wikitty> wikitties, boolean force) { // TODO mfortun throw new UnsupportedOperationException("not yet implemented"); - //return null; + // return null; } @@ -137,7 +201,7 @@ public List<String> getAllExtensionIds(String securityToken) { // TODO mfortun throw new UnsupportedOperationException("not yet implemented"); - //return null; + // return null; } @@ -146,7 +210,7 @@ String extensionName) { // TODO mfortun throw new UnsupportedOperationException("not yet implemented"); - //return null; + // return null; } @@ -155,7 +219,7 @@ Collection<WikittyExtension> exts) { // TODO mfortun throw new UnsupportedOperationException("not yet implemented"); - //return null; + // return null; } @@ -164,7 +228,7 @@ Collection<String> extNames) { // TODO mfortun throw new UnsupportedOperationException("not yet implemented"); - //return null; + // return null; } @@ -173,7 +237,7 @@ String extensionId) { // TODO mfortun throw new UnsupportedOperationException("not yet implemented"); - //return null; + // return null; } @@ -182,23 +246,104 @@ String name) { // TODO mfortun throw new UnsupportedOperationException("not yet implemented"); - //return null; + // return null; } @Override - public List<Wikitty> restore(String securityToken, List<String> id) { - // TODO mfortun - throw new UnsupportedOperationException("not yet implemented"); - //return null; + public List<Wikitty> restore(String securityToken, List<String> ids) { + List<Wikitty> result = new LinkedList<Wikitty>(); + + try { + for (String wikittyId : ids) { + // if wikitty doesn't exist jump to the next id + if (!exists(securityToken, wikittyId)) { + + continue; + } + + String fileExtension = wikittyMetadata.getProperty(wikittyId + + WikittyPublicationExternalize.EXTENSION_SUFFIX); + String path = wikittyIndex.getProperty(wikittyId); + String version = wikittyMetadata.getProperty(wikittyId + + WikittyPublicationExternalize.VERSION_SUFFIX); + + JarEntry wikittyJared = wikittyJarRepository.getJarEntry(path + + "." + fileExtension); + + MimeTypePubHelper mimeHelper = new MimeTypePubHelper(); + + Wikitty wikit = new WikittyImpl(wikittyId); + wikit.setVersion(version); + + wikit.addExtension(WikittyLabelImpl.extensionWikittyLabel); + + // set labels computate name + String sep = wikittyMetadata + .getProperty(WikittyPublicationExternalize.PATH_SEPARATOR); + String[] namPath = StringUtil.split(path, sep); + String wikittyName = namPath[namPath.length - 1]; + + String label = ""; + for (int i = 0; i < namPath.length - 1; i++) { + label += namPath[i]; + if (i < namPath.length - 2) { + label += WikittyPublicationFileSystem.WIKITTYLABEL_SEPARATOR; + } + } + + WikittyLabelHelper.addLabels(wikit, label); + + if (mimeHelper.isPubTextMime(fileExtension)) { + // wikitty pub text compiled + wikit.addExtension(WikittyPubTextImpl.extensions); + wikit.addExtension(WikittyPubTextCompiledImpl.extensionWikittyPubTextCompiled); + + // basic field + WikittyPubTextHelper.setFileExtension(wikit, fileExtension); + WikittyPubTextHelper.setMimeType(wikit, + mimeHelper.getMimeForExtension(fileExtension)); + WikittyPubTextHelper.setName(wikit, wikittyName); + + // contents fields: + JarEntry wikittyclass = wikittyJarRepository + .getJarEntry(path + + WikittyPublicationExternalize.COMPILED_EXTENSION); + + WikittyPubTextHelper.setContent(wikit, + getStringContent(wikittyJared)); + WikittyPubTextCompiledHelper.setByteCode(wikit, + this.getByteContent(wikittyclass)); + + } else { + // wikitty pub data + wikit.addExtension(WikittyPubDataImpl.extensionWikittyPubData); + WikittyPubDataHelper.setMimeType(wikit, + mimeHelper.getMimeForExtension(fileExtension)); + + WikittyPubDataHelper.setName(wikit, wikittyName); + + WikittyPubDataHelper.setFileExtension(wikit, fileExtension); + WikittyPubDataHelper.setContent(wikit, + this.getByteContent(wikittyJared)); + } + + result.add(wikit); + } + + } catch (Exception e) { + // TODO mfortun-2011-07-11 really handle exception + e.printStackTrace(); + } + return result; } @Override public WikittyEvent delete(String securityToken, Collection<String> ids) { // TODO mfortun throw new UnsupportedOperationException("not yet implemented"); - //return null; + // return null; } @@ -207,7 +352,7 @@ List<Criteria> criteria) { // TODO mfortun throw new UnsupportedOperationException("not yet implemented"); - //return null; + // return null; } @@ -216,7 +361,7 @@ List<Criteria> criteria) { // TODO mfortun throw new UnsupportedOperationException("not yet implemented"); - //return null; + // return null; } @@ -224,7 +369,7 @@ public WikittyEvent deleteTree(String securityToken, String treeNodeId) { // TODO mfortun throw new UnsupportedOperationException("not yet implemented"); - //return null; + // return null; } @@ -233,7 +378,7 @@ String wikittyId, int depth, boolean count, Criteria filter) { // TODO mfortun throw new UnsupportedOperationException("not yet implemented"); - //return null; + // return null; } @@ -242,7 +387,7 @@ String version) { // TODO mfortun throw new UnsupportedOperationException("not yet implemented"); - //return null; + // return null; } @@ -254,4 +399,43 @@ } + public String getStringContent(JarEntry jarEntry) throws IOException { + BufferedReader buffer = new BufferedReader(new InputStreamReader( + wikittyJarRepository.getInputStream(jarEntry))); + + StringBuffer result = new StringBuffer(); + char[] cbuf = new char[2000]; + + int nb = buffer.read(cbuf); + while (nb != -1) { + result.append(cbuf, 0, nb); + nb = buffer.read(cbuf); + } + buffer.close(); + return result.toString(); + + } + + public byte[] getByteContent(JarEntry jarEnt) throws IOException { + + ByteArrayOutputStream content; + // Extract this to a byte utils ? + InputStream in = new BufferedInputStream( + wikittyJarRepository.getInputStream(jarEnt)); + try { + content = new ByteArrayOutputStream(); + BufferedOutputStream tmp = new BufferedOutputStream(content); + try { + for (int b = in.read(); b != -1; b = in.read()) { + tmp.write(b); + } + } finally { + tmp.close(); + } + } finally { + in.close(); + } + return content.toByteArray(); + } + }