@ManagedConnector(type="ManualConnector", version="1.0.0") public class ManualConnectorInstance extends AbstractManualConnectorInstance implements RepositoryAware, CaseManagerAware, TaskManagerAware {
private ConnectorStruct createConnectorStruct(Class connectorClass, ManagedConnector annotation) throws ObjectNotFoundException, SchemaException { ConnectorStruct struct = new ConnectorStruct(); struct.connectorClass = connectorClass; ConnectorType connectorType = new ConnectorType(); String bundleName = connectorClass.getPackage().getName(); String type = annotation.type(); if (type == null || type.isEmpty()) { type = connectorClass.getSimpleName(); } String version = annotation.version(); UcfUtil.addConnectorNames(connectorType, "Built-in", bundleName, type, version, null); connectorType.setConnectorBundle(bundleName); connectorType.setConnectorType(type); connectorType.setVersion(version); connectorType.setFramework(SchemaConstants.UCF_FRAMEWORK_URI_BUILTIN); String namespace = CONFIGURATION_NAMESPACE_PREFIX + bundleName + "/" + type; connectorType.setNamespace(namespace); struct.connectorObject = connectorType; PrismSchema connectorSchema = generateConnectorConfigurationSchema(struct); if (connectorSchema != null) { LOGGER.trace("Generated connector schema for {}: {} definitions", connectorType, connectorSchema.getDefinitions().size()); UcfUtil.setConnectorSchema(connectorType, connectorSchema); struct.connectorConfigurationSchema = connectorSchema; } else { LOGGER.warn("No connector schema generated for {}", connectorType); } return struct; }
private void discoverConnectors() { connectorMap = new HashMap<>(); ClassPathScanningCandidateComponentProvider scanner = new ClassPathScanningCandidateComponentProvider(false); scanner.addIncludeFilter(new AnnotationTypeFilter(ManagedConnector.class)); LOGGER.trace("Scanning package {}", SCAN_PACKAGE); for (BeanDefinition bd : scanner.findCandidateComponents(SCAN_PACKAGE)) { LOGGER.debug("Found connector class {}", bd); String beanClassName = bd.getBeanClassName(); try { Class connectorClass = Class.forName(beanClassName); ManagedConnector annotation = (ManagedConnector) connectorClass.getAnnotation(ManagedConnector.class); String type = annotation.type(); LOGGER.debug("Found connector {} class {}", type, connectorClass); ConnectorStruct struct = createConnectorStruct(connectorClass, annotation); connectorMap.put(type, struct); } catch (ClassNotFoundException e) { LOGGER.error("Error loading connector class {}: {}", beanClassName, e.getMessage(), e); } catch (ObjectNotFoundException | SchemaException e) { LOGGER.error("Error discovering the connector {}: {}", beanClassName, e.getMessage(), e); } } LOGGER.trace("Scan done"); }
@ManagedConnector public abstract class AbstractManualConnectorInstance extends AbstractManagedConnectorInstance implements AsynchronousOperationQueryable {
@ManagedConnector(type="DummyItsmIntegrationConnector", version="1.0.0") public class DummyItsmIntegrationConnectorInstance extends AbstractManualConnectorInstance {