package dbmigrate.parser;
import java.io.File;
import java.io.FileReader;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.converters.ConversionException;
import dbmigrate.logging.Level;
import dbmigrate.logging.LoggerFactory;
import dbmigrate.parser.model.Column;
import dbmigrate.parser.model.CreateColumn;
import dbmigrate.parser.model.CreateTable;
import dbmigrate.parser.model.DestinationColumn;
import dbmigrate.parser.model.EditColumn;
import dbmigrate.parser.model.MergeColumns;
import dbmigrate.parser.model.Migration;
import dbmigrate.parser.model.RemoveColumn;
import dbmigrate.parser.model.RemoveTable;
import dbmigrate.parser.model.SourceColumn;
import dbmigrate.parser.model.SplitColumn;
public class MigrationParser {
private final static XStream XSTREAM = new XStream();
static {
MigrationParser.XSTREAM.processAnnotations(Column.class);
MigrationParser.XSTREAM.processAnnotations(CreateColumn.class);
MigrationParser.XSTREAM.processAnnotations(CreateTable.class);
MigrationParser.XSTREAM.processAnnotations(DestinationColumn.class);
MigrationParser.XSTREAM.processAnnotations(EditColumn.class);
MigrationParser.XSTREAM.processAnnotations(MergeColumns.class);
MigrationParser.XSTREAM.processAnnotations(Migration.class);
MigrationParser.XSTREAM.processAnnotations(RemoveColumn.class);
MigrationParser.XSTREAM.processAnnotations(RemoveTable.class);
MigrationParser.XSTREAM.processAnnotations(SourceColumn.class);
MigrationParser.XSTREAM.processAnnotations(SplitColumn.class);
}
private MigrationParser() {
}
public static Migration loadMigration(File file, boolean performValidation) throws Exception {
if(performValidation) {
XmlValidator.validate(file);
}
try {
return (Migration) MigrationParser.XSTREAM.fromXML(file);
} catch (ConversionException e) {
LoggerFactory.getLogger().log(e.getShortMessage(), Level.Error);
throw e;
} catch (Exception e) {
LoggerFactory.getLogger().log(e.getMessage(), Level.Error);
throw e;
}
}
public static Migration loadMigration(FileReader fileReader)
throws Exception {
XmlValidator.validate(fileReader);
try {
return (Migration) MigrationParser.XSTREAM.fromXML(fileReader);
} catch (ConversionException e) {
LoggerFactory.getLogger().log(e.getShortMessage(), Level.Error);
throw e;
} catch (Exception e) {
LoggerFactory.getLogger().log(e.getMessage(), Level.Error);
throw e;
}
}
public static Migration loadMigration(String xmlFromString) {
return (Migration) MigrationParser.XSTREAM.fromXML(xmlFromString);
}
}