school/cs240/record-indexer/src/server/db/importer/Importer.java

236 lines
8.8 KiB
Java

package server.db.importer;
import org.apache.commons.io.FileUtils;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import server.db.*;
import server.db.common.Database;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.File;
public class Importer {
public static void main(String[] args) throws Exception {
Database.init(Database.PRODUCTION_MODE);
Database.erase();
new Importer().run(args[0]);
}
public void run(String xmlParam) throws Exception {
// Copy Files
String pathToXML = xmlParam;
File file = new File(pathToXML);
String basePath = file.getParentFile().getAbsolutePath();
String pathToImages = basePath + "/images/";
String pathToKnownData = basePath + "/knowndata/";
String pathToFieldHelp = basePath + "/fieldhelp/";
File destinationPath = new File("db/statics/");
// Copy images to statics/images
FileUtils.copyDirectoryToDirectory(new File(pathToImages), destinationPath);
// Copy known_data to statics/knownData
FileUtils.copyDirectoryToDirectory(new File(pathToKnownData), destinationPath);
// Copy field_help tp statics/fieldHelp
FileUtils.copyDirectoryToDirectory(new File(pathToFieldHelp), destinationPath);
// Import XML
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
File xmlFile = new File(pathToXML);
Document document = builder.parse(xmlFile);
NodeList usersList = document.getElementsByTagName("user");
for(int i = 0; i < usersList.getLength(); i++) {
// Get the the element
Element userElement = (Element)usersList.item(i);
parseUserBlock(userElement);
}
NodeList projectsList = document.getElementsByTagName("project");
for(int i = 0; i < projectsList.getLength(); i++) {
// Get the the element
Element projectElement = (Element)projectsList.item(i);
parseProjectBlock(projectElement);
NodeList fieldsList = projectElement.getElementsByTagName("field");
for(int j = 0; j < fieldsList.getLength(); j++) {
Element fieldElement = (Element)fieldsList.item(j);
parseFieldBlock(fieldElement, (j+1));
}
NodeList imagesList = projectElement.getElementsByTagName("image");
for(int j = 0; j < imagesList.getLength(); j++) {
Element imageElement = (Element)imagesList.item(j);
parseImageBlock(imageElement);
iteratingThroughRecords(imageElement);
}
}
}
public void iteratingThroughRecords(Element imageElement) throws Exception {
NodeList recordList = imageElement.getElementsByTagName("record");
for(int k = 0; k < recordList.getLength(); k++) {
Element recordElement = (Element)recordList.item(k);
parseRecordBlock(recordElement, (k + 1));
NodeList valueList = recordElement.getElementsByTagName("value");
for(int l = 0; l < valueList.getLength(); l++) {
Element valueElement = (Element)valueList.item(l);
parseValueBlock(valueElement, (l+1));
}
}
}
public UserAccessor parseUserBlock(Element userElement) throws Exception {
System.out.print("Parsing User Block ------- ");
UserAccessor userAccessor = new UserAccessor();
String username = userElement.getElementsByTagName("username").item(0).getTextContent();
String password = userElement.getElementsByTagName("password").item(0).getTextContent();
String firstname = userElement.getElementsByTagName("firstname").item(0).getTextContent();
String lastname = userElement.getElementsByTagName("lastname").item(0).getTextContent();
String email = userElement.getElementsByTagName("email").item(0).getTextContent();
String indexedrecords = userElement.getElementsByTagName("indexedrecords")
.item(0).getTextContent();
userAccessor.setUsername(username);
userAccessor.setPassword(password);
userAccessor.setFirstName(firstname);
userAccessor.setLastName(lastname);
userAccessor.setEmail(email);
userAccessor.setIndexedRecords(Integer.parseInt(indexedrecords));
if(userAccessor.save()) System.out.println("Success!");
else {
System.out.println("ERROR!");
throw new Exception("Error saving the user: " + userAccessor.getUsername());
}
return userAccessor;
}
public ProjectAccessor parseProjectBlock(Element projectElement) throws Exception {
System.out.print("Parsing Project Block ------- ");
ProjectAccessor projectAccessor = new ProjectAccessor();
String title = projectElement.getElementsByTagName("title").item(0).getTextContent();
String recordsperimage = projectElement.getElementsByTagName("recordsperimage")
.item(0).getTextContent();
String firstycoord = projectElement.getElementsByTagName("firstycoord")
.item(0).getTextContent();
String recordheight = projectElement.getElementsByTagName("recordheight")
.item(0).getTextContent();
projectAccessor.setTitle(title);
projectAccessor.setRecordsPerImage(Integer.parseInt(recordsperimage));
projectAccessor.setRecordHeight(Integer.parseInt(recordheight));
projectAccessor.setFirstYCoord(Integer.parseInt(firstycoord));
if(projectAccessor.save()) System.out.println("Success!");
else {
System.out.println("ERROR!");
throw new Exception("Error saving the: " + projectAccessor.getTitle());
}
return projectAccessor;
}
public FieldAccessor parseFieldBlock(Element fieldElement, int number) throws Exception {
System.out.print(" Parsing Field Block ------- ");
FieldAccessor fieldAccessor = new FieldAccessor();
String title = fieldElement.getElementsByTagName("title").item(0).getTextContent();
String xcoord = fieldElement.getElementsByTagName("xcoord").item(0).getTextContent();
String width = fieldElement.getElementsByTagName("width").item(0).getTextContent();
String helphtml = fieldElement.getElementsByTagName("helphtml").item(0).getTextContent();
String knowndata = null;
if(fieldElement.getElementsByTagName("knowndata").item(0) != null)
knowndata = fieldElement.getElementsByTagName("knowndata").item(0).getTextContent();
fieldAccessor.setTitle(title);
fieldAccessor.setxCoord(Integer.parseInt(xcoord));
fieldAccessor.setWidth(Integer.parseInt(width));
fieldAccessor.setHelpHtml(helphtml);
fieldAccessor.setKnownData(knowndata);
fieldAccessor.setPosition(number);
if(fieldAccessor.save()) System.out.println("Success!");
else {
System.out.println("ERROR!");
throw new Exception("Error saving the: " + fieldAccessor.getTitle());
}
return fieldAccessor;
}
public ImageAccessor parseImageBlock(Element imageElement) throws Exception {
System.out.print(" Parsing Image Block ------- ");
ImageAccessor imageAccessor = new ImageAccessor();
String file = imageElement.getElementsByTagName("file").item(0).getTextContent();
imageAccessor.setFile(file);
if(imageAccessor.save()) System.out.println("Success!");
else {
System.out.println("ERROR!");
throw new Exception("Error saving the: " + imageAccessor.getFile());
}
return imageAccessor;
}
public RecordAccessor parseRecordBlock(Element recordElement, int number) throws Exception {
System.out.print(" Parsing Record Block ------- ");
RecordAccessor recordAccessor = new RecordAccessor();
recordAccessor.setPosition(number);
if(recordAccessor.save()) System.out.println("Success!");
else {
System.out.println("ERROR!");
throw new Exception("Error saving the: " + recordAccessor.getId());
}
return recordAccessor;
}
public ValueAccessor parseValueBlock(Element valueElement, int number) throws Exception {
System.out.print(" Parsing Value Block ------- ");
ValueAccessor valueAccessor = new ValueAccessor();
String value = valueElement.getTextContent();
valueAccessor.setValue(value);
valueAccessor.setType("String");
valueAccessor.setPosition(number);
if(valueAccessor.save()) System.out.println("Success!");
else {
System.out.println("ERROR!");
throw new Exception("Error saving the: " + valueAccessor.getId());
}
return valueAccessor;
}
}