So far it works and im happy with it. But i want to add methods to
"clear" the data in the database to reset the trained data before import
and to clear the data from RemoteManager . I whould like to add it to
JDBCBayesianAnalysis. Any problems with that ?

bye
Norman

Am Freitag, den 01.09.2006, 21:02 +0000 schrieb [EMAIL PROTECTED]:
> 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]
> 
> !EXCUBATOR:1,44f8a01745113507111913!

Attachment: signature.asc
Description: Dies ist ein digital signierter Nachrichtenteil

Reply via email to