use of io.syndesis.connector.support.verifier.api.SyndesisMetadata in project syndesis by syndesisio.
the class SqlMetadataRetrieval method adaptForStoredSql.
@SuppressWarnings({ "PMD.CyclomaticComplexity", "PMD.StdCyclomaticComplexity", "PMD.ModifiedCyclomaticComplexity" })
public SyndesisMetadata adaptForStoredSql(final String actionId, final Map<String, Object> properties, final MetaData metadata) {
final Map<String, List<PropertyPair>> enrichedProperties = new HashMap<>();
if (isPresentAndNonNull(properties, PROCEDURE_NAME)) {
// fetch metadata for the named procedure
final List<PropertyPair> ppList = new ArrayList<>();
@SuppressWarnings("unchecked") final Map<String, StoredProcedureMetadata> procedureMap = (Map<String, StoredProcedureMetadata>) metadata.getPayload();
final String procedureName = (String) properties.get(PROCEDURE_NAME);
final StoredProcedureMetadata storedProcedure = procedureMap.get(procedureName);
ppList.add(new PropertyPair(storedProcedure.getTemplate(), PROCEDURE_TEMPLATE));
enrichedProperties.put(PROCEDURE_TEMPLATE, ppList);
// build the input and output schemas
final ObjectSchema builderIn = new ObjectSchema();
builderIn.set$schema("http://json-schema.org/schema#");
builderIn.setTitle(procedureName + "_IN");
final ObjectSchema builderOut = new ObjectSchema();
builderOut.setTitle(procedureName + "_OUT");
builderOut.set$schema("http://json-schema.org/schema#");
if (storedProcedure.getColumnList() != null && !storedProcedure.getColumnList().isEmpty()) {
for (final StoredProcedureColumn column : storedProcedure.getColumnList()) {
if (column.getMode().equals(ColumnMode.IN) || column.getMode().equals(ColumnMode.INOUT)) {
builderIn.putProperty(column.getName(), schemaFor(column.getJdbcType()));
}
if (column.getMode().equals(ColumnMode.OUT) || column.getMode().equals(ColumnMode.INOUT)) {
builderOut.putProperty(column.getName(), schemaFor(column.getJdbcType()));
}
}
}
try {
DataShape.Builder inDataShapeBuilder = new DataShape.Builder().type(builderIn.getTitle());
if (builderIn.getProperties().isEmpty()) {
inDataShapeBuilder.kind(DataShapeKinds.NONE);
} else {
inDataShapeBuilder.kind(DataShapeKinds.JSON_SCHEMA).name(procedureName + " Parameter").description(String.format("Parameters of Stored Procedure '%s'", procedureName)).specification(Json.writer().writeValueAsString(builderIn));
}
DataShape.Builder outDataShapeBuilder = new DataShape.Builder().type(builderOut.getTitle());
if (builderOut.getProperties().isEmpty()) {
outDataShapeBuilder.kind(DataShapeKinds.NONE);
} else {
outDataShapeBuilder.kind(DataShapeKinds.JSON_SCHEMA).name(procedureName + " Return").description(String.format("Return value of Stored Procedure '%s'", procedureName)).specification(Json.writer().writeValueAsString(builderOut));
}
return new SyndesisMetadata(enrichedProperties, inDataShapeBuilder.build(), outDataShapeBuilder.build());
} catch (JsonProcessingException e) {
throw new IllegalStateException(e);
}
}
// return list of stored procedures in the database
@SuppressWarnings("unchecked") final Map<String, StoredProcedureMetadata> procedureMap = (Map<String, StoredProcedureMetadata>) metadata.getPayload();
if (isPresentAndNonNull(properties, PATTERN) && FROM_PATTERN.equalsIgnoreCase(String.valueOf(properties.get(PATTERN)))) {
enrichedProperties.put(PROCEDURE_NAME, obtainFromProcedureList(procedureMap));
} else {
enrichedProperties.put(PROCEDURE_NAME, obtainToProcedureList(procedureMap));
}
return new SyndesisMetadata(enrichedProperties, null, null);
}
Aggregations