Revision: 7039
          
http://languagetool.svn.sourceforge.net/languagetool/?rev=7039&view=rev
Author:   milek_pl
Date:     2012-05-23 09:04:43 +0000 (Wed, 23 May 2012)
Log Message:
-----------
add new parameters for enabling and disabling rules for the HTTP interface

Modified Paths:
--------------
    trunk/JLanguageTool/CHANGES.txt
    trunk/JLanguageTool/src/java/org/languagetool/Main.java
    
trunk/JLanguageTool/src/java/org/languagetool/server/LanguageToolHttpHandler.java
    trunk/JLanguageTool/src/java/org/languagetool/tools/Tools.java
    trunk/JLanguageTool/src/test/org/languagetool/server/HTTPServerTest.java

Modified: trunk/JLanguageTool/CHANGES.txt
===================================================================
--- trunk/JLanguageTool/CHANGES.txt     2012-05-23 08:13:15 UTC (rev 7038)
+++ trunk/JLanguageTool/CHANGES.txt     2012-05-23 09:04:43 UTC (rev 7039)
@@ -44,7 +44,10 @@
   
  -If you start the HTTP Server from the GUI, it now reads the configuration 
files 
   that are configured in the GUI (if the appropriate checkbox is set). 
-  This way the user can control the behavior of the server easily. 
+  This way the user can control the behavior of the server easily.
+  
+ -Two new options for the HTTP Server added: "disabled" and "enabled", which 
is used 
+  to disable or enable rules in the same way as on the command-line. 
 
  -The XML format for rules has been changed to use <marker>...</marker> tags 
instead
   of mark_from and mark_to attributes

Modified: trunk/JLanguageTool/src/java/org/languagetool/Main.java
===================================================================
--- trunk/JLanguageTool/src/java/org/languagetool/Main.java     2012-05-23 
08:13:15 UTC (rev 7038)
+++ trunk/JLanguageTool/src/java/org/languagetool/Main.java     2012-05-23 
09:04:43 UTC (rev 7039)
@@ -91,34 +91,13 @@
     lt = new JLanguageTool(language, motherTongue);
     lt.activateDefaultPatternRules();
     lt.activateDefaultFalseFriendRules();
-    selectRules(lt, disabledRules, enabledRules);
+    Tools.selectRules(lt, disabledRules, enabledRules);
   }
 
   JLanguageTool getJLanguageTool() {
     return lt;
   }
-
-  private void selectRules(final JLanguageTool lt, final String[] 
disabledRules, final String[] enabledRules) {
-    // disable rules that are disabled explicitly:
-    for (final String disabledRule : disabledRules) {
-      lt.disableRule(disabledRule);
-    }
-    // disable all rules except those enabled explicitly, if any:
-    if (enabledRules.length > 0) {
-      final Set<String> enabledRuleIDs = new HashSet<String>(Arrays
-          .asList(enabledRules));
-      for (String ruleName : enabledRuleIDs) {
-        lt.enableDefaultOffRule(ruleName);
-        lt.enableRule(ruleName);
-      }
-      for (Rule rule : lt.getAllRules()) {
-        if (!enabledRuleIDs.contains(rule.getId())) {
-          lt.disableRule(rule.getId());
-        }
-      }
-    }
-  }
-
+  
   private void setListUnknownWords(final boolean listUnknownWords) {
     lt.setListUnknownWords(listUnknownWords);
   }
@@ -139,8 +118,8 @@
     lt = new JLanguageTool(target, null);
     srcLt = new JLanguageTool(sourceLang);
     lt.activateDefaultPatternRules();
-    selectRules(lt, disabledRules, enabledRules);
-    selectRules(srcLt, disabledRules, enabledRules);
+    Tools.selectRules(lt, disabledRules, enabledRules);
+    Tools.selectRules(srcLt, disabledRules, enabledRules);
     bRules = Tools.getBitextRules(sourceLang, lt.getLanguage());
 
     List<BitextRule> bRuleList = new ArrayList<BitextRule>(bRules);
@@ -444,7 +423,7 @@
       lt = new JLanguageTool(language, motherTongue);
       lt.activateDefaultPatternRules();
       lt.activateDefaultFalseFriendRules();
-      selectRules(lt, disabledRules, enabledRules);
+      Tools.selectRules(lt, disabledRules, enabledRules);
       if (verbose) {
         lt.setOutput(System.err);
       }

Modified: 
trunk/JLanguageTool/src/java/org/languagetool/server/LanguageToolHttpHandler.java
===================================================================
--- 
trunk/JLanguageTool/src/java/org/languagetool/server/LanguageToolHttpHandler.java
   2012-05-23 08:13:15 UTC (rev 7038)
+++ 
trunk/JLanguageTool/src/java/org/languagetool/server/LanguageToolHttpHandler.java
   2012-05-23 09:04:43 UTC (rev 7039)
@@ -31,6 +31,11 @@
   private final boolean internalServer;
   
   private final Configuration config;
+  
+  private boolean useQuerySettings;
+  
+  private String[] enabledRules = new String[0];
+  private String[] disabledRules = new String[0];
  
   LanguageToolHttpHandler(boolean verbose, Set<String> allowedIps,
                  boolean internal) throws IOException {
@@ -127,9 +132,20 @@
       motherTongue = Language.getLanguageForShortName(motherTongueParam);
     }
 
-    // TODO: how to take options from the client?
-    // TODO: customize LT here after reading client options
-
+    final String enabledParam = parameters.get("enabled");
+    enabledRules = new String[0];
+    if (null != enabledParam) {
+       enabledRules = enabledParam.split(",");
+    }
+    
+    final String disabledParam = parameters.get("disabled");
+    disabledRules = new String[0];
+    if (null != disabledParam) {
+       disabledRules = disabledParam.split(",");
+    }
+    
+    useQuerySettings = enabledRules.length > 0 || disabledRules.length > 0; 
+    
     final List<RuleMatch> matches;
     final String sourceText = parameters.get("srctext");
     if (sourceText == null) {
@@ -200,9 +216,14 @@
     final JLanguageTool newLanguageTool = new JLanguageTool(lang, 
motherTongue);
     newLanguageTool.activateDefaultPatternRules();
     newLanguageTool.activateDefaultFalseFriendRules();
-    if (internalServer && config.getUseGUIConfig()) { // use the GUI config 
values
+    if (!useQuerySettings && internalServer && config.getUseGUIConfig()) { // 
use the GUI config values
        configureGUI(lang, newLanguageTool);
     }
+    
+    if (useQuerySettings) {
+       Tools.selectRules(newLanguageTool, disabledRules, enabledRules);
+    }
+    
     return newLanguageTool;
   }
       

Modified: trunk/JLanguageTool/src/java/org/languagetool/tools/Tools.java
===================================================================
--- trunk/JLanguageTool/src/java/org/languagetool/tools/Tools.java      
2012-05-23 08:13:15 UTC (rev 7038)
+++ trunk/JLanguageTool/src/java/org/languagetool/tools/Tools.java      
2012-05-23 09:04:43 UTC (rev 7039)
@@ -577,5 +577,27 @@
     }
     return is;
   }
+  
+  public static void selectRules(final JLanguageTool lt, final String[] 
disabledRules, final String[] enabledRules) {
+           // disable rules that are disabled explicitly:
+           for (final String disabledRule : disabledRules) {
+             lt.disableRule(disabledRule);
+           }
+           // disable all rules except those enabled explicitly, if any:
+           if (enabledRules.length > 0) {
+             final Set<String> enabledRuleIDs = new HashSet<String>(Arrays
+                 .asList(enabledRules));
+             for (String ruleName : enabledRuleIDs) {
+               lt.enableDefaultOffRule(ruleName);
+               lt.enableRule(ruleName);
+             }
+             for (Rule rule : lt.getAllRules()) {
+               if (!enabledRuleIDs.contains(rule.getId())) {
+                 lt.disableRule(rule.getId());
+               }
+             }
+           }
+         }
 
+
 }

Modified: 
trunk/JLanguageTool/src/test/org/languagetool/server/HTTPServerTest.java
===================================================================
--- trunk/JLanguageTool/src/test/org/languagetool/server/HTTPServerTest.java    
2012-05-23 08:13:15 UTC (rev 7038)
+++ trunk/JLanguageTool/src/test/org/languagetool/server/HTTPServerTest.java    
2012-05-23 09:04:43 UTC (rev 7039)
@@ -89,9 +89,30 @@
     assertTrue(check(Language.ENGLISH, Language.GERMAN, "We will berate 
you").contains("BERATE"));
     assertTrue(check(Language.GERMAN, Language.ENGLISH, "Man sollte ihn nicht 
so beraten.").contains("BERATE"));
     assertTrue(check(Language.POLISH, Language.ENGLISH, "To jest 
frywolne.").contains("FRIVOLOUS"));
+      
     //tests for bitext
     assertTrue(bitextCheck(Language.POLISH, Language.ENGLISH, "This is 
frivolous.", "To jest frywolne.").contains("FRIVOLOUS"));
     assertTrue(!bitextCheck(Language.POLISH, Language.ENGLISH, "This is 
something else.", "To jest frywolne.").contains("FRIVOLOUS"));
+    
+    //test for no changed if no options set
+    String[] nothing = new String[0];
+    assertEquals(check(Language.ENGLISH, Language.GERMAN, "We will berate 
you"), 
+               checkWithOptions(Language.ENGLISH, Language.GERMAN, "We will 
berate you", nothing, nothing));
+    
+    //disabling
+    String[] disableAvsAn = new String[1];
+    disableAvsAn[0] = "EN_A_VS_AN";
+    assertTrue(!checkWithOptions(
+               Language.ENGLISH, Language.GERMAN, "This is an test", nothing, 
disableAvsAn).contains("an test"));
+
+    //enabling
+    assertTrue(checkWithOptions(
+               Language.ENGLISH, Language.GERMAN, "This is an test", 
disableAvsAn, nothing).contains("an test"));
+    //should also mean disabling all other rules...
+    assertTrue(!checkWithOptions(
+               Language.ENGLISH, Language.GERMAN, "We will berate you", 
disableAvsAn, nothing).contains("BERATE"));
+    
+    
   }
 
   public void testAccessDenied() throws Exception {
@@ -138,6 +159,28 @@
     return result;
   }
   
+  private String checkWithOptions(Language lang, Language motherTongue, String 
text, 
+                 String[] enabledRules, String[] disabledRules) throws 
IOException {
+         String urlOptions = "/?language=" + lang.getShortName();
+           urlOptions += "&text=" + URLEncoder.encode(text, "UTF-8"); // 
latin1 is not enough for languages like polish, romanian, etc
+           if (null != motherTongue) {
+               urlOptions += "&motherTongue=" + motherTongue.getShortName();
+           }
+                   
+           if (disabledRules.length > 0) {         
+               urlOptions += "&disabled=" + join(disabledRules, ",");
+           }
+           if (enabledRules.length > 0) {
+               urlOptions += "&enabled=" + join(enabledRules, ",");
+           }
+           
+           final URL url = new URL("http://localhost:"; + 
HTTPServer.DEFAULT_PORT + urlOptions);
+           final InputStream stream = (InputStream)url.getContent();
+           final String result = StringTools.streamToString(stream, "UTF-8");
+           return result;
+         
+  }
+  
   /**
    * Same as {@link #check(Language, String)} but using HTTP POST method 
instead of GET
    */
@@ -157,4 +200,13 @@
     }
   }
   
+  private static String join(String[] s, String delimiter) {
+           if (s == null || s.length == 0 ) return "";
+           StringBuilder builder = new StringBuilder(s[0]);
+           for (int i = 1; i < s.length; i++) {
+               builder.append(delimiter).append(s);
+           }
+           return builder.toString();
+       }
+  
 }

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Languagetool-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/languagetool-cvs

Reply via email to