package org.phenoscape.main; import java.io.File; import java.io.IOException; import java.text.DateFormat; import java.util.Date; import org.apache.log4j.Logger; import org.apache.xmlbeans.XmlException; import org.nexml.schema_2009.NexmlDocument; import org.obo.annotation.base.UserOntologyConfiguration; import org.obo.datamodel.OBOSession; import org.phenoscape.controller.OntologyController; import org.phenoscape.io.NeXMLReader; import org.phenoscape.io.NeXMLWriter; import org.phenoscape.io.nexml_1_0.NeXMLReader_1_0; import org.phenoscape.model.DataSet; /** * This is a little program used to update an entire folder of data files to the latest NeXML schema. * @author Jim Balhoff * */ public class UpdateDataFiles { /** * Set this to the correct value before running. */ private static final String PATH_TO_DATA_FOLDER = "/Users/jim/Work/Phenoscape/phenex-incomplete-files"; private final OBOSession session = new OntologyController(new UserOntologyConfiguration()).getOBOSession(); public static void main(String[] args) throws IOException, XmlException { final UpdateDataFiles app = new UpdateDataFiles(); app.processDataFolder(new File(PATH_TO_DATA_FOLDER)); } private void processDataFolder(File folder) throws IOException, XmlException { log().info("Processing folder: " + folder); for (File file : folder.listFiles()) { if (file.isDirectory()) { this.processDataFolder(file); } else if (file.getName().endsWith(".xml")) { this.processDataFile(file); } } } private void processDataFile(File file) throws IOException, XmlException { log().info("Processing file: " + file); DataSet dataset; String charactersBlockID; NexmlDocument xmlDoc = NexmlDocument.Factory.newInstance(); try { final NeXMLReader reader = new NeXMLReader(file, this.session); dataset = reader.getDataSet(); charactersBlockID = reader.getCharactersBlockID(); xmlDoc = reader.getXMLDoc(); } catch (XmlException e) { log().info("Trying old NeXML format for: " + file); final NeXMLReader_1_0 reader = new NeXMLReader_1_0(file, this.session); dataset = reader.getDataSet(); charactersBlockID = reader.getCharactersBlockID(); } final NeXMLWriter writer = new NeXMLWriter(charactersBlockID, xmlDoc); writer.setDataSet(dataset); writer.setGenerator("PhenexUpdateScript: " + DateFormat.getDateTimeInstance().format(new Date())); writer.write(file); } private Logger log() { return Logger.getLogger(this.getClass()); } }