X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=source%2Fmircoders%2Flocalizer%2Fbasic%2FMirBasicProducerAssistantLocalizer.java;h=e408c09e3bd161d2c95630679d431d840579e9b2;hb=4368e83f65cd067f2ac70668e35cd1ab4432c4d6;hp=faa8467434ee12be50bdb748aa056e0e23ae7a41;hpb=f03a1720d6b82297791a8bb62876709fe20dd0ea;p=mir.git diff --git a/source/mircoders/localizer/basic/MirBasicProducerAssistantLocalizer.java b/source/mircoders/localizer/basic/MirBasicProducerAssistantLocalizer.java index faa84674..e408c09e 100755 --- a/source/mircoders/localizer/basic/MirBasicProducerAssistantLocalizer.java +++ b/source/mircoders/localizer/basic/MirBasicProducerAssistantLocalizer.java @@ -29,17 +29,7 @@ */ package mircoders.localizer.basic; -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.StringWriter; -import java.util.GregorianCalendar; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - import gnu.regexp.RE; - import mir.config.MirPropertiesConfiguration; import mir.entity.adapter.EntityAdapter; import mir.entity.adapter.EntityIteratorAdapter; @@ -47,16 +37,15 @@ import mir.generator.Generator; import mir.generator.GeneratorExc; import mir.generator.GeneratorFailure; import mir.log.LoggerWrapper; -import mir.misc.StringUtil; import mir.util.GeneratorDateTimeFunctions; import mir.util.GeneratorFormatAdapters; -import mir.util.generator.ReflectionGeneratorFunctionsAdapter; +import mir.util.HTMLStripper; import mir.util.StringRoutines; +import mir.util.generator.ReflectionGeneratorFunctionsAdapter; import mircoders.global.MirGlobal; import mircoders.localizer.MirLocalizerExc; import mircoders.localizer.MirLocalizerFailure; import mircoders.localizer.MirProducerAssistantLocalizer; - import org.w3c.dom.Document; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; @@ -64,23 +53,38 @@ import org.w3c.dom.NodeList; import org.w3c.tidy.Configuration; import org.w3c.tidy.Tidy; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.StringWriter; +import java.util.GregorianCalendar; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + public class MirBasicProducerAssistantLocalizer implements MirProducerAssistantLocalizer { protected LoggerWrapper logger; + private HTMLStripper stripper; private RE regularExpressionLT; private RE regularExpressionGT; + private RE regularExpressionWhitespace; + public MirBasicProducerAssistantLocalizer() throws MirLocalizerFailure { - try{ - regularExpressionLT = new RE("<"); - regularExpressionGT = new RE(">"); - } - catch (Throwable t) { - throw new MirLocalizerFailure(t); - } + try { + stripper = new HTMLStripper(); + + regularExpressionLT = new RE("<"); + regularExpressionGT = new RE(">"); + regularExpressionWhitespace = new RE("\\s+"); + } + catch (Throwable t) { + throw new MirLocalizerFailure(t); + } } - public void initializeGenerationValueSet(Map aValueSet) throws MirLocalizerExc, MirLocalizerFailure { + public void initializeGenerationValueSet(Map aValueSet) throws MirLocalizerExc, MirLocalizerFailure { try { Iterator i; @@ -108,13 +112,13 @@ public class MirBasicProducerAssistantLocalizer implements MirProducerAssistantL aValueSet.put("config", configMap); - aValueSet.put("utility", new Utility()); + aValueSet.put("utility", new Utility()); aValueSet.put("languages", - new EntityIteratorAdapter("", "", 20, MirGlobal.localizer().dataModel().adapterModel(), "language")); + new EntityIteratorAdapter("", "", 20, MirGlobal.localizer().dataModel().adapterModel(), "language")); aValueSet.put("topics", - new EntityIteratorAdapter("", "", 20, MirGlobal.localizer().dataModel().adapterModel(), "topic")); + new EntityIteratorAdapter("", "", 20, MirGlobal.localizer().dataModel().adapterModel(), "topic")); Map articleTypeMap = new HashMap(); articleTypeMap.put("openposting", "0"); @@ -148,7 +152,7 @@ public class MirBasicProducerAssistantLocalizer implements MirProducerAssistantL } } - + public static class getLanguageIdFunction implements Generator.Function { private Map languageCodeToId; private String otherLanguageId; @@ -162,8 +166,9 @@ public class MirBasicProducerAssistantLocalizer implements MirProducerAssistantL Iterator i = new EntityIteratorAdapter("", "", 20, MirGlobal.localizer().dataModel().adapterModel(), "language"); while (i.hasNext()) { EntityAdapter language = (EntityAdapter) i.next(); - if (language.get("code").equals("ot")) + if (language.get("code").equals("ot")) { otherLanguageId = (String) language.get("id"); + } languageCodeToId.put(language.get("code"), language.get("id")); } @@ -177,12 +182,14 @@ public class MirBasicProducerAssistantLocalizer implements MirProducerAssistantL public Object perform(List aParameters) throws GeneratorExc, GeneratorFailure { try { - if (aParameters.size() != 1) + if (aParameters.size() != 1) { throw new GeneratorExc("getLanguageIdFunction: 1 parameter expected: language-code"); + } String result = (String) languageCodeToId.get(aParameters.get(0)); - if (result == null) + if (result == null) { result = otherLanguageId; + } return result; } @@ -201,13 +208,12 @@ public class MirBasicProducerAssistantLocalizer implements MirProducerAssistantL logger.debug("about to filter non HTML Text of length " + aText.length()); try { String result = - StringUtil.createHTML( - StringUtil.removeHTMLTags(aText), - MirGlobal.config().getString("Producer.ImageRoot"), - MirGlobal.config().getString("Producer.MailLinkName"), - MirGlobal.config().getString("Producer.ExtLinkName"), - MirGlobal.config().getString("Producer.IntLinkName") - ); + stripper.createHTML( + stripper.removeHTMLTags(aText), + MirGlobal.config().getString("Producer.ImageRoot"), + MirGlobal.config().getString("Producer.MailLinkName"), + MirGlobal.config().getString("Producer.ExtLinkName"), + MirGlobal.config().getString("Producer.IntLinkName")); logger.debug("done filtering non-HTML text "); return result; } @@ -217,6 +223,60 @@ public class MirBasicProducerAssistantLocalizer implements MirProducerAssistantL throw new RuntimeException(t.toString()); } } + + public Generator.Interceptor createGenerationInterceptor() throws MirLocalizerExc, MirLocalizerFailure { + + if (MirGlobal.config().getBoolean("Mir.Producer.UseInterceptor", true)) { + return new Generator.Interceptor() { + + public Object intercept(Object anObject) { + if (anObject instanceof EntityAdapter) { + return new InterceptedEntityAdapter((EntityAdapter) anObject); + } + + return anObject; + } + }; + } + else { + return null; + } + } + + public class InterceptedEntityAdapter { + private EntityAdapter adapter; + + InterceptedEntityAdapter(EntityAdapter anEntityAdapter) { + adapter = anEntityAdapter; + } + + public Object get(String aField) { + Object result = adapter.get(aField); + if (result instanceof String) { + return filterHTMLText((String) result); + } + else { + return result; + } + } + + public Object getRaw() { + return new RawEntityAdapter(adapter); + } + } + + public class RawEntityAdapter { + private EntityAdapter adapter; + + RawEntityAdapter(EntityAdapter anEntityAdapter) { + adapter = anEntityAdapter; + } + + public Object get(String aField) { + return adapter.get(aField); + } + } + public String filterHTMLText(String aText) { try { StringWriter out = new StringWriter(); @@ -226,7 +286,7 @@ public class MirBasicProducerAssistantLocalizer implements MirProducerAssistantL tidy.setCharEncoding(Configuration.UTF8); tidy.setErrout(logger.asPrintWriter(LoggerWrapper.DEBUG_MESSAGE)); print(tidy.parseDOM(in, null), out); - + return out.toString(); } catch (IOException e) { @@ -234,40 +294,82 @@ public class MirBasicProducerAssistantLocalizer implements MirProducerAssistantL } } - private String[] badAttributes = {"onload","onclick","onfocus","onblur","onmouseover","onmouseout","style","height","width"}; - - private boolean isBadAttr(String attrName){ - for (int i=0;i'); @@ -322,21 +424,21 @@ public class MirBasicProducerAssistantLocalizer implements MirProducerAssistantL break; case Node.TEXT_NODE: - String value=node.getNodeValue(); - try{ - value=regularExpressionLT.substituteAll(value, "<"); - value=regularExpressionGT.substituteAll(value, ">"); - } - catch (Throwable t){ - value=""; - } - out.write(value); + String value = node.getNodeValue(); + try { + value = regularExpressionLT.substituteAll(value, "<"); + value = regularExpressionGT.substituteAll(value, ">"); + } + catch (Throwable t) { + value = ""; + } + out.write(value); break; } - if (type == Node.ELEMENT_NODE && canOutput && node.getChildNodes()!=null && node.getChildNodes().getLength()>0) { + if (type == Node.ELEMENT_NODE && canOutput && node.getChildNodes() != null && node.getChildNodes().getLength() > 0) { out.write("'); @@ -346,13 +448,13 @@ public class MirBasicProducerAssistantLocalizer implements MirProducerAssistantL } public static class Utility extends ReflectionGeneratorFunctionsAdapter { - public Utility () { + public Utility() { super(new MirBasicUtilityFunctions()); } public Object getDatetime() { return new GeneratorDateTimeFunctions.DateTimeFunctions( - MirPropertiesConfiguration.instance().getString("Mir.DefaultTimezone")); + MirPropertiesConfiguration.instance().getString("Mir.DefaultTimezone")); } public Object getCompressWhitespace() {