blob: 2a27c43ac9f37d57a277f0345006b77338a1b50c [file] [log] [blame]
/**
* Copyright (c) 2014 Obeo 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:
* Obeo - initial API and implementation
*/
package org.eclipse.ocl.examples.xtext.completeocl.internal.registry;
import java.util.HashSet;
import java.util.Set;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.Platform;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.plugin.RegistryReader;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.ocl.examples.xtext.completeocl.utilities.CompleteOCLPlugin;
/**
* A plugin extension reader that populates the Complete OCL resource registry.
*
* @author <a href="mailto:marwa.rostren@obeo.fr">Marwa Rostren</a>
*/
public class CompleteOCLRegistryReader extends RegistryReader
{
private static final @NonNull String TAG_DOCUMENT = "document";
private static final @NonNull String TAG_FOR = "for";
private static final @NonNull String ATTRIBUTE_RESOURCE = "resource";
private static final @NonNull String ATTRIBUTE_URI = "uri";
public CompleteOCLRegistryReader() {
super(Platform.getExtensionRegistry(), CompleteOCLPlugin.getPlugin()
.getBundle().getSymbolicName(),
CompleteOCLPlugin.OCL_RESOURCE_REGISTRY_PID);
}
@Override
protected boolean readElement(IConfigurationElement element, boolean add) {
String tagName = element.getName();
if (TAG_FOR.equals(tagName)) {
return true;
}
if (!TAG_DOCUMENT.equals(tagName)) {
return false;
}
final String filePath = element.getAttribute(ATTRIBUTE_RESOURCE);
boolean recognized = true;
if (filePath == null) {
logMissingAttribute(element, ATTRIBUTE_RESOURCE);
recognized = false;
} else {
Set<String> nsURIs = new HashSet<String>();
for (IConfigurationElement childElement : element.getChildren(TAG_FOR)) {
final String nsURI = childElement.getAttribute(ATTRIBUTE_URI);
if (nsURI == null) {
logMissingAttribute(childElement, ATTRIBUTE_URI);
recognized = false;
}
else {
nsURIs.add(nsURI);
}
}
URI declaredURI = URI.createURI(filePath);
String bundleName = "/" + element.getDeclaringExtension().getContributor().getName() + "/";
URI bundleURI = URI.createPlatformPluginURI(bundleName, true);
@SuppressWarnings("null")@NonNull URI fileURI = declaredURI.resolve(bundleURI);
if (add) {
CompleteOCLRegistry.INSTANCE.addURI(fileURI, nsURIs);
} else {
CompleteOCLRegistry.INSTANCE.removeURI(fileURI);
}
}
return recognized;
}
}