@Override protected DefaultHandler makeDefaultHandler() { return new SAXXMIHandler(resource, helper, options); }
@Override protected void handleForwardReferences(boolean isEndDocument) { super.handleForwardReferences(isEndDocument); if (isEndDocument) { emofHelper.convertPropertyFeatures(); } }
@Override protected void handleProxy(InternalEObject proxy, String uriLiteral) { if (uriLiteral.startsWith(EMOFExtendedMetaData.MAPPED_EMOF_EDATATYPE_HREF_PREFIX) || uriLiteral.startsWith(EMOFExtendedMetaData.MAPPED_EMOF_EDATATYPE_HREF_PREFIX_2_0)) { String dataType = uriLiteral.substring(uriLiteral.indexOf("#") + 1); for (int i = 0; i < EMOFExtendedMetaData.MAPPED_EMOF_EDATATYPES.length; i++) { if (dataType.equals(EMOFExtendedMetaData.MAPPED_EMOF_EDATATYPES[i])) { uriLiteral = EMOFExtendedMetaData.ECORE_EDATATYPE_HREF_PREFIX + EMOFExtendedMetaData.MAPPED_ECORE_EDATATYPES[i]; break; } } } else if (uriLiteral.startsWith(EMOFExtendedMetaData.UNMAPPED_EMOF_EDATATYPE_HREF_PREFIX)) { String dataType = uriLiteral.substring(EMOFExtendedMetaData.UNMAPPED_EMOF_EDATATYPE_HREF_PREFIX.length()); uriLiteral = EMOFExtendedMetaData.ECORE_EDATATYPE_HREF_PREFIX + dataType; } super.handleProxy(proxy, uriLiteral); }
handleProxy(internalEObject, attribs.getValue(i)); if (!ExtendedMetaData.XSI_URI.equals(namespace) && !notFeatures.contains(name)) setAttribValue(obj, name, attribs.getValue(i)); setAttribValue(obj, name, attribs.getValue(i));
@Override public void endElement(String uri, String localName, String name) { if (objects.size() == 1 && objects.peek() instanceof Profile) { handleForwardReferences(); } super.endElement(uri, localName, name); }
@Override protected void handleFeature(String prefix, String name) { super.handleFeature(prefix, name); // Interpret the body of a nested ownedComment as a comment-type and assign it as the EAnnotation.source of the parent. // if (EMOFExtendedMetaData.EMOF_OWNED_COMMENT.equals(name) && objects.peekEObject() instanceof EAnnotation) { EAnnotation annotation = (EAnnotation)objects.peekEObject(); EObject container = annotation.eContainer(); if (container instanceof EAnnotation) { EAnnotation parentAnnotation = (EAnnotation)container; parentAnnotation.setSource(annotation.getDetails().get(EMOFExtendedMetaData.EMOF_COMMENT_BODY)); parentAnnotation.getEAnnotations().remove(annotation); } } }
@Override protected void processElement(String name, String prefix, String localName) { if (EMOFExtendedMetaData.EXTENSION.equals(localName) && XMLContentHandlerImpl.isXMINamespace(helper.getURI(prefix))) { if (attribs != null && EcorePackage.eNS_URI.equals(attribs.getValue(EMOFExtendedMetaData.XMI_EXTENDER_ATTRIBUTE))) { types.push(ECORE_EXTENSION_TYPE); } else { types.push(ERROR_TYPE); } } else { super.processElement(name, prefix, localName); } }
@Override protected void setAttribValue(EObject object, String name, String value) { if (object instanceof EAnnotation) { EAnnotation annotation = (EAnnotation)object; String source = annotation.getSource(); if (EMOFExtendedMetaData.EMOF_PACKAGE_NS_URI.equals(source) || EMOFExtendedMetaData.EMOF_PACKAGE_NS_URI_2_0.equals(source)) { if (EMOFExtendedMetaData.EMOF_TAG_NAME.equals(name) || EMOFExtendedMetaData.EMOF_TAG_VALUE.equals(name)) { annotation.getDetails().put(name, value); return; } else if (EMOFExtendedMetaData.EMOF_COMMENT_BODY.equals(name)) { annotation.setSource(EMOFExtendedMetaData.EMOF_COMMENT_ANNOTATION_SOURCE); annotation.getDetails().put(name, value); return; } } else if (source.startsWith(EMOFExtendedMetaData.EMOF_PACKAGE_NS_URI_2_0) && EMOFExtendedMetaData.EMOF_COMMENT_BODY.equals(name)) { annotation.getDetails().put(name, value); return; } } super.setAttribValue(object, name, value); }
protected EPackage getPackageForURI(String uriString) { // Grab the schema location because all JEE DD files share a common namespace URI uri = urisToLocations.get(uriString); String locString = (uri == null) ? uriString : uri.toString(); EPackage ePackage = packageRegistry.getEPackage(locString); if (ePackage == null) return super.getPackageForURI(locString); else return ePackage; }
@Override public void endDocument() { super.endDocument(); if (extendedMetaData != null) { for (EPackage demandedPackage : extendedMetaData.demandedPackages()) { String nsURI = demandedPackage.getNsURI(); if (nsURI != null) { if (urisToLocations != null) { URI locationURI = urisToLocations.get(nsURI); if (locationURI != null) { Resource resource = new ResourceImpl(); resource.setURI(locationURI); resource.getContents().add(demandedPackage); } } for (Map.Entry<String, String> entry : helper .getPrefixToNamespaceMap()) { if (nsURI.equals(entry.getValue())) { demandedPackage.setNsPrefix(entry.getKey()); } } } } } }
handleProxy(internalEObject, attribs.getValue(i)); if (!ExtendedMetaData.XSI_URI.equals(namespace) && !notFeatures.contains(name)) setAttribValue(obj, name, attribs.getValue(i)); setAttribValue(obj, name, attribs.getValue(i));
@Override public void endElement(String uri, String localName, String name) { if (types.peek() == ECORE_EXTENSION_TYPE) { elements.pop(); types.pop(); helper.popContext(); mixedTargets.pop(); } else { super.endElement(uri, localName, name); } }
@Override protected void handleFeature(String prefix, String name) { super.handleFeature(prefix, name); // Interpret the body of a nested ownedComment as a comment-type and assign it as the EAnnotation.source of the parent. // if (EMOFExtendedMetaData.EMOF_OWNED_COMMENT.equals(name) && objects.peekEObject() instanceof EAnnotation) { EAnnotation annotation = (EAnnotation)objects.peekEObject(); EObject container = annotation.eContainer(); if (container instanceof EAnnotation) { EAnnotation parentAnnotation = (EAnnotation)container; parentAnnotation.setSource(annotation.getDetails().get(EMOFExtendedMetaData.EMOF_COMMENT_BODY)); parentAnnotation.getEAnnotations().remove(annotation); } } }
@Override protected void processElement(String name, String prefix, String localName) { if (EMOFExtendedMetaData.EXTENSION.equals(localName) && XMLContentHandlerImpl.isXMINamespace(helper.getURI(prefix))) { if (attribs != null && EcorePackage.eNS_URI.equals(attribs.getValue(EMOFExtendedMetaData.XMI_EXTENDER_ATTRIBUTE))) { types.push(ECORE_EXTENSION_TYPE); } else { types.push(ERROR_TYPE); } } else { super.processElement(name, prefix, localName); } }
@Override protected void setAttribValue(EObject object, String name, String value) { if (object instanceof EAnnotation) { EAnnotation annotation = (EAnnotation)object; String source = annotation.getSource(); if (EMOFExtendedMetaData.EMOF_PACKAGE_NS_URI.equals(source) || EMOFExtendedMetaData.EMOF_PACKAGE_NS_URI_2_0.equals(source)) { if (EMOFExtendedMetaData.EMOF_TAG_NAME.equals(name) || EMOFExtendedMetaData.EMOF_TAG_VALUE.equals(name)) { annotation.getDetails().put(name, value); return; } else if (EMOFExtendedMetaData.EMOF_COMMENT_BODY.equals(name)) { annotation.setSource(EMOFExtendedMetaData.EMOF_COMMENT_ANNOTATION_SOURCE); annotation.getDetails().put(name, value); return; } } else if (source.startsWith(EMOFExtendedMetaData.EMOF_PACKAGE_NS_URI_2_0) && EMOFExtendedMetaData.EMOF_COMMENT_BODY.equals(name)) { annotation.getDetails().put(name, value); return; } } super.setAttribValue(object, name, value); }
@Override public void endElement(String uri, String localName, String name) { if (types.peek() == ECORE_EXTENSION_TYPE) { elements.pop(); types.pop(); helper.popContext(); mixedTargets.pop(); } else { super.endElement(uri, localName, name); } }
@Override protected DefaultHandler makeDefaultHandler() { return new SAXXMIHandler(resource, helper, options); }
@Override protected void handleForwardReferences(boolean isEndDocument) { super.handleForwardReferences(isEndDocument); if (isEndDocument) { emofHelper.convertPropertyFeatures(); } }
@Override protected void handleProxy(InternalEObject proxy, String uriLiteral) { if (uriLiteral.startsWith(EMOFExtendedMetaData.MAPPED_EMOF_EDATATYPE_HREF_PREFIX) || uriLiteral.startsWith(EMOFExtendedMetaData.MAPPED_EMOF_EDATATYPE_HREF_PREFIX_2_0)) { String dataType = uriLiteral.substring(uriLiteral.indexOf("#") + 1); for (int i = 0; i < EMOFExtendedMetaData.MAPPED_EMOF_EDATATYPES.length; i++) { if (dataType.equals(EMOFExtendedMetaData.MAPPED_EMOF_EDATATYPES[i])) { uriLiteral = EMOFExtendedMetaData.ECORE_EDATATYPE_HREF_PREFIX + EMOFExtendedMetaData.MAPPED_ECORE_EDATATYPES[i]; break; } } } else if (uriLiteral.startsWith(EMOFExtendedMetaData.UNMAPPED_EMOF_EDATATYPE_HREF_PREFIX)) { String dataType = uriLiteral.substring(EMOFExtendedMetaData.UNMAPPED_EMOF_EDATATYPE_HREF_PREFIX.length()); uriLiteral = EMOFExtendedMetaData.ECORE_EDATATYPE_HREF_PREFIX + dataType; } super.handleProxy(proxy, uriLiteral); }