public static PropertyDescriptor findAnnotatedProperty(Class<?> connectorClass, Class<? extends Annotation> annotationClass) { BeanWrapper connectorBean = new BeanWrapperImpl(connectorClass); return findAnnotatedProperty(connectorBean, annotationClass); }
private void applyConfigurationToConfigurationClass(PrismContainerValue<?> configurationContainer) throws ConfigurationException { BeanWrapper connectorBean = new BeanWrapperImpl(this); PropertyDescriptor connectorConfigurationProp = UcfUtil.findAnnotatedProperty(connectorBean, ManagedConnectorConfiguration.class); if (connectorConfigurationProp == null) { return; } Class<?> configurationClass = connectorConfigurationProp.getPropertyType(); Object configurationObject; try { configurationObject = configurationClass.newInstance(); } catch (InstantiationException | IllegalAccessException e) { throw new ConfigurationException("Cannot instantiate configuration "+configurationClass); } BeanWrapper configurationClassBean = new BeanWrapperImpl(configurationObject); for (Item<?, ?> configurationItem: configurationContainer.getItems()) { if (! (configurationItem instanceof PrismProperty<?>)) { throw new ConfigurationException("Only properties are supported for now"); } PrismProperty<?> configurationProperty = (PrismProperty<?>)configurationItem; Object realValue = configurationProperty.getRealValue(); configurationClassBean.setPropertyValue(configurationProperty.getElementName().getLocalPart(), realValue); } connectorBean.setPropertyValue(connectorConfigurationProp.getName(), configurationObject); } }
private PrismSchema generateConnectorConfigurationSchema(ConnectorStruct struct) { Class<? extends ConnectorInstance> connectorClass = struct.connectorClass; PropertyDescriptor connectorConfigurationProp = UcfUtil.findAnnotatedProperty(connectorClass, ManagedConnectorConfiguration.class); MutablePrismSchema connectorSchema = prismContext.schemaFactory().createPrismSchema(struct.connectorObject.getNamespace()); // Create configuration type - the type used by the "configuration" element MutablePrismContainerDefinition<?> configurationContainerDef = connectorSchema.createPropertyContainerDefinition( ResourceType.F_CONNECTOR_CONFIGURATION.getLocalPart(), SchemaConstants.CONNECTOR_SCHEMA_CONFIGURATION_TYPE_LOCAL_NAME); Class<?> configurationClass = connectorConfigurationProp.getPropertyType(); BeanWrapper configurationClassBean = new BeanWrapperImpl(configurationClass); for (PropertyDescriptor prop: configurationClassBean.getPropertyDescriptors()) { if (!UcfUtil.hasAnnotation(prop, ConfigurationProperty.class)) { continue; } ItemDefinition<?> itemDef = createPropertyDefinition(configurationContainerDef, prop); LOGGER.trace("Configuration item definition for {}: {}", prop.getName(), itemDef); } return connectorSchema; }