@NotNull public SchemaDefinitionFactory getDefinitionFactory() { if (schemaDefinitionFactory == null) { schemaDefinitionFactory = new SchemaDefinitionFactory(); } return schemaDefinitionFactory; }
@Override public void addExtraComplexTypeAnnotations(ComplexTypeDefinition definition, Element appinfo, SchemaToDomProcessor schemaToDomProcessor) { super.addExtraComplexTypeAnnotations(definition, appinfo, schemaToDomProcessor); if (definition instanceof ObjectClassComplexTypeDefinition) { addExtraObjectClassAnnotations((ObjectClassComplexTypeDefinition)definition, appinfo, schemaToDomProcessor); } }
@Override public MutableComplexTypeDefinition createComplexTypeDefinition(XSComplexType complexType, PrismContext prismContext, XSAnnotation annotation) throws SchemaException { if (isResourceObject(annotation)) { return createObjectClassDefinition(complexType, prismContext, annotation); } return super.createComplexTypeDefinition(complexType, prismContext, annotation); }
MutableComplexTypeDefinition ctd = definitionFactory.createComplexTypeDefinition(complexType, prismContext, complexType.getAnnotation()); ctd.setCompileTimeClass(compileTimeClass); definitionFactory.finishComplexTypeDefinition(ctd, complexType, prismContext, complexType.getAnnotation()); .createExtraDefinitionFromComplexType(complexType, ctd, prismContext, complexType.getAnnotation());
@Override public <T> MutablePrismPropertyDefinition<T> createPropertyDefinition(QName elementName, QName typeName, ComplexTypeDefinition complexTypeDefinition, PrismContext prismContext, XSAnnotation annotation, XSParticle elementParticle, Collection<? extends DisplayableValue<T>> allowedValues, T defaultValue) throws SchemaException { if (complexTypeDefinition != null && complexTypeDefinition instanceof ObjectClassComplexTypeDefinition) { return createResourceAttributeDefinition(elementName, typeName, prismContext, annotation); } return super.createPropertyDefinition(elementName, typeName, complexTypeDefinition, prismContext, annotation, elementParticle, allowedValues, defaultValue); }
@Override public void addExtraPropertyAnnotations(PrismPropertyDefinition definition, Element appinfo, SchemaToDomProcessor schemaToDomProcessor) { super.addExtraPropertyAnnotations(definition, appinfo, schemaToDomProcessor); if (definition instanceof ResourceAttributeDefinition) { ResourceAttributeDefinition rad = (ResourceAttributeDefinition)definition; if (rad.getNativeAttributeName() != null) { schemaToDomProcessor.addAnnotation(MidPointConstants.RA_NATIVE_ATTRIBUTE_NAME, rad.getNativeAttributeName(), appinfo); } if (rad.getFrameworkAttributeName() != null) { schemaToDomProcessor.addAnnotation(MidPointConstants.RA_FRAMEWORK_ATTRIBUTE_NAME, rad.getFrameworkAttributeName(), appinfo); } if (rad.getReturnedByDefault() != null) { schemaToDomProcessor.addAnnotation(MidPointConstants.RA_RETURNED_BY_DEFAULT_NAME, rad.getReturnedByDefault().toString(), appinfo); } } }
@Override public <C extends Containerable> PrismContainerDefinition<C> createExtraDefinitionFromComplexType(XSComplexType complexType, ComplexTypeDefinition complexTypeDefinition, PrismContext prismContext, XSAnnotation annotation) throws SchemaException { // if (complexTypeDefinition instanceof ObjectClassComplexTypeDefinition) { // return createResourceAttributeContainerDefinition(complexType, (ObjectClassComplexTypeDefinition)complexTypeDefinition, // prismContext, annotation); // } return super.createExtraDefinitionFromComplexType(complexType, complexTypeDefinition, prismContext, annotation); }
@Override public void finishComplexTypeDefinition(ComplexTypeDefinition complexTypeDefinition, XSComplexType complexType, PrismContext prismContext, XSAnnotation annotation) throws SchemaException { super.finishComplexTypeDefinition(complexTypeDefinition, complexType, prismContext, annotation); if (complexTypeDefinition instanceof ObjectClassComplexTypeDefinition) { // TODO is this safe? finishObjectClassDefinition((ObjectClassComplexTypeDefinitionImpl)complexTypeDefinition, complexType, prismContext, annotation); } }
@SuppressWarnings({ "rawtypes", "unchecked" }) private MutablePrismContainerDefinition<?> createPropertyContainerDefinition(XSType xsType, XSElementDecl elementDecl, ComplexTypeDefinition complexTypeDefinition, XSAnnotation annotation, XSParticle elementParticle, boolean topLevel) throws SchemaException { QName elementName = new QName(elementDecl.getTargetNamespace(), elementDecl.getName()); MutablePrismContainerDefinition<?> pcd; SchemaDefinitionFactory definitionFactory = getDefinitionFactory(); Class compileTimeClass = null; if (getSchemaRegistry() != null && complexTypeDefinition != null) { compileTimeClass = getSchemaRegistry().determineCompileTimeClass(complexTypeDefinition.getTypeName()); } if (isObjectDefinition(xsType)) { pcd = definitionFactory.createObjectDefinition(elementName, complexTypeDefinition, prismContext, compileTimeClass); // Multiplicity is fixed to a single-value here pcd.setMinOccurs(1); pcd.setMaxOccurs(1); } else { pcd = definitionFactory.createContainerDefinition(elementName, complexTypeDefinition, prismContext, compileTimeClass); setMultiplicity(pcd, elementParticle, elementDecl.getAnnotation(), topLevel); } markRuntime(pcd); parseItemDefinitionAnnotations(pcd, annotation); parseItemDefinitionAnnotations(pcd, elementDecl.getAnnotation()); if (elementParticle != null) { parseItemDefinitionAnnotations(pcd, elementParticle.getAnnotation()); } return pcd; }
definitionFactory.addExtraReferenceAnnotations(definition, appinfo, this);
@Override public <T> PrismPropertyDefinition<T> createPropertyDefinition(QName elementName, QName typeName, ComplexTypeDefinition complexTypeDefinition, PrismContext prismContext, XSAnnotation annotation, XSParticle elementParticle) throws SchemaException { if (complexTypeDefinition != null && complexTypeDefinition instanceof ObjectClassComplexTypeDefinition) { return createResourceAttributeDefinition(elementName, typeName, prismContext, annotation); } return super.createPropertyDefinition(elementName, typeName, complexTypeDefinition, prismContext, annotation, elementParticle); }
definitionFactory.addExtraPropertyAnnotations(definition, appinfo, this);
propDef = definitionFactory.createPropertyDefinition(elementName, typeName, ctd, prismContext, annotation, elementParticle, allowedValues, null); setMultiplicity(propDef, elementParticle, annotation, ctd == null);
definitionFactory.addExtraComplexTypeAnnotations(definition, appinfo, this);
context.setDefinitionFactory(new SchemaDefinitionFactory()); context.initialize();