1 19 20 package org.netbeans.modules.apisupport.project.metainf; 21 22 import java.io.IOException ; 23 import org.netbeans.api.project.FileOwnerQuery; 24 import org.netbeans.api.project.Project; 25 import org.netbeans.modules.apisupport.project.NbModuleProject; 26 import org.netbeans.modules.apisupport.project.Util; 27 import org.openide.filesystems.FileAttributeEvent; 28 import org.openide.filesystems.FileChangeListener; 29 import org.openide.filesystems.FileEvent; 30 import org.openide.filesystems.FileObject; 31 import org.openide.filesystems.FileRenameEvent; 32 33 36 final class ServicesFileListener implements FileChangeListener { 37 private static ServicesFileListener instance ; 38 39 private ServicesFileListener() { 40 41 } 42 public void fileFolderCreated(FileEvent fe) { 43 FileObject fo = fe.getFile(); 44 if (fo.getName().equals("services")) { if (fo.getParent().getName().equals("META-INF")) { fo.removeFileChangeListener(this); 47 fo.addFileChangeListener(this); 48 } 49 } else if (fo.getName().equals("META-INF")) { Project prj = FileOwnerQuery.getOwner(fo); 52 53 if (prj != null && prj instanceof NbModuleProject && ((NbModuleProject)prj).getSourceDirectory().equals(fo.getParent())) { 54 fo.removeFileChangeListener(this); 55 fo.addFileChangeListener(this); 56 } 57 } 58 } 59 public void fileDataCreated(FileEvent fe) { 60 updateFile(fe.getFile()) ; 61 } 62 63 public void fileChanged(FileEvent fe) { 64 updateFile(fe.getFile()); 65 } 66 67 public void fileDeleted(FileEvent fe) { 68 try { 69 removeFile(fe.getFile()); 70 } catch (IOException ex) { 71 Util.err.notify(); 72 } 73 } 74 75 public void fileRenamed(FileRenameEvent fe) { 76 try { 77 removeFile((FileObject)fe.getSource()); 78 } catch (IOException ex) { 79 Util.err.notify(); 80 } 81 updateFile(fe.getFile()); 82 } 83 84 public void fileAttributeChanged(FileAttributeEvent fe) { 85 } 86 87 private ServiceNodeHandler getHandler(FileObject fo) { 88 FileObject parent = fo.getParent(); 89 if (parent != null && parent.getName().equals("services") ) { 90 parent = parent.getParent(); 91 if (parent != null && parent.getName().equals("META-INF")) { Project prj = FileOwnerQuery.getOwner(fo); 93 return (prj == null) ? null : 94 (ServiceNodeHandler)prj.getLookup().lookup(ServiceNodeHandler.class); 95 } 96 } 97 return null; 98 } 99 100 private void updateFile(FileObject fo) { 101 ServiceNodeHandler handler = getHandler (fo) ; 102 if (handler != null) { 103 handler.updateFile(fo); 104 } 105 } 106 107 public void removeFile(FileObject fo) throws IOException { 108 ServiceNodeHandler handler = getHandler(fo); 109 if (handler != null) { 110 handler.removeFile(fo); 111 } 112 } 113 114 public static ServicesFileListener getInstance() { 115 if (instance == null) { 116 instance = new ServicesFileListener(); 117 } 118 return instance; 119 } 120 121 122 } 123 | Popular Tags |