blob: e5b9ea5580930bab21f06d371e74e7fbda1fdbea [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008, 2013 IBM 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.pde.api.tools.internal.provisional.comparator;
import java.util.ArrayList;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.osgi.util.NLS;
import org.eclipse.pde.api.tools.internal.model.Messages;
import org.eclipse.pde.api.tools.internal.provisional.ApiPlugin;
import org.eclipse.pde.api.tools.internal.provisional.model.ApiScopeVisitor;
import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
import org.eclipse.pde.api.tools.internal.provisional.model.IApiComponent;
import org.eclipse.pde.api.tools.internal.provisional.model.IApiElement;
import org.eclipse.pde.api.tools.internal.provisional.model.IApiScope;
import org.eclipse.pde.api.tools.internal.provisional.model.IApiTypeContainer;
import org.eclipse.pde.api.tools.internal.provisional.model.IApiTypeRoot;
import org.eclipse.pde.api.tools.internal.util.Util;
/**
* Default implementation of a {@link IApiScope}.
*/
public class ApiScope implements IApiScope {
private static final IApiElement[] NO_ELEMENTS = new IApiElement[0];
/**
* Contains all API elements of this scope
*/
ArrayList<IApiElement> elements;
@Override
public void accept(ApiScopeVisitor visitor) throws CoreException {
IApiElement[] elems = getApiElements();
for (IApiElement apiElement : elems) {
int type = apiElement.getType();
switch (type) {
case IApiElement.API_TYPE_CONTAINER: {
IApiTypeContainer container = (IApiTypeContainer) apiElement;
visitor.visit(container);
visitor.endVisit(container);
break;
}
case IApiElement.API_TYPE_ROOT: {
IApiTypeRoot root = (IApiTypeRoot) apiElement;
visitor.visit(root);
visitor.endVisit(root);
break;
}
case IApiElement.BASELINE: {
IApiBaseline baseline = (IApiBaseline) apiElement;
visitor.visit(baseline);
visitor.endVisit(baseline);
break;
}
case IApiElement.COMPONENT: {
IApiComponent component = (IApiComponent) apiElement;
visitor.visit(component);
visitor.endVisit(component);
break;
}
default:
throw new CoreException(new Status(IStatus.ERROR, ApiPlugin.PLUGIN_ID, NLS.bind(Messages.ApiScope_0, Util.getApiElementType(type))));
}
}
}
@Override
public void addElement(IApiElement newelement) {
if (this.elements == null) {
this.elements = new ArrayList<>();
}
this.elements.add(newelement);
}
@Override
public boolean encloses(IApiElement element) {
if (element != null) {
IApiComponent component = element.getApiComponent();
IApiComponent enclosing = null;
for (IApiElement iApiElement : this.elements) {
enclosing = iApiElement.getApiComponent();
if (component.equals(enclosing)) {
return true;
}
}
}
return false;
}
@Override
public IApiElement[] getApiElements() {
if (this.elements == null || this.elements.isEmpty()) {
return NO_ELEMENTS;
}
return this.elements.toArray(new IApiElement[this.elements.size()]);
}
}