1 19 package org.netbeans.modules.mdr; 20 21 import org.netbeans.api.mdr.*; 22 import org.netbeans.mdr.NBMDRepositoryImpl; 23 import org.openide.util.Lookup; 24 import org.openide.filesystems.*; 25 import org.openide.loaders.*; 26 27 import org.netbeans.mdr.handlers.BaseObjectHandler; 28 import org.netbeans.mdr.handlers.ClassLoaderProvider; 29 30 import java.util.*; 31 import org.openide.ErrorManager; 32 33 38 public class MDRManagerImpl extends MDRManager implements FileChangeListener, NBMDRepositoryImpl.ShutdownListener { 39 40 private static final String FOLDER_REPOSITORY = "MDRepositories"; 41 private static final String DEFAULT_REPOSITORY = "Default"; 42 43 private HashMap repositoryMap = null; 44 private FileObject repFolder = null; 45 private static MDRManagerImpl instance = null; 46 47 static { 48 BaseObjectHandler.setClassLoaderProvider(new CLProviderImpl()); 49 } 50 51 static synchronized void uninstall() { 52 if (instance != null) { 53 instance.uninstallMe(); 54 } 55 } 56 57 private void uninstallMe() { 58 repositoryMap = null; 59 if (repFolder != null) { 60 repFolder.removeFileChangeListener(this); 61 } 62 repFolder = null; 63 } 64 65 private void refreshChildren() { 66 if (repFolder == null) { 67 repFolder = Repository.getDefault().getDefaultFileSystem().getRoot().getFileObject(FOLDER_REPOSITORY); 68 repFolder.addFileChangeListener(this); 69 } 70 71 repositoryMap.clear(); 72 73 if (repFolder != null) { 74 for (Enumeration en = repFolder.getData(false); en.hasMoreElements();) { 75 try { 76 DataObject dataObject = DataObject.find((FileObject) en.nextElement()); 77 if (dataObject instanceof MDRDataObject) { 78 repositoryMap.put(dataObject.getName(), dataObject); 79 ErrorManager.getDefault().log("found repository: " + dataObject.getName()); 80 } 81 } catch (DataObjectNotFoundException e) { 82 } 84 } 85 } 86 } 87 88 private void init() { 89 if (repositoryMap == null) { 90 repositoryMap = new HashMap(); 91 refreshChildren(); 92 } 93 } 94 95 96 public MDRManagerImpl() { 97 instance = this; 98 } 99 100 public void shutdownAll() { 101 String names[] = getRepositoryNames(); 102 MDRepository[] repos = new MDRepository[names.length]; 103 int stepCount = 0; 104 for (int i = 0; i < names.length; i++) { 105 repos[i] = getRepository(names[i]); 106 if (repos[i] instanceof NBMDRepositoryImpl) { 107 stepCount += ((NBMDRepositoryImpl) repos[i]).getShutdownSteps(); 108 } else { 109 stepCount++; 110 } 111 } 112 fireProgressListenerStart(stepCount); 113 for (int i = 0; i < names.length; i++) { 114 ((NBMDRepositoryImpl) repos[i]).addShutdownListener(this); 115 repos[i].shutdown(); 116 ((NBMDRepositoryImpl) repos[i]).removeShutdownListener(this); 117 } 118 fireProgressListenerStop(); 119 } 120 121 123 public void shutdown() { 124 } 125 126 public void stepFinished() { 127 fireProgressListenerStep(); 128 } 130 132 private ProgressListener progress = null; 133 private boolean stopFired = false; 134 135 public boolean setProgressListener(ProgressListener pl) { 136 boolean shutdownListenerRegistered = false; 137 if (progress == null) { 138 progress = pl; 139 shutdownListenerRegistered = true; 140 } 141 return shutdownListenerRegistered && !stopFired; 142 } 143 144 private void fireProgressListenerStart(int count) { 145 if (progress == null) 146 return; 147 progress.start(count); 148 } 149 150 private void fireProgressListenerInitialize() { 151 if (progress == null) 152 return; 153 progress.init(); 154 } 155 156 public void fireProgressListenerStep() { 157 if (progress == null) 158 return; 159 progress.step(); 160 } 161 162 private void fireProgressListenerStop() { 163 if (progress == null) { 164 stopFired = true; 165 return; 166 } 167 progress.stop(); 168 } 169 171 172 public MDRepository getRepository(String name) { 173 init(); 174 MDRDataObject dataObject = (MDRDataObject) repositoryMap.get(name); 175 if (dataObject == null) { 176 return null; 177 } else { 178 MDRDescriptor repository = dataObject.getDescriptor(); 179 return repository.getMDRInstance(); 180 } 181 } 182 183 public MDRepository getDefaultRepository() { 184 return getRepository(DEFAULT_REPOSITORY); 185 } 186 187 public String [] getRepositoryNames() { 188 init(); 189 String [] result = new String [0]; 190 result = (String []) repositoryMap.keySet().toArray(result); 191 return result; 192 } 193 194 200 public void fileFolderCreated(FileEvent fe) { 201 refreshChildren(); 202 } 203 204 210 public void fileDataCreated(FileEvent fe) { 211 refreshChildren(); 212 } 213 214 217 public void fileChanged(FileEvent fe) { 218 refreshChildren(); 219 } 220 221 224 public void fileDeleted(FileEvent fe) { 225 refreshChildren(); 226 } 227 228 232 public void fileRenamed(FileRenameEvent fe) { 233 refreshChildren(); 234 } 235 236 240 public void fileAttributeChanged(FileAttributeEvent fe) { 241 refreshChildren(); 242 } 243 244 void preShutdownAll() { 245 fireProgressListenerInitialize(); 246 } 247 248 private static class CLProviderImpl implements ClassLoaderProvider { 249 public ClassLoader getClassLoader() { 250 return (ClassLoader ) Lookup.getDefault().lookup(ClassLoader .class); 251 } 252 253 262 public Class defineClass(String className, byte[] classFile) { 263 return null; 264 } 265 } 266 267 public interface ProgressListener { 268 public void init(); 270 271 public void start(final int count); 273 public void step(); 274 public void stop(); 275 } 276 } 277 | Popular Tags |