1 19 20 package org.netbeans.bluej.classpath; 21 22 import java.beans.PropertyChangeEvent ; 23 import java.beans.PropertyChangeListener ; 24 import java.io.File ; 25 import java.util.ArrayList ; 26 import java.util.Iterator ; 27 import java.util.List ; 28 import java.util.StringTokenizer ; 29 import org.netbeans.bluej.BluejProject; 30 import org.netbeans.bluej.options.BlueJSettings; 31 import org.netbeans.spi.java.classpath.ClassPathImplementation; 32 import org.netbeans.spi.java.classpath.support.ClassPathSupport; 33 import org.openide.filesystems.FileChangeAdapter; 34 import org.openide.filesystems.FileChangeListener; 35 import org.openide.filesystems.FileEvent; 36 import org.openide.filesystems.FileObject; 37 import org.openide.filesystems.FileRenameEvent; 38 import org.openide.filesystems.FileUtil; 39 import org.openide.filesystems.URLMapper; 40 import org.openide.util.WeakListeners; 41 42 46 public class CPImpl implements ClassPathImplementation { 47 48 private List resources = null; 49 private List listeners = new ArrayList (); 50 51 private BluejProject project; 52 private FileObject userLib; 53 private PropertyChangeListener settingsListener = new PropertyChangeListener () { 54 public void propertyChange(PropertyChangeEvent arg0) { 55 fireChange(); 56 } 57 }; 58 59 private FileChangeListener fileListener = new FileChangeAdapter() { 60 public void fileDataCreated(FileEvent arg0) { 61 fireChange(); 62 } 63 64 public void fileDeleted(FileEvent arg0) { 65 fireChange(); 66 } 67 68 public void fileRenamed(FileRenameEvent arg0) { 69 fireChange(); 70 } 71 }; 72 73 public CPImpl(BluejProject prj) { 74 project = prj; 75 BlueJSettings.getDefault().addPropertyChangeListener( 76 WeakListeners.propertyChange(settingsListener, BlueJSettings.getDefault())); 77 } 78 79 public synchronized List getResources() { 80 if (resources == null) { 81 resources = new ArrayList (); 82 FileObject libs = project.getProjectDirectory().getFileObject("+libs"); if (libs != null) { 84 FileObject[] fos = libs.getChildren(); 85 for (int i = 0; i < fos.length; i++) { 86 if (FileUtil.isArchiveFile(fos[i])) { 87 resources.add(ClassPathSupport.createResource(URLMapper.findURL(FileUtil.getArchiveRoot(fos[i]), URLMapper.INTERNAL))); 88 } 89 } 90 } 91 File home = BlueJSettings.getDefault().getHome(); 92 if (home != null) { 93 FileObject fo = FileUtil.toFileObject(BluejProject.getUserLibPath(home)); 94 if (fo != null) { 95 FileObject[] fos = fo.getChildren(); 96 for (int i = 0; i < fos.length; i++) { 97 if (FileUtil.isArchiveFile(fos[i])) { 98 resources.add(ClassPathSupport.createResource(URLMapper.findURL(FileUtil.getArchiveRoot(fos[i]), URLMapper.INTERNAL))); 99 } 100 } 101 } 102 if (userLib != null && !userLib.equals(fo)) { 103 userLib.removeFileChangeListener(fileListener); 105 } 106 userLib = fo; 107 userLib.addFileChangeListener(fileListener); 109 } else if (userLib != null) { 110 userLib.removeFileChangeListener(fileListener); 112 userLib = null; 113 } 114 String userPath = BlueJSettings.getDefault().getUserLibrariesAsClassPath(); 115 if (userPath.length() > 0) { 116 StringTokenizer tokens = new StringTokenizer (userPath, ":", false); while (tokens.hasMoreTokens()) { 118 File fil = new File (tokens.nextToken()); 119 FileObject fo = FileUtil.toFileObject(fil); 120 if (fo != null && FileUtil.isArchiveFile(fo)) { 121 resources.add(ClassPathSupport.createResource(URLMapper.findURL(FileUtil.getArchiveRoot(fo), URLMapper.INTERNAL))); 122 } 123 } 124 } 125 } 126 return resources; 127 } 128 129 public synchronized void addPropertyChangeListener(PropertyChangeListener listener) { 130 listeners.add(listener); 131 } 132 133 public synchronized void removePropertyChangeListener(PropertyChangeListener listener) { 134 listeners.remove(listener); 135 } 136 137 public synchronized void fireChange() { 138 resources = null; 139 List lst = new ArrayList (); 140 lst.addAll(listeners); 141 Iterator it = lst.iterator(); 142 PropertyChangeEvent evnt = new PropertyChangeEvent (this, ClassPathImplementation.PROP_RESOURCES, null, null); 143 while (it.hasNext()) { 144 PropertyChangeListener listener = (PropertyChangeListener )it.next(); 145 listener.propertyChange(evnt); 146 } 147 } 148 } 149 | Popular Tags |