Integrate plsql file search with Netbeans Ctrl-I search function release701
authorSubhashini Sooriarachchi <subslk@netbeans.org>
Fri, 22 Jun 2012 10:26:29 +0530
branchrelease701
changeset 2481a8d21270103
parent 247 348555b6b391
child 249 65f8a07d9738
Integrate plsql file search with Netbeans Ctrl-I search function
PLSQL/Navigator/src/org/netbeans/modules/plsql/navigator/PlsqlSearchProvider.java
PLSQL/Utilities/src/org/netbeans/modules/plsql/utilities/PlsqlFileLocatorService.java
PLSQL/Utilities/src/org/netbeans/modules/plsql/utilities/localization/PlsqlFileLocatorServiceImpl.java
PLSQL/Utilities/src/org/netbeans/modules/plsql/utilities/localization/PlsqlProjectFileCacheManager.java
     1.1 --- a/PLSQL/Navigator/src/org/netbeans/modules/plsql/navigator/PlsqlSearchProvider.java	Wed Jun 20 16:59:53 2012 +0200
     1.2 +++ b/PLSQL/Navigator/src/org/netbeans/modules/plsql/navigator/PlsqlSearchProvider.java	Fri Jun 22 10:26:29 2012 +0530
     1.3 @@ -5,7 +5,6 @@
     1.4  package org.netbeans.modules.plsql.navigator;
     1.5  
     1.6  import java.io.File;
     1.7 -import java.io.FileFilter;
     1.8  import java.util.*;
     1.9  import java.util.regex.Pattern;
    1.10  import org.netbeans.api.db.explorer.DatabaseConnection;
    1.11 @@ -13,7 +12,6 @@
    1.12  import org.netbeans.api.project.ui.OpenProjects;
    1.13  import org.netbeans.modules.plsql.lexer.PlsqlBlockType;
    1.14  import org.netbeans.modules.plsql.utilities.NotConnectedToDbException;
    1.15 -import org.netbeans.modules.plsql.utilities.PlsqlExecutorService;
    1.16  import org.netbeans.modules.plsql.utilities.PlsqlFileLocatorService;
    1.17  import org.netbeans.modules.plsql.utilities.PlsqlFileUtil;
    1.18  import org.netbeans.modules.plsqlsupport.db.DatabaseConnectionManager;
    1.19 @@ -22,7 +20,6 @@
    1.20  import org.netbeans.spi.quicksearch.SearchRequest;
    1.21  import org.netbeans.spi.quicksearch.SearchResponse;
    1.22  import org.openide.cookies.OpenCookie;
    1.23 -import org.openide.filesystems.FileObject;
    1.24  import org.openide.loaders.DataObject;
    1.25  import org.openide.util.Exceptions;
    1.26  import org.openide.util.Lookup;
    1.27 @@ -30,7 +27,6 @@
    1.28  public class PlsqlSearchProvider implements SearchProvider {
    1.29  
    1.30      final static String MODEL_DIRECTORY_PATH = "#COMPONENT#" + File.separator + "database" + File.separator + "#COMPONENT#";
    1.31 -    private final PlsqlExecutorService executorService = Lookup.getDefault().lookup(PlsqlExecutorService.class);
    1.32      private final PlsqlFileLocatorService locatorService = Lookup.getDefault().lookup(PlsqlFileLocatorService.class);
    1.33  
    1.34      /**
    1.35 @@ -52,29 +48,25 @@
    1.36              query = query.replaceAll("\\*", ".*");
    1.37          }
    1.38  
    1.39 -        final List<String> fileExtentions = new ArrayList<String>(executorService.getExecutionOrder());
    1.40 -        fileExtentions.add(".body");
    1.41 -        fileExtentions.add(".spec");
    1.42 -
    1.43          for (Project project : projects) {
    1.44              //For Local Files
    1.45 -            for (String fileExtention : fileExtentions) {
    1.46 -                Map<String, String> plsqlObjects = getLocalPlsqlObjects(project, fileExtention);
    1.47 -                for (String plsqlObject : plsqlObjects.keySet()) {
    1.48 -                    boolean match = useRegExp ? Pattern.matches(query, plsqlObject) : plsqlObject.contains(query);
    1.49 -                    if (match) {
    1.50 -                        if (!response.addResult(new OpenLocalPLSQLFile(plsqlObjects.get(plsqlObject)), plsqlObject.toLowerCase() + " (" + project.getProjectDirectory().getName() + ")")) {
    1.51 -                            return;
    1.52 -                        }
    1.53 +            Collection<File> allObjects = locatorService.getAllPlsqlFiles(project);
    1.54 +            for (File fileObj : allObjects) {
    1.55 +                String name = fileObj.getName().toLowerCase().substring(0, fileObj.getName().indexOf("."));
    1.56 +                boolean match = useRegExp ? Pattern.matches(query, name) : name.contains(query);
    1.57 +                if (match) {
    1.58 +                    if (!response.addResult(new OpenLocalPlsqlFile(fileObj.getPath()), fileObj.getName() + "(" + project.getProjectDirectory().getName() + ")")) {
    1.59 +                        return;
    1.60                      }
    1.61                  }
    1.62              }
    1.63 +
    1.64              //for Package files in DB. Do not consider tables, views, etc
    1.65              Set<String> DBFiles = getPlsqlFilesFromDB(project);
    1.66              for (String DBFile : DBFiles) {
    1.67                  boolean match = useRegExp ? Pattern.matches(query, DBFile.toLowerCase()) : DBFile.toLowerCase().contains(query);
    1.68                  if (match) {
    1.69 -                    if (!response.addResult(new OpenPLSQLFileFromDB(DBFile, project), DBFile.toLowerCase() + " (" + project.getProjectDirectory().getName() + ")")) {
    1.70 +                    if (!response.addResult(new OpenPlsqlFileFromDB(DBFile, project), DBFile.toLowerCase() + " (" + project.getProjectDirectory().getName() + ")")) {
    1.71                          return;
    1.72                      }
    1.73                  }
    1.74 @@ -82,37 +74,6 @@
    1.75          }
    1.76      }
    1.77  
    1.78 -    private Map<String, String> getLocalPlsqlObjects(Project project, final String fileExtention) {
    1.79 -        FileObject workspace = project.getProjectDirectory().getFileObject("workspace");
    1.80 -        Map<String, String> dbObj = new HashMap<String, String>();
    1.81 -        if (workspace != null && workspace.isFolder()) {
    1.82 -            final FileObject[] folders = workspace.getChildren();
    1.83 -            for (FileObject folder : folders) {
    1.84 -                if (folder.isFolder() && !folder.getName().startsWith(".")) {
    1.85 -
    1.86 -                    File filePath = new File(workspace.getPath() + File.separator + MODEL_DIRECTORY_PATH.replaceAll("#COMPONENT#", folder.getName()));
    1.87 -                    if (filePath.exists()) {
    1.88 -                        final FileFilter filter = new FileFilter() {
    1.89 -
    1.90 -                            @Override
    1.91 -                            public boolean accept(final File file) {
    1.92 -                                return (file.isFile() && file.getName().endsWith(fileExtention));
    1.93 -                            }
    1.94 -                        };
    1.95 -                        final File[] objectFiles = filePath.listFiles(filter);
    1.96 -                        if (objectFiles != null) {
    1.97 -                            for (File objectFile : objectFiles) {
    1.98 -                                dbObj.put(objectFile.getName().toString().toLowerCase(), objectFile.getPath().toString().toLowerCase());
    1.99 -                            }
   1.100 -                        }
   1.101 -                    }
   1.102 -                }
   1.103 -            }
   1.104 -            return dbObj;
   1.105 -        }
   1.106 -        return dbObj;
   1.107 -    }
   1.108 -
   1.109      private Set<String> getPlsqlFilesFromDB(Project project) {
   1.110          DatabaseConnectionManager connectionProvider = project.getLookup().lookup(DatabaseConnectionManager.class);
   1.111          DatabaseContentManager cache = DatabaseContentManager.getInstance(connectionProvider.getTemplateConnection());
   1.112 @@ -123,12 +84,11 @@
   1.113          return allPackages;
   1.114      }
   1.115  
   1.116 -    private static class OpenLocalPLSQLFile implements Runnable {
   1.117 +    private static class OpenLocalPlsqlFile implements Runnable {
   1.118  
   1.119 -        File objectFile;
   1.120          String filePath;
   1.121  
   1.122 -        public OpenLocalPLSQLFile(String filePath_) {
   1.123 +        public OpenLocalPlsqlFile(String filePath_) {
   1.124              filePath = filePath_;
   1.125          }
   1.126  
   1.127 @@ -142,13 +102,12 @@
   1.128          }
   1.129      }
   1.130  
   1.131 -    private static class OpenPLSQLFileFromDB implements Runnable {
   1.132 +    private static class OpenPlsqlFileFromDB implements Runnable {
   1.133  
   1.134 -        File objectFile;
   1.135          String packageName;
   1.136          Project project;
   1.137  
   1.138 -        public OpenPLSQLFileFromDB(String packageName_, Project project_) {
   1.139 +        public OpenPlsqlFileFromDB(String packageName_, Project project_) {
   1.140              packageName = packageName_;
   1.141              project = project_;
   1.142          }
     2.1 --- a/PLSQL/Utilities/src/org/netbeans/modules/plsql/utilities/PlsqlFileLocatorService.java	Wed Jun 20 16:59:53 2012 +0200
     2.2 +++ b/PLSQL/Utilities/src/org/netbeans/modules/plsql/utilities/PlsqlFileLocatorService.java	Fri Jun 22 10:26:29 2012 +0530
     2.3 @@ -41,8 +41,10 @@
     2.4   */
     2.5  package org.netbeans.modules.plsql.utilities;
     2.6  
     2.7 +import java.io.File;
     2.8  import org.netbeans.modules.plsql.lexer.PlsqlBlockType;
     2.9  import java.io.IOException;
    2.10 +import java.util.Collection;
    2.11  import org.netbeans.api.project.Project;
    2.12  import org.openide.filesystems.FileObject;
    2.13  import org.openide.loaders.DataObject;
    2.14 @@ -92,4 +94,10 @@
    2.15     public void addFileToCache(Project project, FileObject fileObject) throws IOException;
    2.16  
    2.17     public void rebuildCache(Project project);
    2.18 +   
    2.19 +    /**
    2.20 +    * Give all objects in a project.
    2.21 +    * @param project
    2.22 +    */
    2.23 +   public Collection<File> getAllPlsqlFiles(Project project);     
    2.24  }
     3.1 --- a/PLSQL/Utilities/src/org/netbeans/modules/plsql/utilities/localization/PlsqlFileLocatorServiceImpl.java	Wed Jun 20 16:59:53 2012 +0200
     3.2 +++ b/PLSQL/Utilities/src/org/netbeans/modules/plsql/utilities/localization/PlsqlFileLocatorServiceImpl.java	Fri Jun 22 10:26:29 2012 +0530
     3.3 @@ -41,6 +41,7 @@
     3.4   */
     3.5  package org.netbeans.modules.plsql.utilities.localization;
     3.6  
     3.7 +import java.util.Collection;
     3.8  import org.netbeans.modules.plsqlsupport.db.DatabaseConnectionManager;
     3.9  import org.netbeans.modules.plsql.lexer.PlsqlBlockType;
    3.10  import org.netbeans.modules.plsql.utilities.PlsqlFileLocatorService;
    3.11 @@ -179,4 +180,16 @@
    3.12           }
    3.13        }
    3.14     }
    3.15 +
    3.16 +    @Override
    3.17 +    public Collection<File> getAllPlsqlFiles(Project project) {
    3.18 +        if (project != null) {
    3.19 +            PlsqlProjectFileCacheManager fileCache = cachePerProject.get(getProjectName(project));
    3.20 +            if (fileCache != null) {
    3.21 +                Collection<File> allPlsqlFiles = fileCache.getAllPlsqlObjects();
    3.22 +                return allPlsqlFiles;
    3.23 +            }
    3.24 +        }
    3.25 +        return null;
    3.26 +    }
    3.27  }
     4.1 --- a/PLSQL/Utilities/src/org/netbeans/modules/plsql/utilities/localization/PlsqlProjectFileCacheManager.java	Wed Jun 20 16:59:53 2012 +0200
     4.2 +++ b/PLSQL/Utilities/src/org/netbeans/modules/plsql/utilities/localization/PlsqlProjectFileCacheManager.java	Fri Jun 22 10:26:29 2012 +0530
     4.3 @@ -106,6 +106,12 @@
     4.4     FileObject get(final PlsqlSearchObject searchObject) {
     4.5        return cache.get(searchObject);
     4.6     }
     4.7 +   
     4.8 +   Collection<File> getAllPlsqlObjects(){
     4.9 +   final PlsqlFileFinder scanner = new PlsqlFileFinder(rootFolder);
    4.10 +      final Collection<File> listFiles = scanner.findPlsqlFiles();
    4.11 +      return listFiles;
    4.12 +   }
    4.13  
    4.14     int numberPlsqlObjects() {
    4.15        return cache.numberPlsqlObjects();