-package org.simantics.workbench.search;\r
-\r
-import java.io.File;\r
-import java.io.IOException;\r
-import java.net.URL;\r
-import java.net.URLDecoder;\r
-import java.net.URLEncoder;\r
-import java.util.Collections;\r
-import java.util.HashMap;\r
-import java.util.HashSet;\r
-import java.util.Map;\r
-import java.util.Set;\r
-\r
-import org.simantics.db.layer0.genericrelation.IndexQueries;\r
-\r
-public class SearchQuery {\r
- \r
- private String originalQuery;\r
- private Map<String,String> searchFlags = new HashMap<String, String>();\r
- private Set<String> searchParams = new HashSet<String>();\r
- \r
- public SearchQuery() {\r
- }\r
- \r
- public SearchQuery(String originalQuery) {\r
- this.originalQuery = originalQuery;\r
- }\r
-\r
- public void setOriginalQuery(String originalQuery) {\r
- this.originalQuery = originalQuery;\r
- }\r
- \r
- public String getOriginalQuery() {\r
- return originalQuery;\r
- }\r
- \r
- public String getQuery(Set<String> supportedParams) {\r
- if (originalQuery.trim().isEmpty())\r
- return "";\r
- String query = "";\r
- int count = 0;\r
- for (String key : searchFlags.keySet()) {\r
- if (!supportedParams.contains(key))\r
- continue;\r
- if (!"on".equals(searchFlags.get(key)))\r
- continue;\r
- if (count > 0)\r
- query += " OR ";\r
-// String prefix = originalQuery.startsWith("*") ? "" : "*";\r
-// String suffix = originalQuery.endsWith("*") ? "" : "*";\r
-// query += key+":"+prefix+originalQuery+suffix;\r
- query += key+":"+originalQuery;\r
- count++;\r
- }\r
- return query;\r
- }\r
- \r
- public String getQuery(String... supportedParams) {\r
- Set<String> set = new HashSet<String>();\r
- for (String s : supportedParams)\r
- set.add(s);\r
- return getQuery(set);\r
- }\r
- \r
- \r
- \r
- public void setSearchFlag(String key, String value) {\r
- searchFlags.put(key, value);\r
- }\r
- \r
- public void setSearchParam(String key) {\r
- searchParams.add(key);\r
- }\r
- \r
- public Map<String, String> getSearchFlags() {\r
- return Collections.unmodifiableMap(searchFlags);\r
- }\r
- \r
- public Set<String> getSearchParams() {\r
- return Collections.unmodifiableSet(searchParams);\r
- }\r
- \r
- public boolean getBooleanFlag(String key) {\r
- if ("on".equals(searchFlags.get(key)))\r
- return true;\r
- return false;\r
- }\r
- \r
- public boolean getBooleanParam(String key) {\r
- if (searchParams.contains(key))\r
- return true;\r
- return false;\r
- }\r
- \r
- @Override\r
- public String toString() {\r
- return originalQuery;\r
- }\r
-\r
- public SearchQuery withOriginalQuery(String query) {\r
- SearchQuery ret = new SearchQuery(query);\r
- ret.searchFlags = new HashMap<String, String>(searchFlags);\r
- ret.searchParams = new HashSet<String>(searchParams);\r
- return ret;\r
- }\r
-\r
- public SearchQuery escaped(boolean escapeWildcards) {\r
- return withOriginalQuery( IndexQueries.escape( originalQuery, escapeWildcards ) );\r
- }\r
-\r
- public static URL encode(File file, SearchQuery query) throws IOException {\r
- URL url = file.toURI().toURL();\r
- String s = url.toString() + "?search=" + URLEncoder.encode(query.getOriginalQuery(), "UTF-8");\r
- Map<String, String> flags = query.getSearchFlags();\r
- for (String key : flags.keySet()) {\r
- s += "&"+key+"="+flags.get(key);\r
- }\r
- \r
- for (String param : query.getSearchParams()) {\r
- s += "&"+param;\r
- }\r
- \r
- url = new URL(s);\r
- return url;\r
- }\r
- \r
- public static SearchQuery decode(URL url) throws IOException{\r
- String query = url.getQuery();\r
- SearchQuery searchQuery = new SearchQuery();\r
- if (query != null) {\r
- for (String arg : query.split("&")) {\r
- String[] keyvalue = arg.split("=");\r
- if ("search".equals(keyvalue[0])) {\r
- if (keyvalue.length == 2)\r
- searchQuery.setOriginalQuery(URLDecoder.decode(keyvalue[1], "UTF-8"));\r
- } else if (keyvalue.length == 2){\r
- searchQuery.setSearchFlag(URLDecoder.decode(keyvalue[0], "UTF-8"), URLDecoder.decode(keyvalue[1], "UTF-8"));\r
- } else if (keyvalue.length == 1) {\r
- searchQuery.setSearchParam(URLDecoder.decode(keyvalue[0], "UTF-8"));\r
- }\r
- }\r
- }\r
- return searchQuery;\r
- }\r
- \r
- \r
-\r
-}\r
+package org.simantics.workbench.search;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+import java.net.URLDecoder;
+import java.net.URLEncoder;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.simantics.db.layer0.genericrelation.IndexQueries;
+
+public class SearchQuery {
+
+ private String originalQuery;
+ private Map<String,String> searchFlags = new HashMap<String, String>();
+ private Set<String> searchParams = new HashSet<String>();
+
+ public SearchQuery() {
+ }
+
+ public SearchQuery(String originalQuery) {
+ this.originalQuery = originalQuery;
+ }
+
+ public void setOriginalQuery(String originalQuery) {
+ this.originalQuery = originalQuery;
+ }
+
+ public String getOriginalQuery() {
+ return originalQuery;
+ }
+
+ public String getQuery(Set<String> supportedParams) {
+ if (originalQuery.trim().isEmpty())
+ return "";
+ String query = "";
+ int count = 0;
+ for (String key : searchFlags.keySet()) {
+ if (!supportedParams.contains(key))
+ continue;
+ if (!"on".equals(searchFlags.get(key)))
+ continue;
+ if (count > 0)
+ query += " OR ";
+// String prefix = originalQuery.startsWith("*") ? "" : "*";
+// String suffix = originalQuery.endsWith("*") ? "" : "*";
+// query += key+":"+prefix+originalQuery+suffix;
+ query += key+":"+originalQuery;
+ count++;
+ }
+ return query;
+ }
+
+ public String getQuery(String... supportedParams) {
+ Set<String> set = new HashSet<String>();
+ for (String s : supportedParams)
+ set.add(s);
+ return getQuery(set);
+ }
+
+
+
+ public void setSearchFlag(String key, String value) {
+ searchFlags.put(key, value);
+ }
+
+ public void setSearchParam(String key) {
+ searchParams.add(key);
+ }
+
+ public Map<String, String> getSearchFlags() {
+ return Collections.unmodifiableMap(searchFlags);
+ }
+
+ public Set<String> getSearchParams() {
+ return Collections.unmodifiableSet(searchParams);
+ }
+
+ public boolean getBooleanFlag(String key) {
+ if ("on".equals(searchFlags.get(key)))
+ return true;
+ return false;
+ }
+
+ public boolean getBooleanParam(String key) {
+ if (searchParams.contains(key))
+ return true;
+ return false;
+ }
+
+ @Override
+ public String toString() {
+ return originalQuery;
+ }
+
+ public SearchQuery withOriginalQuery(String query) {
+ SearchQuery ret = new SearchQuery(query);
+ ret.searchFlags = new HashMap<String, String>(searchFlags);
+ ret.searchParams = new HashSet<String>(searchParams);
+ return ret;
+ }
+
+ public SearchQuery escaped(boolean escapeWildcards) {
+ return withOriginalQuery( IndexQueries.escape( originalQuery, escapeWildcards ) );
+ }
+
+ public static URL encode(File file, SearchQuery query) throws IOException {
+ URL url = file.toURI().toURL();
+ String s = url.toString() + "?search=" + URLEncoder.encode(query.getOriginalQuery(), "UTF-8");
+ Map<String, String> flags = query.getSearchFlags();
+ for (String key : flags.keySet()) {
+ s += "&"+key+"="+flags.get(key);
+ }
+
+ for (String param : query.getSearchParams()) {
+ s += "&"+param;
+ }
+
+ url = new URL(s);
+ return url;
+ }
+
+ public static SearchQuery decode(URL url) throws IOException{
+ String query = url.getQuery();
+ SearchQuery searchQuery = new SearchQuery();
+ if (query != null) {
+ for (String arg : query.split("&")) {
+ String[] keyvalue = arg.split("=");
+ if ("search".equals(keyvalue[0])) {
+ if (keyvalue.length == 2)
+ searchQuery.setOriginalQuery(URLDecoder.decode(keyvalue[1], "UTF-8"));
+ } else if (keyvalue.length == 2){
+ searchQuery.setSearchFlag(URLDecoder.decode(keyvalue[0], "UTF-8"), URLDecoder.decode(keyvalue[1], "UTF-8"));
+ } else if (keyvalue.length == 1) {
+ searchQuery.setSearchParam(URLDecoder.decode(keyvalue[0], "UTF-8"));
+ }
+ }
+ }
+ return searchQuery;
+ }
+
+
+
+}