Revision: 6675 http://languagetool.svn.sourceforge.net/languagetool/?rev=6675&view=rev Author: dnaber Date: 2012-04-01 10:46:03 +0000 (Sun, 01 Apr 2012) Log Message: ----------- refactor toXml() to its own class; adding simple test case
Modified Paths: -------------- trunk/JLanguageTool/src/java/org/languagetool/rules/patterns/PatternRule.java Added Paths: ----------- trunk/JLanguageTool/src/java/org/languagetool/rules/patterns/PatternRuleXmlCreator.java trunk/JLanguageTool/src/test/org/languagetool/rules/patterns/PatternRuleXmlCreatorTest.java Modified: trunk/JLanguageTool/src/java/org/languagetool/rules/patterns/PatternRule.java =================================================================== --- trunk/JLanguageTool/src/java/org/languagetool/rules/patterns/PatternRule.java 2012-04-01 09:12:02 UTC (rev 6674) +++ trunk/JLanguageTool/src/java/org/languagetool/rules/patterns/PatternRule.java 2012-04-01 10:46:03 UTC (rev 6675) @@ -26,7 +26,6 @@ import org.languagetool.AnalyzedSentence; import org.languagetool.AnalyzedTokenReadings; import org.languagetool.Language; -import org.languagetool.rules.IncorrectExample; import org.languagetool.rules.RuleMatch; import org.languagetool.tools.StringTools; @@ -186,70 +185,8 @@ * @since 0.9.3 */ public final String toXML() { - final StringBuilder sb = new StringBuilder(); - sb.append("<rule id=\""); - sb.append(StringTools.escapeXML(getId())); - sb.append("\" name=\""); - sb.append(StringTools.escapeXML(getDescription())); - sb.append("\">\n"); - sb.append("<pattern mark_from=\""); - sb.append(startPositionCorrection); - sb.append("\" mark_to=\""); - sb.append(endPositionCorrection); - sb.append('"'); - // for now, case sensitivity is per pattern, not per element, - // so just use the setting of the first element: - if (!patternElements.isEmpty() && patternElements.get(0).getCaseSensitive()) { - sb.append(" case_sensitive=\"yes\""); - } - sb.append(">\n"); - for (Element patternElement : patternElements) { - sb.append("<token"); - if (patternElement.getNegation()) { - sb.append(" negate=\"yes\""); - } - if (patternElement.isRegularExpression()) { - sb.append(" regexp=\"yes\""); - } - if (patternElement.getPOStag() != null) { - sb.append(" postag=\""); - sb.append(patternElement.getPOStag()); - sb.append('"'); - } - if (patternElement.getPOSNegation()) { - sb.append(" negate_pos=\"yes\""); - } - if (patternElement.isInflected()) { - sb.append(" inflected=\"yes\""); - } - sb.append('>'); - if (patternElement.getString() != null) { - sb.append(StringTools.escapeXML(patternElement.getString())); - } else { - // TODO - } - sb.append("</token>\n"); - } - sb.append("</pattern>\n"); - sb.append("<message>"); - sb.append(StringTools.escapeXML(message)); - sb.append("</message>\n"); - if (getIncorrectExamples() != null) { - for (IncorrectExample example : getIncorrectExamples()) { - sb.append("<example type=\"incorrect\">"); - sb.append(StringTools.escapeXML(example.getExample())); - sb.append("</example>\n"); - } - } - if (getCorrectExamples() != null) { - for (String example : getCorrectExamples()) { - sb.append("<example type=\"correct\">"); - sb.append(StringTools.escapeXML(example)); - sb.append("</example>\n"); - } - } - sb.append("</rule>"); - return sb.toString(); + final PatternRuleXmlCreator xmlCreator = new PatternRuleXmlCreator(); + return xmlCreator.toXML(this); } public final void setMessage(final String message) { Added: trunk/JLanguageTool/src/java/org/languagetool/rules/patterns/PatternRuleXmlCreator.java =================================================================== --- trunk/JLanguageTool/src/java/org/languagetool/rules/patterns/PatternRuleXmlCreator.java (rev 0) +++ trunk/JLanguageTool/src/java/org/languagetool/rules/patterns/PatternRuleXmlCreator.java 2012-04-01 10:46:03 UTC (rev 6675) @@ -0,0 +1,83 @@ +package org.languagetool.rules.patterns; + +import org.languagetool.rules.IncorrectExample; +import org.languagetool.tools.StringTools; + +/** + * Serializes a PatternRule object to XML. + * + * @since 1.8 + */ +class PatternRuleXmlCreator { + + /** + * Return the pattern as an XML string. FIXME: this is not complete, information might be lost! + */ + public final String toXML(PatternRule rule) { + final StringBuilder sb = new StringBuilder(); + sb.append("<rule id=\""); + sb.append(StringTools.escapeXML(rule.getId())); + sb.append("\" name=\""); + sb.append(StringTools.escapeXML(rule.getDescription())); + sb.append("\">\n"); + sb.append("<pattern mark_from=\""); + sb.append(rule.startPositionCorrection); + sb.append("\" mark_to=\""); + sb.append(rule.endPositionCorrection); + sb.append('"'); + // for now, case sensitivity is per pattern, not per element, + // so just use the setting of the first element: + if (!rule.patternElements.isEmpty() && rule.patternElements.get(0).getCaseSensitive()) { + sb.append(" case_sensitive=\"yes\""); + } + sb.append(">\n"); + for (Element patternElement : rule.patternElements) { + sb.append("<token"); + if (patternElement.getNegation()) { + sb.append(" negate=\"yes\""); + } + if (patternElement.isRegularExpression()) { + sb.append(" regexp=\"yes\""); + } + if (patternElement.getPOStag() != null) { + sb.append(" postag=\""); + sb.append(patternElement.getPOStag()); + sb.append('"'); + } + if (patternElement.getPOSNegation()) { + sb.append(" negate_pos=\"yes\""); + } + if (patternElement.isInflected()) { + sb.append(" inflected=\"yes\""); + } + sb.append('>'); + if (patternElement.getString() != null) { + sb.append(StringTools.escapeXML(patternElement.getString())); + } else { + // TODO + } + sb.append("</token>\n"); + } + sb.append("</pattern>\n"); + sb.append("<message>"); + sb.append(StringTools.escapeXML(rule.getMessage())); + sb.append("</message>\n"); + if (rule.getIncorrectExamples() != null) { + for (IncorrectExample example : rule.getIncorrectExamples()) { + sb.append("<example type=\"incorrect\">"); + sb.append(StringTools.escapeXML(example.getExample())); + sb.append("</example>\n"); + } + } + if (rule.getCorrectExamples() != null) { + for (String example : rule.getCorrectExamples()) { + sb.append("<example type=\"correct\">"); + sb.append(StringTools.escapeXML(example)); + sb.append("</example>\n"); + } + } + sb.append("</rule>"); + return sb.toString(); + } + +} Added: trunk/JLanguageTool/src/test/org/languagetool/rules/patterns/PatternRuleXmlCreatorTest.java =================================================================== --- trunk/JLanguageTool/src/test/org/languagetool/rules/patterns/PatternRuleXmlCreatorTest.java (rev 0) +++ trunk/JLanguageTool/src/test/org/languagetool/rules/patterns/PatternRuleXmlCreatorTest.java 2012-04-01 10:46:03 UTC (rev 6675) @@ -0,0 +1,28 @@ +package org.languagetool.rules.patterns; + +import junit.framework.TestCase; +import org.languagetool.Language; + +import java.util.ArrayList; +import java.util.List; + +public class PatternRuleXmlCreatorTest extends TestCase { + + public void testToXML() throws Exception { + final PatternRuleXmlCreator xmlCreator = new PatternRuleXmlCreator(); + final List<Element> elements = new ArrayList<Element>(); + elements.add(new Element("der", false, false, false)); + elements.add(new Element("Haus", true, true, true)); + final PatternRule rule = new PatternRule("myId", Language.GERMAN, elements, "My Description", "My Message", "My short Message"); + final String xml = xmlCreator.toXML(rule); + // NOTE: this tests the current state, which is not complete: + assertEquals("<rule id=\"myId\" name=\"My Description\">\n" + + "<pattern mark_from=\"0\" mark_to=\"0\">\n" + + "<token>der</token>\n" + + "<token regexp=\"yes\" inflected=\"yes\">Haus</token>\n" + + "</pattern>\n" + + "<message>My Message</message>\n" + + "</rule>", xml); + } + +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. ------------------------------------------------------------------------------ This SF email is sponsosred by: Try Windows Azure free for 90 days Click Here http://p.sf.net/sfu/sfd2d-msazure _______________________________________________ Languagetool-cvs mailing list Languagetool-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/languagetool-cvs