package org.cloudgraph.web.etl.loader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.cloudgraph.web.config.imex.DataImport;
import org.cloudgraph.web.sdo.categorization.Categorization;
import org.cloudgraph.web.sdo.categorization.Category;
import org.cloudgraph.web.sdo.core.PropertyCategorization;
import org.cloudgraph.web.sdo.meta.Classifier;
import org.cloudgraph.web.sdo.meta.Clazz;
import org.cloudgraph.web.sdo.meta.Property;
import org.plasma.sdo.PlasmaChangeSummary;
import org.plasma.sdo.core.CoreDataObject;
import org.plasma.sdo.helper.PlasmaQueryHelper;
import org.plasma.sdo.helper.PlasmaXMLHelper;
import org.plasma.sdo.xml.DefaultOptions;
import commonj.sdo.helper.XMLDocument;
public class PropertyLoader extends AbstractLoader
implements Loader
{
private static Log log = LogFactory.getLog(PropertyLoader.class);
public PropertyLoader(DataImport dataImport) {
super(dataImport);
}
@Override
public void define(File queryFile) {
log.info("defining Query so new export-specific types are known");
InputStream stream;
try {
stream = new FileInputStream(queryFile);
} catch (FileNotFoundException e) {
log.error(e.getMessage(), e);
throw new RuntimeException(e);
}
PlasmaQueryHelper.INSTANCE.define(stream,
"http://apls/export/property",
"http://fs.fed.us/bao/apls/meta");
}
@Override
public void load(File file) {
log.info("loading file " + file.getName());
DefaultOptions options = new DefaultOptions("");
options.setRootNamespacePrefix("xyz");
options.setValidate(false);
options.setFailOnValidationError(false);
InputStream xmlloadis;
try {
xmlloadis = new FileInputStream(file);
XMLDocument doc = PlasmaXMLHelper.INSTANCE.load(xmlloadis,
null, options);
// do some fix up not yet accommodated by SDO XML load
Property prop = (Property)doc.getRootObject();
CoreDataObject obj = ((CoreDataObject)prop);
//obj.removeValue(Property.PTY_PROPERTY_CATEGORIZATION);
//prop.unsetPropertyCategorization(); // triggers trace below
PlasmaChangeSummary changeSummary = (PlasmaChangeSummary)prop.getDataGraph().getChangeSummary();
if (prop.getPropertyCategorization() != null) {
for (PropertyCategorization pcatz : prop.getPropertyCategorization()) {
Categorization catz = pcatz.getCategorization();
Category catTemp = catz.getCategory();
Category cat = fetchCat(catTemp.getExternalId());
catz.unsetCategory();
changeSummary.clear(catTemp); // remove the cat as a created DO
catz.setCategory(cat);
}
}
Clazz clazzTemp = prop.getSourceClass();
Clazz clazz = fetchClazz(clazzTemp.getExternalId());
prop.unsetSourceClass();
changeSummary.clear(clazzTemp); // remove created info from change summary
prop.setSourceClass(clazz);
Classifier clsfrTemp = prop.getDataType();
Classifier clsfr = fetchClassifier(clsfrTemp.getExternalId());
prop.unsetDataType();
changeSummary.clear(clsfrTemp); // remove created info from change summary
prop.setDataType(clsfr);
//log.info(prop.dump());
service.commit(doc.getRootObject().getDataGraph(),
"dataloader");
} catch (FileNotFoundException e) {
log.error(e.getMessage(), e);
throw new RuntimeException(e);
} catch (IOException e) {
log.error(e.getMessage(), e);
throw new RuntimeException(e);
} catch (Exception e) {
log.error(e.getMessage(), e);
throw new RuntimeException(e);
}
//doc.setSchemaLocation(options.getRootElementNamespaceURI()
// + " " + prefix + ".xsd");
}
}
/*
java.lang.ClassCastException: java.util.ArrayList cannot be cast to org.plasma.sdo.PlasmaDataLink
at org.plasma.sdo.core.CoreDataObject.oppositeModified(CoreDataObject.java:1031)
at org.plasma.sdo.core.CoreDataObject.unset(CoreDataObject.java:1011)
at org.plasma.sdo.core.CoreDataObject.unset(CoreDataObject.java:902)
at org.cloudgraph.web.export.property.impl.PropertyImpl.unsetPropertyCategorization(PropertyImpl.java:15
at org.cloudgraph.web.data.loader.PropertyLoader.load(PropertyLoader.java:72)
at org.cloudgraph.web.data.DataImport.processLoaders(DataImport.java:220)
at org.cloudgraph.web.data.DataImport.main(DataImport.java:99)
Exception in thread "main" java.lang.RuntimeException: java.lang.ClassCastException: java.util.ArrayList can
to org.plasma.sdo.PlasmaDataLink
at org.cloudgraph.web.data.loader.PropertyLoader.load(PropertyLoader.java:109)
at org.cloudgraph.web.data.DataImport.processLoaders(DataImport.java:220)
at org.cloudgraph.web.data.DataImport.main(DataImport.java:99)
Caused by: java.lang.ClassCastException: java.util.ArrayList cannot be cast to org.plasma.sdo.PlasmaDataLink
at org.plasma.sdo.core.CoreDataObject.oppositeModified(CoreDataObject.java:1031)
at org.plasma.sdo.core.CoreDataObject.unset(CoreDataObject.java:1011)
at org.plasma.sdo.core.CoreDataObject.unset(CoreDataObject.java:902)
at org.cloudgraph.web.export.property.impl.PropertyImpl.unsetPropertyCategorization(PropertyImpl.java:15
*/