package eu.scape_project.planning.xml; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import eu.scape_project.planning.model.PlatoException; import eu.scape_project.planning.utils.OS; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.xml.sax.SAXException; public class PlanMigratorTest { private static final Logger log = LoggerFactory.getLogger(PlanMigratorTest.class); private File tempDir; private String tempPath; @Before public void setUp(){ tempPath = OS.getTmpPath() + "planmigrator_test" + System.currentTimeMillis() + File.separator; tempDir = new File(tempPath); tempDir.deleteOnExit(); tempDir.mkdirs(); } @After public void tearDown(){ OS.deleteDirectory(tempDir); } @Test public void migrateBLTiffFromV300() throws PlatoException, ParserConfigurationException, SAXException, FileNotFoundException, IOException{ PlanMigrator migrator = new PlanMigrator(); List<String> appliedTransformations = new ArrayList<String>(); String currentVersionData = migrator.getCurrentVersionData(getClass().getClassLoader().getResourceAsStream("plans/British_Library_Newspapers.xml"), tempPath, appliedTransformations); Assert.assertNotNull(currentVersionData); ValidatingParserFactory validatingParserFactory = new ValidatingParserFactory(); SAXParser parser = validatingParserFactory.getValidatingParser(); parser.setProperty(ValidatingParserFactory.JAXP_SCHEMA_SOURCE, PlanXMLConstants.PLATO_SCHEMA_URI); SchemaResolver schemaResolver = new SchemaResolver() .addSchemaLocation(PlanXMLConstants.PLATO_SCHEMA_URI, PlanXMLConstants.PLATO_SCHEMA_LOCATION) .addSchemaLocation(PlanXMLConstants.PAP_SCHEMA_URI, PlanXMLConstants.PAP_SCHEMA_LOCATION) .addSchemaLocation(PlanXMLConstants.TAVERNA_SCHEMA_URI, PlanXMLConstants.TAVERNA_SCHEMA_LOCATION); parser.parse(new FileInputStream(currentVersionData), new StrictDefaultHandler(schemaResolver)); } @Test public void migrateFromV300WithoutSamples() throws PlatoException, ParserConfigurationException, SAXException, FileNotFoundException, IOException{ PlanMigrator migrator = new PlanMigrator(); List<String> appliedTransformations = new ArrayList<String>(); String currentVersionData = migrator.getCurrentVersionData(getClass().getClassLoader().getResourceAsStream("plans/Archiving_Digital_Photographs.xml"), tempPath, appliedTransformations); Assert.assertNotNull(currentVersionData); ValidatingParserFactory validatingParserFactory = new ValidatingParserFactory(); SAXParser parser = validatingParserFactory.getValidatingParser(); parser.setProperty(ValidatingParserFactory.JAXP_SCHEMA_SOURCE, PlanXMLConstants.PLATO_SCHEMA_URI); SchemaResolver schemaResolver = new SchemaResolver() .addSchemaLocation(PlanXMLConstants.PLATO_SCHEMA_URI, PlanXMLConstants.PLATO_SCHEMA_LOCATION) .addSchemaLocation(PlanXMLConstants.PAP_SCHEMA_URI, PlanXMLConstants.PAP_SCHEMA_LOCATION) .addSchemaLocation(PlanXMLConstants.TAVERNA_SCHEMA_URI, PlanXMLConstants.TAVERNA_SCHEMA_LOCATION); parser.parse(new FileInputStream(currentVersionData), new StrictDefaultHandler(schemaResolver)); } @Test public void migrateFTEFromV401WithoutSamples() throws PlatoException, ParserConfigurationException, SAXException, FileNotFoundException, IOException{ PlanMigrator migrator = new PlanMigrator(); List<String> appliedTransformations = new ArrayList<String>(); String currentVersionData = migrator.getCurrentVersionData(getClass().getClassLoader().getResourceAsStream("plans/Archiving_Digital_Photographs_FTE_V4.0.1.xml"), tempPath, appliedTransformations); Assert.assertNotNull(currentVersionData); ValidatingParserFactory validatingParserFactory = new ValidatingParserFactory(); SAXParser parser = validatingParserFactory.getValidatingParser(); parser.setProperty(ValidatingParserFactory.JAXP_SCHEMA_SOURCE, PlanXMLConstants.PLATO_SCHEMA_URI); SchemaResolver schemaResolver = new SchemaResolver() .addSchemaLocation(PlanXMLConstants.PLATO_SCHEMA_URI, PlanXMLConstants.PLATO_SCHEMA_LOCATION) .addSchemaLocation(PlanXMLConstants.PAP_SCHEMA_URI, PlanXMLConstants.PAP_SCHEMA_LOCATION) .addSchemaLocation(PlanXMLConstants.TAVERNA_SCHEMA_URI, PlanXMLConstants.TAVERNA_SCHEMA_LOCATION); parser.parse(new FileInputStream(currentVersionData), new StrictDefaultHandler(schemaResolver)); } @Test @Ignore public void migrateDirectory() throws PlatoException, FileNotFoundException{ PlanMigrator migrator = new PlanMigrator(); File dir = new File("/home/kraxner/Documents/SCAPE/plan-problems"); File plans[] = dir.listFiles(); for (File plan : plans) { if (plan.isFile() && plan.getName().endsWith(".xml")) { String tempPath = dir.getAbsolutePath() + File.separator + plan.getName().substring(0, plan.getName().length()-4) + File.separator; File tempDir = new File(tempPath); tempDir.mkdirs(); List<String> appliedTransformations = new ArrayList<String>(); String currentVersionData; try { currentVersionData = migrator.getCurrentVersionData(new FileInputStream(plan), tempPath, appliedTransformations); File migratedFile = new File(currentVersionData); File outFile = new File("d://plans//out//" + migratedFile.getName()); if (!migratedFile.renameTo(outFile)) { log.error("Failed to move file : " + currentVersionData); } } catch (Exception e) { log.error("failed to migrate file: " + plan.getName(), e); } } } } }