Author: mfortun Date: 2011-08-16 11:50:46 +0200 (Tue, 16 Aug 2011) New Revision: 1156 Url: http://nuiton.org/repositories/revision/wikitty/1156 Log: *reorganize packaging *handling java mime into eval mechanism Added: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/AbstractDecoredClass.java trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/CodeDecorator.java Removed: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/UiCodeDecorator.java trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/externalize/AbstractDecoredClass.java Modified: trunk/wikitty-publication-ui/src/main/java/org/nuiton/wikitty/publication/ui/action/PublicationActionEdit.java trunk/wikitty-publication-ui/src/main/java/org/nuiton/wikitty/publication/ui/action/PublicationActionEval.java trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/MimeTypePubHelper.java trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/externalize/WikittyPublicationClassLoader.java 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 Copied: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/AbstractDecoredClass.java (from rev 1151, trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/externalize/AbstractDecoredClass.java) =================================================================== --- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/AbstractDecoredClass.java (rev 0) +++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/AbstractDecoredClass.java 2011-08-16 09:50:46 UTC (rev 1156) @@ -0,0 +1,23 @@ +package org.nuiton.wikitty.publication; + +import java.util.Map; + + +/** + * Abstract class for the skeleton and signature for wikittyPubText content + * transform and compile as Java class. + * + * This class allow the evaluator engine to call the eval method to return + * the result of the compiled code from the wikitty pub text content. + * + * + * @author mfortun + * + */ +public abstract class AbstractDecoredClass { + + + public abstract Object eval(Map<String, Object> bindings) throws Exception ; + + +} Copied: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/CodeDecorator.java (from rev 1151, trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/UiCodeDecorator.java) =================================================================== --- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/CodeDecorator.java (rev 0) +++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/CodeDecorator.java 2011-08-16 09:50:46 UTC (rev 1156) @@ -0,0 +1,254 @@ +package org.nuiton.wikitty.publication; + +import java.io.IOException; +import java.io.StringReader; +import java.io.StringWriter; +import java.util.HashMap; +import java.util.Map; + +import org.apache.commons.lang.StringEscapeUtils; +import org.apache.commons.lang.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.processor.Processor; +import org.nuiton.processor.filters.GeneratorTemplatesFilter; +import org.nuiton.processor.filters.GeneratorTemplatesFilterIn; +import org.nuiton.util.StringUtil; +import org.nuiton.wikitty.entities.Wikitty; +import org.nuiton.wikitty.publication.entities.WikittyPubText; +import org.nuiton.wikitty.publication.entities.WikittyPubTextHelper; +import org.nuiton.wikitty.search.operators.Element; + +public class CodeDecorator { + + static private Log log = LogFactory + .getLog(CodeDecorator.class); + + /* + * Après le script engine le ui Code décorateur + * + * décorer à l'inverse en fait transformer du html en js qui contient du + * html par exemple + * + * regex for html end token need to add /n at the end + * "</[\\w\\d]*>" + */ + + protected String DEFAULT_MIME_TYPE_RETURN = "text/html"; + protected String MIME_SEP = "/"; + + protected Map<String, FilterOption> filtersOptions; + + + static protected FilterOption defaultFilterOption; + + static { + defaultFilterOption = new FilterOption(); + defaultFilterOption.setOpeningTemplate("var result=\""); + defaultFilterOption.setWriteString("result"); + defaultFilterOption.setStringDelim("\""); + defaultFilterOption.setConcatChar("+"); + defaultFilterOption.setEndingCar(";"); + defaultFilterOption.setClosingWriterChar(""); + defaultFilterOption.setOpeningWriterChar("+="); + defaultFilterOption.setClosingTemplate("\";"); + defaultFilterOption.setMimeType("application/javascript"); + + + + } + + public CodeDecorator() { + filtersOptions = new HashMap<String, FilterOption>(); + + + // add basic value js and htmlp + filtersOptions.put("html.javascript", defaultFilterOption); + + } + + public Wikitty transformPubUIToPubText(Wikitty wikitty) throws IOException { + + if (!wikitty.hasExtension(WikittyPubText.EXT_WIKITTYPUBTEXT)) { + return wikitty; + } + + GeneratorTemplatesFilter filter = new GeneratorTemplatesFilter(); + GeneratorTemplatesFilterIn filterIn = new GeneratorTemplatesFilterIn( + filter); + + String mime = WikittyPubTextHelper.getMimeType(wikitty); + String initialVersion = wikitty.getVersion(); + + /* + * changement de mime type changement de + */ + /* + * Fonction du mime type + */ + + String[] mimeTab = StringUtil.split(mime, MIME_SEP); + + FilterOption foption = filtersOptions.get(mimeTab[1]); + if (foption == null) { + foption = defaultFilterOption; + } + + filterIn.setConcacChar(foption.getConcatChar()); + filterIn.setStringDelim(foption.getStringDelim()); + filterIn.getParent().setWriteString(foption.getWriteString()); + filterIn.setEndCar(foption.getEndingCar()); + filterIn.setOpeningWriterChar(foption.getOpeningWriterChar()); + filterIn.setClosingWriterChar(foption.getClosingWriterChar()); + + String decoringAffect = foption.getOpeningTemplate(); + // initialize new content + String decoredContent = StringUtils.EMPTY; + + // set default content result (override if wikitty content define it) + decoredContent += WikittyPublicationConstant.CONTEXT_VAR + + ".setContentType(\"" + DEFAULT_MIME_TYPE_RETURN + "\")" + + foption.getEndingCar(); + + Processor proc = new Processor(); + proc.setInputFilter(filterIn); + + StringWriter writer = new StringWriter(); + String content = WikittyPubTextHelper.getContent(wikitty); + StringReader reader = new StringReader(content); + // process string + proc.process(reader, writer); + + decoredContent += decoringAffect; + // replace element between <% %> and <%= %> + decoredContent += writer.toString(); + + // end of string + decoredContent += foption.getClosingTemplate(); + // set the content + WikittyPubTextHelper.setContent(wikitty, decoredContent); + // get associated mimeType and set it + WikittyPubTextHelper.setMimeType(wikitty, foption.getMimeType()); + // restore version + wikitty.setVersion(initialVersion); + + return wikitty; + } + + public boolean isTransformationNeeded(Wikitty wikitty) { + if (!wikitty.hasExtension(WikittyPubText.EXT_WIKITTYPUBTEXT)) { + return false; + } + String mime = WikittyPubTextHelper.getMimeType(wikitty); + return isMimeTypeUi(mime); + } + + + public boolean isTransformationNeeded(WikittyPubText wikitty) { + String mime = wikitty.getMimeType(); + return isMimeTypeUi(mime); + } + + + public boolean isMimeTypeUi(String mime){ + MimeTypePubHelper helper = new MimeTypePubHelper(); + String mimeKeyOption = helper.pubUiMimeToConverterOption(mime); + return filtersOptions.containsKey(mimeKeyOption); + } + + public boolean isDecorated(String string) { + return filtersOptions.containsKey(string); + + } + + + /** + * Use to transform wikittyPubText.content into compilable Java + * @param wikitty the wikitty pub text + * @return the java code + */ + public String getCode(Wikitty wikitty) { + + if (isTransformationNeeded(wikitty)) { + try { + wikitty = transformPubUIToPubText(wikitty); + } catch (IOException e) { + log.debug("Error while transform ui"); + } + } + + String content = WikittyPubTextHelper.getContent(wikitty); + String mimeType = WikittyPubTextHelper.getMimeType(wikitty); + String className = WikittyPubTextHelper.getName(wikitty);// +"PublicationClass"; + String classContent = StringUtils.EMPTY; + + // Set<String> labels = (Set<String>) + // wikitty.getField(WikittyLabel.EXT_WIKITTYLABEL, + // WikittyLabel.FIELD_WIKITTYLABEL_LABELS); + // classContent += "package org.nuiton.wikitty.publication;" ; + // classContent += "package "+ labels.toArray()[0].toString() +";"; + classContent += "import org.apache.commons.logging.Log;"; + classContent += "import org.apache.commons.logging.LogFactory;"; + classContent += "import org.nuiton.wikitty.ScriptEvaluator;"; + classContent += "import " + AbstractDecoredClass.class.getName() + ";"; + classContent += "import org.nuiton.wikitty.entities.*;"; + classContent += "import org.nuiton.wikitty.publication.entities.*;"; + classContent += "import org.nuiton.wikitty.publication.action.*;"; + classContent += "import java.util.*;"; + + classContent += "public class " + className + " extends " + + AbstractDecoredClass.class.getSimpleName() + " {"; + + classContent += "public Object eval(Map<String, Object> bindings ) throws Exception {"; + + // TODO mfortun-2011-07-08 write a better "filter" must isolate specific + // mime type that correspond to precompilable langague + classContent += "Object result = null;"; + classContent += "String content = \"" + + StringEscapeUtils.escapeJava(content) + "\";"; + classContent += "String mimeType = \"" + + StringEscapeUtils.escapeJava(mimeType) + "\";"; + classContent += "String criteriaName= \"" + Element.ELT_ID + ":" + + wikitty.getId() + "\";"; + classContent += " result = ScriptEvaluator.eval(null, criteriaName, content, mimeType, bindings);"; + classContent += "return result;"; + + if (mimeType.equals(MimeTypePubHelper.JAVA_TYPE)){ + + /* + * Iterate on element that must be in the context and write + * + * classContent = "+type+" "+name+" = bindings.get(\""+name+"\");"; + * + * ? + */ + // contruct variables that can be used inside the java code. + classContent = "PublicationContext " + + WikittyPublicationConstant.CONTEXT_VAR + + " = bindings.get(\"" + + WikittyPublicationConstant.CONTEXT_VAR + "\");"; + classContent = "WikittyPublicationConstant " + + WikittyPublicationConstant.EVAL_VAR + + " = bindings.get(\"" + + WikittyPublicationConstant.EVAL_VAR + "\");"; + classContent = "String " + WikittyPublicationConstant.PAGE_NAME_VAR + + " = bindings.get(\"" + + WikittyPublicationConstant.PAGE_NAME_VAR + "\");"; + classContent = "List<String> " + + WikittyPublicationConstant.SUBCONTEXT_VAR + + " = bindings.get(\"" + + WikittyPublicationConstant.SUBCONTEXT_VAR + "\");"; + classContent = "Wikitty " + WikittyPublicationConstant.WIKITTY_VAR + + " = bindings.get(\"" + + WikittyPublicationConstant.WIKITTY_VAR + "\");"; + + classContent += content; + + } + + classContent += "\n}\n}\n"; + + return classContent; + } + +} Modified: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/MimeTypePubHelper.java =================================================================== --- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/MimeTypePubHelper.java 2011-08-16 09:23:21 UTC (rev 1155) +++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/MimeTypePubHelper.java 2011-08-16 09:50:46 UTC (rev 1156) @@ -56,7 +56,7 @@ // change this to a handler to have specific langage compiler as jython etc protected List<String> compilable; protected ScriptEngineManager manager; - protected UiCodeDecorator decorator; + protected CodeDecorator decorator; static public String COMMON_MIME_SEP ="/"; static public String PUBLICATION_MIME_SEP="."; @@ -78,7 +78,7 @@ public static String DEFAULT_MIME_TYPE = "application/octet-stream"; public MimeTypePubHelper() { - decorator = new UiCodeDecorator(); + decorator = new CodeDecorator(); compilable = new LinkedList<String>(); bidiMap = new DualHashBidiMap(); manager = ScriptEvaluator.getScriptEnginManager(null); Deleted: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/UiCodeDecorator.java =================================================================== --- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/UiCodeDecorator.java 2011-08-16 09:23:21 UTC (rev 1155) +++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/UiCodeDecorator.java 2011-08-16 09:50:46 UTC (rev 1156) @@ -1,157 +0,0 @@ -package org.nuiton.wikitty.publication; - -import java.io.IOException; -import java.io.StringReader; -import java.io.StringWriter; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.lang.StringUtils; -import org.nuiton.processor.Processor; -import org.nuiton.processor.filters.GeneratorTemplatesFilter; -import org.nuiton.processor.filters.GeneratorTemplatesFilterIn; -import org.nuiton.util.StringUtil; -import org.nuiton.wikitty.entities.Wikitty; -import org.nuiton.wikitty.publication.entities.WikittyPubText; -import org.nuiton.wikitty.publication.entities.WikittyPubTextHelper; - -public class UiCodeDecorator { - - /* - * Après le script engine le ui Code décorateur - * - * décorer à l'inverse en fait transformer du html en js qui contient du - * html par exemple - * - * regex for html end token need to add /n at the end - * "</[\\w\\d]*>" - */ - - protected String DEFAULT_MIME_TYPE_RETURN = "text/html"; - protected String MIME_SEP = "/"; - - protected Map<String, FilterOption> filtersOptions; - - - static protected FilterOption defaultFilterOption; - - static { - defaultFilterOption = new FilterOption(); - defaultFilterOption.setOpeningTemplate("var result=\""); - defaultFilterOption.setWriteString("result"); - defaultFilterOption.setStringDelim("\""); - defaultFilterOption.setConcatChar("+"); - defaultFilterOption.setEndingCar(";"); - defaultFilterOption.setClosingWriterChar(""); - defaultFilterOption.setOpeningWriterChar("+="); - defaultFilterOption.setClosingTemplate("\";"); - defaultFilterOption.setMimeType("application/javascript"); - - - - } - - public UiCodeDecorator() { - filtersOptions = new HashMap<String, FilterOption>(); - - - // add basic value js and htmlp - filtersOptions.put("html.javascript", defaultFilterOption); - - } - - public Wikitty transformPubUIToPubText(Wikitty wikitty) throws IOException { - - if (!wikitty.hasExtension(WikittyPubText.EXT_WIKITTYPUBTEXT)) { - return wikitty; - } - - GeneratorTemplatesFilter filter = new GeneratorTemplatesFilter(); - GeneratorTemplatesFilterIn filterIn = new GeneratorTemplatesFilterIn( - filter); - - String mime = WikittyPubTextHelper.getMimeType(wikitty); - String initialVersion = wikitty.getVersion(); - - /* - * changement de mime type changement de - */ - /* - * Fonction du mime type - */ - - String[] mimeTab = StringUtil.split(mime, MIME_SEP); - - FilterOption foption = filtersOptions.get(mimeTab[1]); - if (foption == null) { - foption = defaultFilterOption; - } - - filterIn.setConcacChar(foption.getConcatChar()); - filterIn.setStringDelim(foption.getStringDelim()); - filterIn.getParent().setWriteString(foption.getWriteString()); - filterIn.setEndCar(foption.getEndingCar()); - filterIn.setOpeningWriterChar(foption.getOpeningWriterChar()); - filterIn.setClosingWriterChar(foption.getClosingWriterChar()); - - String decoringAffect = foption.getOpeningTemplate(); - // initialize new content - String decoredContent = StringUtils.EMPTY; - - // set default content result (override if wikitty content define it) - decoredContent += WikittyPublicationConstant.CONTEXT_VAR - + ".setContentType(\"" + DEFAULT_MIME_TYPE_RETURN + "\")" - + foption.getEndingCar(); - - Processor proc = new Processor(); - proc.setInputFilter(filterIn); - - StringWriter writer = new StringWriter(); - String content = WikittyPubTextHelper.getContent(wikitty); - StringReader reader = new StringReader(content); - // process string - proc.process(reader, writer); - - decoredContent += decoringAffect; - // replace element between <% %> and <%= %> - decoredContent += writer.toString(); - - // end of string - decoredContent += foption.getClosingTemplate(); - // set the content - WikittyPubTextHelper.setContent(wikitty, decoredContent); - // get associated mimeType and set it - WikittyPubTextHelper.setMimeType(wikitty, foption.getMimeType()); - // restore version - wikitty.setVersion(initialVersion); - - return wikitty; - } - - public boolean isTransformationNeeded(Wikitty wikitty) { - if (!wikitty.hasExtension(WikittyPubText.EXT_WIKITTYPUBTEXT)) { - return false; - } - String mime = WikittyPubTextHelper.getMimeType(wikitty); - return isMimeTypeUi(mime); - } - - - public boolean isTransformationNeeded(WikittyPubText wikitty) { - String mime = wikitty.getMimeType(); - return isMimeTypeUi(mime); - } - - - public boolean isMimeTypeUi(String mime){ - MimeTypePubHelper helper = new MimeTypePubHelper(); - String mimeKeyOption = helper.pubUiMimeToConverterOption(mime); - return filtersOptions.containsKey(mimeKeyOption); - } - - public boolean isDecorated(String string) { - return filtersOptions.containsKey(string); - - } - -} Deleted: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/externalize/AbstractDecoredClass.java =================================================================== --- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/externalize/AbstractDecoredClass.java 2011-08-16 09:23:21 UTC (rev 1155) +++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/externalize/AbstractDecoredClass.java 2011-08-16 09:50:46 UTC (rev 1156) @@ -1,23 +0,0 @@ -package org.nuiton.wikitty.publication.externalize; - -import java.util.Map; - - -/** - * Abstract class for the skeleton and signature for wikittyPubText content - * transform and compile as Java class. - * - * This class allow the evaluator engine to call the eval method to return - * the result of the compiled code from the wikitty pub text content. - * - * - * @author mfortun - * - */ -public abstract class AbstractDecoredClass { - - - public abstract Object eval(Map<String, Object> bindings) throws Exception ; - - -} Modified: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/externalize/WikittyPublicationClassLoader.java =================================================================== --- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/externalize/WikittyPublicationClassLoader.java 2011-08-16 09:23:21 UTC (rev 1155) +++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/externalize/WikittyPublicationClassLoader.java 2011-08-16 09:50:46 UTC (rev 1156) @@ -26,4 +26,21 @@ return defineClass(name, b, off, len); } + + /* + * Réutiliser cette classe pour la création du class loader pour wikitty publication + * + * + * Charger tout les jar contenu dans le wikitty publication en fonction du context + * et du context apps. + * + * faire un md5 du contenu de tout les wikittypubcontenant les jar. + * et si il est différent de celui qu'on devrait avoir on reload + * sinon on réutilise les jar. + * + * mettre les jar dans un dossier ? + * + * + */ + } 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-08-16 09:23:21 UTC (rev 1155) +++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/externalize/WikittyPublicationExternalize.java 2011-08-16 09:50:46 UTC (rev 1156) @@ -19,7 +19,7 @@ import org.nuiton.wikitty.entities.WikittyLabelHelper; import org.nuiton.wikitty.publication.MimeTypePubHelper; import org.nuiton.wikitty.publication.PropertiesExtended; -import org.nuiton.wikitty.publication.UiCodeDecorator; +import org.nuiton.wikitty.publication.CodeDecorator; import org.nuiton.wikitty.publication.WikittyFileUtil; import org.nuiton.wikitty.publication.WikittyPublicationConstant; import org.nuiton.wikitty.publication.entities.WikittyPubData; @@ -97,7 +97,7 @@ static public void externalize(ApplicationConfig conf, Criteria crit) throws ArgumentsParserException, IOException { - + CodeDecorator decorator = new CodeDecorator(); MimeTypePubHelper mimeHelper = new MimeTypePubHelper(); File currentFile = new File("."); @@ -186,7 +186,7 @@ File javaFile = new File(tempDirectory.getAbsolutePath() + File.separator + labelPath + name + SOURCE_EXTENSION); javaFile.createNewFile(); - String codeClass = getCode(wikit); + String codeClass = decorator.getCode(wikit); FileUtil.writeString(javaFile, codeClass); File classDirectory = new File(tempDirectory.getAbsolutePath() @@ -259,89 +259,6 @@ * en jar et on va supprimer le dossier tempJar */ - public static String getCode(Wikitty wikitty) { - MimeTypePubHelper mimeHelper = new MimeTypePubHelper(); - UiCodeDecorator uidecDecorator = new UiCodeDecorator(); - if (uidecDecorator.isTransformationNeeded(wikitty)) { - try { - wikitty = uidecDecorator.transformPubUIToPubText(wikitty); - } catch (IOException e) { - log.debug("Error while transform ui"); - } - } + - String content = WikittyPubTextHelper.getContent(wikitty); - String mimeType = WikittyPubTextHelper.getMimeType(wikitty); - String className = WikittyPubTextHelper.getName(wikitty);// +"PublicationClass"; - String classContent = StringUtils.EMPTY; - - // Set<String> labels = (Set<String>) - // wikitty.getField(WikittyLabel.EXT_WIKITTYLABEL, - // WikittyLabel.FIELD_WIKITTYLABEL_LABELS); - // classContent += "package org.nuiton.wikitty.publication;" ; - // classContent += "package "+ labels.toArray()[0].toString() +";"; - classContent += "import org.apache.commons.logging.Log;"; - classContent += "import org.apache.commons.logging.LogFactory;"; - classContent += "import org.nuiton.wikitty.ScriptEvaluator;"; - classContent += "import " + AbstractDecoredClass.class.getName() + ";"; - classContent += "import org.nuiton.wikitty.entities.*;"; - classContent += "import org.nuiton.wikitty.publication.entities.*;"; - classContent += "import org.nuiton.wikitty.publication.action.*;"; - classContent += "import java.util.*;"; - - classContent += "public class " + className + " extends " - + AbstractDecoredClass.class.getSimpleName() + " {"; - - classContent += "public Object eval(Map<String, Object> bindings ) throws Exception {"; - - // TODO mfortun-2011-07-08 write a better "filter" must isolate specific - // mime type that correspond to precompilable langague - classContent += "Object result = null;"; - classContent += "String content = \"" - + StringEscapeUtils.escapeJava(content) + "\";"; - classContent += "String mimeType = \"" - + StringEscapeUtils.escapeJava(mimeType) + "\";"; - classContent += "String criteriaName= \"" + Element.ELT_ID + ":" - + wikitty.getId() + "\";"; - classContent += " result = ScriptEvaluator.eval(null, criteriaName, content, mimeType, bindings);"; - classContent += "return result;"; - - if (mimeType.equals(MimeTypePubHelper.JAVA_TYPE)){ - - /* - * Iterate on element that must be in the context and write - * - * classContent = "+type+" "+name+" = bindings.get(\""+name+"\");"; - * - * ? - */ - // contruct variables that can be used inside the java code. - classContent = "PublicationContext " - + WikittyPublicationConstant.CONTEXT_VAR - + " = bindings.get(\"" - + WikittyPublicationConstant.CONTEXT_VAR + "\");"; - classContent = "WikittyPublicationConstant " - + WikittyPublicationConstant.EVAL_VAR - + " = bindings.get(\"" - + WikittyPublicationConstant.EVAL_VAR + "\");"; - classContent = "String " + WikittyPublicationConstant.PAGE_NAME_VAR - + " = bindings.get(\"" - + WikittyPublicationConstant.PAGE_NAME_VAR + "\");"; - classContent = "List<String> " - + WikittyPublicationConstant.SUBCONTEXT_VAR - + " = bindings.get(\"" - + WikittyPublicationConstant.SUBCONTEXT_VAR + "\");"; - classContent = "Wikitty " + WikittyPublicationConstant.WIKITTY_VAR - + " = bindings.get(\"" - + WikittyPublicationConstant.WIKITTY_VAR + "\");"; - - classContent += content; - - } - - 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-08-16 09:23:21 UTC (rev 1155) +++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/externalize/WikittyServiceJarLoader.java 2011-08-16 09:50:46 UTC (rev 1156) @@ -48,6 +48,7 @@ public class WikittyServiceJarLoader extends AbstractWikittyFileService { public static String JAR_LOCATION_KEY = "wikitty.publication.repository.jar"; + public static String JARS_LOCATION_KEY = "wikitty.publication.repository.jars"; /** Class logger. */ private static Log log = LogFactory.getLog(WikittyServiceJarLoader.class); Modified: trunk/wikitty-publication-ui/src/main/java/org/nuiton/wikitty/publication/ui/action/PublicationActionEdit.java =================================================================== --- trunk/wikitty-publication-ui/src/main/java/org/nuiton/wikitty/publication/ui/action/PublicationActionEdit.java 2011-08-16 09:23:21 UTC (rev 1155) +++ trunk/wikitty-publication-ui/src/main/java/org/nuiton/wikitty/publication/ui/action/PublicationActionEdit.java 2011-08-16 09:50:46 UTC (rev 1156) @@ -131,13 +131,13 @@ } if (wikitty == null) { - System.out.println("ici"); + // si le wikitty est null, et qu'on etait pas en edition // cela signifie qu'on ne retrouve pas le wikitty a editer // on creer un nouveau wikitty vide que l'on editera wikitty = new WikittyImpl(); } else { - System.out.println("on passe en set"); + // on met a jour le wikitty avec les infos trouvees dans les // arguments @@ -249,7 +249,6 @@ } - System.out.println("tehre" + isStore); if (isStore) { log.info("store requested"); log.debug(wikitty); Modified: trunk/wikitty-publication-ui/src/main/java/org/nuiton/wikitty/publication/ui/action/PublicationActionEval.java =================================================================== --- trunk/wikitty-publication-ui/src/main/java/org/nuiton/wikitty/publication/ui/action/PublicationActionEval.java 2011-08-16 09:23:21 UTC (rev 1155) +++ trunk/wikitty-publication-ui/src/main/java/org/nuiton/wikitty/publication/ui/action/PublicationActionEval.java 2011-08-16 09:50:46 UTC (rev 1156) @@ -1,32 +1,40 @@ package org.nuiton.wikitty.publication.ui.action; import com.opensymphony.xwork2.ActionContext; + +import org.apache.commons.io.FileUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts2.interceptor.ServletRequestAware; import org.apache.struts2.interceptor.ServletResponseAware; +import org.nuiton.util.FileUtil; import org.nuiton.util.StringUtil; import org.nuiton.wikitty.ScriptEvaluator; import org.nuiton.wikitty.WikittyProxy; import org.nuiton.wikitty.WikittyService; import org.nuiton.wikitty.entities.Wikitty; -import org.nuiton.wikitty.publication.UiCodeDecorator; +import org.nuiton.wikitty.publication.AbstractDecoredClass; +import org.nuiton.wikitty.publication.CodeDecorator; +import org.nuiton.wikitty.publication.MimeTypePubHelper; import org.nuiton.wikitty.publication.WikittyPublicationConstant; import org.nuiton.wikitty.publication.entities.WikittyPubData; import org.nuiton.wikitty.publication.entities.WikittyPubDataHelper; import org.nuiton.wikitty.publication.entities.WikittyPubText; import org.nuiton.wikitty.publication.entities.WikittyPubTextCompiled; 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.externalize.AbstractDecoredClass; +import org.nuiton.wikitty.publication.externalize.CompileHelper; import org.nuiton.wikitty.publication.externalize.WikittyPublicationClassLoader; import org.nuiton.wikitty.search.Criteria; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.ByteArrayInputStream; +import java.io.File; import java.io.IOException; import java.io.InputStream; +import java.io.PrintWriter; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -44,6 +52,10 @@ /** to use log facility, just put in your code: log.info(\"...\"); */ static private Log log = LogFactory.getLog(PublicationActionEval.class); + static protected String JAVA_TEMP_DIR_NAME = "PublicationJavaEvalDir"; + static protected String JAR_TEMP_DIR_NAME= "PublicationJarRepository"; + static protected String MD5_FILE = "JarMD5"; + protected String contentType; protected HttpServletResponse response; protected HttpServletRequest request; @@ -71,7 +83,8 @@ log.info("path " + subContext); Object result; - + CodeDecorator decorator = new CodeDecorator(); + Criteria criteria = searchCriteria(subContext); if (criteria == null) { @@ -99,8 +112,70 @@ result = String.format("no data found for criteria '%s'", criteria); } else if (w - .hasExtension(WikittyPubTextCompiled.EXT_WIKITTYPUBTEXTCOMPILED)) { + .hasExtension(WikittyPubTextCompiled.EXT_WIKITTYPUBTEXTCOMPILED)|| WikittyPubTextHelper.getMimeType(w).equals(MimeTypePubHelper.JAVA_TYPE)) { + if (WikittyPubTextHelper.getMimeType(w).equals(MimeTypePubHelper.JAVA_TYPE)){ + String name = WikittyPubTextHelper.getName(w); + if (! FileUtils.getTempDirectory().exists()){ + FileUtils.getTempDirectory().mkdir(); + } + + File javaWikittyFile = new File(FileUtils + .getTempDirectory().getAbsolutePath() + + File.separator + JAVA_TEMP_DIR_NAME); + if ( !javaWikittyFile.exists()){ + javaWikittyFile.mkdir(); + } + + String javaContent = decorator.getCode(w); + String content = null; + try { + File javaFile = new File( + javaWikittyFile.getAbsolutePath() + + File.separator + name + ".java"); + + if (javaFile.exists()) { + content = FileUtil.readAsString(javaFile); + } + if (content == null + || !StringUtil.encodeMD5(javaContent).equals( + StringUtil.encodeMD5(content))) { + javaFile.createNewFile(); + FileUtil.writeString(javaFile, javaContent); + + PrintWriter writer = new PrintWriter(System.out); + // compile + CompileHelper.compile(javaWikittyFile, javaFile, + javaWikittyFile, writer); + } + + + File classFile = new File (javaWikittyFile.getAbsolutePath()+File.separator+name+".class"); + + byte[] wikittyByte = FileUtil.fileToByte(classFile); + + w.addExtension(WikittyPubTextCompiledImpl.extensionWikittyPubTextCompiled); + WikittyPubTextCompiledHelper + .setByteCode(w, wikittyByte); + } catch (Exception e) { + // TODO Mfortun-2011-08-16 really handle exception + if (log.isErrorEnabled()){ + log.error( + "Error while transforming wikittyPubText to wikittyPubTextCompiled wikitty:" + + w, e); + } + + result = getError(context); + } + + } + + + + + + + byte[] content = WikittyPubTextCompiledHelper.getByteCode(w); if (content == null) { result = getError(context); @@ -143,7 +218,7 @@ } } else { - UiCodeDecorator decorator = new UiCodeDecorator(); + log.debug("Check if transformed needed"); if (decorator.isTransformationNeeded(w)) { log.debug("transformeneed");