use of io.syndesis.common.model.bulletin.IntegrationBulletinBoard in project syndesis by syndesisio.
the class IntegrationUpdateHandler method compute.
@SuppressWarnings({ "PMD.ExcessiveMethodLength", "PMD.NPathComplexity" })
@Override
protected List<IntegrationBulletinBoard> compute(ChangeEvent event) {
final List<IntegrationBulletinBoard> boards = new ArrayList<>();
final DataManager dataManager = getDataManager();
final List<Integration> integrations = dataManager.fetchAll(Integration.class).getItems();
final List<LeveledMessage> messages = new ArrayList<>();
for (int i = 0; i < integrations.size(); i++) {
final Integration integration = integrations.get(i);
final List<Step> steps = integration.getSteps();
final String id = integration.getId().get();
final IntegrationBulletinBoard board = dataManager.fetchByPropertyValue(IntegrationBulletinBoard.class, "targetResourceId", id).orElse(null);
final IntegrationBulletinBoard.Builder builder;
if (board != null) {
builder = new IntegrationBulletinBoard.Builder().createFrom(board).updatedAt(System.currentTimeMillis());
} else {
builder = new IntegrationBulletinBoard.Builder().id(KeyGenerator.createKey()).targetResourceId(id).createdAt(System.currentTimeMillis());
}
// reuse messages
messages.clear();
// to the resources the properties apply to
for (int s = 0; s < steps.size(); s++) {
final int index = s;
final Step step = steps.get(s);
final Supplier<LeveledMessage.Builder> supplier = () -> new LeveledMessage.Builder().putMetadata("step", step.getId().orElse("step-" + index));
if (!step.getAction().isPresent()) {
continue;
}
// **********************
// Integration
// **********************
messages.addAll(computeValidatorMessages(supplier, integration));
// **********************
// Extension
// **********************
step.getAction().filter(StepAction.class::isInstance).map(StepAction.class::cast).ifPresent(action -> {
Extension extension = step.getExtension().orElse(null);
if (extension == null) {
return;
}
// When an extension is updated a new entity is written to the db
// so we can't simply lookup by ID but whe need to search for the
// latest installed extension.
//
// This fetchIdsByPropertyValue is not really optimized as it
// ends up in multiple statements sent to the db, we maybe need
// to have a better support for this use-case.
Set<String> ids = dataManager.fetchIdsByPropertyValue(Extension.class, "extensionId", extension.getExtensionId(), "status", Extension.Status.Installed.name());
if (ids.size() != 1) {
return;
}
Extension newExtension = dataManager.fetch(Extension.class, ids.iterator().next());
if (newExtension == null) {
messages.add(supplier.get().level(LeveledMessage.Level.WARN).code(LeveledMessage.Code.SYNDESIS004).build());
} else {
Action newAction = newExtension.findActionById(action.getId().get()).orElse(null);
if (newAction == null) {
messages.add(supplier.get().level(LeveledMessage.Level.WARN).code(LeveledMessage.Code.SYNDESIS005).build());
} else {
messages.addAll(computePropertiesDiffMessages(supplier, action.getProperties(), newAction.getProperties()));
messages.addAll(computeMissingMandatoryPropertiesMessages(supplier, newAction.getProperties(), step.getConfiguredProperties()));
messages.addAll(computeSecretsUpdateMessages(supplier, newAction.getProperties(), step.getConfiguredProperties()));
}
}
});
// **********************
// Connector
// **********************
step.getAction().filter(ConnectorAction.class::isInstance).map(ConnectorAction.class::cast).ifPresent(action -> {
Connection connection = step.getConnection().orElse(null);
if (connection == null) {
return;
}
Connector newConnector = dataManager.fetch(Connector.class, connection.getConnectorId());
if (newConnector == null) {
messages.add(supplier.get().level(LeveledMessage.Level.WARN).code(LeveledMessage.Code.SYNDESIS003).build());
} else {
Action newAction = newConnector.findActionById(action.getId().get()).orElse(null);
if (newAction == null) {
messages.add(supplier.get().level(LeveledMessage.Level.WARN).code(LeveledMessage.Code.SYNDESIS005).build());
} else {
Map<String, String> configuredProperties = CollectionsUtils.aggregate(connection.getConfiguredProperties(), step.getConfiguredProperties());
messages.addAll(computeValidatorMessages(supplier, connection));
messages.addAll(computePropertiesDiffMessages(supplier, action.getProperties(), newAction.getProperties()));
messages.addAll(computeMissingMandatoryPropertiesMessages(supplier, newAction.getProperties(), configuredProperties));
messages.addAll(computeSecretsUpdateMessages(supplier, newAction.getProperties(), configuredProperties));
}
}
});
}
builder.errors(countMessagesWithLevel(LeveledMessage.Level.ERROR, messages));
builder.warnings(countMessagesWithLevel(LeveledMessage.Level.WARN, messages));
builder.notices(countMessagesWithLevel(LeveledMessage.Level.INFO, messages));
builder.putMetadata("integration-id", id);
builder.putMetadata("integration-version", Integer.toString(integration.getVersion()));
builder.messages(messages);
boards.add(builder.build());
}
return boards;
}
Aggregations