@Override public <C extends Containerable> void adopt(PrismContainer<C> container) throws SchemaException { adopt(container, container.getCompileTimeClass()); }
private void addDescriptiveItems(SceneImpl scene, PrismContainerValue<?> sourceValue, VisualizationContext context, Task task, OperationResult result) { // TODO dynamically typed values if (sourceValue.getContainer() == null || sourceValue.getContainer().getCompileTimeClass() == null) { return; } Class<?> clazz = sourceValue.getContainer().getCompileTimeClass(); List<ItemPath> itemPathsToShow = descriptiveItems.get(clazz); if (itemPathsToShow == null) { return; } List<Item<?,?>> itemsToShow = new ArrayList<>(); for (ItemPath itemPath : itemPathsToShow) { Item<?,?> item = sourceValue.findItem(itemPath); if (item != null) { itemsToShow.add(item); } } visualizeItems(scene, itemsToShow, true, context, task, result); }
protected T createItemInternal(PrismContainerValue value) { ComplexTypeDefinition concreteDef = value.getComplexTypeDefinition(); if (concreteDef != null && (container.getCompileTimeClass() == null || !container.getCompileTimeClass().equals(concreteDef.getCompileTimeClass()))) { // the dynamic definition exists and the compile time class is different from the one at the container level // ("different" here means it is a subclass) // so we have to instantiate dynamically T bean = null; try { bean = (T) concreteDef.getCompileTimeClass().newInstance(); } catch (InstantiationException|IllegalAccessException|RuntimeException e) { throw new SystemException("Couldn't instantiate " + concreteDef.getCompileTimeClass()); } bean.setupContainerValue(value); return bean; } else { // otherwise let's use the static (faster) way return createItem(value); } } protected abstract T createItem(PrismContainerValue value);
private void assertResource(PrismObject<ResourceType> resource, boolean expectSchema) { display("Resource", resource); display("Resource def", resource.getDefinition()); PrismContainer<ConnectorConfigurationType> configurationContainer = resource.findContainer(ResourceType.F_CONNECTOR_CONFIGURATION); assertNotNull("No Resource connector configuration def", configurationContainer); PrismContainerDefinition<ConnectorConfigurationType> configurationContainerDefinition = configurationContainer.getDefinition(); display("Resource connector configuration def", configurationContainerDefinition); display("Resource connector configuration def complex type def", configurationContainerDefinition.getComplexTypeDefinition()); assertNotNull("Empty Resource connector configuration def", configurationContainer.isEmpty()); assertEquals("Wrong compile-time class in Resource connector configuration in "+resource, ConnectorConfigurationType.class, configurationContainer.getCompileTimeClass()); assertEquals("configurationContainer maxOccurs", 1, configurationContainerDefinition.getMaxOccurs()); resource.checkConsistence(true, true); Element schema = ResourceTypeUtil.getResourceXsdSchema(resource); if (expectSchema) { assertNotNull("no schema in "+resource, schema); } else { assertNull("Unexpected schema in "+resource+": "+schema, schema); } }