|
What this is
Other links
The source code/******************************************************************************* * Copyright (c) 2007, 2008 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; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.MultiStatus; import org.eclipse.core.runtime.Status; import org.eclipse.pde.api.tools.internal.provisional.ApiPlugin; import org.eclipse.pde.api.tools.internal.provisional.ClassFileContainerVisitor; import org.eclipse.pde.api.tools.internal.provisional.IClassFile; import org.eclipse.pde.api.tools.internal.provisional.IClassFileContainer; /** * Common implementation of a composite class file container. * * @since 1.0.0 */ public abstract class AbstractClassFileContainer implements IClassFileContainer { /** * Collection of class file containers */ private List fClassFileContainers = null; /* (non-Javadoc) * @see org.eclipse.pde.api.tools.model.component.IClassFileContainer#accept(org.eclipse.pde.api.tools.model.component.ClassFileContainerVisitor) */ public void accept(ClassFileContainerVisitor visitor) throws CoreException { IClassFileContainer[] containers = getClassFileContainers(); for (int i = 0; i < containers.length; i++) { containers[i].accept(visitor); } } /* (non-Javadoc) * @see org.eclipse.pde.api.tools.model.component.IClassFileContainer#close() */ public synchronized void close() throws CoreException { if (fClassFileContainers == null) { return; } MultiStatus multi = null; IStatus single = null; IClassFileContainer[] containers = getClassFileContainers(); for (int i = 0; i < containers.length; i++) { try { containers[i].close(); } catch (CoreException e) { if (single == null) { single = e.getStatus(); } else { if (multi == null) { multi = new MultiStatus(ApiPlugin.getPluginIdentifier(), single.getCode(), single.getMessage(), single.getException()); } multi.add(e.getStatus()); } } } if (multi != null) { throw new CoreException(multi); } if (single != null) { throw new CoreException(single); } } /* (non-Javadoc) * @see org.eclipse.pde.api.tools.model.component.IClassFileContainer#findClassFile(java.lang.String) */ public IClassFile findClassFile(String qualifiedName) throws CoreException { IClassFileContainer[] containers = getClassFileContainers(); for (int i = 0; i < containers.length; i++) { IClassFile file = containers[i].findClassFile(qualifiedName); if (file != null) { return file; } } return null; } /* (non-Javadoc) * @see org.eclipse.pde.api.tools.model.component.IClassFileContainer#findClassFile(java.lang.String,java.lang.String) */ public IClassFile findClassFile(String qualifiedName, String id) throws CoreException { IClassFileContainer[] containers = getClassFileContainers(); for (int i = 0; i < containers.length; i++) { String origin = containers[i].getOrigin(); if (origin == null) { IClassFile file = containers[i].findClassFile(qualifiedName); if (file != null) { return file; } } else if (origin.equals(id)) { IClassFile file = containers[i].findClassFile(qualifiedName, id); if (file != null) { return file; } } } return null; } /* (non-Javadoc) * @see org.eclipse.pde.api.tools.model.component.IClassFileContainer#getPackageNames() */ public String[] getPackageNames() throws CoreException { List names = new ArrayList(); IClassFileContainer[] containers = getClassFileContainers(); for (int i = 0; i < containers.length; i++) { String[] packageNames = containers[i].getPackageNames(); for (int j = 0; j < packageNames.length; j++) { names.add(packageNames[j]); } } return (String[]) names.toArray(new String[names.size()]); } /** * Throws a core exception with the given message and underlying exception, * if any. * * @param message error message * @param e underlying exception or <code>null * @throws CoreException */ protected void abort(String message, Throwable e) throws CoreException { throw new CoreException(new Status(IStatus.ERROR, ApiPlugin.getPluginIdentifier(), message, e)); } /** * Returns the class file containers in this container. Creates the containers if * they are not yet created. * * @return class file containers */ protected synchronized IClassFileContainer[] getClassFileContainers() { if (fClassFileContainers == null) { try { fClassFileContainers = createClassFileContainers(); } catch (CoreException e) { ApiPlugin.log(e); } } return (IClassFileContainer[]) fClassFileContainers.toArray(new IClassFileContainer[fClassFileContainers.size()]); } /** * Returns the class file containers in this container. Creates the containers if * they are not yet created. * * @param id the given id * @return class file containers */ protected synchronized IClassFileContainer[] getClassFileContainers(String id) { if (fClassFileContainers == null) { try { fClassFileContainers = createClassFileContainers(); } catch (CoreException e) { ApiPlugin.log(e); } } List containers = new ArrayList(); for (Iterator iterator = this.fClassFileContainers.iterator(); iterator.hasNext(); ) { IClassFileContainer container = (IClassFileContainer) iterator.next(); String origin = container.getOrigin(); if (origin != null && origin.equals(id)) { containers.add(container); } } return (IClassFileContainer[]) containers.toArray(new IClassFileContainer[containers.size()]); } /** * Creates and returns the class file containers for this component. * Subclasses must override. * * @return list of class file containers for this component */ protected abstract List createClassFileContainers() throws CoreException; /** * Sets the class file containers in this container. * * @param containers class file containers */ protected synchronized void setClassFileContainers(IClassFileContainer[] containers) { if (fClassFileContainers != null) { try { close(); } catch (CoreException e) { // TODO log error } fClassFileContainers.clear(); } else { fClassFileContainers = new ArrayList(containers.length); } for (int i = 0; i < containers.length; i++) { fClassFileContainers.add(containers[i]); } } } |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.