You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@labs.apache.org by si...@apache.org on 2009/11/16 21:44:47 UTC
svn commit: r880952 - in /labs/magma/trunk:
foundation-i18n/src/main/java/org/apache/magma/i18n/
foundation-website/src/main/java/org/apache/magma/website/producers/
foundation-website/src/main/java/org/apache/magma/website/templating/
foundation-websi...
Author: simoneg
Date: Mon Nov 16 20:44:46 2009
New Revision: 880952
URL: http://svn.apache.org/viewvc?rev=880952&view=rev
Log:
LABS-221 : LinkHelper to encapsulate link creation everywhere, will later work with cglib for link type safety. Also reorganized i18nRedenringHelper to a more generic helper including link support
Added:
labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/producers/ProducerHelper.java
labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/utils/LinkHelper.java
Removed:
labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/I18nRenderingHelper.java
Modified:
labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/producers/ParametrizableHtmlProducerBase.java
labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/templating/TemplateData.java
labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/teststuff/FakeHtmlProducer.java
Modified: labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/producers/ParametrizableHtmlProducerBase.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/producers/ParametrizableHtmlProducerBase.java?rev=880952&r1=880951&r2=880952&view=diff
==============================================================================
--- labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/producers/ParametrizableHtmlProducerBase.java (original)
+++ labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/producers/ParametrizableHtmlProducerBase.java Mon Nov 16 20:44:46 2009
@@ -16,11 +16,7 @@
*/
package org.apache.magma.website.producers;
-import org.apache.magma.i18n.I18nRenderingHelper;
import org.apache.magma.website.HtmlProducer;
-import org.apache.magma.website.WebHandler;
-
-import java.io.OutputStream;
public abstract class ParametrizableHtmlProducerBase extends HtmlProducer implements
ParametrizableProducer {
@@ -28,7 +24,10 @@
protected ProducerParameters parameters = new ProducerParameters();
{
- parameters.addParameter("i18n", new I18nRenderingHelper());
+ ProducerHelper ph = new ProducerHelper();
+ // Kept here for legacy reasons, may be removed in the future
+ parameters.addParameter("i18n", ph);
+ parameters.addParameter("mag", ph);
}
public ParametrizableHtmlProducerBase addParameter(Object param) {
Added: labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/producers/ProducerHelper.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/producers/ProducerHelper.java?rev=880952&view=auto
==============================================================================
--- labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/producers/ProducerHelper.java (added)
+++ labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/producers/ProducerHelper.java Mon Nov 16 20:44:46 2009
@@ -0,0 +1,131 @@
+package org.apache.magma.website.producers;
+
+import java.util.Date;
+
+import org.apache.magma.basics.LocalizableString;
+import org.apache.magma.i18n.Formatter;
+import org.apache.magma.i18n.Formatters;
+import org.apache.magma.i18n.formatters.DateFormatter;
+import org.apache.magma.website.utils.LinkHelper;
+
+
+/**
+ * This helper contains functions useful inside a producer,
+ * expecially inside a {@link TemplatingProducer}, and is always
+ * avaliable inside a {@link ParametrizableProducer} in a parameter
+ * named "mag".
+ *
+ * There functions range from i18n manipulation, link generation, and
+ * other utility function.
+ *
+ * Packages can contribute to this class to add specific functions.
+ *
+ * Note: this supercedes the old I18nRenderingHelper accessed via $i18n.
+ *
+ * @author Simone Gianni <si...@apache.org>
+ */
+public class ProducerHelper {
+
+ /**
+ * Translates the given message.
+ * @param message The message to translate
+ * @return the translated message
+ * @deprecated use {@link #translate(String)}
+ */
+ @Deprecated
+ public String tr(String message) {
+ return new LocalizableString(message).toString();
+ }
+
+ /**
+ * Translates the given message, replacing placeholders with values.
+ * @param message The message to translate
+ * @param values The values to use in placeholders
+ * @return the translated message
+ * @deprecated use {@link #translate(String, Object...)}
+ */
+ @Deprecated
+ public String tr(String message, Object... values) {
+ return new LocalizableString(message, values).toString();
+ }
+
+
+ /**
+ * Formats the given date correctly for the current locale
+ * @param date The date to format
+ * @return the formatted date
+ * @deprecated use {@link #format(Object)}
+ */
+ @Deprecated
+ public String tr(Date date) {
+ return tr(date, "default");
+ }
+
+ /**
+ * Formats the given date correctly for the current locale, using the given format configuration
+ * @param date The date to format
+ * @param format The format to use, see {@link DateFormatter} docs
+ * @return the formatted date
+ * @deprecated use {@link #format(Object, String)}
+ */
+ @Deprecated
+ public String tr(Date date, String format) {
+ Formatter<Date> df = Formatters.getFormatterFor(Date.class);
+ df.setFormat(format);
+ return df.to(date);
+ }
+
+
+ /**
+ * Translates the given message.
+ * @param message The message to translate
+ * @return the translated message
+ */
+ public String translate(String message) {
+ return new LocalizableString(message).toString();
+ }
+
+ /**
+ * Translates the given message, replacing placeholders with values.
+ * @param message The message to translate
+ * @param values The values to use in placeholders
+ * @return the translated message
+ */
+ public String translate(String message, Object... values) {
+ return new LocalizableString(message, values).toString();
+ }
+
+
+ /**
+ * Formats the given value correctly for the current locale
+ * @param date The value to format
+ * @return the formatted value
+ */
+ public String format(Object value) {
+ return format(value, "default");
+ }
+
+ /**
+ * Formats the given value correctly for the current locale, using the given format configuration
+ * @param value The value to format
+ * @param format The format to use, see javadocs of {@link Formatter} and its subclasses
+ * @return the formatted value
+ */
+ public String format(Object value, String format) {
+ if (value == null) return "";
+ Formatter df = Formatters.getFormatterFor(value.getClass());
+ df.setFormat(format);
+ return df.to(date);
+ }
+
+ /**
+ * Creates a link to the given method, formatting properly given parameters.
+ * @param method The method name
+ * @param params Parameters to pass
+ * @return The link string
+ */
+ public String link(String method, Object... params) {
+ return LinkHelper.makeLink(method, params);
+ }
+
+}
Modified: labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/templating/TemplateData.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/templating/TemplateData.java?rev=880952&r1=880951&r2=880952&view=diff
==============================================================================
--- labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/templating/TemplateData.java (original)
+++ labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/templating/TemplateData.java Mon Nov 16 20:44:46 2009
@@ -43,6 +43,7 @@
public TemplateData() {
}
+ // TODO report errors from here, with HTML line and all the rest.
public void init(Reader reader) {
StringBuffer alltpl = new StringBuffer();
BufferedReader br = new BufferedReader(reader);
Added: labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/utils/LinkHelper.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/utils/LinkHelper.java?rev=880952&view=auto
==============================================================================
--- labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/utils/LinkHelper.java (added)
+++ labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/utils/LinkHelper.java Mon Nov 16 20:44:46 2009
@@ -0,0 +1,130 @@
+package org.apache.magma.website.utils;
+
+import java.lang.reflect.Method;
+import java.net.URLEncoder;
+
+import org.apache.magma.basics.MagmaException;
+import org.apache.magma.basics.utils.GenericClass;
+import org.apache.magma.basics.utils.GenericClass.MethodDef;
+import org.apache.magma.conversion.Converter;
+import org.apache.magma.conversion.Converters;
+import org.apache.magma.website.WebHandler;
+
+/**
+ * Helper class for creating links.
+ *
+ * This class takes a method, and knowing its parameter types,
+ * concatenates parameter values after having properly converted and
+ * escaped them.
+ *
+ * There are static methods that can be used when a single link has to
+ * be created, otherwise a new instance of this class can be created
+ * to achieve better performances when multiple links need to be generated.
+ *
+ * Anyway this class is thread safe.
+ *
+ * @author Simone Gianni <si...@apache.org>
+ */
+public class LinkHelper {
+
+ // TODO LABS-211 (cglib based links) apply mostly here
+
+ private String baseMethod;
+ private Converter[] converters;
+
+ public LinkHelper(Method method) {
+ this(method.getName(), method.getParameterTypes());
+ }
+
+ public LinkHelper(MethodDef method) {
+ this(method.getName(), GenericClass.toRawClasses(method.getParameterTypes()));
+ }
+
+ public LinkHelper(String methodName, Class<?>[] parameters) {
+ if (methodName.startsWith("do")) {
+ methodName = methodName.substring(2);
+ } else if (method.startsWith("handle")) {
+ methodName = methodName.substring(6);
+ } else if (method.startsWith("hidden")) {
+ methodName = methodName.substring(6);
+ }
+
+ this.baseMethod = methodName;
+ if (parameters == null) {
+ converters = new Converter[0];
+ } else {
+ converters = new Converter[parameters.length];
+ for (int i = 0; i < parameters.length; i++) {
+ converters[i] = Converters.getConverterFor(parameters[i]);
+ if (converters[i] == null) throw new MagmaException("Cannot find a converter for {0}, needed to create link for {1}", parameters[i], methodName);
+ }
+ }
+ }
+
+ public String makeLink(Object... params) {
+ StringBuilder ret = new StringBuilder();
+ ret.append(this.baseMethod);
+ if (params != null) {
+ if (params.length > converters.length) throw new MagmaException("Incorrect number of parameters for link to {0}, expecting {1} got {2}", this.baseMethod, this.converters.length, params.length);
+ for (int i = 0; i < params.length; i++) {
+ Object param = params[i];
+ if (param == null) {
+ // TODO is this the global null value? See LABS-175
+ ret.append("_null");
+ } else {
+ String converted = converters[i].to(param);
+ converted = URLEncoder.encode(converted, "UTF-8");
+ converted = converted.replaceAll("\\!", "%21");
+ ret.append(converted);
+ }
+
+ }
+ }
+ return ret.toString();
+ }
+
+
+ /**
+ * Static method for creating a relative link.
+ * @param method The method name
+ * @param params Parameters of the method
+ * @return A relative link, with parameters correctly converted and escaped
+ */
+ public static String makeLink(String method, Object... params) {
+ StringBuilder ret = new StringBuilder();
+
+ if (method.startsWith("do")) {
+ method = method.substring(2);
+ } else if (method.startsWith("handle")) {
+ method = method.substring(6);
+ } else if (method.startsWith("hidden")) {
+ method = method.substring(6);
+ }
+
+ ret.append(method);
+ for (Object param : params) {
+ ret.append(WebHandler.paramSeparator);
+ if (param == null) {
+ // TODO is this the global null value? See LABS-175
+ ret.append("_null");
+ } else {
+ Converter conv = Converters.getConverterFor(param.getClass());
+ if (conv == null) throw new MagmaException("Cannot find a converter for {0}, needed to create link for {1}", param.getClass(), method);
+ String converted = conv.to(param);
+ converted = URLEncoder.encode(converted, "UTF-8");
+ converted = converted.replaceAll("\\!", "%21");
+ ret.append(converted);
+ }
+ }
+ return ret.toString();
+ }
+
+ public static String makeLink(Method method, Object... params) {
+ return makeLink(method.getName(), params);
+ }
+
+ public static String makeLink(MethodDef method, Object... params) {
+ return makeLink(method.getName(), params);
+ }
+
+}
Modified: labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/teststuff/FakeHtmlProducer.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/teststuff/FakeHtmlProducer.java?rev=880952&r1=880951&r2=880952&view=diff
==============================================================================
--- labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/teststuff/FakeHtmlProducer.java (original)
+++ labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/teststuff/FakeHtmlProducer.java Mon Nov 16 20:44:46 2009
@@ -23,6 +23,7 @@
import org.apache.magma.website.WebHandler;
import org.apache.magma.website.producers.ParametrizableHtmlProducerBase;
import org.apache.magma.website.producers.ParametrizableProducer;
+import org.apache.magma.website.producers.ProducerHelper;
import org.apache.magma.website.producers.ProducerParameters;
import java.io.IOException;
@@ -54,8 +55,8 @@
str += ".";
str += getCreatingMethod().getName();
str += "]";
- I18nRenderingHelper i18nh = (I18nRenderingHelper) getParameters().getParameters().get("i18n");
- str += i18nh.tr("test message");
+ ProducerHelper i18nh = (ProducerHelper) getParameters().getParameters().get("mag");
+ str += i18nh.translate("test message");
if (params != null && params.length > 0) {
str += "(" + params[0] + ")";
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@labs.apache.org
For additional commands, e-mail: commits-help@labs.apache.org