package org.cellocad.adaptors.ucfadaptor;
import lombok.Getter;
import lombok.Setter;
import org.apache.log4j.Logger;
import org.cellocad.MIT.dnacompiler.UCF;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
/**
* Created by Bryan Der on 7/27/15.
*/
public class UCFReader {
public UCF readAllCollections(String ucf_file) {
UCF ucf = new UCF();
try {
FileReader reader = new FileReader(ucf_file);
try {
JSONParser jsonParser = new JSONParser();
JSONArray jsonArray = (JSONArray) jsonParser.parse(reader);
for(int i=0; i<jsonArray.size(); ++i) {
Map map = new HashMap();
try {
map = (Map) jsonArray.get(i);
} catch (Exception e) {
}
JSONObject obj = (JSONObject) jsonArray.get(i);
if(map.containsKey("collection")) {
if (map.get("collection").equals("header")) {
ucf.set_header( obj );
}
else if (map.get("collection").equals("measurement_std")) {
ucf.set_measurement_std( obj );
}
else if (map.get("collection").equals("logic_constraints")) {
ucf.set_logic_constraints( obj );
}
else if (map.get("collection").equals("motif_library")) {
ucf.get_motif_library().add( obj );
}
else if (map.get("collection").equals("response_functions")) {
ucf.get_response_functions().add( obj );
}
else if (map.get("collection").equals("parts")) {
ucf.get_parts().add( obj );
}
else if (map.get("collection").equals("gate_parts")) {
ucf.get_gate_parts().add( obj );
}
else if (map.get("collection").equals("gate_toxicity")) {
ucf.get_gate_toxicity().add( obj );
}
else if (map.get("collection").equals("gate_cytometry")) {
ucf.get_gate_cytometry().add( obj );
}
else if (map.get("collection").equals("gates")) {
ucf.get_gates().add( obj );
}
else if (map.get("collection").equals("eugene_rules")) {
ucf.set_eugene_rules( obj );
}
else if (map.get("collection").equals("genetic_locations")) {
ucf.set_genetic_locations( obj );
}
else if (map.get("collection").equals("tandem_promoter")) {
ucf.get_tandem_promoters().add( obj );
}
}
else {
logger.info("unknown json object in UCF");
return null;
}
}
}catch (org.json.simple.parser.ParseException e) {
e.printStackTrace();
}catch (IOException e){
e.printStackTrace();
}
}catch(FileNotFoundException e) {
e.printStackTrace();
}
return ucf;
}
@Getter
@Setter
private String threadDependentLoggername;
private Logger logger = Logger.getLogger(getClass());
}