package org.hibernate.test.schemafilter;
import java.util.EnumMap;
import java.util.HashSet;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.hibernate.tool.schema.internal.exec.GenerationTarget;
class RecordingTarget implements GenerationTarget {
public enum Category {
SCHEMA_CREATE( Pattern.compile( "create schema (.*)" ) ),
SCHEMA_DROP( Pattern.compile( "drop schema (.*)" ) ),
TABLE_CREATE( Pattern.compile( "create table (\\S+) .*" ) ),
TABLE_DROP( Pattern.compile( "drop table (.*)" ) ),
SEQUENCE_CREATE(Pattern.compile( "create sequence (.*) start (.*)" )),
SEQUENCE_DROP(Pattern.compile( "drop sequence if exists (.*)" ));
private final Pattern pattern;
Category(Pattern pattern) {
this.pattern = pattern;
}
public Pattern getPattern() {
return pattern;
}
}
private final EnumMap<Category, Set<String>> actionsByCategory = new EnumMap<Category, Set<String>>( Category.class );
public Set<String> getActions(Category category) {
Set<String> result = actionsByCategory.get( category );
if ( result == null ) {
result = new HashSet<String>();
actionsByCategory.put( category, result );
}
return result;
}
@Override
public void accept(String action) {
action = action.toLowerCase();
for ( Category category : Category.values() ) {
final Matcher matcher = category.getPattern().matcher( action );
if ( matcher.matches() ) {
getActions( category ).add( matcher.group( 1 ) );
return;
}
}
}
@Override
public void prepare() {
// nothing to do
}
@Override
public void release() {
// nothing to do
}
}