Search in sources :

Example 1 with ChangeLogParser

use of liquibase.parser.ChangeLogParser in project liquibase by liquibase.

the class ConvertCommand method run.

@Override
protected CommandResult run() throws Exception {
    List<ResourceAccessor> openers = new ArrayList<ResourceAccessor>();
    openers.add(new FileSystemResourceAccessor());
    openers.add(new ClassLoaderResourceAccessor());
    if (classpath != null) {
        openers.add(new FileSystemResourceAccessor(classpath));
    }
    ResourceAccessor resourceAccessor = new CompositeResourceAccessor(openers);
    ChangeLogParser sourceParser = ChangeLogParserFactory.getInstance().getParser(src, resourceAccessor);
    ChangeLogSerializer outSerializer = ChangeLogSerializerFactory.getInstance().getSerializer(out);
    DatabaseChangeLog changeLog = sourceParser.parse(src, new ChangeLogParameters(), resourceAccessor);
    File outFile = new File(out);
    if (!outFile.exists()) {
        outFile.getParentFile().mkdirs();
    }
    FileOutputStream outputStream = new FileOutputStream(outFile);
    try {
        outSerializer.write(changeLog.getChangeSets(), outputStream);
    } finally {
        outputStream.flush();
        outputStream.close();
    }
    return new CommandResult("Converted successfully");
}
Also used : CompositeResourceAccessor(liquibase.resource.CompositeResourceAccessor) ClassLoaderResourceAccessor(liquibase.resource.ClassLoaderResourceAccessor) ResourceAccessor(liquibase.resource.ResourceAccessor) FileSystemResourceAccessor(liquibase.resource.FileSystemResourceAccessor) ArrayList(java.util.ArrayList) ChangeLogSerializer(liquibase.serializer.ChangeLogSerializer) DatabaseChangeLog(liquibase.changelog.DatabaseChangeLog) CommandResult(liquibase.command.CommandResult) CompositeResourceAccessor(liquibase.resource.CompositeResourceAccessor) ChangeLogParameters(liquibase.changelog.ChangeLogParameters) ChangeLogParser(liquibase.parser.ChangeLogParser) FileOutputStream(java.io.FileOutputStream) FileSystemResourceAccessor(liquibase.resource.FileSystemResourceAccessor) ClassLoaderResourceAccessor(liquibase.resource.ClassLoaderResourceAccessor) File(java.io.File)

Example 2 with ChangeLogParser

use of liquibase.parser.ChangeLogParser in project liquibase by liquibase.

the class DatabaseChangeLog method include.

public boolean include(String fileName, boolean isRelativePath, ResourceAccessor resourceAccessor, ContextExpression includeContexts, LabelExpression labelExpression, Boolean ignore, boolean logEveryUnknownFileFormat) throws LiquibaseException {
    if (".svn".equalsIgnoreCase(fileName) || "cvs".equalsIgnoreCase(fileName)) {
        return false;
    }
    String relativeBaseFileName = this.getPhysicalFilePath();
    if (isRelativePath) {
        relativeBaseFileName = relativeBaseFileName.replaceFirst("classpath:", "");
        fileName = FilenameUtil.concat(FilenameUtil.getDirectory(relativeBaseFileName), fileName);
    }
    fileName = fileName.replaceFirst("classpath:", "");
    DatabaseChangeLog changeLog;
    try {
        DatabaseChangeLog rootChangeLog = ROOT_CHANGE_LOG.get();
        if (rootChangeLog == null) {
            ROOT_CHANGE_LOG.set(this);
        }
        DatabaseChangeLog parentChangeLog = PARENT_CHANGE_LOG.get();
        PARENT_CHANGE_LOG.set(this);
        try {
            ChangeLogParser parser = ChangeLogParserFactory.getInstance().getParser(fileName, resourceAccessor);
            changeLog = parser.parse(fileName, changeLogParameters, resourceAccessor);
            changeLog.setIncludeContexts(includeContexts);
            changeLog.setIncludeLabels(labelExpression);
            changeLog.setIncludeIgnore(ignore != null ? ignore.booleanValue() : false);
        } finally {
            if (rootChangeLog == null) {
                ROOT_CHANGE_LOG.remove();
            }
            if (parentChangeLog == null) {
                PARENT_CHANGE_LOG.remove();
            } else {
                PARENT_CHANGE_LOG.set(parentChangeLog);
            }
        }
    } catch (UnknownChangelogFormatException e) {
        // This matches only an extension, but filename can be a full path, too. Is it right?
        boolean matchesFileExtension = StringUtil.trimToEmpty(fileName).matches("\\.\\w+$");
        if (matchesFileExtension || logEveryUnknownFileFormat) {
            Scope.getCurrentScope().getLog(getClass()).warning("included file " + relativeBaseFileName + "/" + fileName + " is not a recognized file type");
        }
        return false;
    }
    PreconditionContainer preconditions = changeLog.getPreconditions();
    if (preconditions != null) {
        if (null == this.getPreconditions()) {
            this.setPreconditions(new PreconditionContainer());
        }
        this.getPreconditions().addNestedPrecondition(preconditions);
    }
    for (ChangeSet changeSet : changeLog.getChangeSets()) {
        addChangeSet(changeSet);
    }
    return true;
}
Also used : PreconditionContainer(liquibase.precondition.core.PreconditionContainer) ChangeLogParser(liquibase.parser.ChangeLogParser)

Example 3 with ChangeLogParser

use of liquibase.parser.ChangeLogParser in project liquibase by liquibase.

the class InternalDropAllCommandStep method parseChangeLogFile.

private DatabaseChangeLog parseChangeLogFile(String changeLogFile) throws LiquibaseException {
    ResourceAccessor resourceAccessor = Scope.getCurrentScope().getResourceAccessor();
    ChangeLogParser parser = ChangeLogParserFactory.getInstance().getParser(changeLogFile, resourceAccessor);
    ChangeLogParameters changeLogParameters = new ChangeLogParameters();
    return parser.parse(changeLogFile, changeLogParameters, resourceAccessor);
}
Also used : ResourceAccessor(liquibase.resource.ResourceAccessor) ChangeLogParameters(liquibase.changelog.ChangeLogParameters) ChangeLogParser(liquibase.parser.ChangeLogParser)

Example 4 with ChangeLogParser

use of liquibase.parser.ChangeLogParser in project liquibase by liquibase.

the class ConvertCommandStep method run.

@Override
public void run(CommandResultsBuilder resultsBuilder) throws Exception {
    CommandScope commandScope = resultsBuilder.getCommandScope();
    String src = commandScope.getArgumentValue(SRC_ARG);
    String out = commandScope.getArgumentValue(OUT_ARG);
    String classpath = commandScope.getArgumentValue(CLASSPATH_ARG);
    List<ResourceAccessor> openers = new ArrayList<>();
    openers.add(new FileSystemResourceAccessor());
    openers.add(new ClassLoaderResourceAccessor());
    if (classpath != null) {
        openers.add(new FileSystemResourceAccessor(new File(classpath)));
    }
    ResourceAccessor resourceAccessor = new CompositeResourceAccessor(openers);
    ChangeLogParser sourceParser = ChangeLogParserFactory.getInstance().getParser(src, resourceAccessor);
    ChangeLogSerializer outSerializer = ChangeLogSerializerFactory.getInstance().getSerializer(out);
    DatabaseChangeLog changeLog = sourceParser.parse(src, new ChangeLogParameters(), resourceAccessor);
    File outFile = new File(out);
    if (!outFile.exists()) {
        outFile.getParentFile().mkdirs();
    }
    try (FileOutputStream outputStream = new FileOutputStream(outFile)) {
        outSerializer.write(changeLog.getChangeSets(), outputStream);
    }
    Scope.getCurrentScope().getUI().sendMessage("Converted successfully");
}
Also used : CompositeResourceAccessor(liquibase.resource.CompositeResourceAccessor) ClassLoaderResourceAccessor(liquibase.resource.ClassLoaderResourceAccessor) ResourceAccessor(liquibase.resource.ResourceAccessor) FileSystemResourceAccessor(liquibase.resource.FileSystemResourceAccessor) ArrayList(java.util.ArrayList) ChangeLogSerializer(liquibase.serializer.ChangeLogSerializer) DatabaseChangeLog(liquibase.changelog.DatabaseChangeLog) CompositeResourceAccessor(liquibase.resource.CompositeResourceAccessor) ChangeLogParameters(liquibase.changelog.ChangeLogParameters) ChangeLogParser(liquibase.parser.ChangeLogParser) FileOutputStream(java.io.FileOutputStream) FileSystemResourceAccessor(liquibase.resource.FileSystemResourceAccessor) ClassLoaderResourceAccessor(liquibase.resource.ClassLoaderResourceAccessor) File(java.io.File)

Example 5 with ChangeLogParser

use of liquibase.parser.ChangeLogParser in project liquibase by liquibase.

the class ChangeLogParserFactoryTest method getParser_byFile.

@Test
public void getParser_byFile() throws Exception {
    ChangeLogParserFactory.getInstance().unregisterAllParsers();
    assumeThat(ChangeLogParserFactory.getInstance().getParsers(), empty());
    XMLChangeLogSAXParser xmlChangeLogParser = new XMLChangeLogSAXParser();
    ChangeLogParserFactory.getInstance().register(xmlChangeLogParser);
    ChangeLogParserFactory.getInstance().register(new SqlChangeLogParser());
    ChangeLogParser parser = ChangeLogParserFactory.getInstance().getParser("path/to/a/file.xml", new JUnitResourceAccessor());
    assertNotNull(parser);
    assertSame(xmlChangeLogParser, parser);
}
Also used : SqlChangeLogParser(liquibase.parser.core.sql.SqlChangeLogParser) MockChangeLogParser(liquibase.parser.MockChangeLogParser) SqlChangeLogParser(liquibase.parser.core.sql.SqlChangeLogParser) ChangeLogParser(liquibase.parser.ChangeLogParser) JUnitResourceAccessor(liquibase.test.JUnitResourceAccessor) XMLChangeLogSAXParser(liquibase.parser.core.xml.XMLChangeLogSAXParser) Test(org.junit.Test)

Aggregations

ChangeLogParser (liquibase.parser.ChangeLogParser)12 ChangeLogParameters (liquibase.changelog.ChangeLogParameters)5 ResourceAccessor (liquibase.resource.ResourceAccessor)5 XMLChangeLogSAXParser (liquibase.parser.core.xml.XMLChangeLogSAXParser)4 File (java.io.File)3 MockChangeLogParser (liquibase.parser.MockChangeLogParser)3 SqlChangeLogParser (liquibase.parser.core.sql.SqlChangeLogParser)3 ClassLoaderResourceAccessor (liquibase.resource.ClassLoaderResourceAccessor)3 Test (org.junit.Test)3 FileOutputStream (java.io.FileOutputStream)2 ArrayList (java.util.ArrayList)2 DatabaseChangeLog (liquibase.changelog.DatabaseChangeLog)2 PreconditionContainer (liquibase.precondition.core.PreconditionContainer)2 CompositeResourceAccessor (liquibase.resource.CompositeResourceAccessor)2 FileSystemResourceAccessor (liquibase.resource.FileSystemResourceAccessor)2 ChangeLogSerializer (liquibase.serializer.ChangeLogSerializer)2 JUnitResourceAccessor (liquibase.test.JUnitResourceAccessor)2 Method (java.lang.reflect.Method)1 SAXParserFactory (javax.xml.parsers.SAXParserFactory)1 CommandResult (liquibase.command.CommandResult)1