001    package liquibase.precondition.core;
002    
003    import liquibase.changelog.DatabaseChangeLog;
004    import liquibase.changelog.ChangeSet;
005    import liquibase.database.Database;
006    import liquibase.exception.PreconditionErrorException;
007    import liquibase.exception.PreconditionFailedException;
008    import liquibase.exception.ValidationErrors;
009    import liquibase.exception.Warnings;
010    import liquibase.precondition.Precondition;
011    import liquibase.snapshot.DatabaseSnapshotGeneratorFactory;
012    import liquibase.util.StringUtils;
013    
014    public class TableExistsPrecondition implements Precondition {
015        private String schemaName;
016        private String tableName;
017    
018        public String getSchemaName() {
019            return schemaName;
020        }
021    
022        public void setSchemaName(String schemaName) {
023            this.schemaName = StringUtils.trimToNull(schemaName);
024        }
025    
026        public String getTableName() {
027            return tableName;
028        }
029    
030        public void setTableName(String tableName) {
031            this.tableName = tableName;
032        }
033    
034        public Warnings warn(Database database) {
035            return new Warnings();
036        }
037    
038        public ValidationErrors validate(Database database) {
039            return new ValidationErrors();
040        }
041    
042        public void check(Database database, DatabaseChangeLog changeLog, ChangeSet changeSet)
043                throws PreconditionFailedException, PreconditionErrorException {
044            try {
045                if (!DatabaseSnapshotGeneratorFactory.getInstance().getGenerator(database)
046                        .hasTable(getSchemaName(), getTableName(), database)) {
047                    throw new PreconditionFailedException("Table "
048                            + database.escapeTableName(getSchemaName(), getTableName()) + " does not exist", changeLog,
049                            this);
050                }
051            } catch (PreconditionFailedException e) {
052                throw e;
053            } catch (Exception e) {
054                throw new PreconditionErrorException(e, changeLog, this);
055            }
056        }
057    
058        public String getName() {
059            return "tableExists";
060        }
061    }