blob: 55c9238d341a6b926895d92b19e98a07a63db654 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2013, 2015 Willink Transformations 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:
* E.D.Willink - Initial API and implementation
*******************************************************************************/
package org.eclipse.qvtd.pivot.qvtcore.utilities;
import java.util.Map;
import org.eclipse.emf.ecore.resource.ContentHandler;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.xmi.impl.RootXMLContentHandlerImpl;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.ocl.pivot.internal.prettyprint.PrettyPrintVisitor;
import org.eclipse.ocl.pivot.internal.prettyprint.PrettyPrinter;
import org.eclipse.ocl.pivot.internal.resource.ASResourceFactory;
import org.eclipse.ocl.pivot.internal.resource.ASSaver;
import org.eclipse.ocl.pivot.internal.resource.AbstractASResourceFactory;
import org.eclipse.ocl.pivot.internal.utilities.AS2Moniker;
import org.eclipse.ocl.pivot.internal.utilities.AS2XMIid;
import org.eclipse.ocl.pivot.utilities.AS2MonikerVisitor;
import org.eclipse.ocl.pivot.utilities.AS2XMIidVisitor;
import org.eclipse.ocl.pivot.utilities.ASSaverLocateVisitor;
import org.eclipse.ocl.pivot.utilities.ASSaverNormalizeVisitor;
import org.eclipse.ocl.pivot.utilities.ASSaverResolveVisitor;
import org.eclipse.ocl.pivot.utilities.ToStringVisitor;
import org.eclipse.qvtd.pivot.qvtcore.QVTcorePackage;
/**
* QVTcoreASResourceFactory supports creation of a QVTcore AS resource and associated artefacts.
*/
public class QVTcoreASResourceFactory extends AbstractASResourceFactory
{
public static final @NonNull String FILE_EXTENSION = "qvtcas";
private static @Nullable QVTcoreASResourceFactory INSTANCE = null;
public static synchronized @NonNull QVTcoreASResourceFactory getInstance() {
if (INSTANCE == null) {
Map<String, Object> extensionToFactoryMap = Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap();
Object object = extensionToFactoryMap.get(FILE_EXTENSION);
if (object instanceof Resource.Factory.Descriptor) {
INSTANCE = (QVTcoreASResourceFactory) ((Resource.Factory.Descriptor)object).createFactory(); // Create the registered singleton
}
else {
INSTANCE = new QVTcoreASResourceFactory(); // Create our own singleton
}
assert INSTANCE != null;
INSTANCE.install(null, null);
}
assert INSTANCE != null;
return INSTANCE;
}
private static final @NonNull ContentHandler CONTENT_HANDLER = new RootXMLContentHandlerImpl(
QVTcorePackage.eCONTENT_TYPE, new String[]{FILE_EXTENSION},
RootXMLContentHandlerImpl.XMI_KIND, QVTcorePackage.eNS_URI, null);
static {
installContentHandler(ContentHandler.Registry.NORMAL_PRIORITY, CONTENT_HANDLER);
}
/**
* Creates an instance of the resource factory.
*/
public QVTcoreASResourceFactory() {
super(QVTcorePackage.eCONTENT_TYPE);
}
@Override
public void configure(@NonNull ResourceSet resourceSet) {
Resource.Factory.Registry resourceFactoryRegistry = resourceSet.getResourceFactoryRegistry();
resourceFactoryRegistry.getExtensionToFactoryMap().put(FILE_EXTENSION, this);
}
@Override
public @NonNull AS2MonikerVisitor createAS2MonikerVisitor(@NonNull AS2Moniker as2moniker) {
return new QVTcoreAS2MonikerVisitor(as2moniker);
}
@Override
public @NonNull AS2XMIidVisitor createAS2XMIidVisitor(@NonNull AS2XMIid as2id) {
return new QVTcoreAS2XMIidVisitor(as2id);
}
@Override
public @NonNull ASSaverLocateVisitor createASSaverLocateVisitor(@NonNull ASSaver asSaver) {
return new QVTcoreASSaverLocateVisitor(asSaver);
}
@Override
public @NonNull ASSaverNormalizeVisitor createASSaverNormalizeVisitor(@NonNull ASSaver saver) {
return new QVTcoreASSaverNormalizeVisitor(saver);
}
@Override
public @NonNull ASSaverResolveVisitor createASSaverResolveVisitor(@NonNull ASSaver asSaver) {
return new QVTcoreASSaverResolveVisitor(asSaver);
}
@Override
public @NonNull PrettyPrintVisitor createPrettyPrintVisitor(@NonNull PrettyPrinter printer) {
return new QVTcorePrettyPrintVisitor(printer);
}
@Override
public @NonNull ToStringVisitor createToStringVisitor(@NonNull StringBuilder s) {
return new QVTcoreToStringVisitor(s);
}
@Override
public @NonNull ASResourceFactory getASResourceFactory() {
return getInstance();
}
}