blob: 96f63c4c70623b6427642032e2394d50b42c4281 [file] [log] [blame]
/**
* <copyright>
*
* Copyright (c) 2011 See4sys and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
*
* Contributors:
* See4sys - Initial API and implementation
*
* </copyright>
*/
package org.eclipse.sphinx.xtend.typesystem.emf;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.sphinx.emf.metamodel.IMetaModelDescriptor;
import org.eclipse.sphinx.emf.metamodel.MetaModelDescriptorRegistry;
import org.eclipse.xtend.typesystem.emf.EmfRegistryMetaModel;
/**
* An EMF MetaModel that is based on the {@link EPackage}s of a configurable collection of {@link IMetaModelDescriptor
* metamodel descriptor}s.
*/
public class ConfigurableEmfMetaModel extends EmfRegistryMetaModel {
private Set<IMetaModelDescriptor> metaModelDescriptors = new HashSet<IMetaModelDescriptor>();
private Collection<EPackage> allEPackages = null;
/*
* !! Important Note !! This method must be named other to #addMetaModelDescriptor(IMetaModelDescriptor) so as to
* make sure that it can be found when ConfigurableEmfMetaModel is instantiated as bean in MWE workflows and
* initialized with metamodel descriptor identifiers.
*/
public void addMetaModelDescriptorId(String mmDescriptorId) {
IMetaModelDescriptor mmDescriptor = MetaModelDescriptorRegistry.INSTANCE.getDescriptor(mmDescriptorId);
if (mmDescriptor != null) {
metaModelDescriptors.add(mmDescriptor);
}
}
public void addMetaModelDescriptor(IMetaModelDescriptor mmDescriptor) {
if (mmDescriptor != null) {
metaModelDescriptors.add(mmDescriptor);
}
}
@Override
protected EPackage[] allPackages() {
if (allEPackages == null) {
allEPackages = doAllPackages();
}
return allEPackages.toArray(new EPackage[allEPackages.size()]);
}
protected Collection<EPackage> doAllPackages() {
Collection<EPackage> allEPackages = new HashSet<EPackage>();
for (IMetaModelDescriptor mmDescriptor : metaModelDescriptors) {
allEPackages.addAll(mmDescriptor.getEPackages());
}
return allEPackages;
}
}