From 201c924d99313804aca925fb798c7016ed9e148e Mon Sep 17 00:00:00 2001 From: tama3 Date: Tue, 2 Oct 2007 10:51:55 +0000 Subject: [PATCH] update to do not contains duplicated url git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/stigmata/trunk@230 acee48c3-7b26-0410-bdac-b3d0e5314bbc --- .../naist/se/stigmata/reader/ClasspathContext.java | 67 ++++++++++++++++++---- .../stigmata/ui/swing/ClasspathSettingsPane.java | 5 +- 2 files changed, 57 insertions(+), 15 deletions(-) diff --git a/src/main/java/jp/naist/se/stigmata/reader/ClasspathContext.java b/src/main/java/jp/naist/se/stigmata/reader/ClasspathContext.java index abd0991..b4c5987 100644 --- a/src/main/java/jp/naist/se/stigmata/reader/ClasspathContext.java +++ b/src/main/java/jp/naist/se/stigmata/reader/ClasspathContext.java @@ -22,26 +22,55 @@ public class ClasspathContext implements Iterable{ private List classpath = new ArrayList(); private ClassLoader loader = null; + /** + * private constructor. + * The root context is only one. + */ private ClasspathContext(){ } + /** + * constructor with parent classpath context. + */ public ClasspathContext(ClasspathContext parent){ this.parent = parent; } + /** + * returns parent classpath context. + */ public ClasspathContext getParent(){ return parent; } + /** + * returns default classpath context. + */ public static final ClasspathContext getDefaultContext(){ return DEFAULT_CONTEXT; } + /** + * adds given url to this context. If this context already has given url or + * parent context has given url, this method do nothing. + */ public synchronized void addClasspath(URL url){ - classpath.add(url); - loader = null; + if(!contains(url)){ + classpath.add(url); + loader = null; + } + } + + /** + * returns that this context or parent context have given url. + */ + public synchronized boolean contains(URL url){ + return (parent != null && parent.contains(url)) || classpath.contains(url); } + /** + * returns a size of classpath list, which this context and parent context have. + */ public int getClasspathSize(){ int count = classpath.size(); if(parent != null){ @@ -50,29 +79,43 @@ public class ClasspathContext implements Iterable{ return count; } + /** + * returns an array of all of classpathes include parent context. + */ public synchronized URL[] getClasspathList(){ List list = new ArrayList(); - for(Iterator i = classpath(); i.hasNext(); ){ - list.add(i.next()); + for(URL url: this){ + list.add(url); } return list.toArray(new URL[list.size()]); } + /** + * clears all of classpathes of this context. not clear parent context. + * If you want to clear this context and parent context, use {@link #clearAll clearAll} method. + * @see clearAll + */ public void clear(){ classpath.clear(); } - public Iterator iterator(){ - return classpath.iterator(); + /** + * clears all of classpathes of this context and parent context. + */ + public void clearAll(){ + clear(); + if(parent != null){ + parent.clearAll(); + } } - public Iterator classpath(){ + public Iterator iterator(){ if(parent == null){ - return iterator(); + return classpath.iterator(); } else{ - final Iterator parentIterator = parent.classpath(); - final Iterator thisIterator = iterator(); + final Iterator parentIterator = parent.iterator(); + final Iterator thisIterator = classpath.iterator(); return new Iterator(){ public boolean hasNext(){ boolean next = parentIterator.hasNext(); @@ -100,8 +143,8 @@ public class ClasspathContext implements Iterable{ public synchronized ClassLoader createClassLoader(){ if(loader == null){ List list = new ArrayList(); - for(Iterator i = classpath(); i.hasNext(); ){ - list.add(i.next()); + for(URL url: this){ + list.add(url); } loader = new WarClassLoader(list.toArray(new URL[list.size()]), getClass().getClassLoader()); diff --git a/src/main/java/jp/naist/se/stigmata/ui/swing/ClasspathSettingsPane.java b/src/main/java/jp/naist/se/stigmata/ui/swing/ClasspathSettingsPane.java index b1c8e7d..eb1d5cf 100644 --- a/src/main/java/jp/naist/se/stigmata/ui/swing/ClasspathSettingsPane.java +++ b/src/main/java/jp/naist/se/stigmata/ui/swing/ClasspathSettingsPane.java @@ -12,7 +12,6 @@ import java.io.File; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; -import java.util.Iterator; import javax.swing.Box; import javax.swing.JButton; @@ -71,8 +70,8 @@ public class ClasspathSettingsPane extends JPanel{ bootClasspath.removeAllElements(); try{ ClasspathContext context = stigmata.getEnvironment().getClasspathContext(); - for(Iterator i = context.classpath(); i.hasNext(); ){ - classpath.addValue(i.next().toString()); + for(URL url: context){ + classpath.addValue(url.toString()); } addClasspath(bootClasspath, System.getProperty("java.class.path")); -- 2.11.0