1 19 20 package org.netbeans.modules.scripting.php.dbginterface.api; 21 22 import java.net.URL ; 23 import java.util.Collections ; 24 import java.util.Map ; 25 import java.util.WeakHashMap ; 26 import org.openide.ErrorManager; 27 import org.openide.filesystems.FileObject; 28 import org.openide.loaders.DataObject; 29 import org.openide.loaders.DataObjectNotFoundException; 30 31 35 public class DbgSourceMap { 36 private String serverBaseDir; 37 private URL serverBaseUrl; 38 private FileObject sourceRoot; 39 private boolean serverIsOnWindows; 40 private Map <String ,DataObject> sourceFileMap = 41 Collections.synchronizedMap(new WeakHashMap <String ,DataObject>()); 42 43 44 public DbgSourceMap(URL serverBaseUrl, String serverBaseDir, FileObject sourceRoot) { 45 this.serverBaseUrl = serverBaseUrl; 46 this.serverBaseDir = serverBaseDir; 47 this.sourceRoot= sourceRoot; 48 this.serverIsOnWindows = serverBaseDir.contains("\\"); 49 } 50 51 public FileObject getSourceRoot() { 52 return sourceRoot; 53 } 54 55 public String getServerBaseDir() { 56 return serverBaseDir; 57 } 58 59 public DataObject mapToSourceFileDataObject(String sourceFile) { 60 DataObject ret = null; 61 62 if(null == sourceFile || sourceFile.trim().length() == 0) { 63 throw new IllegalArgumentException ("sourceFile parameter cannot be null or blank"); 64 } 65 66 if (!sourceFile.startsWith(serverBaseDir)) { 67 throw new IllegalArgumentException ("sourceFile: " + sourceFile + " outside serverBaseDir: " + serverBaseDir); 68 } 69 70 ret = sourceFileMap.get(sourceFile); 71 72 if (ret != null) { 73 return ret; 74 } 75 76 String s = sourceFile.substring(serverBaseDir.length()); 77 78 if (s.startsWith("/") || s.startsWith("\\")) { 79 s = s.substring(1); 80 } 81 82 83 FileObject fo = sourceRoot.getFileObject(s); 84 85 try { 86 ret = DataObject.find(fo); 87 sourceFileMap.put(sourceFile, ret); 88 } 89 catch (DataObjectNotFoundException donfe) { 90 ErrorManager.getDefault().notify(ErrorManager.WARNING, donfe); 91 } 92 93 return ret; 94 } 95 96 public String mapToServerPath(FileObject fo) { 97 if (fo == null) { 98 return null; 99 } 100 101 if (fo.equals(sourceRoot)) { 102 return serverBaseDir; 103 } 104 105 FileObject parent = fo.getParent(); 106 107 while (parent != null && !parent.equals(sourceRoot)) { 108 parent = parent.getParent(); 109 } 110 111 if (parent == null) { 112 return null; 114 } 115 116 String relSourceFile = fo.getPath().substring(sourceRoot.getPath().length()); 117 String targetFile = serverBaseDir + relSourceFile; 118 119 if (serverIsOnWindows) { 120 targetFile = targetFile.replace('/', '\\'); 121 } 122 123 return targetFile; 124 } 125 } 126 | Popular Tags |