package com.cse10.duplicateDetector;
import com.cse10.database.DatabaseHandler;
import com.cse10.entities.CrimeEntityGroup;
import com.cse10.entities.LocationDistrictMapper;
import com.google.common.base.Charsets;
import com.google.common.io.Files;
import java.io.File;
import java.io.IOException;
import java.util.*;
import org.apache.log4j.Logger;
/**
* Created by Chamath on 2/4/2015.
*/
public class DataHandler {
private Logger log;
public DataHandler(){
log=Logger.getLogger(this.getClass());
}
/**
* read articles from file
*
* @return
*/
public List<String> readArticlesFromFile() {
List<String> documents;
try {
documents = Files.readLines(new File("DuplicateDetector\\src\\main\\resources\\test\\test_in.txt"), Charsets.UTF_8);
} catch (IOException e) {
documents = new ArrayList<String>();
e.printStackTrace();
}
return documents;
}
/**
* read articles(article entities) from data base and create article content
*
* @return
* @throws InterruptedException
*/
public HashMap<Integer, String> readArticlesFromDB() throws InterruptedException {
HashMap<Integer, String> articleContents = new HashMap<>();
//only fetch crime entity groups with null label and unique labels
ArrayList<CrimeEntityGroup> crimeEntityGroups = DatabaseHandler.fetchCrimeEntityGroupsWithNullOrUniqueLabels();
int counter = 0;
for (CrimeEntityGroup crimeEntityGroup : crimeEntityGroups) {
if (crimeEntityGroup.getLabel() == null) {
counter++;
}
}
if (counter > 0) {
Iterator iterator = crimeEntityGroups.listIterator();
System.out.println(crimeEntityGroups.size());
String content;
int id;
log.info(Thread.currentThread().getName() + " Duplicate Detector UI Handler -> Start Loading Data from Database");
//create article content from entities
while (iterator.hasNext()) {
CrimeEntityGroup crimeEntityGroup = (CrimeEntityGroup) iterator.next();
content = "";
System.out.println(Thread.currentThread().getName() + " Duplicate Detector UI Handler -> Crime Entity Details --------------------------------");
id = crimeEntityGroup.getId();
//crime type
String crimeType = crimeEntityGroup.getCrimeType();
if (crimeType != null) {
String[] crimeTypeElements = crimeType.split("_");
crimeType = "";
for (int i = 0; i < crimeTypeElements.length; i++) {
crimeType = crimeType.concat(crimeTypeElements[i]).concat(" ");
}
content = content.concat(crimeType);
}
//crime date
Date crimeDate = crimeEntityGroup.getCrimeDate();
if (crimeDate != null) {
String[] crimeDateElements = crimeDate.toString().split("-");
String crimeDateString = "";
for (int i = 0; i < crimeDateElements.length; i++) {
crimeDateString = crimeDateString.concat(crimeDateElements[i]);
}
content = content.concat(crimeDateString);
}
content = content.concat(" ");
//crime location and district
LocationDistrictMapper locationDistrictMapper = crimeEntityGroup.getLocationDistrict();
if (locationDistrictMapper != null) {
String location = locationDistrictMapper.getLocation();
if (location != null)
content = content.concat(location).concat(" ");
String district = crimeEntityGroup.getDistrict();
if (district != null)
content = content.concat(district);
}
log.info(Thread.currentThread().getName() + " Duplicate Detector UI Handler -> Content---" + content);
articleContents.put(id, content);
//if user stop the thread
checkInterruption();
}
}
//close data base
DatabaseHandler.closeDatabase();
log.info(Thread.currentThread().getName() + " Duplicate Detector UI Handler -> Finish Loading Data from Database");
return articleContents;
}
/**
* helper function to handle interruption
*/
private void checkInterruption() throws InterruptedException {
if (Thread.currentThread().isInterrupted()) {
throw new InterruptedException();
}
}
//wrapper methods for data base handler class methods
public CrimeEntityGroup fetchCrimeEntityGroup(int i) {
return DatabaseHandler.fetchCrimeEntityGroup(i);
}
public void updateCrimeEntityGroup(CrimeEntityGroup crimeEntityGroup) {
DatabaseHandler.updateCrimeEntityGroup(crimeEntityGroup);
}
public void closeDatabase() {
DatabaseHandler.closeDatabase();
}
}