private ConnectorSpec getConnectorSpec(PrismObject<ResourceType> resource, ConnectorInstanceSpecificationType additionalConnectorType) throws SchemaException { String connectorOid = additionalConnectorType.getConnectorRef().getOid(); if (StringUtils.isBlank(connectorOid)) { throw new SchemaException("No connector OID in additional connector in "+resource); } PrismContainer<ConnectorConfigurationType> connectorConfiguration = additionalConnectorType.asPrismContainerValue().findContainer(ConnectorInstanceSpecificationType.F_CONNECTOR_CONFIGURATION); String connectorName = additionalConnectorType.getName(); if (StringUtils.isBlank(connectorName)) { throw new SchemaException("No connector name in additional connector in "+resource); } return new ConnectorSpec(resource, connectorName, connectorOid, connectorConfiguration); }
private <T extends CapabilityType> ConnectorSpec selectConnectorSpec(PrismObject<ResourceType> resource, Map<String,Collection<Object>> capabilityMap, Class<T> capabilityClass) throws SchemaException { if (capabilityMap == null) { return selectConnectorSpec(resource, capabilityClass); } for (ConnectorInstanceSpecificationType additionalConnectorType: resource.asObjectable().getAdditionalConnector()) { if (supportsCapability(additionalConnectorType, capabilityMap.get(additionalConnectorType.getName()), capabilityClass)) { return getConnectorSpec(resource, additionalConnectorType); } } return getDefaultConnectorSpec(resource); }
protected void fillInAdditionalConnectorRef(PrismObject<ResourceType> resource, String connectorName, String connectorType, OperationResult result) throws SchemaException { ResourceType resourceType = resource.asObjectable(); PrismObject<ConnectorType> connectorPrism = findConnectorByType(connectorType, result); for (ConnectorInstanceSpecificationType additionalConnector: resourceType.getAdditionalConnector()) { if (connectorName.equals(additionalConnector.getName())) { ObjectReferenceType ref = new ObjectReferenceType().oid(connectorPrism.getOid()); additionalConnector.setConnectorRef(ref); } } }
private void completeCapabilities(PrismObject<ResourceType> resource, boolean forceRefresh, Map<String,Collection<Object>> capabilityMap, Collection<ItemDelta<?, ?>> modifications, OperationResult result) throws SchemaException, ObjectNotFoundException, CommunicationException, ConfigurationException { ResourceType resourceType = resource.asObjectable(); ConnectorSpec defaultConnectorSpec = getDefaultConnectorSpec(resource); CapabilitiesType resourceCapType = resourceType.getCapabilities(); if (resourceCapType == null) { resourceCapType = new CapabilitiesType(); resourceType.setCapabilities(resourceCapType); } completeConnectorCapabilities(defaultConnectorSpec, resourceCapType, ResourceType.F_CAPABILITIES, forceRefresh, capabilityMap==null?null:capabilityMap.get(null), modifications, result); for (ConnectorInstanceSpecificationType additionalConnectorType: resource.asObjectable().getAdditionalConnector()) { ConnectorSpec connectorSpec = getConnectorSpec(resource, additionalConnectorType); CapabilitiesType connectorCapType = additionalConnectorType.getCapabilities(); if (connectorCapType == null) { connectorCapType = new CapabilitiesType(); additionalConnectorType.setCapabilities(connectorCapType); } ItemPath itemPath = additionalConnectorType.asPrismContainerValue().getPath().append(ConnectorInstanceSpecificationType.F_CAPABILITIES); completeConnectorCapabilities(connectorSpec, connectorCapType, itemPath, forceRefresh, capabilityMap==null?null:capabilityMap.get(additionalConnectorType.getName()), modifications, result); } }