1.1 --- a/PLSQL/Navigator/nbproject/project.xml Tue Jun 19 17:09:07 2012 +0200
1.2 +++ b/PLSQL/Navigator/nbproject/project.xml Wed Jun 20 16:45:57 2012 +0530
1.3 @@ -7,14 +7,6 @@
1.4 <suite-component/>
1.5 <module-dependencies>
1.6 <dependency>
1.7 - <code-name-base>org.netbeans.modules.plsql.lexer</code-name-base>
1.8 - <build-prerequisite/>
1.9 - <compile-dependency/>
1.10 - <run-dependency>
1.11 - <specification-version>1.0</specification-version>
1.12 - </run-dependency>
1.13 - </dependency>
1.14 - <dependency>
1.15 <code-name-base>org.jdesktop.layout</code-name-base>
1.16 <build-prerequisite/>
1.17 <compile-dependency/>
1.18 @@ -24,6 +16,15 @@
1.19 </run-dependency>
1.20 </dependency>
1.21 <dependency>
1.22 + <code-name-base>org.netbeans.modules.db</code-name-base>
1.23 + <build-prerequisite/>
1.24 + <compile-dependency/>
1.25 + <run-dependency>
1.26 + <release-version>1</release-version>
1.27 + <specification-version>1.44.1.30</specification-version>
1.28 + </run-dependency>
1.29 + </dependency>
1.30 + <dependency>
1.31 <code-name-base>org.netbeans.modules.editor</code-name-base>
1.32 <build-prerequisite/>
1.33 <compile-dependency/>
1.34 @@ -69,6 +70,56 @@
1.35 </run-dependency>
1.36 </dependency>
1.37 <dependency>
1.38 + <code-name-base>org.netbeans.modules.plsql.filetype</code-name-base>
1.39 + <build-prerequisite/>
1.40 + <compile-dependency/>
1.41 + <run-dependency>
1.42 + <specification-version>1.8.13</specification-version>
1.43 + </run-dependency>
1.44 + </dependency>
1.45 + <dependency>
1.46 + <code-name-base>org.netbeans.modules.plsql.lexer</code-name-base>
1.47 + <build-prerequisite/>
1.48 + <compile-dependency/>
1.49 + <run-dependency>
1.50 + <specification-version>1.0</specification-version>
1.51 + </run-dependency>
1.52 + </dependency>
1.53 + <dependency>
1.54 + <code-name-base>org.netbeans.modules.plsql.utilities</code-name-base>
1.55 + <build-prerequisite/>
1.56 + <compile-dependency/>
1.57 + <run-dependency>
1.58 + <specification-version>1.7.22</specification-version>
1.59 + </run-dependency>
1.60 + </dependency>
1.61 + <dependency>
1.62 + <code-name-base>org.netbeans.modules.plsqlsupport.db</code-name-base>
1.63 + <build-prerequisite/>
1.64 + <compile-dependency/>
1.65 + <run-dependency>
1.66 + <specification-version>1.8.23</specification-version>
1.67 + </run-dependency>
1.68 + </dependency>
1.69 + <dependency>
1.70 + <code-name-base>org.netbeans.modules.projectapi</code-name-base>
1.71 + <build-prerequisite/>
1.72 + <compile-dependency/>
1.73 + <run-dependency>
1.74 + <release-version>1</release-version>
1.75 + <specification-version>1.36.1</specification-version>
1.76 + </run-dependency>
1.77 + </dependency>
1.78 + <dependency>
1.79 + <code-name-base>org.netbeans.modules.projectuiapi</code-name-base>
1.80 + <build-prerequisite/>
1.81 + <compile-dependency/>
1.82 + <run-dependency>
1.83 + <release-version>1</release-version>
1.84 + <specification-version>1.51.2.8</specification-version>
1.85 + </run-dependency>
1.86 + </dependency>
1.87 + <dependency>
1.88 <code-name-base>org.netbeans.modules.settings</code-name-base>
1.89 <build-prerequisite/>
1.90 <compile-dependency/>
1.91 @@ -87,11 +138,27 @@
1.92 </run-dependency>
1.93 </dependency>
1.94 <dependency>
1.95 + <code-name-base>org.netbeans.spi.quicksearch</code-name-base>
1.96 + <build-prerequisite/>
1.97 + <compile-dependency/>
1.98 + <run-dependency>
1.99 + <specification-version>1.10.1</specification-version>
1.100 + </run-dependency>
1.101 + </dependency>
1.102 + <dependency>
1.103 + <code-name-base>org.openide.awt</code-name-base>
1.104 + <build-prerequisite/>
1.105 + <compile-dependency/>
1.106 + <run-dependency>
1.107 + <specification-version>7.31.2</specification-version>
1.108 + </run-dependency>
1.109 + </dependency>
1.110 + <dependency>
1.111 <code-name-base>org.openide.filesystems</code-name-base>
1.112 <build-prerequisite/>
1.113 <compile-dependency/>
1.114 <run-dependency>
1.115 - <specification-version>7.13.1.1.1</specification-version>
1.116 + <specification-version>7.47.1</specification-version>
1.117 </run-dependency>
1.118 </dependency>
1.119 <dependency>
2.1 --- a/PLSQL/Navigator/src/org/netbeans/modules/plsql/navigator/Bundle.properties Tue Jun 19 17:09:07 2012 +0200
2.2 +++ b/PLSQL/Navigator/src/org/netbeans/modules/plsql/navigator/Bundle.properties Wed Jun 20 16:45:57 2012 +0530
2.3 @@ -5,4 +5,5 @@
2.4 OpenIDE-sort-byAlpha=SORT_ALPHA
2.5
2.6 OpenIDE-toolTip-Sort-by-Source=Sort by Source
2.7 -OpenIDE-toolTip-sort-byAlpha=Sort by Name
2.8 \ No newline at end of file
2.9 +OpenIDE-toolTip-sort-byAlpha=Sort by Name
2.10 +QuickSearch/PL/SQL/org-netbeans-modules-plsql-navigator-PlsqlSearchProvider.instance=PL/SQL
3.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
3.2 +++ b/PLSQL/Navigator/src/org/netbeans/modules/plsql/navigator/PlsqlSearchProvider.java Wed Jun 20 16:45:57 2012 +0530
3.3 @@ -0,0 +1,176 @@
3.4 +/*
3.5 + * To change this template, choose Tools | Templates
3.6 + * and open the template in the editor.
3.7 + */
3.8 +package org.netbeans.modules.plsql.navigator;
3.9 +
3.10 +import java.io.File;
3.11 +import java.io.FileFilter;
3.12 +import java.util.HashMap;
3.13 +import java.util.HashSet;
3.14 +import java.util.Map;
3.15 +import java.util.Set;
3.16 +import java.util.regex.Pattern;
3.17 +import org.netbeans.api.db.explorer.DatabaseConnection;
3.18 +import org.netbeans.api.project.Project;
3.19 +import org.netbeans.api.project.ui.OpenProjects;
3.20 +import org.netbeans.modules.plsql.lexer.PlsqlBlockType;
3.21 +import org.netbeans.modules.plsql.utilities.NotConnectedToDbException;
3.22 +import org.netbeans.modules.plsql.utilities.PlsqlExecutorService;
3.23 +import org.netbeans.modules.plsql.utilities.PlsqlFileUtil;
3.24 +import org.netbeans.modules.plsqlsupport.db.DatabaseConnectionManager;
3.25 +import org.netbeans.modules.plsqlsupport.db.DatabaseContentManager;
3.26 +import org.netbeans.spi.quicksearch.SearchProvider;
3.27 +import org.netbeans.spi.quicksearch.SearchRequest;
3.28 +import org.netbeans.spi.quicksearch.SearchResponse;
3.29 +
3.30 +import org.openide.cookies.OpenCookie;
3.31 +import org.openide.filesystems.FileObject;
3.32 +import org.openide.loaders.DataObject;
3.33 +import org.openide.util.Exceptions;
3.34 +import org.openide.util.Lookup;
3.35 +
3.36 +public class PlsqlSearchProvider implements SearchProvider {
3.37 +
3.38 + final static String MODEL_DIRECTORY_PATH = "#COMPONENT#" + File.separator + "database" + File.separator + "#COMPONENT#";
3.39 + private static final PlsqlExecutorService executorService = Lookup.getDefault().lookup(PlsqlExecutorService.class);
3.40 +
3.41 + /**
3.42 + * Method is called by infrastructure when search operation was requested.
3.43 + * Implementors should evaluate given request and fill response object with
3.44 + * apropriate results
3.45 + *
3.46 + * @param request Search request object that contains information what to search for
3.47 + * @param response Search response object that stores search results. Note that it's important to react to return value of SearchResponse.addResult(...) method and stop computation if false value is returned.
3.48 + */
3.49 + @Override
3.50 + public void evaluate(SearchRequest request, SearchResponse response) {
3.51 + Project[] projects = OpenProjects.getDefault().getOpenProjects();
3.52 +
3.53 + String query = request.getText().toLowerCase();
3.54 + boolean useRegExp = query.contains("*");
3.55 + if (useRegExp) {
3.56 + query = query.replaceAll("\\.", "\\.");
3.57 + query = query.replaceAll("\\*", ".*");
3.58 + }
3.59 +
3.60 + final Set<String> fileExtentions = new HashSet<String>();
3.61 + fileExtentions.addAll(executorService.getExecutionOrder());
3.62 + fileExtentions.add(".body");
3.63 + fileExtentions.add("spec");
3.64 +
3.65 + for (Project project : projects) {
3.66 + //For Local Files
3.67 + for (String fileExtention : fileExtentions) {
3.68 + Map<String, String> plsqlObjects = getLocalPlsqlObjects(project, fileExtention);
3.69 + for (String plsqlObject : plsqlObjects.keySet()) {
3.70 + boolean match = useRegExp ? Pattern.matches(query, plsqlObject) : plsqlObject.contains(query);
3.71 + if (match) {
3.72 + if (!response.addResult(new OpenLocalPLSQLFile(plsqlObjects.get(plsqlObject)), plsqlObject.toLowerCase() + "(" + project.getProjectDirectory().getName() + ")")) {
3.73 + return;
3.74 + }
3.75 + }
3.76 + }
3.77 + }
3.78 + //for Package files in DB. Do not consider tables, views, etc
3.79 + Set<String> DBFiles = getPlsqlFilesFromDB(project);
3.80 + for (String DBFile : DBFiles) {
3.81 + boolean match = useRegExp ? Pattern.matches(query, DBFile.toLowerCase()) : DBFile.toLowerCase().contains(query);
3.82 + if (match) {
3.83 + if (!response.addResult(new OpenPLSQLFileFromDB(DBFile, project), DBFile.toLowerCase() + "(" + project.getProjectDirectory().getName() + ")")) {
3.84 + return;
3.85 + }
3.86 + }
3.87 + }
3.88 + }
3.89 + }
3.90 +
3.91 + private Map<String, String> getLocalPlsqlObjects(Project project, final String fileExtention) {
3.92 + FileObject workspace = project.getProjectDirectory().getFileObject("workspace");
3.93 + Map<String, String> dbObj = new HashMap<String, String>();
3.94 + if (workspace != null && workspace.isFolder()) {
3.95 + final FileObject[] folders = workspace.getChildren();
3.96 + for (FileObject folder : folders) {
3.97 + if (folder.isFolder() && !folder.getName().startsWith(".")) {
3.98 +
3.99 + File filePath = new File(workspace.getPath() + File.separator + MODEL_DIRECTORY_PATH.replaceAll("#COMPONENT#", folder.getName()));
3.100 + if (filePath.exists()) {
3.101 + final FileFilter filter = new FileFilter() {
3.102 +
3.103 + @Override
3.104 + public boolean accept(final File file) {
3.105 + return (file.isFile() && file.getName().endsWith(fileExtention));
3.106 + }
3.107 + };
3.108 + final File[] objectFiles = filePath.listFiles(filter);
3.109 + if (objectFiles != null) {
3.110 + for (File objectFile : objectFiles) {
3.111 + dbObj.put(objectFile.getName().toString().toLowerCase(), objectFile.getPath().toString().toLowerCase());
3.112 + }
3.113 + }
3.114 + }
3.115 + }
3.116 + }
3.117 + return dbObj;
3.118 + }
3.119 + return dbObj;
3.120 + }
3.121 +
3.122 + private Set<String> getPlsqlFilesFromDB(Project project) {
3.123 + DatabaseConnectionManager connectionProvider = project.getLookup().lookup(DatabaseConnectionManager.class);
3.124 + DatabaseContentManager cache = DatabaseContentManager.getInstance(connectionProvider.getTemplateConnection());
3.125 + Set<String> allPackages = new HashSet<String>();
3.126 + if (cache != null) {
3.127 + allPackages = (Set<String>) cache.getAllPackages();
3.128 + }
3.129 + return allPackages;
3.130 + }
3.131 +
3.132 + private static class OpenLocalPLSQLFile implements Runnable {
3.133 +
3.134 + File objectFile;
3.135 + String filePath;
3.136 +
3.137 + public OpenLocalPLSQLFile(String filePath_) {
3.138 + filePath = filePath_;
3.139 + }
3.140 +
3.141 + @Override
3.142 + public void run() {
3.143 + DataObject dataObj = PlsqlFileUtil.getDataObject(filePath);
3.144 + if (dataObj != null) {
3.145 + OpenCookie openCookie = dataObj.getCookie(OpenCookie.class);
3.146 + openCookie.open();
3.147 + }
3.148 + }
3.149 + }
3.150 +
3.151 + private static class OpenPLSQLFileFromDB implements Runnable {
3.152 +
3.153 + File objectFile;
3.154 + String packageName;
3.155 + Project project;
3.156 +
3.157 + public OpenPLSQLFileFromDB(String packageName_, Project project_) {
3.158 + packageName = packageName_;
3.159 + project = project_;
3.160 + }
3.161 +
3.162 + @Override
3.163 + public void run() {
3.164 + final DatabaseConnectionManager connectionProvider = DatabaseConnectionManager.getInstance(project);
3.165 + DatabaseConnection databaseConnection = connectionProvider.getPooledDatabaseConnection(false);
3.166 + DataObject dataObj;
3.167 + try {
3.168 + dataObj = dataObj = PlsqlFileUtil.fetchAsTempFile(packageName, PlsqlBlockType.PACKAGE_BODY, databaseConnection, project, null);
3.169 +
3.170 + if (dataObj != null) {
3.171 + OpenCookie openCookie = dataObj.getCookie(OpenCookie.class);
3.172 + openCookie.open();
3.173 + }
3.174 + } catch (NotConnectedToDbException ex) {
3.175 + Exceptions.printStackTrace(ex);
3.176 + }
3.177 + }
3.178 + }
3.179 +}
4.1 --- a/PLSQL/Navigator/src/org/netbeans/modules/plsql/navigator/layer.xml Tue Jun 19 17:09:07 2012 +0200
4.2 +++ b/PLSQL/Navigator/src/org/netbeans/modules/plsql/navigator/layer.xml Wed Jun 20 16:45:57 2012 +0530
4.3 @@ -1,5 +1,5 @@
4.4 <?xml version="1.0" encoding="UTF-8"?>
4.5 -<!DOCTYPE filesystem PUBLIC "-//NetBeans//DTD Filesystem 1.1//EN" "http://www.netbeans.org/dtds/filesystem-1_1.dtd">
4.6 +<!DOCTYPE filesystem PUBLIC "-//NetBeans//DTD Filesystem 1.2//EN" "http://www.netbeans.org/dtds/filesystem-1_2.dtd">
4.7 <filesystem>
4.8 <folder name="Navigator">
4.9 <folder name="Panels">
4.10 @@ -10,4 +10,15 @@
4.11 </folder>
4.12 </folder>
4.13 </folder>
4.14 + <folder name="QuickSearch">
4.15 + <folder name="Database Files">
4.16 + <folder name="SQL">
4.17 + <attr name="command" stringvalue="nb"/>
4.18 + <attr name="position" intvalue="0"/>
4.19 + <file name="org-netbeans-modules-plsql-navigator-PlsqlSearchProvider.instance">
4.20 + <attr name="displayName" bundlevalue="org.netbeans.modules.plsql.navigator.Bundle#QuickSearch/PL/SQL/org-netbeans-modules-plsql-navigator-PlsqlSearchProvider.instance"/>
4.21 + </file>
4.22 + </folder>
4.23 + </folder>
4.24 + </folder>
4.25 </filesystem>