@SuppressWarnings("unchecked") private Class<? extends XmlObjectNode>[] doFindXmlObjectImplClassesByModelObjectClass( XmlContext xmlContext, Class<? extends ModelObject> modelObjectClass) { List<Class<? extends XmlObjectNode>> result = new ArrayList<Class<? extends XmlObjectNode>>(); for (Class<? extends XmlObjectNode> implClass : getFactorableClasses()) { Class<? extends ModelObject> moc = xmlContext.getClassMetadata() .get(implClass, IMPLEMENTATION_CLASS_MODELOBJECT_CLASS); if (moc.isAssignableFrom(modelObjectClass)) { result.add(implClass); } } return result.toArray((Class[]) Array.newInstance(Class.class, result.size())); }
private Class<? extends XmlObjectNode>[] findXmlObjectImplClassesByModelObjectClass( XmlContext xmlContext, Class<? extends ModelObject> modelObjectClass) { if (!xmlContext.getClassMetadata().has(modelObjectClass, IMPLEMENTATION_CLASSES_METADATA)) { xmlContext.getClassMetadata().put( modelObjectClass, IMPLEMENTATION_CLASSES_METADATA, doFindXmlObjectImplClassesByModelObjectClass(xmlContext, modelObjectClass)); } return xmlContext.getClassMetadata().get(modelObjectClass, IMPLEMENTATION_CLASSES_METADATA); }
private <X extends XmlObjectNode> X doWrapGivenXmlObjectInterfaceClass( Object obj, Class<X> xmlObjectInterfaceClass) { Class<X> xmlObjectImplClass = xmlContext.getClassMetadata().get( xmlObjectInterfaceClass, ClassMetadataConstants.INTERFACE_CLASS_IMPLEMENTATION_CLASS); assert xmlObjectImplClass != null : String.format( "No implementation class found for interface '%s'", xmlObjectInterfaceClass.getSimpleName()); return doWrapGivenXmlObjectImplClass(obj, xmlObjectImplClass); }
private <X extends XmlObjectNode> X doCreateGivenXmlObjectInterfaceClass( Class<X> xmlObjectInterfaceClass) { assert xmlObjectInterfaceClass != null; if (!xmlContext.getClassMetadata().has(xmlObjectInterfaceClass, ClassMetadataConstants.INTERFACE_CLASS_IMPLEMENTATION_CLASS)) { throw new UncheckedException(String.format( "No implementation class found for interface '%s'", xmlObjectInterfaceClass.getName())); } Class<X> xmlObjectImplClass = xmlContext.getClassMetadata().get( xmlObjectInterfaceClass, ClassMetadataConstants.INTERFACE_CLASS_IMPLEMENTATION_CLASS); return doCreateGivenXmlObjectImplClass(xmlObjectImplClass); }
private <X extends XmlObjectNode> X doWrapGivenXmlObjectImplClass(Object obj, Class<X> xmlObjectImplClass) { assert xmlObjectImplClass != null; XmlObjectBinding binding = xmlContext.getClassMetadata().get( xmlObjectImplClass, ClassMetadataConstants.IMPLEMENTATION_CLASS_BINDING); return binding.wrap(xmlContext, xmlObjectImplClass, obj); }
private <X extends XmlObjectNode> X doCreateGivenXmlObjectImplClass( Class<X> xmlObjectImplClass) { assert xmlObjectImplClass != null; XmlObjectBinding binding = xmlContext.getClassMetadata().get( xmlObjectImplClass, ClassMetadataConstants.IMPLEMENTATION_CLASS_BINDING); return binding.create(xmlContext, xmlObjectImplClass); }
@Override public QName getXmlObjectQName() { if (qname == null) { QName modelQName = getModelObject().getQName(); if (modelQName != null) { qname = modelQName; } else if (getXmlContext().getClassMetadata().has(getClass(), ClassMetadataConstants.IMPLEMENTATION_CLASS_CONSTANT_QNAME)) { qname = getXmlContext().getClassMetadata().get(getClass(), ClassMetadataConstants.IMPLEMENTATION_CLASS_CONSTANT_QNAME); } } return qname; }
@Override public void setXmlObjectQName(QName qname) { if ((getModelObject().getQName() != null) || (getXmlContext().getClassMetadata().has(getClass(), ClassMetadataConstants.IMPLEMENTATION_CLASS_CONSTANT_QNAME))) { throw new UncheckedException( String .format( "Setting a QName on XML object of class '%s' is not allowed ; it has a well known QName equal to '%s'.", getClass().getSimpleName(), getXmlObjectQName())); } this.qname = qname; }
@Override public final <X extends XmlObjectNode> X wrap(XmlContext xmlContext, Class<X> xmlObjectImplClass, Object obj) { assert AbstractJaxbXmlObjectImpl.class .isAssignableFrom(xmlObjectImplClass); ModelObject modelObject = null; if (obj != null) { if (obj instanceof ModelObject) { modelObject = (ModelObject) obj; } else if (obj instanceof JAXBElement<?>) { modelObject = (ModelObject) ((JAXBElement<?>) obj).getValue(); } else { throw new UncheckedException(String.format( "Do not know how to wrap object of class '%s'.", obj .getClass().getSimpleName())); } } try { AbstractJaxbModelObject ajo = (AbstractJaxbModelObject) modelObject; Constructor<? extends XmlObject> constructor = xmlContext .getClassMetadata().get(xmlObjectImplClass, IMPLEMENTATION_CLASS_CONSTRUCTOR); constructor.setAccessible(true); X xmlObjectImpl = xmlObjectImplClass.cast(doWrap(xmlContext, constructor, ajo)); return xmlObjectImpl; } catch (Exception e) { throw new UncheckedException("Problem while wrapping class", e); } }
@SuppressWarnings("unchecked") public final <X extends XmlObject> X duplicateXmlObjectAs( Class<X> targetInterfaceClass) { assert targetInterfaceClass != null; Class<? extends ModelObject> modelObjectClass = getXmlContext().getClassMetadata().get(getClass(), ClassMetadataConstants.IMPLEMENTATION_CLASS_MODELOBJECT_CLASS); assert AbstractJaxbModelObject.class.isAssignableFrom(modelObjectClass); AbstractJaxbModelObject ajmo = getModelObject().duplicateAs( (Class<? extends AbstractJaxbModelObject>) modelObjectClass); return getXmlContext().getXmlObjectFactory().wrap(ajmo, targetInterfaceClass); }
ClassMetadata cmd = xmlContext.getClassMetadata();
protected final void setChild(XmlObject child, Class<? extends XmlObject> xmlObjectInterfaceClass) { assert xmlObjectInterfaceClass != null; QName qname = getXmlContext().getClassMetadata().get(xmlObjectInterfaceClass, ClassMetadataConstants.INTERFACE_CLASS_CONSTANT_QNAME); assert qname != null : "Unexpected null QName, child should correspond to an api element, and thus have a constant QName."; if (child != null) { AbstractJaxbXmlObjectImpl<?> ajo = (AbstractJaxbXmlObjectImpl<?>) child; ajo.getModelObject().setNaturalParent(getModelObject()); JaxbReflector.setJaxbChild(getModelObject(), ajo.getModelObject(), qname); } else { JaxbReflector.setJaxbChild(getModelObject(), null, qname); } }