add todo
[disclosr.git] / admin / neo4jimporter / src / main / java / StAXSample.java
blob:a/admin/neo4jimporter/src/main/java/StAXSample.java -> blob:b/admin/neo4jimporter/src/main/java/StAXSample.java
import org.neo4j.graphdb.DynamicLabel; import org.neo4j.graphdb.DynamicLabel;
import org.neo4j.graphdb.DynamicRelationshipType; import org.neo4j.graphdb.DynamicRelationshipType;
import org.neo4j.graphdb.Label; import org.neo4j.graphdb.Label;
import org.neo4j.unsafe.batchinsert.BatchInserter; import org.neo4j.unsafe.batchinsert.BatchInserter;
import org.neo4j.unsafe.batchinsert.BatchInserters; import org.neo4j.unsafe.batchinsert.BatchInserters;
   
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
   
import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLEventReader; import javax.xml.stream.XMLEventReader;
import javax.xml.stream.events.XMLEvent; import javax.xml.stream.events.XMLEvent;
   
public class StAXSample { public class StAXSample {
   
   
HashMap<String, Long> agencyIDs = new HashMap<String, Long>(); HashMap<String, Long> agencyIDs = new HashMap<String, Long>();
HashMap<String, Boolean> agencyFullVersion = new HashMap<String, Boolean>(); HashMap<String, Boolean> agencyFullVersion = new HashMap<String, Boolean>();
Label agencyLabel = DynamicLabel.label("Agency"); Label agencyLabel = DynamicLabel.label("Agency");
HashMap<String, Long> locationIDs = new HashMap<String, Long>(); HashMap<String, Long> locationIDs = new HashMap<String, Long>();
Label locationLabel = DynamicLabel.label("Location"); Label locationLabel = DynamicLabel.label("Location");
HashMap<String, Long> functionIDs = new HashMap<String, Long>(); HashMap<String, Long> functionIDs = new HashMap<String, Long>();
Label functionLabel = DynamicLabel.label("Function"); Label functionLabel = DynamicLabel.label("Function");
HashMap<String, Long> statusIDs = new HashMap<String, Long>(); HashMap<String, Long> statusIDs = new HashMap<String, Long>();
Label statusLabel = DynamicLabel.label("Location"); Label statusLabel = DynamicLabel.label("Location");
BatchInserter inserter; BatchInserter inserter;
   
private String filename; private String filename;
   
public StAXSample() { public StAXSample() {
} }
   
public static void main(String[] args) { public static void main(String[] args) {
/*if (args.length != 1) { /*if (args.length != 1) {
System.out.println("Usage: StAXSample file.xml"); System.out.println("Usage: StAXSample file.xml");
System.exit(-1); System.exit(-1);
} */ } */
   
StAXSample ss = new StAXSample(); StAXSample ss = new StAXSample();
//ss.setFilename(args[0]); //ss.setFilename(args[0]);
ss.setFilename("agency-sample.xml"); ss.setFilename("agency-sample.xml");
ss.run(); ss.run();
} }
   
public void run() { public void run() {
   
Map<String, String> config = new HashMap<String, String>(); Map<String, String> config = new HashMap<String, String>();
config.put("neostore.nodestore.db.mapped_memory", "90M"); config.put("neostore.nodestore.db.mapped_memory", "90M");
inserter = BatchInserters.inserter("target/batchinserter-example-config", config); inserter = BatchInserters.inserter("target/batchinserter-example-config", config);
inserter.createDeferredSchemaIndex(agencyLabel).on("agency_no"); inserter.createDeferredSchemaIndex(agencyLabel).on("agency_no");
inserter.createDeferredSchemaIndex(locationLabel).on("location_name"); inserter.createDeferredSchemaIndex(locationLabel).on("location_name");
inserter.createDeferredSchemaIndex(functionLabel).on("thesaurus_term"); inserter.createDeferredSchemaIndex(functionLabel).on("thesaurus_term");
inserter.createDeferredSchemaIndex(statusLabel).on("status_name"); inserter.createDeferredSchemaIndex(statusLabel).on("status_name");
   
try { try {
XMLInputFactory xmlif = XMLInputFactory.newInstance(); XMLInputFactory xmlif = XMLInputFactory.newInstance();
xmlif.setProperty( xmlif.setProperty(
XMLInputFactory.IS_REPLACING_ENTITY_REFERENCES, XMLInputFactory.IS_REPLACING_ENTITY_REFERENCES,
Boolean.TRUE); Boolean.TRUE);
xmlif.setProperty( xmlif.setProperty(
XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES,
Boolean.FALSE); Boolean.FALSE);
//set the IS_COALESCING property to true //set the IS_COALESCING property to true
//to get whole text data as one event. //to get whole text data as one event.
xmlif.setProperty(XMLInputFactory.IS_COALESCING, Boolean.TRUE); xmlif.setProperty(XMLInputFactory.IS_COALESCING, Boolean.TRUE);
   
try { try {
XMLEventReader r = null; XMLEventReader r = null;
r = xmlif.createXMLEventReader( r = xmlif.createXMLEventReader(
filename, filename,
//new FileInputStream(new File(xmlFileURL.toURI()))); //new FileInputStream(new File(xmlFileURL.toURI())));
new FileInputStream(new File(filename))); new FileInputStream(new File(filename)));
   
   
//iterate as long as there are more events on the input stream //iterate as long as there are more events on the input stream
Map<String, Object> previousAgency = new HashMap<String, Object>(); Map<String, Object> previousAgency = new HashMap<String, Object>();
while (r.hasNext()) { while (r.hasNext()) {
XMLEvent e = r.nextEvent(); XMLEvent e = r.nextEvent();
   
if (e.isStartElement()) { if (e.isStartElement()) {
if (hasStartTagName(e, "AGENCIES")) { if (hasStartTagName(e, "AGENCIES")) {
System.out.println("Agencies file loaded... "); System.out.println("Agencies file loaded... ");
} else if (hasStartTagName(e, "AGENCY_LINK")) { } else if (hasStartTagName(e, "AGENCY_LINK")) {
processAgencyLink(r); processAgencyLink(r);
} else if (hasStartTagName(e, "AGENCY_LOCATION")) { } else if (hasStartTagName(e, "AGENCY_LOCATION")) {
processAgencyLocation(r); processAgencyLocation(r);
} else if (hasStartTagName(e, "AGENCY_FUNCTION")) { } else if (hasStartTagName(e, "AGENCY_FUNCTION")) {
processAgencyFunction(r); processAgencyFunction(r);
} else if (hasStartTagName(e, "AGENCY_STATUS")) { } else if (hasStartTagName(e, "AGENCY_STATUS")) {
processAgencyStatus(r); processAgencyStatus(r);
  /* TODO
  Unhandled tag: AGENCY_NOTE content:
   
  Unhandled tag: NOTE_AGENCY_NO content:CA 4886
  Unhandled tag: NOTE_TYPE content:Archivists note
  Unhandled tag: NOTE content:null
  Unhandled tag: head content:
   
  Unexpected character 'C' (code 67) in start tag Expected a quote
  at [row,col,system-id]: [1093387,18,"agency-sample.xml"]
  */
} else if (hasStartTagName(e, "AGENCY_NO")) { } else if (hasStartTagName(e, "AGENCY_NO")) {
previousAgency.put("agency_no", getCharacters(r)); previousAgency.put("agency_no", getCharacters(r));
} else if (hasStartTagName(e, "TITLE")) { } else if (hasStartTagName(e, "TITLE")) {
previousAgency.put("name", getCharacters(r)); String title = getCharacters(r);
  previousAgency.put("name", title);
  previousAgency.put("label", title);
} else if (hasStartTagName(e, "START_DATE")) { } else if (hasStartTagName(e, "START_DATE")) {
previousAgency.put("start_date", getCharacters(r)); previousAgency.put("start_date", getCharacters(r));
} else if (hasStartTagName(e, "START_DATE_QUAL")) { } else if (hasStartTagName(e, "START_DATE_QUAL")) {
previousAgency.put("start_date_qual", getCharacters(r)); previousAgency.put("start_date_qual", getCharacters(r));
} else if (hasStartTagName(e, "ALTERNATIVE_TITLE")) { } else if (hasStartTagName(e, "ALTERNATIVE_TITLE")) {
previousAgency.put("alternative_title", getCharacters(r)); previousAgency.put("alternative_title", getCharacters(r));
} else if (hasStartTagName(e, "END_DATE")) { } else if (hasStartTagName(e, "END_DATE")) {
previousAgency.put("end_date", getCharacters(r)); previousAgency.put("end_date", getCharacters(r));
} else if (hasStartTagName(e, "END_DATE_QUAL")) { } else if (hasStartTagName(e, "END_DATE_QUAL")) {
previousAgency.put("end_date_qual", getCharacters(r)); previousAgency.put("end_date_qual", getCharacters(r));
// save agency // save agency
getAgency(previousAgency); getAgency(previousAgency);
previousAgency = new HashMap<String, Object>(); previousAgency = new HashMap<String, Object>();
} else { } else {
System.out.println("Unhandled tag: " + getStartTagName(e) + " content:" + getCharacters(r)); System.out.println("Unhandled tag: " + getStartTagName(e) + " content:" + getCharacters(r));
} }
} }
} }
} catch (XMLStreamException ex) { } catch (XMLStreamException ex) {
System.out.println(ex.getMessage()); System.out.println(ex.getMessage());
   
if (ex.getNestedException() != null) { if (ex.getNestedException() != null) {
ex.getNestedException().printStackTrace(); ex.getNestedException().printStackTrace();
} }
} }
   
} catch (FileNotFoundException ex) { } catch (FileNotFoundException ex) {
System.err.println("Error. Cannot find \"" + filename + "\" in classpath."); System.err.println("Error. Cannot find \"" + filename + "\" in classpath.");
ex.printStackTrace(); ex.printStackTrace();
} catch (Exception ex) { } catch (Exception ex) {
ex.printStackTrace(); ex.printStackTrace();
} }
   
inserter.shutdown(); inserter.shutdown();
} }
   
private long getAgency(Map<String, Object> properties) { private long getAgency(Map<String, Object> properties) {
if (agencyIDs.get(properties.get("agency_no").toString()) == null) { if (agencyIDs.get(properties.get("agency_no").toString()) == null) {
long agencyID = inserter.createNode(properties, agencyLabel); long agencyID = inserter.createNode(properties, agencyLabel);
if (properties.values().size() > 2) { if (properties.values().size() > 2) {
agencyFullVersion.put(properties.get("agency_no").toString(), true); agencyFullVersion.put(properties.get("agency_no").toString(), true);
} }
agencyIDs.put(properties.get("agency_no").toString(), agencyID); agencyIDs.put(properties.get("agency_no").toString(), agencyID);
  //if (agencyID % 10 == 0) {
  System.out.println("Agency #"+agencyID);
  //}
return agencyID; return agencyID;
} else { } else {
long agencyID = agencyIDs.get(properties.get("agency_no").toString()); long agencyID = agencyIDs.get(properties.get("agency_no").toString());
if (properties.values().size() > 2 && agencyFullVersion.get(properties.get("agency_no")) == null) { if (properties.values().size() > 2 && agencyFullVersion.get(properties.get("agency_no")) == null) {
inserter.setNodeProperties(agencyID, properties); inserter.setNodeProperties(agencyID, properties);
agencyFullVersion.put(properties.get("agency_no").toString(), true); agencyFullVersion.put(properties.get("agency_no").toString(), true);
} }
return agencyID; return agencyID;
} }
} }
   
private long getLocation(String locationName) { private long getLocation(String locationName) {
if (locationIDs.get(locationName) == null) { if (locationIDs.get(locationName) == null) {
HashMap properties = new HashMap< String,Object > (); HashMap properties = new HashMap< String,Object > ();
properties.put("name", locationName); properties.put("name", locationName);
  properties.put("label", locationName);
long locationID = inserter.createNode(properties, locationLabel); long locationID = inserter.createNode(properties, locationLabel);
locationIDs.put(locationName, locationID); locationIDs.put(locationName, locationID);
return locationID; return locationID;
} else { } else {
return locationIDs.get(locationName); return locationIDs.get(locationName);
} }
} }
private long getFunction(String functionName) { private long getFunction(String functionName) {
if (functionIDs.get(functionName) == null) { if (functionIDs.get(functionName) == null) {
HashMap properties = new HashMap< String,Object > (); HashMap properties = new HashMap< String,Object > ();
properties.put("name", functionName); properties.put("name", functionName);
  properties.put("label", functionName);
long functionID = inserter.createNode(properties, functionLabel); long functionID = inserter.createNode(properties, functionLabel);
functionIDs.put(functionName, functionID); functionIDs.put(functionName, functionID);
return functionID; return functionID;
} else { } else {
return functionIDs.get(functionName); return functionIDs.get(functionName);
} }
} }
private long getStatus(String statusName) { private long getStatus(String statusName) {
if (statusIDs.get(statusName) == null) { if (statusIDs.get(statusName) == null) {
HashMap properties = new HashMap< String,Object > (); HashMap properties = new HashMap< String,Object > ();
properties.put("name", statusName); properties.put("name", statusName);
  properties.put("label", statusName);
long statusID = inserter.createNode(properties, statusLabel); long statusID = inserter.createNode(properties, statusLabel);
statusIDs.put(statusName, statusID); statusIDs.put(statusName, statusID);
return statusID; return statusID;
} else { } else {
return statusIDs.get(statusName); return statusIDs.get(statusName);
} }
} }
   
private void processAgencyLink(XMLEventReader rdr) throws Exception { private void processAgencyLink(XMLEventReader rdr) throws Exception {
String agency_from_no = null; String agency_from_no = null;
String agency_to_no = null; String agency_to_no = null;
String link_type = null; String link_type = null;
String start_date = null; String start_date = null;
String start_date_qual = null; String start_date_qual = null;
String end_date = null; String end_date = null;
String end_date_qual = null; String end_date_qual = null;
   
while (rdr.hasNext()) { while (rdr.hasNext()) {
XMLEvent e = rdr.nextEvent(); XMLEvent e = rdr.nextEvent();
if (e.isStartElement()) { if (e.isStartElement()) {
if (hasStartTagName(e, "LINK_AGENCY_NO")) { if (hasStartTagName(e, "LINK_AGENCY_NO")) {
agency_from_no = getCharacters(rdr); agency_from_no = getCharacters(rdr);
} else if (hasStartTagName(e, "LINK_TO_AGENCY_NO")) { } else if (hasStartTagName(e, "LINK_TO_AGENCY_NO")) {
agency_to_no = getCharacters(rdr); agency_to_no = getCharacters(rdr);
} else if (hasStartTagName(e, "LINK_TYPE")) { } else if (hasStartTagName(e, "LINK_TYPE")) {
link_type = getCharacters(rdr); link_type = getCharacters(rdr);
} else if (hasStartTagName(e, "START_DATE")) { } else if (hasStartTagName(e, "START_DATE")) {
start_date = getCharacters(rdr); start_date = getCharacters(rdr);
}else if (hasStartTagName(e, "START_DATE_QUAL")) { }else if (hasStartTagName(e, "START_DATE_QUAL")) {
start_date_qual = getCharacters(rdr); start_date_qual = getCharacters(rdr);
}else if (hasStartTagName(e, "END_DATE")) { }else if (hasStartTagName(e, "END_DATE")) {
end_date = getCharacters(rdr); end_date = getCharacters(rdr);
}else if (hasStartTagName(e, "END_DATE_QUAL")) { }else if (hasStartTagName(e, "END_DATE_QUAL")) {
end_date_qual = getCharacters(rdr); end_date_qual = getCharacters(rdr);
} }
} }
if (e.isEndElement()) { if (e.isEndElement()) {
if (hasEndTagName(e, "AGENCY_LINK")) { if (hasEndTagName(e, "AGENCY_LINK")) {
   
//System.out.println("Finished processing link: Name = " + name + "; of = " + of + "; date = " + date); //System.out.println("Finished processing link: type = " + link_type+ "; from = " + agency_from_no + "; to = " + agency_to_no);
long agencyFromID, agencyToID; long agencyFromID, agencyToID;
Map<String, Object> agencyFromProperties = new HashMap<String, Object>(); Map<String, Object> agencyFromProperties = new HashMap<String, Object>();
agencyFromProperties.put("agency_no",agency_from_no); agencyFromProperties.put("agency_no",agency_from_no);
agencyFromID = getAgency(agencyFromProperties); agencyFromID = getAgency(agencyFromProperties);
Map<String, Object> agencyToProperties = new HashMap<String, Object>(); Map<String, Object> agencyToProperties = new HashMap<String, Object>();
agencyToProperties.put("agency_no",agency_to_no); agencyToProperties.put("agency_no",agency_to_no);
agencyToID = getAgency(agencyToProperties); agencyToID = getAgency(agencyToProperties);
Map<String, Object> relProperties = new HashMap<String, Object>(); Map<String, Object> relProperties = new HashMap<String, Object>();
relProperties.put("link_type", link_type); relProperties.put("link_type", link_type);
relProperties.put("start_date", start_date); relProperties.put("start_date", start_date);
if (start_date_qual != null && !start_date_qual.equals("(null)")) { if (start_date_qual != null && !start_date_qual.equals("(null)")) {
relProperties.put("start_date_qual", start_date_qual); relProperties.put("start_date_qual", start_date_qual);
} }
if (end_date != null && !end_date.equals("(null)")) { if (end_date != null && !end_date.equals("(null)")) {
relProperties.put("end_date", end_date); relProperties.put("end_date", end_date);
} }
if (end_date_qual != null && !end_date_qual.equals("(null)")) { if (end_date_qual != null && !end_date_qual.equals("(null)")) {
relProperties.put("end_date_qual", end_date_qual); relProperties.put("end_date_qual", end_date_qual);
} }
inserter.createRelationship(agencyFromID, agencyToID, inserter.createRelationship(agencyFromID, agencyToID,
DynamicRelationshipType.withName("IS_LINKED_TO"), relProperties); DynamicRelationshipType.withName("IS_LINKED_TO"), relProperties);
   
break; break;
} }
} }
} }
} }
   
private void processAgencyLocation(XMLEventReader rdr) throws Exception { private void processAgencyLocation(XMLEventReader rdr) throws Exception {
String of = null; String of = null;
String name = null; String name = null;
String date = null; String date = null;
   
while (rdr.hasNext()) { while (rdr.hasNext()) {
XMLEvent e = rdr.nextEvent(); XMLEvent e = rdr.nextEvent();
if (e.isStartElement()) { if (e.isStartElement()) {
if (hasStartTagName(e, "LOCATION_AGENCY_NO")) { if (hasStartTagName(e, "LOCATION_AGENCY_NO")) {
of = getCharacters(rdr); of = getCharacters(rdr);
} else if (hasStartTagName(e, "LOCATION_TEXT")) { } else if (hasStartTagName(e, "LOCATION_TEXT")) {
name = getCharacters(rdr); name = getCharacters(rdr);
} else if (hasStartTagName(e, "LOCATION_DATE")) { } else if (hasStartTagName(e, "LOCATION_DATE")) {
date = getCharacters(rdr); date = getCharacters(rdr);
} }
} }
if (e.isEndElement()) { if (e.isEndElement()) {
if (hasEndTagName(e, "AGENCY_LOCATION")) { if (hasEndTagName(e, "AGENCY_LOCATION")) {
System.out.println("Finished processing location: Name = " + name + "; of = " + of + "; date = " + date); //System.out.println("Finished processing location: Name = " + name + "; of = " + of + "; date = " + date);
long locationID, agencyID; long locationID, agencyID;
locationID = getLocation(name); locationID = getLocation(name);
Map<String, Object> agencyProperties = new HashMap<String, Object>(); Map<String, Object> agencyProperties = new HashMap<String, Object>();
agencyProperties.put("agency_no",of); agencyProperties.put("agency_no",of);
agencyID = getAgency(agencyProperties); agencyID = getAgency(agencyProperties);
Map<String, Object> relProperties = new HashMap<String, Object>(); Map<String, Object> relProperties = new HashMap<String, Object>();
relProperties.put("date", date); relProperties.put("date", date);
inserter.createRelationship(agencyID, locationID, inserter.createRelationship(agencyID, locationID,
DynamicRelationshipType.withName("HAS_LOCATION"), relProperties); DynamicRelationshipType.withName("HAS_LOCATION"), relProperties);
   
break; break;
} }
} }
} }
} }
   
private void processAgencyStatus(XMLEventReader rdr) throws Exception { private void processAgencyStatus(XMLEventReader rdr) throws Exception {
String of = null; String of = null;
String status = null; String status = null;
String date = null; String date = null;
   
while (rdr.hasNext()) { while (rdr.hasNext()) {
XMLEvent e = rdr.nextEvent(); XMLEvent e = rdr.nextEvent();
if (e.isStartElement()) { if (e.isStartElement()) {
if (hasStartTagName(e, "STATUS_AGENCY_NO")) { if (hasStartTagName(e, "STATUS_AGENCY_NO")) {
of = getCharacters(rdr); of = getCharacters(rdr);
} else if (hasStartTagName(e, "STATUS")) { } else if (hasStartTagName(e, "STATUS")) {
status = getCharacters(rdr); status = getCharacters(rdr);
} else if (hasStartTagName(e, "STATUS_DATE")) { } else if (hasStartTagName(e, "STATUS_DATE")) {
date = getCharacters(rdr); date = getCharacters(rdr);
} }
} }
if (e.isEndElement()) { if (e.isEndElement()) {
if (hasEndTagName(e, "AGENCY_STATUS")) { if (hasEndTagName(e, "AGENCY_STATUS")) {
System.out.println("Finished processing status: Status = " + status + "; of = " + of + "; date = " + date); //System.out.println("Finished processing status: Status = " + status + "; of = " + of + "; date = " + date);
long statusID, agencyID; long statusID, agencyID;
statusID = getStatus(status); statusID = getStatus(status);
Map<String, Object> agencyProperties = new HashMap<String, Object>(); Map<String, Object> agencyProperties = new HashMap<String, Object>();
agencyProperties.put("agency_no",of); agencyProperties.put("agency_no",of);
agencyID = getAgency(agencyProperties); agencyID = getAgency(agencyProperties);
Map<String, Object> relProperties = new HashMap<String, Object>(); Map<String, Object> relProperties = new HashMap<String, Object>();
relProperties.put("date", date); relProperties.put("date", date);
inserter.createRelationship(agencyID, statusID, inserter.createRelationship(agencyID, statusID,
DynamicRelationshipType.withName("HAS_STATUS"), relProperties); DynamicRelationshipType.withName("HAS_STATUS"), relProperties);
   
break; break;
} }
} }
} }
} }
   
private void processAgencyFunction(XMLEventReader rdr) throws Exception { private void processAgencyFunction(XMLEventReader rdr) throws Exception {
String agency = null; String agency = null;
String thesaurus_term = null; String thesaurus_term = null;
String start_date = null; String start_date = null;
String start_date_qual = null; String start_date_qual = null;
String end_date = null; String end_date = null;
String end_date_qual = null; String end_date_qual = null;
   
while (rdr.hasNext()) { while (rdr.hasNext()) {
XMLEvent e = rdr.nextEvent(); XMLEvent e = rdr.nextEvent();
if (e.isStartElement()) { if (e.isStartElement()) {
if (hasStartTagName(e, "FUNCTION_AGENCY_NO")) { if (hasStartTagName(e, "FUNCTION_AGENCY_NO")) {
agency = getCharacters(rdr); agency = getCharacters(rdr);
} else if (hasStartTagName(e, "THESAURUS_TERM")) { } else if (hasStartTagName(e, "THESAURUS_TERM")) {
thesaurus_term = getCharacters(rdr); thesaurus_term = getCharacters(rdr);
} else if (hasStartTagName(e, "START_DATE")) { } else if (hasStartTagName(e, "START_DATE")) {
start_date = getCharacters(rdr); start_date = getCharacters(rdr);
}else if (hasStartTagName(e, "START_DATE_QUAL")) { }else if (hasStartTagName(e, "START_DATE_QUAL")) {
start_date_qual = getCharacters(rdr); start_date_qual = getCharacters(rdr);
}else if (hasStartTagName(e, "END_DATE")) { }else if (hasStartTagName(e, "END_DATE")) {
end_date = getCharacters(rdr); end_date = getCharacters(rdr);
}else if (hasStartTagName(e, "END_DATE_QUAL")) { }else if (hasStartTagName(e, "END_DATE_QUAL")) {
end_date_qual = getCharacters(rdr); end_date_qual = getCharacters(rdr);
} }
} }
if (e.isEndElement()) { if (e.isEndElement()) {
if (hasEndTagName(e, "AGENCY_FUNCTION")) { if (hasEndTagName(e, "AGENCY_FUNCTION")) {
//System.out.println("Finished processing function: Name = " + name + "; of = " + of + "; date = " + date); //System.out.println("Finished processing function: Name = " + name + "; of = " + of + "; date = " + date);
long functionID, agencyID; long functionID, agencyID;
functionID = getFunction(thesaurus_term); functionID = getFunction(thesaurus_term);
Map<String, Object> agencyProperties = new HashMap<String, Object>(); Map<String, Object> agencyProperties = new HashMap<String, Object>();
agencyProperties.put("agency_no",agency); agencyProperties.put("agency_no",agency);
agencyID = getAgency(agencyProperties); agencyID = getAgency(agencyProperties);
Map<String, Object> relProperties = new HashMap<String, Object>(); Map<String, Object> relProperties = new HashMap<String, Object>();
relProperties.put("start_date", start_date); relProperties.put("start_date", start_date);
if (start_date_qual != null && !start_date_qual.equals("(null)")) { if (start_date_qual != null && !start_date_qual.equals("(null)")) {
relProperties.put("start_date_qual", start_date_qual); relProperties.put("start_date_qual", start_date_qual);
} }
if (end_date != null && !end_date.equals("(null)")) { if (end_date != null && !end_date.equals("(null)")) {
relProperties.put("end_date", end_date); relProperties.put("end_date", end_date);
} }
if (end_date_qual != null && !end_date_qual.equals("(null)")) { if (end_date_qual != null && !end_date_qual.equals("(null)")) {
relProperties.put("end_date_qual", end_date_qual); relProperties.put("end_date_qual", end_date_qual);
} }
inserter.createRelationship(agencyID, functionID, inserter.createRelationship(agencyID, functionID,
DynamicRelationshipType.withName("HAS_FUNCTION"), relProperties); DynamicRelationshipType.withName("HAS_FUNCTION"), relProperties);
   
break; break;
} }
} }
} }
} }
   
private String getCharacters(XMLEventReader rdr) throws XMLStreamException { private String getCharacters(XMLEventReader rdr) throws XMLStreamException {
XMLEvent e = rdr.nextEvent(); XMLEvent e = rdr.nextEvent();
if (e.isCharacters()) { if (e.isCharacters()) {
return e.asCharacters().getData(); return e.asCharacters().getData();
} else { } else {
return null; return null;
} }
} }
   
private boolean hasStartTagName(XMLEvent e, String name) { private boolean hasStartTagName(XMLEvent e, String name) {
return e.asStartElement().getName().getLocalPart().toLowerCase().equals(name.toLowerCase()); return e.asStartElement().getName().getLocalPart().toLowerCase().equals(name.toLowerCase());
} }
   
private String getStartTagName(XMLEvent e) { private String getStartTagName(XMLEvent e) {
return e.asStartElement().getName().getLocalPart(); return e.asStartElement().getName().getLocalPart();
} }
   
private boolean hasEndTagName(XMLEvent e, String name) { private boolean hasEndTagName(XMLEvent e, String name) {
return e.asEndElement().getName().getLocalPart().toLowerCase().equals(name.toLowerCase()); return e.asEndElement().getName().getLocalPart().toLowerCase().equals(name.toLowerCase());
} }
   
public void setFilename(String filename) { public void setFilename(String filename) {
this.filename = filename; this.filename = filename;
} }
   
   
} }