use of org.talend.sdk.component.api.input.Producer in project component-runtime by Talend.
the class ModelVisitor method validateProcessor.
private void validateProcessor(final Class<?> input) {
final List<Method> producers = Stream.of(input.getMethods()).filter(m -> m.isAnnotationPresent(ElementListener.class)).collect(toList());
if (producers.size() != 1) {
throw new IllegalArgumentException(input + " must have a single @ElementListener method");
}
if (Stream.of(producers.get(0).getParameters()).filter(p -> {
if (p.isAnnotationPresent(Output.class)) {
if (!ParameterizedType.class.isInstance(p.getParameterizedType())) {
throw new IllegalArgumentException("@Output parameter must be of type OutputEmitter");
}
final ParameterizedType pt = ParameterizedType.class.cast(p.getParameterizedType());
if (OutputEmitter.class != pt.getRawType()) {
throw new IllegalArgumentException("@Output parameter must be of type OutputEmitter");
}
return false;
}
return true;
}).count() < 1) {
throw new IllegalArgumentException(input + " doesn't have the input parameter on its producer method");
}
Stream.of(input.getMethods()).filter(m -> m.isAnnotationPresent(BeforeGroup.class) || m.isAnnotationPresent(AfterGroup.class)).forEach(m -> {
if (m.getParameterCount() > 0) {
throw new IllegalArgumentException(m + " must not have any parameter");
}
});
}
use of org.talend.sdk.component.api.input.Producer in project component-runtime by Talend.
the class JdbcInput method nextRow.
@Producer
public Map<String, Object> nextRow() throws SQLException {
if (resultSet == null) {
// execute the query and prepare the mapping to pass to next processor
statement = connection.prepareStatement(dataset.getQuery());
resultSet = statement.executeQuery();
final ResultSetMetaData metaData = resultSet.getMetaData();
mapper.clear();
for (int i = 0; i < metaData.getColumnCount(); i++) {
final int idx = i;
final String name = metaData.getColumnLabel(i);
switch(// todo: real impl would use a mapper and not do it here
metaData.getColumnType(i)) {
case Types.VARCHAR:
mapper.put(name, () -> {
try {
return resultSet.getString(idx);
} catch (final SQLException e) {
log.warn(e.getMessage(), e);
return null;
}
});
break;
case Types.DOUBLE:
mapper.put(name, () -> {
try {
return resultSet.getDouble(idx);
} catch (final SQLException e) {
log.warn(e.getMessage(), e);
return null;
}
});
break;
default:
mapper.put(name, () -> {
try {
return resultSet.getObject(idx);
} catch (final SQLException e) {
log.warn(e.getMessage(), e);
return null;
}
});
}
}
}
return resultSet.next() ? map() : null;
}
Aggregations