/******************************************************************************* * Copyright (c) 2007, 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.ocl.examples.modelregistry.environment; import java.util.Collection; import java.util.HashMap; import java.util.Map; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.ocl.examples.modelregistry.model.ModelSerialization; import org.eclipse.ocl.examples.modelregistry.model.NamedSerialization; import org.eclipse.ocl.pivot.utilities.ClassUtil; /** * The map of serialization name to resource factory. */ public class ModelSerializationRegistry { public static abstract class FactorySerializationDelegate extends ClassDelegate<Resource.Factory> implements ModelSerialization { protected final String serializationName; public FactorySerializationDelegate(String serializationName, String className) { super(className, Resource.Factory.class); this.serializationName = serializationName; } public FactorySerializationDelegate(String serializationName, Resource.Factory instance) { super(instance); this.serializationName = serializationName; } public String getFactoryClassName() { return className; } public String getName() { return serializationName; } } public static class SerializationFactory extends FactorySerializationDelegate { public SerializationFactory(String serializationName, Resource.Factory instance) { super(serializationName, instance); } @Override protected Class<?> loadClass(String className) { return null; } } private final Map<String, ModelSerialization> serializations = new HashMap<String, ModelSerialization>(); public void addSerializationFactory(String name, Resource.Factory instance) { serializations.put(name, new SerializationFactory(name, instance)); } public void addSerializationFactoryDelegate(String name, ModelSerialization modelSerialization) { serializations.put(name, modelSerialization); } public FactorySerializationDelegate getSerialization(String name) { ModelSerialization modelSerialisation = serializations.get(name); return ClassUtil.asClassOrNull(modelSerialisation, FactorySerializationDelegate.class); } public ModelSerialization getSerializationOrCreate(String name) { ModelSerialization modelSerialization = serializations.get(name); if (modelSerialization == null) { modelSerialization = new NamedSerialization(name); serializations.put(name, modelSerialization); } return modelSerialization; } public Collection<String> getSerializations() { return serializations.keySet(); } }