/*
* @(#)ScanFile.java 10/11/2004
*
* Copyright (c) 2004, 2005 jASEN.org
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the distribution.
*
* 3. The names of the authors may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* 4. Any modification or additions to the software must be contributed back
* to the project.
*
* 5. Any investigation or reverse engineering of source code or binary to
* enable emails to bypass the filters, and hence inflict spam and or viruses
* onto users who use or do not use jASEN could subject the perpetrator to
* criminal and or civil liability.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JASEN.ORG,
* OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
package org.jasen.samples;
import java.io.File;
import java.io.FileInputStream;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import javax.mail.internet.MimeMessage;
import org.jasen.JasenScanner;
import org.jasen.core.engine.Jasen;
import org.jasen.error.EmptyErrorHandler;
import org.jasen.error.ErrorHandlerBroker;
import org.jasen.event.JasenScanListener;
import org.jasen.interfaces.JasenScanResult;
/**
* <P>
* Performs a scan on a single file using the default configurations in the engine.
* </P>
* <p>
* This class is for TESTING ONLY
* </p>
* @author Jason Polites
*/
public class ScanFile
{
/**
* <p>
* Just a sample scan listener
* </p>
*/
static final class ScanListener extends JasenScanListener {
public void onScanEnd() {
System.out.println ("");
System.out.println("*** Scan Finished ***");
System.out.println ("");
}
public void onScanStart() {
System.out.println ("");
System.out.println("*** Scan Started ***");
System.out.println ("");
}
}
public static void main(String[] args) {
try
{
if(args.length < 1) {
System.out.println ("Usage: ScanFile <file path>");
}
else
{
File file = new File(args[0]);
FileInputStream fin = new FileInputStream(file);
MimeMessage mm = new MimeMessage(null, fin);
System.out.println ("Initialising jASEN ...");
JasenScanner.getInstance().init();
JasenScanner.getInstance().setScanListener(new ScanListener());
ErrorHandlerBroker.getInstance().setErrorHandler(new EmptyErrorHandler());
System.out.println ("Scanning file..." + args[0]);
System.out.println ("");
System.out.println ("Test Results");
System.out.println ("----------------------------------");
JasenScanResult result = JasenScanner.getInstance().scan(mm);
NumberFormat formatter = new DecimalFormat("0.000");
System.out.println ("Prob\t: Time\t\t: Scanner");
System.out.println ("----------------------------------");
if(result.getTestResults() != null) {
for (int i = 0; i < result.getTestResults().length; i++)
{
System.out.print (formatter.format(Double.parseDouble(result.getTestResults()[i][Jasen.RESULT_INDEX_PROBABILITY])));
System.out.print ("\t: ");
System.out.print (formatter.format(Double.parseDouble(result.getTestResults()[i][Jasen.RESULT_INDEX_TIME])));
System.out.print (" (ms)\t: ");
System.out.print (result.getTestResults()[i][Jasen.RESULT_INDEX_DISPLAY]);
System.out.print (" (");
System.out.print (result.getTestResults()[i][Jasen.RESULT_INDEX_NAME]);
System.out.println (")");
}
}
System.out.println ("");
System.out.println ("Overall (normalized) Result");
System.out.println ("----------------------------------");
System.out.println (result.getProbability());
System.out.println ("");
System.out.println ("Judgement:");
System.out.println ("");
if(result.getProbability() >= 0.9) {
System.out.println ("Most likely SPAM");
}
else if (result.getProbability() <= 0.1) {
System.out.println ("Most likely HAM");
}
else {
System.out.println ("Can't be sure. Borderline case");
}
System.out.println ("");
}
}
catch (Exception e)
{
e.printStackTrace ();
}
finally {
JasenScanner.getInstance().destroy();
}
}
}