package liquibase.sql.visitor;
import java.util.HashMap;
import java.util.Map;
public class SqlVisitorFactory {
@SuppressWarnings("unchecked")
private final Map<String, Class> tagToClassMap;
private static final SqlVisitorFactory instance = new SqlVisitorFactory();
@SuppressWarnings("unchecked")
private SqlVisitorFactory() {
tagToClassMap = new HashMap<String, Class>();
Class[] visitors = new Class[]{
PrependSqlVisitor.class,
AppendSqlVisitor.class,
RegExpReplaceSqlVisitor.class,
ReplaceSqlVisitor.class,
};
try {
for (Class<SqlVisitor> visitorClass : visitors) {
SqlVisitor visitor = visitorClass.newInstance();
tagToClassMap.put(visitor.getName(), visitorClass);
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static SqlVisitorFactory getInstance() {
return instance;
}
/**
* Create a new Change subclass based on the given tag name.
*/
public SqlVisitor create(String tagName) {
Class<?> aClass = tagToClassMap.get(tagName);
if (aClass == null) {
throw new RuntimeException("Unknown tag: " + tagName);
}
try {
return (SqlVisitor) aClass.newInstance();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}