}
}
private void validateAdapter(ETLStage source, ETLStage sink, List<ETLStage> transformList)
throws IllegalArgumentException {
if (transformList.size() == 0) {
<BUG>if (!(TypeToken.of(batchSink.getKeyType()).isAssignableFrom(batchSource.getKeyType()) &&
TypeToken.of(batchSink.getValueType()).isAssignableFrom(batchSource.getValueType()))) {
throw new IllegalArgumentException(String.format("Source %s and Sink %s Types don't match",</BUG>
source.getName(), sink.getName()));
}

}
private void initTable(List<Class> classList) throws Exception {
for (Class klass : classList) {
DefaultStageConfigurer configurer = new DefaultStageConfigurer(klass);
if (BatchSource.class.isAssignableFrom(klass)) {
BatchSource source = (BatchSource) klass.newInstance();
source.configure(configurer);
sourceClassMap.put(configurer.createSpecification().getName(), configurer.createSpecification().getClassName());
} else if (BatchSink.class.isAssignableFrom(klass)) {
BatchSink sink = (BatchSink) klass.newInstance();
sink.configure(configurer);
sinkClassMap.put(configurer.createSpecification().getName(), configurer.createSpecification().getClassName());
