package org.hadatac.entity.pojo;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.beans.Field;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.client.solrj.response.UpdateResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.hadatac.metadata.loader.ValueCellProcessing;
import org.hadatac.utils.Collections;
import org.hadatac.utils.State;
import play.Play;
public class DataFile {
@Field("owner_email")
private String ownerEmail;
@Field("acquisition_uri")
private String dataAcquisitionUri;
@Field("dataset_uri")
private String datasetUri;
@Field("file_name")
private String fileName;
@Field("processed")
private boolean processed;
@Field("upload_time")
private String uploadTime;
@Field("process_time")
private String processTime;
public DataFile() {
ownerEmail = "";
dataAcquisitionUri = "";
datasetUri = "";
fileName = "";
uploadTime = "";
processTime = "";
processed = false;
}
public String getOwnerEmail() {
return ownerEmail;
}
public void setOwnerEmail(String ownerEmail) {
this.ownerEmail = ownerEmail;
}
public String getDataAcquisitionUri() {
return dataAcquisitionUri;
}
public void setDataAcquisitionUri(String dataAcquisitionUri) {
this.dataAcquisitionUri = dataAcquisitionUri;
}
public String getDatasetUri() {
return datasetUri;
}
public void setDatasetUri(String datasetUri) {
this.datasetUri = datasetUri;
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public boolean getProcessStatus() {
return processed;
}
public void setProcessStatus(boolean processed) {
this.processed = processed;
}
public String getUploadTime() {
return uploadTime;
}
public void setUploadTime(String uploadTime) {
this.uploadTime = uploadTime;
}
public String getProcessTime() {
return processTime;
}
public void setProcessTime(String processTime) {
this.processTime = processTime;
}
public int save() {
try {
SolrClient client = new HttpSolrClient(
Play.application().configuration().getString("hadatac.solr.data")
+ Collections.CSV_DATASET);
int status = client.addBean(this).getStatus();
client.commit();
client.close();
return status;
} catch (IOException | SolrServerException e) {
System.out.println("[ERROR] DataFile.save() - e.Message: " + e.getMessage());
return -1;
}
}
public int delete() {
try {
SolrClient solr = new HttpSolrClient(
Play.application().configuration().getString("hadatac.solr.data")
+ Collections.CSV_DATASET);
UpdateResponse response = solr.deleteById(this.getFileName());
solr.commit();
solr.close();
return response.getStatus();
} catch (SolrServerException e) {
System.out.println("[ERROR] DataFile.delete() - SolrServerException message: " + e.getMessage());
} catch (IOException e) {
System.out.println("[ERROR] DataFile.delete() - IOException message: " + e.getMessage());
} catch (Exception e) {
System.out.println("[ERROR] DataFile.delete() - Exception message: " + e.getMessage());
}
return -1;
}
public static DataFile convertFromSolr(SolrDocument doc) {
DataFile object = new DataFile();
object.setOwnerEmail(doc.getFieldValue("owner_email").toString());
object.setDataAcquisitionUri(ValueCellProcessing.replaceNameSpaceEx(doc.getFieldValue("acquisition_uri").toString()));
object.setDatasetUri(doc.getFieldValue("dataset_uri").toString());
object.setFileName(doc.getFieldValue("file_name").toString());
object.setProcessStatus(Boolean.parseBoolean(doc.getFieldValue("processed").toString()));
object.setUploadTime(doc.getFieldValue("upload_time").toString());
object.setProcessTime(doc.getFieldValue("process_time").toString());
return object;
}
public static List<DataFile> find(String ownerEmail, int state) {
SolrQuery query = new SolrQuery();
if (state == State.PROCESSED) {
query.set("q", "owner_email:\"" + ownerEmail + "\"" + " AND " + "processed:\"true\"");
}
else if (state == State.UNPROCESSED) {
query.set("q", "owner_email:\"" + ownerEmail + "\"" + " AND " + "processed:\"false\"");
}
query.set("rows", "10000000");
return findByQuery(query);
}
public static List<DataFile> findByQuery(SolrQuery query) {
List<DataFile> list = new ArrayList<DataFile>();
SolrClient solr = new HttpSolrClient(
Play.application().configuration().getString("hadatac.solr.data")
+ Collections.CSV_DATASET);
try {
QueryResponse response = solr.query(query);
solr.close();
SolrDocumentList results = response.getResults();
Iterator<SolrDocument> i = results.iterator();
while (i.hasNext()) {
list.add(convertFromSolr(i.next()));
}
} catch (Exception e) {
list.clear();
System.out.println("[ERROR] DataFile.find(SolrQuery) - Exception message: " + e.getMessage());
}
return list;
}
public static List<DataFile> findAll(int state) {
SolrQuery query = new SolrQuery();
if (state == State.PROCESSED) {
query.set("q", "processed:\"true\"");
}
else if (state == State.UNPROCESSED) {
query.set("q", "processed:\"false\"");
}
query.set("rows", "10000000");
return findByQuery(query);
}
public static DataFile findByName(String ownerEmail, String fileName) {
SolrQuery query = new SolrQuery();
if (null == ownerEmail) {
query.set("q", "file_name:\"" + fileName + "\"");
}
else {
query.set("q", "owner_email:\"" + ownerEmail + "\"" + " AND " + "file_name:\"" + fileName + "\"");
}
query.set("rows", "10000000");
List<DataFile> results = findByQuery(query);
if (!results.isEmpty()) {
return results.get(0);
}
return null;
}
}