/* * JBoss, Home of Professional Open Source. * * See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing. * * See the AUTHORS.txt file distributed with this work for a full listing of individual contributors. */ package org.teiid.designer.metamodels.core.custom.impl; import java.util.Iterator; import org.eclipse.emf.ecore.EAttribute; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.resource.Resource; import org.teiid.designer.metamodels.core.extension.XPackage; import org.teiid.designer.metamodels.core.impl.ModelAnnotationImpl; /** * mmDefect_12555 - Created XsdModelAnnotationImpl so that an Resource reference was available in the ModelAnnotationItemProvider * since ModelAnnotation instances associated with XSD resources return null for the eResource reference. * * @since 8.0 */ public class XsdModelAnnotationImpl extends ModelAnnotationImpl { protected Resource xsdResource; /** * @since 4.2 */ public XsdModelAnnotationImpl() { super(); } /** * @since 4.2 */ public XsdModelAnnotationImpl( final Resource xsdResource ) { super(); this.xsdResource = xsdResource; } /** * {@inheritDoc} * * @see org.eclipse.emf.ecore.impl.BasicEObjectImpl#eResource() */ @Override public Resource eResource() { // since this object is NOT added to the resource contents it does not have an eResource. Our framework for finding // an object given a UUID (and vice versa) requires a resource. return getResource(); } /** * @since 4.2 */ public Resource getResource() { return this.xsdResource; } /** * @since 4.2 */ public void setResource( final Resource xsdResource ) { this.xsdResource = xsdResource; } @Override public void setExtensionPackage( XPackage newExtensionPackage ) { super.setExtensionPackage(newExtensionPackage); // mmDefect_12555 - Perform some get/set trickery on the xsd resource so that it is marked as requiring save if (this.xsdResource != null) { this.xsdResource.setModified(true); EObject schema = this.getSchema(this.xsdResource); if (schema != null) { EAttribute eAttrib = this.getTargetNamespaceAttribute(schema); if (eAttrib != null) { Object origValue = schema.eGet(eAttrib); schema.eSet(eAttrib, null); schema.eSet(eAttrib, origValue); } } } } private EObject getSchema( final Resource resource ) { for (Iterator iter = resource.getContents().iterator(); iter.hasNext();) { Object root = iter.next(); if (root instanceof EObject) { final EClass eClass = ((EObject)root).eClass(); if (eClass.getName().equalsIgnoreCase("XSDSchema")) { //$NON-NLS-1$ return (EObject)root; } } } return null; } private EAttribute getTargetNamespaceAttribute( final EObject eObject ) { final EClass eClass = eObject.eClass(); return (EAttribute)eClass.getEStructuralFeature("targetNamespace"); //$NON-NLS-1$ } }