/*******************************************************************************
* Copyright (c) 2007, 2014 Borland Software 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:
* Borland Software Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.m2m.internal.qvt.oml.emf.util.mmregistry;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.emf.ecore.EFactory;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.EPackage.Registry;
public class EmfStandaloneMetamodelProvider implements IMetamodelProvider {
private Registry fRegistry;
public EmfStandaloneMetamodelProvider() {
this(EPackage.Registry.INSTANCE);
}
public EmfStandaloneMetamodelProvider(EPackage.Registry packageRegistry) {
if(packageRegistry == null) {
throw new IllegalArgumentException();
}
fRegistry = packageRegistry;
}
public EPackage.Registry getPackageRegistry() {
return fRegistry;
}
public IMetamodelDesc[] getMetamodels() {
final List<IMetamodelDesc> descs = new ArrayList<IMetamodelDesc>(fRegistry.size());
for (String uri : fRegistry.keySet()) {
IMetamodelDesc desc = getMetamodel(uri);
if (desc != null) {
descs.add(desc);
}
}
return descs.toArray(new IMetamodelDesc[descs.size()]);
}
public IMetamodelDesc getMetamodel(final String nsURI) {
if (fRegistry.containsKey(nsURI)) {
EPackage.Descriptor descriptor = new EPackage.Descriptor() {
public EPackage getEPackage() {
return fRegistry.getEPackage(nsURI);
}
public EFactory getEFactory() {
EPackage ePackage = getEPackage();
return ePackage == null ? null : ePackage.getEFactoryInstance();
}
};
return new EmfMetamodelDesc(descriptor, nsURI);
}
return null;
}
}