blob: 8876faaa16ad3c0294a7e0edeed93ad65cf1536c [file] [log] [blame]
/**
* Copyright (c) 2009, 2011 Mia-Software.
* 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:
* Gregoire DUPE (Mia-Software) - initial API and implementation
*/
package org.eclipse.gmt.modisco.infra.facet.core;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.Plugin;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EAnnotation;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.EValidator;
import org.eclipse.gmt.modisco.infra.common.core.internal.builder.AbstractMoDiscoCatalog.ModiscoCatalogChangeListener;
import org.eclipse.gmt.modisco.infra.common.core.internal.builder.EcoreCatalog;
import org.eclipse.gmt.modisco.infra.facet.FacetPackage;
import org.eclipse.gmt.modisco.infra.facet.FacetSet;
import org.eclipse.gmt.modisco.infra.facet.core.internal.Activator;
import org.eclipse.gmt.modisco.infra.facet.validation.EValidatorAdapter;
import org.eclipse.gmt.modisco.infra.query.core.ModelQuerySetCatalog;
/**
* @deprecated Replaced by EMF Facet
*/
@Deprecated
public final class FacetSetCatalog extends EcoreCatalog implements ModiscoCatalogChangeListener {
public static final String REGISTRATION_EXTENSION_POINT_ID = "org.eclipse.gmt.modisco.infra.facet.registration"; //$NON-NLS-1$
public static final String FILE_EXTENSION = "facetSet"; //$NON-NLS-1$
private static FacetSetCatalog singleton = null;
public static synchronized FacetSetCatalog getSingleton() {
if (FacetSetCatalog.singleton == null) {
EValidator validator = EValidator.Registry.INSTANCE
.getEValidator(FacetPackage.eINSTANCE);
if (validator == null) {
// Registers the validator adapter in the EMF validator registry
EValidator.Registry.INSTANCE.put(FacetPackage.eINSTANCE, new EValidatorAdapter());
}
EcoreCatalog.getSingleton();
ModelQuerySetCatalog.getSingleton();
FacetSetCatalog.singleton = new FacetSetCatalog();
}
return FacetSetCatalog.singleton;
}
private HashMap<EPackage, HashSet<FacetSet>> ePackageToDefaultFacetSetMap;
public synchronized Map<EPackage, HashSet<FacetSet>> getEPackageToDefaultFacetSetMap() {
if (this.ePackageToDefaultFacetSetMap == null) {
this.ePackageToDefaultFacetSetMap = new HashMap<EPackage, HashSet<FacetSet>>();
}
return this.ePackageToDefaultFacetSetMap;
}
private FacetSetCatalog() {
super();
addChangeListener(this);
}
/**
* {@inheritDoc}
*/
@Override
protected String getRootObjectName(final EObject rootObject) {
return ((FacetSet) rootObject).getName();
}
/**
* {@inheritDoc}
*/
@Override
protected String getRootObjectNsUri(final EObject rootObject) {
return ((FacetSet) rootObject).getNsURI();
}
/**
* {@inheritDoc}
*/
@Override
protected Class<?> getRootClass() {
return FacetSet.class;
}
/**
* This method returns the facet set of the resource having for name the
* "name" parameter value.
*
* @param name
* the name of a resource contained in the catalog
* @return return a facet set
*/
public FacetSet getFacetSet(final String name) {
return (FacetSet) getRootObject(name);
}
/**
* Get the set of default {@link FacetSet}s that apply to the given
* {@link EPackage}.
*
* @param ePackage
* the package for which matching {@link FacetSet}s will be
* returned
* @return the set of default {@link FacetSet}s
*/
public Set<FacetSet> getDefaultFacetSets(final EPackage ePackage) {
return getEPackageToDefaultFacetSetMap().get(ePackage);
}
/**
* {@inheritDoc}
*/
@Override
protected String getRegistryExtensionPoint() {
return FacetSetCatalog.REGISTRATION_EXTENSION_POINT_ID;
}
/**
* This methods returns the facet sets of all the resources contained in the
* catalog.
*
* @return returns all the facet sets
*/
public Collection<FacetSet> getAllFacetSets() {
Collection<FacetSet> result = new ArrayList<FacetSet>();
for (EObject eObject : getAllRootObjects()) {
if (eObject instanceof FacetSet) {
FacetSet facetSet = (FacetSet) eObject;
result.add(facetSet);
}
}
return result;
}
/**
* {@inheritDoc}
*/
@Override
protected String getMoDiscoSubProtocol() {
return "facet"; //$NON-NLS-1$
}
@Override
protected synchronized void postOpenResource(final URI uri, final IFile file, final EObject root)
throws Exception {
super.postOpenResource(uri, file, root);
if (root instanceof FacetSet) {
FacetSet facetSet = (FacetSet) root;
EAnnotation annotation = facetSet.getEAnnotation("default"); //$NON-NLS-1$
if (annotation != null) {
if (annotation.getReferences().size() == 1
&& annotation.getReferences().get(0) instanceof EPackage) {
EPackage ePackage = (EPackage) annotation.getReferences().get(0);
HashSet<FacetSet> facetSets = getEPackageToDefaultFacetSetMap().get(ePackage);
if (facetSets == null) {
facetSets = new HashSet<FacetSet>();
getEPackageToDefaultFacetSetMap().put(ePackage, facetSets);
}
facetSets.add(facetSet);
}
}
}
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.gmt.modisco.infra.common.core.internal.builder.EcoreCatalog
* #getActivator()
*/
@Override
protected Plugin getActivator() {
return Activator.getDefault();
}
@Override
public String getFileExtension() {
return FacetSetCatalog.FILE_EXTENSION;
}
public void changed(final EObject eObject, final IFile file) {
EcoreCatalog.getSingleton().updateNotify(eObject, file);
}
public void added(final EObject eObject, final IFile file) {
EcoreCatalog.getSingleton().addNotify(eObject, file);
}
public void removed(final IFile file) {
EcoreCatalog.getSingleton().removeNotify(file);
}
@Override
protected void postRestoreInstalledURI(final EObject modiscoResourceRoot) {
// Bug 313309 - Installed version of Facet not in the registry after
// deleting workspace version
if (modiscoResourceRoot instanceof FacetSet) {
FacetSet facetSet = (FacetSet) modiscoResourceRoot;
String nsURI = facetSet.getNsURI();
if (nsURI != null) {
EPackage.Registry.INSTANCE.put(nsURI, facetSet);
}
}
}
}