diff --git a/README.md b/README.md index 32e3cc4..dfcccb3 100644 --- a/README.md +++ b/README.md @@ -68,7 +68,7 @@ even 9.x), due to the stability of the WSSDK. You will need to update the compiling against. All Okapi releases since M24 require Java 7 or later, so these components must -be deployed to a WorldServer instance running Java 7 or later. +be deployed to a WorldServer instance running Java 7 or later. (Upcoming M36, which is in development at the time of this writing, will requires Java 7.) Building -------- diff --git a/autoactions/mshub/src/main/java/com/spartansoftwareinc/ws/autoactions/hubmt/WSPlaceholderUtil.java b/autoactions/mshub/src/main/java/com/spartansoftwareinc/ws/autoactions/hubmt/WSPlaceholderUtil.java index ae9f402..46038e2 100644 --- a/autoactions/mshub/src/main/java/com/spartansoftwareinc/ws/autoactions/hubmt/WSPlaceholderUtil.java +++ b/autoactions/mshub/src/main/java/com/spartansoftwareinc/ws/autoactions/hubmt/WSPlaceholderUtil.java @@ -56,7 +56,7 @@ public class WSPlaceholderUtil * from the map. * * @param s Input string with placeholders. e.g. "Click {1}here{2} or {3}cancel{4} the operation.{5}") - * @param placeholderMap An int-to-String map. + * @param phmap An int-to-String map. * @return a String where all placeholders are replaced by the corresponding strings. */ public static String replacePlaceholders( String s, Map phmap ) diff --git a/autoactions/xliff/pom.xml b/autoactions/xliff/pom.xml index f527ea8..cebfb33 100644 --- a/autoactions/xliff/pom.xml +++ b/autoactions/xliff/pom.xml @@ -56,6 +56,13 @@ net.sf.okapi ${okapi.version}.net.sf.okapi + + com.spartansoftwareinc + ${project.version}.com.spartansoftwareinc + + com.spartansoftwareinc.ws.okapi.autoactions.xliff.* + + com.ibm.icu okapi_ws_components.com.ibm.icu diff --git a/filters/base/pom.xml b/filters/base/pom.xml index c940619..d593204 100644 --- a/filters/base/pom.xml +++ b/filters/base/pom.xml @@ -41,6 +41,12 @@ okapi-filter-properties ${okapi.version} test + + + org.slf4j + slf4j-simple + + net.sf.okapi @@ -48,6 +54,12 @@ ${okapi.version} test-jar test + + + org.slf4j + slf4j-simple + + diff --git a/filters/base/src/test/resources/log4j.properties b/filters/base/src/test/resources/log4j.properties new file mode 100644 index 0000000..5e4b07d --- /dev/null +++ b/filters/base/src/test/resources/log4j.properties @@ -0,0 +1,4 @@ +log4j.rootLogger=DEBUG, console +log4j.appender.console=org.apache.log4j.ConsoleAppender +log4j.appender.console.layout=org.apache.log4j.PatternLayout +log4j.appender.console.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n diff --git a/filters/idml/pom.xml b/filters/idml/pom.xml index 54bae0a..98640d5 100644 --- a/filters/idml/pom.xml +++ b/filters/idml/pom.xml @@ -70,6 +70,13 @@ net.sf.okapi ${okapi.version}.net.sf.okapi + + com.spartansoftwareinc + ${project.version}.com.spartansoftwareinc + + com.spartansoftwareinc.ws.okapi.filters.idml.* + + com.ibm.icu okapi_ws_components.com.ibm.icu diff --git a/filters/json/pom.xml b/filters/json/pom.xml index 7fee16e..bea91c8 100644 --- a/filters/json/pom.xml +++ b/filters/json/pom.xml @@ -74,6 +74,13 @@ net.sf.okapi ${okapi.version}.net.sf.okapi + + com.spartansoftwareinc + ${project.version}.com.spartansoftwareinc + + com.spartansoftwareinc.ws.okapi.filters.json.* + + com.ibm.icu okapi_ws_components.com.ibm.icu diff --git a/filters/markdown/pom.xml b/filters/markdown/pom.xml new file mode 100644 index 0000000..6a9f21e --- /dev/null +++ b/filters/markdown/pom.xml @@ -0,0 +1,99 @@ + + + http://maven.apache.org + 4.0.0 + + + com.spartansoftwareinc.ws.okapi.filters + okapi-ws-filters + 1.8-SNAPSHOT + + + com.spartansoftwareinc.ws.okapi.filters.markdown + okapi-ws-filters-markdown + Okapi Markdown Filter for WorldServer + + + + com.spartansoftwareinc.ws.okapi.filters + okapi-ws-filters-base + ${project.version} + + + okapi-filter-markdown + net.sf.okapi.filters + ${okapi.version} + + + org.slf4j + slf4j-simple + + + + + com.spartansoftwareinc.ws.okapi.filters + okapi-ws-filters-base + ${project.version} + test + test-jar + + + net.sf.okapi + okapi-core + ${okapi.version} + test-jar + test + + + + + + + org.apache.maven.plugins + maven-shade-plugin + 2.4.1 + + false + + + + package + + shade + + + + + + + + true + deployable + + + net.sf.okapi + ${okapi.version}.net.sf.okapi + + + com.spartansoftwareinc + ${project.version}.com.spartansoftwareinc + + com.spartansoftwareinc.ws.okapi.filters.markdown.* + + + + com.ibm.icu + okapi_ws_components.com.ibm.icu + + + org.slf4j + okapi_ws_components.org.slf4j + + + + + + + + + diff --git a/filters/markdown/src/main/java/com/spartansoftwareinc/ws/okapi/filters/markdown/MarkdownFilterConfigurationData.java b/filters/markdown/src/main/java/com/spartansoftwareinc/ws/okapi/filters/markdown/MarkdownFilterConfigurationData.java new file mode 100644 index 0000000..f108ada --- /dev/null +++ b/filters/markdown/src/main/java/com/spartansoftwareinc/ws/okapi/filters/markdown/MarkdownFilterConfigurationData.java @@ -0,0 +1,62 @@ +package com.spartansoftwareinc.ws.okapi.filters.markdown; + +import com.spartansoftwareinc.ws.okapi.filters.WSOkapiFilterConfigurationData; + +import net.sf.okapi.filters.markdown.Parameters; + +public class MarkdownFilterConfigurationData extends WSOkapiFilterConfigurationData { + private static final long serialVersionUID = 1L; + + @Override + protected Parameters getDefaultParameters() { + Parameters parameters = new Parameters(); + parameters.reset(); + parameters.setUseCodeFinder(false); // Turning off since we aren't providing a way to configure the rules. + return parameters; + } + + // translateUrl + public boolean getTranslateUrls() { + return getParameters().getTranslateUrls(); + } + + public void setTranslateUrls(boolean translateUrls) { + Parameters params = getParameters(); + params.setTranslateUrls(translateUrls); + setParameters(params); + } + + // translateCodeBlocks + public boolean getTranslateCodeBlocks() { + return getParameters().getTranslateCodeBlocks(); + } + + public void setTranslateCodeBlockse(boolean translateCodeBlocks) { + Parameters params = getParameters(); + params.setTranslateCodeBlocks(translateCodeBlocks); + setParameters(params); + } + + // translateHeaderMetadata + public boolean getTranslateHeaderMetadata() { + return getParameters().getTranslateHeaderMetadata(); + } + + public void setTranslateHeaderMetadata(boolean translateHeaderMetadata) { + Parameters params = getParameters(); + params.setTranslateHeaderMetadata(translateHeaderMetadata); + setParameters(params); + } + + // translateImageAltText + public boolean getTranslateImageAltText() { + return getParameters().getTranslateImageAltText(); + } + + public void setTranslateImageAltText(boolean translateImageAltText) { + Parameters params = getParameters(); + params.setTranslateImageAltText(translateImageAltText); + setParameters(params); + } + +} diff --git a/filters/markdown/src/main/java/com/spartansoftwareinc/ws/okapi/filters/markdown/MarkdownFilterConfigurationUI.java b/filters/markdown/src/main/java/com/spartansoftwareinc/ws/okapi/filters/markdown/MarkdownFilterConfigurationUI.java new file mode 100644 index 0000000..b7e2467 --- /dev/null +++ b/filters/markdown/src/main/java/com/spartansoftwareinc/ws/okapi/filters/markdown/MarkdownFilterConfigurationUI.java @@ -0,0 +1,65 @@ +package com.spartansoftwareinc.ws.okapi.filters.markdown; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import javax.servlet.http.HttpServletRequest; + +import com.idiominc.wssdk.WSContext; +import com.idiominc.wssdk.component.WSComponentConfigurationData; +import com.spartansoftwareinc.ws.okapi.base.ui.UITable; +import com.spartansoftwareinc.ws.okapi.base.ui.UICheckbox; +import com.spartansoftwareinc.ws.okapi.base.ui.UIUtil; +import com.spartansoftwareinc.ws.okapi.filters.ui.WSOkapiFilterUI; + +public class MarkdownFilterConfigurationUI extends WSOkapiFilterUI { + + private static final String TRANSLATE_URLS_LABEL = "Translate URLs"; + private static final String TRANSLATE_URLS_NAME = "translateUrls"; + private static final String TRANSLATE_CODE_BLOCKS_LABEL = "Translate Code Blocks"; + private static final String TRANSLATE_CODE_BLOCKS_NAME = "translateCodeBlocks"; + private static final String TRANSLATE_HEADER_METADATA_LABEL = "Translate Header Metadata (Yaml Values)"; + private static final String TRANSLATE_HEADER_METADATA_NAME = "translateHeaderMetadata"; + private static final String TRANSLATE_IMAGE_ALT_TEXT_LABEL = "Translate Image Alt Text"; + private static final String TRANSLATE_IMAGE_ALT_TEXT_NAME = "translateImageAltText"; + + @Override + protected MarkdownFilterConfigurationData getConfigurationData(WSComponentConfigurationData config) { + return (config != null && config instanceof MarkdownFilterConfigurationData) ? + (MarkdownFilterConfigurationData)config : new MarkdownFilterConfigurationData(); + } + + @Override + protected UITable buildConfigurationTable(WSContext context, HttpServletRequest request, + WSComponentConfigurationData config) { + MarkdownFilterConfigurationData configData = getConfigurationData(config); + + UITable table = new UITable(); + table.add(new UICheckbox(TRANSLATE_URLS_LABEL, TRANSLATE_URLS_NAME, + configData.getTranslateUrls())); + table.add(new UICheckbox(TRANSLATE_CODE_BLOCKS_LABEL, TRANSLATE_CODE_BLOCKS_NAME, + configData.getTranslateCodeBlocks())); + table.add(new UICheckbox(TRANSLATE_HEADER_METADATA_LABEL, TRANSLATE_HEADER_METADATA_NAME, + configData.getTranslateHeaderMetadata())); + table.add(new UICheckbox(TRANSLATE_IMAGE_ALT_TEXT_LABEL, TRANSLATE_IMAGE_ALT_TEXT_NAME, + configData.getTranslateImageAltText())); + return table; + } + + @Override + protected String validateAndSave(WSContext context, HttpServletRequest request, MarkdownFilterConfigurationData configData, String errors) { + MarkdownFilterConfigurationData configurationData = getConfigurationData(configData); + + // No real error check performed at this point. + configurationData.setTranslateUrls(UIUtil.getBoolean(request, TRANSLATE_URLS_NAME)); + configurationData.setTranslateCodeBlockse(UIUtil.getBoolean(request, TRANSLATE_CODE_BLOCKS_NAME)); + configurationData.setTranslateHeaderMetadata(UIUtil.getBoolean(request, TRANSLATE_HEADER_METADATA_NAME)); + configurationData.setTranslateImageAltText(UIUtil.getBoolean(request, TRANSLATE_IMAGE_ALT_TEXT_NAME)); + return errors; + } + +} diff --git a/filters/markdown/src/main/java/com/spartansoftwareinc/ws/okapi/filters/markdown/MarkdownWSOkapiFilter.java b/filters/markdown/src/main/java/com/spartansoftwareinc/ws/okapi/filters/markdown/MarkdownWSOkapiFilter.java new file mode 100644 index 0000000..6cdd607 --- /dev/null +++ b/filters/markdown/src/main/java/com/spartansoftwareinc/ws/okapi/filters/markdown/MarkdownWSOkapiFilter.java @@ -0,0 +1,62 @@ +package com.spartansoftwareinc.ws.okapi.filters.markdown; + +import com.idiominc.wssdk.component.filter.WSFilterConfigurationData; +import com.idiominc.wssdk.component.filter.WSFilterUIConfiguration; +import com.spartansoftwareinc.ws.okapi.Version; +import com.spartansoftwareinc.ws.okapi.filters.WSOkapiFilter; + +import net.sf.okapi.filters.markdown.MarkdownFilter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class MarkdownWSOkapiFilter extends WSOkapiFilter { + + private static final Logger LOG = LoggerFactory.getLogger(MarkdownWSOkapiFilter.class); + private static final String FILTER_NAME = "Okapi Markdown Filter"; + private static final String FILTER_DESCRIPTION = "World Server Markdown Filter using Okapi Markdown Filter"; + private static final String DEFAULT_ENCODING = "UTF-8"; + + @Override + public String getName() { + return FILTER_NAME; + } + + @Override + public String getDescription() { + return FILTER_DESCRIPTION; + } + + @Override + public String getVersion() { + return Version.BANNER; + } + + @Override + public WSFilterUIConfiguration getUIConfiguration() { + return new MarkdownFilterConfigurationUI(); + } + + @Override + protected Logger getLoggerWithContext() { + return LOG; + } + + @Override + public MarkdownFilter getConfiguredFilter(MarkdownFilterConfigurationData config) { + MarkdownFilter filter = new MarkdownFilter(); + filter.setParameters(config.getParameters()); + return filter; + } + + @Override + protected String getDefaultEncoding() { + return DEFAULT_ENCODING; + } + + @Override + protected MarkdownFilterConfigurationData getOkapiFilterConfiguration() { + WSFilterConfigurationData config = getConfiguration(); + return (config != null && config instanceof MarkdownFilterConfigurationData) ? + (MarkdownFilterConfigurationData)config : new MarkdownFilterConfigurationData(); + } +} \ No newline at end of file diff --git a/filters/markdown/src/test/java/com/spartansoftwareinc/ws/okapi/filters/markdown/MarkdownFilterConfigurationDataTest.java b/filters/markdown/src/test/java/com/spartansoftwareinc/ws/okapi/filters/markdown/MarkdownFilterConfigurationDataTest.java new file mode 100644 index 0000000..4934825 --- /dev/null +++ b/filters/markdown/src/test/java/com/spartansoftwareinc/ws/okapi/filters/markdown/MarkdownFilterConfigurationDataTest.java @@ -0,0 +1,23 @@ +package com.spartansoftwareinc.ws.okapi.filters.markdown; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; + + +import org.junit.Test; + +import com.spartansoftwareinc.ws.okapi.filters.ConfigTestUtils; + +public class MarkdownFilterConfigurationDataTest { + + @Test + public void testTranslateUrlsRoundTrip() throws Exception { + MarkdownFilterConfigurationData data = new MarkdownFilterConfigurationData(); + String defaultXml = ConfigTestUtils.toXML(data); + data.setTranslateUrls(true); + assertNotEquals(defaultXml, ConfigTestUtils.toXML(data)); + String changedXml = defaultXml.replace("translateUrls.b=false", "translateUrls.b=true"); + assertEquals(changedXml, ConfigTestUtils.toXML(data)); + } + +} diff --git a/filters/markdown/src/test/java/com/spartansoftwareinc/ws/okapi/filters/markdown/MarkdownFilterTest.java b/filters/markdown/src/test/java/com/spartansoftwareinc/ws/okapi/filters/markdown/MarkdownFilterTest.java new file mode 100644 index 0000000..742df06 --- /dev/null +++ b/filters/markdown/src/test/java/com/spartansoftwareinc/ws/okapi/filters/markdown/MarkdownFilterTest.java @@ -0,0 +1,40 @@ +package com.spartansoftwareinc.ws.okapi.filters.markdown; + +import java.nio.charset.StandardCharsets; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; + +import com.idiominc.wssdk.component.filter.WSFilter; +import com.spartansoftwareinc.ws.okapi.filters.FilterTestHarness; +import com.spartansoftwareinc.ws.okapi.filters.model.SegmentInfoHolder; +import com.tngtech.java.junit.dataprovider.DataProvider; +import com.tngtech.java.junit.dataprovider.DataProviderRunner; +import com.tngtech.java.junit.dataprovider.UseDataProvider; + +@RunWith(DataProviderRunner.class) +public class MarkdownFilterTest { + private FilterTestHarness testHarness; + + @DataProvider + public static Object[][] testHelloWorld() { + return new Object[][]{{ + new SegmentInfoHolder[]{ + new SegmentInfoHolder("Hello, World! I am a " + WSFilter.PLACEHOLDER +"Markdown Filter" + WSFilter.PLACEHOLDER + " for " + WSFilter.PLACEHOLDER + "WorldServer" + WSFilter.PLACEHOLDER + ".", + "**", "**", "_", "_"), + } + }}; + } + + @Before + public void setup() { + testHarness = new FilterTestHarness(new MarkdownWSOkapiFilter()); + } + + @Test + @UseDataProvider("testHelloWorld") + public void testHelloWorld(SegmentInfoHolder[] expected) throws Exception { + testHarness.extractAndExpectSegments("/HelloWorld.md", new MarkdownFilterConfigurationData(), StandardCharsets.UTF_8, expected); + } +} diff --git a/filters/openxml/pom.xml b/filters/openxml/pom.xml index ae2f18f..73fa86c 100644 --- a/filters/openxml/pom.xml +++ b/filters/openxml/pom.xml @@ -66,6 +66,13 @@ net.sf.okapi ${okapi.version}.net.sf.okapi + + com.spartansoftwareinc + ${project.version}.com.spartansoftwareinc + + com.spartansoftwareinc.ws.okapi.filters.openxml.* + + com.ibm.icu okapi_ws_components.com.ibm.icu diff --git a/filters/po/pom.xml b/filters/po/pom.xml index 3b103f1..694c563 100644 --- a/filters/po/pom.xml +++ b/filters/po/pom.xml @@ -75,6 +75,13 @@ net.sf.okapi ${okapi.version}.net.sf.okapi + + com.spartansoftwareinc + ${project.version}.com.spartansoftwareinc + + com.spartansoftwareinc.ws.okapi.filters.po.* + + com.ibm.icu okapi_ws_components.com.ibm.icu diff --git a/filters/pom.xml b/filters/pom.xml index 2752321..dbec23f 100644 --- a/filters/pom.xml +++ b/filters/pom.xml @@ -19,6 +19,7 @@ base idml json + markdown openxml po xliff diff --git a/filters/xliff/pom.xml b/filters/xliff/pom.xml index 978cd82..ac66bd2 100644 --- a/filters/xliff/pom.xml +++ b/filters/xliff/pom.xml @@ -75,6 +75,13 @@ net.sf.okapi ${okapi.version}.net.sf.okapi + + com.spartansoftwareinc + ${project.version}.com.spartansoftwareinc + + com.spartansoftwareinc.ws.okapi.filters.xliff.* + + com.ibm.icu okapi_ws_components.com.ibm.icu diff --git a/filters/yaml/pom.xml b/filters/yaml/pom.xml index ed43219..cc67717 100644 --- a/filters/yaml/pom.xml +++ b/filters/yaml/pom.xml @@ -74,6 +74,13 @@ net.sf.okapi ${okapi.version}.net.sf.okapi + + com.spartansoftwareinc + ${project.version}.com.spartansoftwareinc + + com.spartansoftwareinc.ws.okapi.filters.yaml.* + + com.ibm.icu okapi_ws_components.com.ibm.icu diff --git a/mt/google/pom.xml b/mt/google/pom.xml index dddf18f..e71eafd 100644 --- a/mt/google/pom.xml +++ b/mt/google/pom.xml @@ -83,6 +83,13 @@ net.sf.okapi ${okapi.version}.net.sf.okapi + + com.spartansoftwareinc + ${project.version}.com.spartansoftwareinc + + com.spartansoftwareinc.ws.okapi.mt.google.* + + org.apache.commons okapi_ws_components.org.apache.commons diff --git a/mt/mshub/pom.xml b/mt/mshub/pom.xml index 78bd41e..f61de6b 100644 --- a/mt/mshub/pom.xml +++ b/mt/mshub/pom.xml @@ -83,6 +83,13 @@ net.sf.okapi ${okapi.version}.net.sf.okapi + + com.spartansoftwareinc + ${project.version}.com.spartansoftwareinc + + com.spartansoftwareinc.ws.okapi.mt.mshub.* + + org.apache.commons okapi_ws_components.org.apache.commons diff --git a/pom.xml b/pom.xml index 88c525a..9ffdd77 100644 --- a/pom.xml +++ b/pom.xml @@ -135,6 +135,14 @@ com.idiominc.* + + org.apache.maven.plugins + maven-surefire-plugin + 2.20 + + -Xmx1g + +