package com.cse10.analyzer;
import com.cse10.database.DatabaseConstants;
import java.util.Observable;
/**
* Created by Sampath on 1/16/15.
*/
public class AnalyzerController extends Observable {
private static AnalyzerController analyzerController;
private AnalyzerController(){
}
public static AnalyzerController getInstance(){
if (analyzerController == null)
analyzerController = new AnalyzerController();
return analyzerController;
}
/*
* initiate analysis process
*/
public void analyze(){
setProgress(10);
Analyzer statGen = new Analyzer();
setProgress(25);
statGen.generateStats("2012-01-01", "2014-12-31");
setProgress(100);
}
/*
* initiate prediction process
*/
public void predict(){
//Initializing the prediction
String[] fields1= {"crime_type", "crime_district"};
String[] fields2= {"crime_type"};
String[] fields3= {"crime_district"};
PredictorAlgorithm enlAlgo = new ENLPredictorAlgorithm();
Predictor predictor = new Predictor(enlAlgo,"predictions",fields1);
Predictor predictor_type = new Predictor(enlAlgo,"predictions_type",fields2);
Predictor predictor_district = new Predictor(enlAlgo,"predictions_district",fields3);
setProgress(10);
//predictions
String[] quarters1 = {"2012 - 1", "2012 - 2", "2012 - 3", "2012 - 4", "2013 - 1", "2013 - 2", "2013 - 3", "2013 - 4"};
predictor.predict(quarters1,"2014 - 1");
predictor_type.predict(quarters1, "2014 - 1");
predictor_district.predict(quarters1,"2014 - 1");
setProgress(20);
String[] quarters2 = { "2012 - 2", "2012 - 3", "2012 - 4", "2013 - 1", "2013 - 2", "2013 - 3", "2013 - 4", "2014 - 1"};
predictor.predict(quarters2,"2014 - 2");
predictor_type.predict(quarters2, "2014 - 2");
predictor_district.predict(quarters2,"2014 - 2");
setProgress(30);
String[] quarters3 = { "2012 - 3", "2012 - 4", "2013 - 1", "2013 - 2", "2013 - 3", "2013 - 4", "2014 - 1", "2014 - 2"};
predictor.predict(quarters3,"2014 - 3");
predictor_type.predict(quarters3, "2014 - 3");
predictor_district.predict(quarters3,"2014 - 3");
setProgress(40);
String[] quarters4 = { "2012 - 4", "2013 - 1", "2013 - 2", "2013 - 3", "2013 - 4", "2014 - 1", "2014 - 2", "2014 - 3"};
predictor.predict(quarters4,"2014 - 4");
predictor_type.predict(quarters4, "2014 - 4");
predictor_district.predict(quarters4,"2014 - 4");
setProgress(50);
String[] quarters = {"2013 - 1", "2013 - 2", "2013 - 3", "2013 - 4", "2014 - 1", "2014 - 2", "2014 - 3", "2014 - 4"};
predictor.predict(quarters,"2015 - 1");
predictor_type.predict(quarters, "2015 - 1");
predictor_district.predict(quarters,"2015 - 1");
setProgress(60);
predictor.predict(quarters,"2015 - 2");
//predictor_type.predict(quarters, "2015 - 2",13);
predictor_district.predict(quarters,"2015 - 2");
setProgress(70);
predictor.predict(quarters,"2015 - 3");
//predictor_type.predict(quarters, "2015 - 3",8);
predictor_district.predict(quarters,"2015 - 3");
setProgress(80);
predictor.predict(quarters,"2015 - 4");
//predictor_type.predict(quarters, "2015 - 4",8);
predictor_district.predict(quarters,"2015 - 4");
setProgress(90);
//measuring accuracy
System.out.println("mean square error is: "+predictor.getMeanSqureError("predictions"));
setProgress(100);
}
/*
* initiation upload process
*/
public void upload(){
Uploader uploader = new Uploader(DatabaseConstants.WEBGUIDB_USERNAME,
DatabaseConstants.WEBGUIDB_PASSWORD,
DatabaseConstants.WEBGUIDB_DATABASE,
DatabaseConstants.WEBGUIDB_HOST,
DatabaseConstants.WEBGUIDB_PORT);
setProgress(10);
uploader.upload("news_statistics", "crimes");
setProgress(40);
uploader.upload("predictions", "predictions");
setProgress(70);
uploader.upload("predictions_type", "predictions_type");
setProgress(100);
}
/*
public static void main(String[] args){
AnalyzerController ac = AnalyzerController.getInstance();
ac.analyze();
ac.predict();
ac.upload();
}
*/
/*
* notify the progress to admin gui
*/
private void setProgress(int progress){
System.out.println(progress);
setChanged();
notifyObservers(progress);
}
}