/**
* Copyright (c) 2003-2006 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM - Initial API and implementation
*/
package org.eclipse.emf.ecore.xmi.impl;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EcorePackage;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.impl.ResourceFactoryImpl;
import org.eclipse.emf.ecore.xmi.XMIResource;
import org.eclipse.emf.ecore.xmi.XMLResource;
public class EMOFResourceFactoryImpl extends ResourceFactoryImpl
{
protected EMOFExtendedMetaData extendedMetaData;
public EMOFResourceFactoryImpl()
{
super();
XMLResource.XMLMap xmlMap = new XMLMapImpl();
xmlMap.add(EcorePackage.Literals.EFACTORY, createXMLInfo("Factory"));
xmlMap.add(EcorePackage.Literals.EPACKAGE, createXMLInfo("Package"));
xmlMap.add(EcorePackage.Literals.EATTRIBUTE, createXMLInfo("Property"));
xmlMap.add(EcorePackage.Literals.EREFERENCE, createXMLInfo("Property"));
xmlMap.add(EcorePackage.Literals.EPARAMETER, createXMLInfo("Parameter"));
xmlMap.add(EcorePackage.Literals.EOPERATION, createXMLInfo("Operation"));
xmlMap.add(EcorePackage.Literals.EENUM_LITERAL, createXMLInfo("EnumerationLiteral"));
xmlMap.add(EcorePackage.Literals.EDATA_TYPE, createXMLInfo("PrimitiveType"));
xmlMap.add(EcorePackage.Literals.EENUM, createXMLInfo("Enumeration"));
xmlMap.add(EcorePackage.Literals.ECLASS, createXMLInfo("Class"));
xmlMap.add(EcorePackage.Literals.EFACTORY__EPACKAGE, createXMLInfo("package"));
xmlMap.add(EcorePackage.Literals.EPACKAGE__NS_URI, createXMLInfo("uri"));
xmlMap.add(EcorePackage.Literals.EPACKAGE__ESUBPACKAGES, createXMLInfo("nestedPackage"));
xmlMap.add(EcorePackage.Literals.EPACKAGE__ESUPER_PACKAGE, createXMLInfo("nestingPackage"));
xmlMap.add(EcorePackage.Literals.EPACKAGE__ECLASSIFIERS, createXMLInfo("ownedType"));
xmlMap.add(EcorePackage.Literals.EPACKAGE__NS_PREFIX, createXMLInfo()); // no property
xmlMap.add(EcorePackage.Literals.ETYPED_ELEMENT__ETYPE, createXMLInfo("type"));
xmlMap.add(EcorePackage.Literals.ETYPED_ELEMENT__ORDERED, createXMLInfo("isOrdered"));
xmlMap.add(EcorePackage.Literals.ETYPED_ELEMENT__UNIQUE, createXMLInfo("isUnique"));
xmlMap.add(EcorePackage.Literals.ETYPED_ELEMENT__LOWER_BOUND, createXMLInfo("lower"));
xmlMap.add(EcorePackage.Literals.ETYPED_ELEMENT__UPPER_BOUND, createXMLInfo("upper"));
xmlMap.add(EcorePackage.Literals.ESTRUCTURAL_FEATURE__CHANGEABLE, createXMLInfo("isReadOnly")); // boolean not
xmlMap.add(EcorePackage.Literals.ESTRUCTURAL_FEATURE__DEFAULT_VALUE_LITERAL, createXMLInfo("default"));
xmlMap.add(EcorePackage.Literals.ESTRUCTURAL_FEATURE__VOLATILE, createXMLInfo()); // no property
xmlMap.add(EcorePackage.Literals.ESTRUCTURAL_FEATURE__UNSETTABLE, createXMLInfo()); // no property
xmlMap.add(EcorePackage.Literals.ESTRUCTURAL_FEATURE__TRANSIENT, createXMLInfo()); // no property
xmlMap.add(EcorePackage.Literals.ESTRUCTURAL_FEATURE__DERIVED, createXMLInfo("isDerived"));
xmlMap.add(EcorePackage.Literals.EATTRIBUTE__ID, createXMLInfo("isID"));
xmlMap.add(EcorePackage.Literals.EREFERENCE__CONTAINMENT, createXMLInfo("isComposite"));
xmlMap.add(EcorePackage.Literals.EREFERENCE__EOPPOSITE, createXMLInfo("opposite"));
xmlMap.add(EcorePackage.Literals.EREFERENCE__RESOLVE_PROXIES, createXMLInfo()); // no property
xmlMap.add(EcorePackage.Literals.EENUM_LITERAL__VALUE, createXMLInfo()); // no property
xmlMap.add(EcorePackage.Literals.EOPERATION__EPARAMETERS, createXMLInfo("ownedParameter"));
xmlMap.add(EcorePackage.Literals.EOPERATION__EEXCEPTIONS, createXMLInfo("raisedException"));
xmlMap.add(EcorePackage.Literals.ECLASSIFIER__INSTANCE_CLASS_NAME, createXMLInfo()); // no property
xmlMap.add(EcorePackage.Literals.ECLASSIFIER__INSTANCE_TYPE_NAME, createXMLInfo()); // no property
xmlMap.add(EcorePackage.Literals.EDATA_TYPE__SERIALIZABLE, createXMLInfo()); // no property
xmlMap.add(EcorePackage.Literals.EENUM__ELITERALS, createXMLInfo("ownedLiteral"));
xmlMap.add(EcorePackage.Literals.ECLASS__ABSTRACT, createXMLInfo("isAbstract"));
xmlMap.add(EcorePackage.Literals.ECLASS__ESTRUCTURAL_FEATURES, createXMLInfo("ownedAttribute")); // ownedProperty???
xmlMap.add(EcorePackage.Literals.ECLASS__EOPERATIONS, createXMLInfo("ownedOperation"));
xmlMap.add(EcorePackage.Literals.ECLASS__ESUPER_TYPES, createXMLInfo("superClass"));
xmlMap.add(EcorePackage.Literals.ECLASS__INTERFACE, createXMLInfo()); // no property
extendedMetaData = new EMOFExtendedMetaData(xmlMap);
}
@Override
public Resource createResource(URI uri)
{
EMOFResourceImpl result = new EMOFResourceImpl(uri);
result.setEncoding("UTF-8");
result.getDefaultLoadOptions().put(XMLResource.OPTION_EXTENDED_META_DATA, extendedMetaData);
result.getDefaultSaveOptions().put(XMLResource.OPTION_EXTENDED_META_DATA, extendedMetaData);
result.getDefaultSaveOptions().put(XMLResource.OPTION_LINE_WIDTH, 80);
result.getDefaultSaveOptions().put(XMIResource.OPTION_USE_XMI_TYPE, Boolean.TRUE);
return result;
}
protected XMLResource.XMLInfo createXMLInfo(String name)
{
XMLResource.XMLInfo info = new XMLInfoImpl();
info.setName(name);
return info;
}
protected XMLResource.XMLInfo createXMLInfo()
{
XMLResource.XMLInfo info = new XMLInfoImpl();
info.setXMLRepresentation(XMLResource.XMLInfo.ELEMENT); // We will use an xmi:Extension element for these
return info;
}
}