Author: norman
Date: Fri Sep  1 14:02:51 2006
New Revision: 439481

URL: http://svn.apache.org/viewvc?rev=439481&view=rev
Log:
Add methods to BayesianAnalyterManagment and RemoteManager to import and export 
bayesian data. See JAMES-602

Modified:
    
james/server/trunk/src/java/org/apache/james/management/BayesianAnalyzerManagement.java
    
james/server/trunk/src/java/org/apache/james/remotemanager/RemoteManagerHandler.java
    
james/server/trunk/src/java/org/apache/james/services/BayesianAnalyzerManagementService.java

Modified: 
james/server/trunk/src/java/org/apache/james/management/BayesianAnalyzerManagement.java
URL: 
http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/management/BayesianAnalyzerManagement.java?rev=439481&r1=439480&r2=439481&view=diff
==============================================================================
--- 
james/server/trunk/src/java/org/apache/james/management/BayesianAnalyzerManagement.java
 (original)
+++ 
james/server/trunk/src/java/org/apache/james/management/BayesianAnalyzerManagement.java
 Fri Sep  1 14:02:51 2006
@@ -25,10 +25,14 @@
 import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
 import java.io.FileReader;
 import java.io.IOException;
 import java.io.InputStreamReader;
+import java.io.PrintWriter;
 import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.Map;
 
 import net.fortuna.mstor.data.MboxFile;
 
@@ -48,6 +52,9 @@
 import org.apache.james.services.BayesianAnalyzerManagementService;
 import org.apache.james.util.JDBCBayesianAnalyzer;
 
+import com.thoughtworks.xstream.XStream;
+import com.thoughtworks.xstream.io.xml.DomDriver;
+
 /**
  * Management for BayesianAnalyzer
  */
@@ -61,7 +68,6 @@
     private Context context;
     private String sqlFileUrl = "file://conf/sqlResources.xml";
     
-
     /**
      * @see 
org.apache.avalon.framework.service.Serviceable#service(ServiceManager)
      */
@@ -147,16 +153,16 @@
      * @see 
org.apache.james.services.BayesianAnalyzerManagementService#addHamFromMbox(String)
      */
     public int addHamFromMbox(String file) throws FileNotFoundException, 
IllegalArgumentException, IOException, SQLException, 
BayesianAnalyzerManagementException {
-    if (repos == null) throw new 
BayesianAnalyzerManagementException("RepositoryPath not configured");
-    return feedBayesianAnalyzerFromMbox(file,HAM);
+        if (repos == null) throw new 
BayesianAnalyzerManagementException("RepositoryPath not configured");
+        return feedBayesianAnalyzerFromMbox(file,HAM);
     }
 
     /**
      * @see 
org.apache.james.services.BayesianAnalyzerManagementService#addSpamFromMbox(String)
      */
     public int addSpamFromMbox(String file) throws FileNotFoundException, 
IllegalArgumentException, IOException, SQLException, 
BayesianAnalyzerManagementException {
-    if (repos == null) throw new 
BayesianAnalyzerManagementException("RepositoryPath not configured");
-    return feedBayesianAnalyzerFromMbox(file,SPAM);
+        if (repos == null) throw new 
BayesianAnalyzerManagementException("RepositoryPath not configured");
+        return feedBayesianAnalyzerFromMbox(file,SPAM);
     }
 
     /**
@@ -258,9 +264,93 @@
         return count;
     }
     
+    /**
+     * @see 
org.apache.james.services.BayesianAnalyzerManagementService#exportData(String)
+     */
+    public void exportData(String file) throws IOException, 
BayesianAnalyzerManagementException, SQLException {
+        if (repos == null) throw new 
BayesianAnalyzerManagementException("RepositoryPath not configured");
+    
+        synchronized(JDBCBayesianAnalyzer.DATABASE_LOCK) {    
+            analyzer.loadHamNSpam(component.getConnection());
+        
+            int hamMessageCount = analyzer.getHamMessageCount();
+            int spamMessageCount = analyzer.getSpamMessageCount();
+            Map hamTokenCounts = analyzer.getHamTokenCounts();
+            Map spamTokenCounts = analyzer.getSpamTokenCounts();
+            
+            XStream xstream = new XStream(new DomDriver());
+            xstream.alias("bayesianAnalyzer", BayesianAnalyzerXml.class);
+            PrintWriter printwriter = new PrintWriter(new 
FileOutputStream(file));
+            printwriter.println(xstream.toXML(new 
BayesianAnalyzerXml(hamMessageCount,spamMessageCount,hamTokenCounts,spamTokenCounts)));
+            printwriter.close();
+        }
+    }
+    
+    /**
+     * @see 
org.apache.james.services.BayesianAnalyzerManagementService#importData(String)
+     */
+    public void importData(String file) throws IOException, 
BayesianAnalyzerManagementException, SQLException, FileNotFoundException {
+    if (repos == null) throw new 
BayesianAnalyzerManagementException("RepositoryPath not configured");
+
+        synchronized(JDBCBayesianAnalyzer.DATABASE_LOCK){
+            XStream xstream = new XStream(new DomDriver());
+            
+            BayesianAnalyzerXml bAnalyzerXml = (BayesianAnalyzerXml) 
xstream.fromXML(new FileReader(file));
+        
+            // clear old data
+            analyzer.clear();
+            analyzer.tokenCountsClear();
+            
+            //TODO: Drop old corpus in database;
+            
+            // add the new data
+            analyzer.setHamMessageCount(bAnalyzerXml.getHamMessageCount());
+            analyzer.setSpamMessageCount(bAnalyzerXml.getSpamMessageCount());
+            analyzer.setHamTokenCounts(bAnalyzerXml.getHamTokenCounts());
+            analyzer.setSpamTokenCounts(bAnalyzerXml.getSpamTokenCounts());
+            analyzer.updateHamTokens(component.getConnection());
+            analyzer.updateSpamTokens(component.getConnection());
+        }
+        
+    }
+    
     private JDBCBayesianAnalyzer analyzer = new JDBCBayesianAnalyzer() {
         protected void delegatedLog(String logString) {
             // no logging
         }
     };    
+    
+    /**
+     * Inner class to represent the data in an xml file
+     */
+    private static class BayesianAnalyzerXml {
+        private int hamMessageCount = 0;
+        private int spamMessageCount = 0;
+        private Map hamTokenCounts = new HashMap();
+        private Map spamTokenCounts = new HashMap();
+    
+        public BayesianAnalyzerXml(int hamMessageCount, int spamMessageCount, 
Map hamTokenCounts, Map spamTokenCounts) {
+            this.hamMessageCount = hamMessageCount;
+            this.spamMessageCount = spamMessageCount;
+            this.hamTokenCounts = hamTokenCounts;
+            this.spamTokenCounts = spamTokenCounts;
+        }
+    
+        public int getHamMessageCount() {
+            return hamMessageCount;
+        }
+    
+        public int getSpamMessageCount() {
+            return spamMessageCount;
+        }
+    
+        public Map getHamTokenCounts() {
+            return hamTokenCounts;
+        }
+    
+        public Map getSpamTokenCounts() {
+            return spamTokenCounts;
+        }
+    
+    }
 }

Modified: 
james/server/trunk/src/java/org/apache/james/remotemanager/RemoteManagerHandler.java
URL: 
http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/remotemanager/RemoteManagerHandler.java?rev=439481&r1=439480&r2=439481&view=diff
==============================================================================
--- 
james/server/trunk/src/java/org/apache/james/remotemanager/RemoteManagerHandler.java
 (original)
+++ 
james/server/trunk/src/java/org/apache/james/remotemanager/RemoteManagerHandler.java
 Fri Sep  1 14:02:51 2006
@@ -157,6 +157,10 @@
      */
     private static final String COMMAND_ADDSPAM = "ADDSPAM";
     
+    private static final String COMMAND_EXPORTBAYESIANDATA = 
"EXPORTBAYESIANDATA";
+   
+    private static final String COMMAND_IMPORTBAYESIANDATA = 
"IMPORTBAYESIANDATA";
+    
     /**
      * The text string for the QUIT command
      */
@@ -343,7 +347,11 @@
         } else if (command.equals(COMMAND_ADDHAM)) {
             return doADDHAM(argument);
         } else if (command.equals(COMMAND_ADDSPAM)) {
-                return doADDSPAM(argument);
+            return doADDSPAM(argument);
+        } else if (command.equals(COMMAND_EXPORTBAYESIANDATA)) {
+            return doEXPORTBAYESIANDATA(argument);
+        } else if (command.equals(COMMAND_IMPORTBAYESIANDATA)) {
+            return doIMPORTBAYESIANDATA(argument);
         } else if (command.equals(COMMAND_QUIT)) {
             return doQUIT(argument);
         } else if (command.equals(COMMAND_SHUTDOWN)) {
@@ -606,6 +614,8 @@
         out.println("deletespool [spoolrepositoryname] ([key])      delete the 
mail assign to the given key. If no key is given all mails get deleted");
         out.println("addham dir/mbox [directory/mbox]               feed the 
BayesianAnalysisFeeder with the content of the directory or mbox file as HAM");
         out.println("addspam dir/mbox [directory/mbox]              feed the 
BayesianAnalysisFeeder with the content of the directory or mbox file as SPAM");
+        out.println("exportbayesiandata [file]                      export the 
BayesianAnalysis data to a xml file");
+        out.println("importbayesiandata [file]                      import the 
BayesianAnalysis data from a xml file");
         out.println("shutdown                                       kills the 
current JVM (convenient when James is run as a daemon)");
         out.println("quit                                           close 
connection");
         out.flush();
@@ -1192,6 +1202,92 @@
         if (exception != null) {
             getLogger().error("Error on feeding BayesianAnalysis: " + 
exception);
             out.println("Error on feeding BayesianAnalysis: " + exception);
+            out.flush();
+        }
+        return true;
+    }
+    
+   
+    
+    private boolean doEXPORTBAYESIANDATA(String argument) {
+        String exception = null;
+
+        // check if the command was called correct
+        if (argument == null || argument.trim().equals("")) {
+            writeLoggedFlushedResponse("Usage: EXPORTBAYESIANALYZERDATA 
[dir]");
+            return true;
+        }
+
+        try {
+            
+            // stop watchdog cause feeding can take some time
+            theWatchdog.stop();
+            
+            theConfigData.getBayesianAnalyzerManagement().exportData(argument);
+            out.println("Exported the BayesianAnalysis data");
+            out.flush();
+
+        } catch (SQLException e) {
+            exception = e.getMessage();
+        } catch (FileNotFoundException e) {
+            exception = e.getMessage();
+        } catch (IllegalArgumentException e) {
+            exception = e.getMessage();
+        } catch (IOException e) {
+            exception = e.getMessage();
+        } catch (BayesianAnalyzerManagementException e) {
+            writeLoggedFlushedResponse("Command disabled. Configure 
BayesianAnalyzerMangement to enable it");    
+            return true;
+        } finally {          
+            theWatchdog.start();
+        }
+    
+        // check if any exception was thrown
+        if (exception != null) {
+            getLogger().error("Error on exporting BayesianAnalysis data: " + 
exception);
+            out.println("Error on exporting BayesianAnalysis data: " + 
exception);
+            out.flush();
+        }
+        return true;
+    }
+    
+    private boolean doIMPORTBAYESIANDATA(String argument) {
+        String exception = null;
+
+        // check if the command was called correct
+        if (argument == null || argument.trim().equals("")) {
+            writeLoggedFlushedResponse("Usage: IMPORTBAYESIANALYZERDATA 
[dir]");
+            return true;
+        }
+
+        try {
+            
+            // stop watchdog cause feeding can take some time
+            theWatchdog.stop();
+            
+            theConfigData.getBayesianAnalyzerManagement().importData(argument);
+            out.println("Imported the BayesianAnalysis data");
+            out.flush();
+
+        } catch (SQLException e) {
+            exception = e.getMessage();
+        } catch (FileNotFoundException e) {
+            exception = e.getMessage();
+        } catch (IllegalArgumentException e) {
+            exception = e.getMessage();
+        } catch (IOException e) {
+            exception = e.getMessage();
+        } catch (BayesianAnalyzerManagementException e) {
+            writeLoggedFlushedResponse("Command disabled. Configure 
BayesianAnalyzerMangement to enable it");    
+            return true;
+        } finally {          
+            theWatchdog.start();
+        }
+    
+        // check if any exception was thrown
+        if (exception != null) {
+            getLogger().error("Error on importing BayesianAnalysis data: " + 
exception);
+            out.println("Error on imporitng BayesianAnalysis data: " + 
exception);
             out.flush();
         }
         return true;

Modified: 
james/server/trunk/src/java/org/apache/james/services/BayesianAnalyzerManagementService.java
URL: 
http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/services/BayesianAnalyzerManagementService.java?rev=439481&r1=439480&r2=439481&view=diff
==============================================================================
--- 
james/server/trunk/src/java/org/apache/james/services/BayesianAnalyzerManagementService.java
 (original)
+++ 
james/server/trunk/src/java/org/apache/james/services/BayesianAnalyzerManagementService.java
 Fri Sep  1 14:02:51 2006
@@ -82,4 +82,25 @@
      * @throws BayesianAnalyzerManagementException If the service is not 
configured
      */
     public int addHamFromMbox(String file) throws FileNotFoundException, 
IllegalArgumentException, IOException, SQLException, 
BayesianAnalyzerManagementException;
+
+    /**
+     * Export the data to a xml file
+     * 
+     * @param file The filename to store the data
+     * @throws IOException 
+     * @throws BayesianAnalyzerManagementException If the service is not 
configured
+     * @throws SQLException
+     */
+    public void exportData(String file) throws IOException, 
BayesianAnalyzerManagementException, SQLException;
+    
+    /**
+     * Import the data from a xml file
+     * 
+     * @param file The filename to export data from
+     * 
+     * @throws IOException
+     * @throws BayesianAnalyzerManagementException IF the service is not 
configured
+     * @throws SQLException
+     */
+    public void importData(String file) throws IOException, 
BayesianAnalyzerManagementException, SQLException;
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to