Author: mfortun Date: 2011-08-05 18:06:49 +0200 (Fri, 05 Aug 2011) New Revision: 1110 Url: http://nuiton.org/repositories/revision/wikitty/1110 Log: *correct mimetype handling for java/compilable wikittypubtextcontent *i18n introduction Added: trunk/wikitty-publication/src/main/i18n/ trunk/wikitty-publication/src/main/i18n/jsp.rules trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/ApplicationListener.java trunk/wikitty-publication/src/main/resources/i18n/ trunk/wikitty-publication/src/main/resources/i18n/wikitty-publication_en_GB.properties trunk/wikitty-publication/src/main/resources/i18n/wikitty-publication_fr_FR.properties Modified: trunk/pom.xml trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceFactory.java trunk/wikitty-publication/pom.xml trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/FilterOption.java trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/MimeTypePubHelper.java trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/UiCodeDecorator.java trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationConfig.java trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/externalize/AbstractDecoredClass.java trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/externalize/WikittyPublicationExternalize.java trunk/wikitty-publication/src/main/resources/struts.properties trunk/wikitty-publication/src/main/resources/struts.xml trunk/wikitty-publication/src/main/webapp/WEB-INF/jsp/edit.jsp trunk/wikitty-publication/src/main/webapp/WEB-INF/web.xml trunk/wikitty-publication/src/main/webapp/login.jsp trunk/wikitty-publication/src/main/webapp/register.jsp Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2011-08-04 14:16:32 UTC (rev 1109) +++ trunk/pom.xml 2011-08-05 16:06:49 UTC (rev 1110) @@ -178,6 +178,13 @@ <version>${nuitonUtilsVersion}</version> <scope>compile</scope> </dependency> + + <dependency> + <groupId>org.nuiton.web</groupId> + <artifactId>nuiton-struts2</artifactId> + <version>${nuiton-struts2}</version> + </dependency> + <dependency> <groupId>org.nuiton.i18n</groupId> @@ -539,7 +546,7 @@ <!-- common versions used in sub-poms --> <eugeneVersion>2.3.5</eugeneVersion> <nuitonUtilsVersion>2.2</nuitonUtilsVersion> - <nuitonI18nVersion>2.4</nuitonI18nVersion> + <nuitonI18nVersion>2.4.1</nuitonI18nVersion> <processPluginVersion>1.1</processPluginVersion> <jettyVersion>7.4.2.v20110526</jettyVersion> <struts2jqueryVersion>3.1.0</struts2jqueryVersion> @@ -547,6 +554,7 @@ <javassistVersion>3.8.0.GA</javassistVersion> <jspapiversion>2.1</jspapiversion> + <nuiton-struts2>1.3</nuiton-struts2> <!--Multilanguage maven-site --> <locales>fr,en</locales> Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceFactory.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceFactory.java 2011-08-04 14:16:32 UTC (rev 1109) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceFactory.java 2011-08-05 16:06:49 UTC (rev 1110) @@ -122,7 +122,7 @@ String prefix, Class clazz) { String key = prefix + clazz.getSimpleName() + ".components"; - + // XXX sletellier 13/12/2010 : this code don't compile, provoke an "inconvertible types", // this hack force compiler to not check cast // List<Class<E>> result = (List<Class<E>>) config.getOptionAsList(key).getOptionAsClass(); Modified: trunk/wikitty-publication/pom.xml =================================================================== --- trunk/wikitty-publication/pom.xml 2011-08-04 14:16:32 UTC (rev 1109) +++ trunk/wikitty-publication/pom.xml 2011-08-05 16:06:49 UTC (rev 1110) @@ -16,6 +16,10 @@ <groupId>org.nuiton.wikitty</groupId> <artifactId>wikitty-publication</artifactId> + + <properties> + <i18n.bundleOutputName>wikitty-publication</i18n.bundleOutputName> + </properties> <dependencies> <dependency> @@ -105,9 +109,14 @@ <dependency> <groupId>org.apache.struts.xwork</groupId> <artifactId>xwork-core</artifactId> - </dependency> - + </dependency> + <dependency> + <groupId>org.nuiton.web</groupId> + <artifactId>nuiton-struts2</artifactId> + </dependency> + + <dependency> <groupId>org.nuiton.processor</groupId> <artifactId>nuiton-processor</artifactId> <version>1.2.2-SNAPSHOT</version> @@ -147,6 +156,49 @@ <plugins> <plugin> + <groupId>org.nuiton.i18n</groupId> + <artifactId>maven-i18n-plugin</artifactId> + <version>${nuitonI18nVersion}</version> + <configuration> + <bundles>fr_FR,en_GB</bundles> + </configuration> + <executions> + <execution> + <id>scan-java-sources</id> + <goals> + <goal>parserJava</goal> + </goals> + </execution> + <execution> + <id>scan-jsp-sources</id> + <goals> + <goal>parserJsp</goal> + </goals> + <configuration> + <userRulesFiles> + <file>${basedir}/src/main/i18n/jsp.rules</file> + </userRulesFiles> + <namespaces> + <s>http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd</s> + <sx>http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd</sx> + <sj>http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd</sj> + <jsp>http://java.sun.com/JSP/Page</jsp> + </namespaces> + </configuration> + </execution> + <execution> + <id>gen-and-make-bundle</id> + <goals> + <goal>gen</goal> + <goal>bundle</goal> + </goals> + </execution> + </executions> + </plugin> + + + + <plugin> <groupId>org.nuiton.eugene</groupId> <artifactId>maven-eugene-plugin</artifactId> <executions> Added: trunk/wikitty-publication/src/main/i18n/jsp.rules =================================================================== --- trunk/wikitty-publication/src/main/i18n/jsp.rules (rev 0) +++ trunk/wikitty-publication/src/main/i18n/jsp.rules 2011-08-05 16:06:49 UTC (rev 1110) @@ -0,0 +1,14 @@ +# Règles i18n pour les jsp + +//s:text/@name +//s:submit/@key +//sj:submit/@key +//s:textfield/@key +//s:checkbox/@key +//s:password/@key +//s:file/@key +//s:label/@key +//s:optiontransferselect/@key +//s:select/@key +//sj:head/@key +//s:if/@key \ No newline at end of file Added: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/ApplicationListener.java =================================================================== --- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/ApplicationListener.java (rev 0) +++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/ApplicationListener.java 2011-08-05 16:06:49 UTC (rev 1110) @@ -0,0 +1,40 @@ +package org.nuiton.wikitty.publication; + +import java.util.Locale; + +import javax.servlet.ServletContextEvent; +import javax.servlet.ServletContextListener; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.i18n.I18n; +import org.nuiton.i18n.init.DefaultI18nInitializer; +import org.nuiton.i18n.init.I18nInitializer; + +public class ApplicationListener implements ServletContextListener { + + private static final Log log = LogFactory.getLog(ApplicationListener.class); + + @Override + public void contextInitialized(ServletContextEvent sce) { + + + if (log.isInfoEnabled()) { + log.info("Initializing I18n..."); + } + + I18nInitializer initializer = new DefaultI18nInitializer( + "wikitty-publication"); + + initializer.setMissingKeyReturnNull(true); + + I18n.init(initializer, Locale.FRENCH); + + } + + @Override + public void contextDestroyed(ServletContextEvent sce) { + + } + +} Modified: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/FilterOption.java =================================================================== --- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/FilterOption.java 2011-08-04 14:16:32 UTC (rev 1109) +++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/FilterOption.java 2011-08-05 16:06:49 UTC (rev 1110) @@ -10,9 +10,7 @@ protected String closingWriterChar; protected String closingTemplate; protected String mimeType; - - - + public String getMimeType() { return mimeType; } 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-04 14:16:32 UTC (rev 1109) +++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/MimeTypePubHelper.java 2011-08-05 16:06:49 UTC (rev 1110) @@ -25,6 +25,8 @@ package org.nuiton.wikitty.publication; import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; import java.util.Map; import javax.script.ScriptEngineManager; @@ -45,6 +47,9 @@ * Mapping between extention and mime type, key: extension, value: mimeType */ protected Map<String, String> mapExtensionMime; + // TODO mfortun-2011-08-05 change this, this is a hack + // change this to a handler to have specific langage compiler as jython etc + protected List<String> compilable; protected ScriptEngineManager manager; protected UiCodeDecorator decorator; @@ -56,13 +61,17 @@ public MimeTypePubHelper() { this.mapExtensionMime = new HashMap<String, String>(); decorator = new UiCodeDecorator(); + this.compilable = new LinkedList<String>(); manager = ScriptEvaluator.getScriptEnginManager(null); mapExtensionMime.put("wp", "application/javascript"); mapExtensionMime.put("js", "application/javascript"); + mapExtensionMime.put("htmlp", "htmlp/javascript"); mapExtensionMime.put("jpg", "image/jpeg"); mapExtensionMime.put("png", "image/png"); + mapExtensionMime.put("java", "application/java"); + compilable.add("application/java"); } public Map<String, String> getMapExtensionMime() { @@ -140,4 +149,8 @@ } + public boolean isReallyCompilable(String mimeType){ + return compilable.contains(mimeType); + } + } Modified: 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-04 14:16:32 UTC (rev 1109) +++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/UiCodeDecorator.java 2011-08-05 16:06:49 UTC (rev 1110) @@ -52,7 +52,6 @@ - } public UiCodeDecorator() { Modified: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationConfig.java =================================================================== --- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationConfig.java 2011-08-04 14:16:32 UTC (rev 1109) +++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationConfig.java 2011-08-05 16:06:49 UTC (rev 1110) @@ -54,7 +54,7 @@ public enum Option implements ApplicationConfig.OptionDef { CONFIG_FILE(ApplicationConfig.CONFIG_FILE_NAME, _("wikitty-publication.config.configFileName.description"), - "wikitty-publication-ws-default.properties", String.class, false, + "wikitty-publication-ws-fallback.properties", String.class, false, false); Modified: 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-04 14:16:32 UTC (rev 1109) +++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/externalize/AbstractDecoredClass.java 2011-08-05 16:06:49 UTC (rev 1110) @@ -16,7 +16,7 @@ */ 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/WikittyPublicationExternalize.java =================================================================== --- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/externalize/WikittyPublicationExternalize.java 2011-08-04 14:16:32 UTC (rev 1109) +++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/externalize/WikittyPublicationExternalize.java 2011-08-05 16:06:49 UTC (rev 1110) @@ -17,6 +17,7 @@ import org.nuiton.wikitty.entities.Wikitty; import org.nuiton.wikitty.entities.WikittyLabel; 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.WikittyFileUtil; @@ -253,6 +254,7 @@ */ public static String getCode(Wikitty wikitty) { + MimeTypePubHelper mimeHelper = new MimeTypePubHelper(); UiCodeDecorator uidecDecorator = new UiCodeDecorator(); if (uidecDecorator.isTransformationNeeded(wikitty)) { try { @@ -288,7 +290,7 @@ // TODO mfortun-2011-07-08 write a better "filter" must isolate specific // mime type that correspond to precompilable langague - if (mimeType != "java") { + if (!mimeHelper.isReallyCompilable(mimeType)) { classContent += "Object result = null;"; classContent += "String content = \"" + StringEscapeUtils.escapeJava(content) + "\";"; Added: trunk/wikitty-publication/src/main/resources/i18n/wikitty-publication_en_GB.properties =================================================================== --- trunk/wikitty-publication/src/main/resources/i18n/wikitty-publication_en_GB.properties (rev 0) +++ trunk/wikitty-publication/src/main/resources/i18n/wikitty-publication_en_GB.properties 2011-08-05 16:06:49 UTC (rev 1110) @@ -0,0 +1,5 @@ +publication.login.login=User +publication.login.password=Password +publication.login.repeatPassword=Password +publication.register.submit=Subscribe +wikitty-publication.config.configFileName.description= Added: trunk/wikitty-publication/src/main/resources/i18n/wikitty-publication_fr_FR.properties =================================================================== --- trunk/wikitty-publication/src/main/resources/i18n/wikitty-publication_fr_FR.properties (rev 0) +++ trunk/wikitty-publication/src/main/resources/i18n/wikitty-publication_fr_FR.properties 2011-08-05 16:06:49 UTC (rev 1110) @@ -0,0 +1,5 @@ +publication.login.login=Utilisateur +publication.login.password=Mot de passe +publication.login.repeatPassword=Mot de passe +publication.register.submit=Inscription +wikitty-publication.config.configFileName.description= Modified: trunk/wikitty-publication/src/main/resources/struts.properties =================================================================== --- trunk/wikitty-publication/src/main/resources/struts.properties 2011-08-04 14:16:32 UTC (rev 1109) +++ trunk/wikitty-publication/src/main/resources/struts.properties 2011-08-05 16:06:49 UTC (rev 1110) @@ -39,7 +39,7 @@ struts.url.http.port=80 struts.url.https.port=443 -struts.custom.i18n.resources=chorem-i18n +struts.custom.i18n.resources=wikittypublication-i18n struts.dispatcher.parametersWorkaround=false Modified: trunk/wikitty-publication/src/main/resources/struts.xml =================================================================== --- trunk/wikitty-publication/src/main/resources/struts.xml 2011-08-04 14:16:32 UTC (rev 1109) +++ trunk/wikitty-publication/src/main/resources/struts.xml 2011-08-05 16:06:49 UTC (rev 1110) @@ -4,7 +4,12 @@ "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> + <bean class="org.nuiton.web.struts2.I18nTextProvider" name="i18nTextProvider" + type="com.opensymphony.xwork2.TextProvider" /> + <constant name="struts.xworkTextProvider" value="i18nTextProvider" /> + + <constant name="struts.devMode" value="true" /> <constant name="struts.ognl.allowStaticMethodAccess" value="true" /> <constant name="struts.enable.SlashesInActionNames" value="true" /> @@ -15,7 +20,7 @@ <interceptors> <interceptor-stack name="publicAreaStack"> <interceptor-ref name="defaultStack"> - <param name="fileUpload.maximumSize">104857600</param> + <param name="fileUpload.maximumSize">104857600</param> </interceptor-ref> </interceptor-stack> </interceptors> @@ -109,9 +114,10 @@ </package> <package name="fragment" namespace="/fragment" extends="publicArea"> - <action name="wikittyInfo" class="org.nuiton.wikitty.publication.action.PublicationActionRestoreWikitty"> + <action name="wikittyInfo" + class="org.nuiton.wikitty.publication.action.PublicationActionRestoreWikitty"> <result>/WEB-INF/jsp/wikittyInfo.jsp</result> </action> </package> - + </struts> Modified: trunk/wikitty-publication/src/main/webapp/WEB-INF/jsp/edit.jsp =================================================================== --- trunk/wikitty-publication/src/main/webapp/WEB-INF/jsp/edit.jsp 2011-08-04 14:16:32 UTC (rev 1109) +++ trunk/wikitty-publication/src/main/webapp/WEB-INF/jsp/edit.jsp 2011-08-05 16:06:49 UTC (rev 1110) @@ -28,6 +28,7 @@ Author : poussin --%> +<%@page import="org.nuiton.i18n.I18n"%> <%@page import="org.nuiton.wikitty.publication.CodeMirrorWrapper"%> <%@page import="org.nuiton.wikitty.publication.SelectOption"%> <%@page import="org.nuiton.wikitty.publication.action.PublicationActionEdit"%> @@ -45,6 +46,7 @@ PublicationActionEdit action = PublicationActionEdit.getAction(); Wikitty wikitty = action.getWikitty(); +I18n.init(null, null); CodeMirrorWrapper wrapper = new CodeMirrorWrapper(request.getContextPath(),"/js/codemirror-ui/", "lib/CodeMirror-2.0/mode"); @@ -100,6 +102,7 @@ Collection<String> allExt = proxy.getAllExtensionIds(); if (allExt != null && allExt.size() > 0) { %> + <select name="newExtension" size="1"> <option value="" selected="true"></option> <% @@ -116,7 +119,8 @@ <% } %> - <input type="submit" name="addExtension" value="Add" /> + + <input type="submit" name="addExtension" value="<%=I18n._("publication.edit.addExtension")%>" /> </fieldset> <% @@ -212,7 +216,8 @@ <% } %> - <input type="submit" name="store" value="Store" /> - <input type="submit" name="delete" value="Delete" /> + + <input type="submit" name="store" value="<%=I18n._("publication.edit.save")%>" /> + <input type="submit" name="delete" value="<%=I18n._("publication.edit.delete")%>" /> </form> \ No newline at end of file Modified: trunk/wikitty-publication/src/main/webapp/WEB-INF/web.xml =================================================================== --- trunk/wikitty-publication/src/main/webapp/WEB-INF/web.xml 2011-08-04 14:16:32 UTC (rev 1109) +++ trunk/wikitty-publication/src/main/webapp/WEB-INF/web.xml 2011-08-05 16:06:49 UTC (rev 1110) @@ -21,6 +21,12 @@ <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> + + <listener> + <description>Init</description> + <listener-class>org.nuiton.wikitty.publication.ApplicationListener</listener-class> + </listener> + <filter-mapping> <filter-name>action2-cleanup</filter-name> @@ -35,14 +41,16 @@ <url-pattern>/*</url-pattern> </filter-mapping> - <!-- Servlets --> + + <!-- Welcome file lists --> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> + </web-app> \ No newline at end of file Modified: trunk/wikitty-publication/src/main/webapp/login.jsp =================================================================== --- trunk/wikitty-publication/src/main/webapp/login.jsp 2011-08-04 14:16:32 UTC (rev 1109) +++ trunk/wikitty-publication/src/main/webapp/login.jsp 2011-08-05 16:06:49 UTC (rev 1110) @@ -25,14 +25,25 @@ <s:form action="login"> <p> + <s:set id="publication.login.login"> + <s:text name="publication.login.login" /> + </s:set> + <s:set id="publication.login.password"> + <s:text name="publication.login.password" /> + </s:set> + <s:set id="publication.login.submit"> + <s:text name="publication.login.submit" /> + </s:set> + <input type="hidden" name="success" value="<%=successValue%>" /> <input type="hidden" name="error" value="<%=errorValue%>" /> <s:textfield key="login" name="login" labelposition="top" - labelSeparator=" :" /> + labelSeparator=" :" label="%{publication.login.login}" /> <br /> <br /> <s:password key="password" name="password" labelposition="top" - labelSeparator=" :" /> + labelSeparator=" :" label="%{publication.login.password}" /> <br /> <br /> - <s:submit key="publication.login.submit" name="submit" /> + <s:submit key="publication.login.submit" name="submit" + value="%{publication.login.submit}" /> </p> </s:form> \ No newline at end of file Modified: trunk/wikitty-publication/src/main/webapp/register.jsp =================================================================== --- trunk/wikitty-publication/src/main/webapp/register.jsp 2011-08-04 14:16:32 UTC (rev 1109) +++ trunk/wikitty-publication/src/main/webapp/register.jsp 2011-08-05 16:06:49 UTC (rev 1110) @@ -8,13 +8,30 @@ <s:form action="register"> <s:actionerror /> <p> + <s:set id="publication.login.login"> + <s:text name="publication.login.login" /> + </s:set> + <s:set id="publication.login.password"> + <s:text name="publication.login.password" /> + </s:set> + <s:set id="publication.login.repeatPassword"> + <s:text name="publication.login.repeatPassword" /> + </s:set> + <s:set id="publication.register.submit"> + <s:text name="publication.register.submit" /> + </s:set> + <s:textfield key="publication.login.login" name="login" - labelposition="top" labelSeparator=" :" /> + label="%{publication.login.login}" labelposition="top" + labelSeparator=" :" /> <s:password key="publication.login.password" name="password" + label="%{publication.login.password}" labelposition="top" + labelSeparator=" :" /> + <s:password key="publication.login.repeatPassword" + label="%{publication.login.repeatPassword}" name="repeatPassword" labelposition="top" labelSeparator=" :" /> - <s:password key="publication.login.repeatPassword" - name="repeatPassword" labelposition="top" labelSeparator=" :" /> - <s:submit key="publication.register.submit" name="submit" /> + <s:submit key="publication.register.submit" name="submit" + value="%{publication.register.submit}" /> </p> </s:form> <s:a action="login_input" id="loginLink">