blob: 7fc965a4834a7b52ecff99bfba1b91c7df509b35 [file] [log] [blame]
/**********************************************************************
* Copyright (c) 2004 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: Sian January - initial version
* ...
**********************************************************************/
package org.eclipse.ajdt.internal.launching;
import java.util.Iterator;
import org.eclipse.ajdt.internal.ui.text.UIMessages;
import org.eclipse.jdt.internal.debug.ui.classpath.ClasspathEntry;
import org.eclipse.jdt.internal.debug.ui.classpath.ClasspathGroup;
import org.eclipse.jdt.internal.debug.ui.classpath.ClasspathMessages;
import org.eclipse.jdt.internal.debug.ui.classpath.ClasspathModel;
import org.eclipse.jdt.internal.debug.ui.classpath.IClasspathEntry;
import org.eclipse.jdt.launching.IRuntimeClasspathEntry;
/**
* Mostly copied from ClasspathModel, but extends to include an 'Aspect Path'
* and an 'Output Jar' node.
*/
public class AJClasspathModel extends ClasspathModel {
public static final int ASPECTPATH = 2;
public static final int OUTJAR = 3;
private ClasspathGroup bootstrapEntries;
private ClasspathGroup userEntries;
private ClasspathGroup aspectPathEntries;
private ClasspathGroup outJarEntries;
/**
* Constructs a new aj classpath model with root entries
*/
public AJClasspathModel() {
super();
getBootstrapEntry();
getUserEntry();
getAspectPathEntry();
getOutJarEntry();
}
/**
* Add a classpath entry
*/
public Object addEntry(int entryType, IRuntimeClasspathEntry entry) {
IClasspathEntry entryParent = null;
switch (entryType) {
case BOOTSTRAP:
entryParent = getBootstrapEntry();
break;
case USER:
entryParent = getUserEntry();
break;
case ASPECTPATH:
entryParent = getAspectPathEntry();
break;
case OUTJAR:
entryParent = getOutJarEntry();
default:
break;
}
ClasspathEntry newEntry = createEntry(entry, entryParent);
Iterator entries = childEntries.iterator();
while (entries.hasNext()) {
Object element = entries.next();
if (element instanceof ClasspathGroup) {
if (((ClasspathGroup) element).contains(newEntry)) {
return null;
}
} else if (element.equals(newEntry)) {
return null;
}
}
if (entryParent != null) {
((ClasspathGroup) entryParent).addEntry(newEntry,null);
} else {
childEntries.add(newEntry);
}
return newEntry;
}
/**
* Remove all entries
*/
public void removeAll() {
if (bootstrapEntries != null) {
bootstrapEntries.removeAll();
}
if (userEntries != null) {
userEntries.removeAll();
}
if (aspectPathEntries != null) {
aspectPathEntries.removeAll();
}
if (outJarEntries != null) {
outJarEntries.removeAll();
}
}
/**
* Copied from super - set bootstrap entries
*/
public void setBootstrapEntries(IRuntimeClasspathEntry[] entries) {
if (bootstrapEntries == null) {
getBootstrapEntry();
}
bootstrapEntries.removeAll();
for (int i = 0; i < entries.length; i++) {
bootstrapEntries.addEntry(new ClasspathEntry(entries[i],
bootstrapEntries),null);
}
}
/**
* Copied from super - set user entries
*/
public void setUserEntries(IRuntimeClasspathEntry[] entries) {
if (userEntries == null) {
getUserEntry();
}
userEntries.removeAll();
for (int i = 0; i < entries.length; i++) {
userEntries.addEntry(new ClasspathEntry(entries[i], userEntries),null);
}
}
/**
* Set the AspectPath entries
*
* @param entries -
* classpath entries
*/
public void setAspectPathEntries(IRuntimeClasspathEntry[] entries) {
if (aspectPathEntries == null) {
getAspectPathEntry();
}
aspectPathEntries.removeAll();
for (int i = 0; i < entries.length; i++) {
aspectPathEntries.addEntry(new ClasspathEntry(entries[i],
aspectPathEntries),null);
}
}
private IClasspathEntry getAspectPathEntry() {
if (aspectPathEntries == null) {
String name = UIMessages.Launcher_aspectPath;
aspectPathEntries = createGroupEntry(new IRuntimeClasspathEntry[0],
null, name, false, true);
}
return aspectPathEntries;
}
private IClasspathEntry getOutJarEntry() {
if (outJarEntries == null) {
String name = UIMessages.Launcher_outJar;
outJarEntries = createGroupEntry(new IRuntimeClasspathEntry[0],
null, name, false, true);
}
return outJarEntries;
}
public IClasspathEntry getBootstrapEntry() {
if (bootstrapEntries == null) {
String name = ClasspathMessages.ClasspathModel_0;
bootstrapEntries = createGroupEntry(new IRuntimeClasspathEntry[0],
null, name, false, true);
}
return bootstrapEntries;
}
public IClasspathEntry getUserEntry() {
if (userEntries == null) {
String name = ClasspathMessages.ClasspathModel_1;
userEntries = createGroupEntry(new IRuntimeClasspathEntry[0], null,
name, false, true);
}
return userEntries;
}
/**
* Copied from super class - create an entry
*/
public ClasspathGroup createGroupEntry(IRuntimeClasspathEntry[] entries,
ClasspathGroup entryParent, String name, boolean canBeRemoved,
boolean addEntry) {
ClasspathGroup group = new ClasspathGroup(name, entryParent,
canBeRemoved);
for (int i = 0; i < entries.length; i++) {
group.addEntry(new ClasspathEntry(entries[i], group),null);
}
if (addEntry) {
addEntry(group);
}
return group;
}
/**
* Returns the entries of the given type, or an empty collection if none.
*
* @param entryType
* @return the entries of the given type, or an empty collection if none
*/
public IClasspathEntry[] getEntries(int entryType) {
switch (entryType) {
case BOOTSTRAP:
if (bootstrapEntries != null) {
return bootstrapEntries.getEntries();
}
break;
case USER:
if (userEntries != null) {
return userEntries.getEntries();
}
break;
case ASPECTPATH:
if (aspectPathEntries != null) {
return aspectPathEntries.getEntries();
}
break;
case OUTJAR:
if(outJarEntries != null) {
return outJarEntries.getEntries();
}
}
return new IClasspathEntry[0];
}
}