]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.diagram/src/org/simantics/diagram/symbollibrary/ui/DefaultFilterStrategy.java
Fixed all line endings of the repository
[simantics/platform.git] / bundles / org.simantics.diagram / src / org / simantics / diagram / symbollibrary / ui / DefaultFilterStrategy.java
index 480a9716c7a53b5057351a05a9a58d409e9ddb10..3c9c58bc0ebc3c47822eb0be250d24260dc121be 100644 (file)
-/*******************************************************************************\r
- * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
- * in Industry THTH ry.\r
- * All rights reserved. This program and the accompanying materials\r
- * are made available under the terms of the Eclipse Public License v1.0\r
- * which accompanies this distribution, and is available at\r
- * http://www.eclipse.org/legal/epl-v10.html\r
- *\r
- * Contributors:\r
- *     VTT Technical Research Centre of Finland - initial API and implementation\r
- *******************************************************************************/\r
-package org.simantics.diagram.symbollibrary.ui;\r
-\r
-import java.nio.CharBuffer;\r
-\r
-/**\r
- * Default implementation of IFilterStrategy.\r
- * \r
- * <p>\r
- * It implements simple search semantics with only the special wildcard\r
- * characters '*' ( 0 to n any characters) and '?' (any one character)\r
- * recognized. In order to allow the filter to pass arbitrary prefixes, the\r
- * client has to give a '*' prefix in the filter string. On the contrary, the\r
- * client does not have to specify a '*' in order to pass arbitrary suffixes -\r
- * arbitrary suffixes are allowed by default by this strategy.\r
- * \r
- * <p>\r
- * This strategy forces the filter string to lowercase.\r
- * \r
- * TODO: this code is duplicated from org.simantics.browsing.ui.common.views since there was no good way of getting this same. Remove code duplication.\r
- * \r
- * @author Tuukka Lehtonen\r
- */\r
-class DefaultFilterStrategy {\r
-\r
-    private static final boolean DEBUG = false;\r
-\r
-    private static StringBuilder addSearchWord(StringBuilder sb, String pattern) {\r
-        if (DEBUG)\r
-            System.out.println("addSearchWord(" + pattern + ") to '" + sb.toString() + "'");\r
-\r
-        if (pattern == null || pattern.isEmpty())\r
-            return sb;\r
-        if (sb.length() > 0)\r
-            sb.append('|');\r
-        sb.append('(');\r
-        sb.append(pattern);\r
-        sb.append(')');\r
-        return sb;\r
-    }\r
-\r
-    private static String toString(CharBuffer cb) {\r
-        cb.limit(cb.position());\r
-        cb.reset();\r
-        if (DEBUG)\r
-            System.out.println("toString(" + cb + ")");\r
-        String result = cb.toString();\r
-        cb.limit(cb.capacity());\r
-        return result;\r
-    }\r
-\r
-    public static String toSinglePatternString(String filter, boolean implicitPreAsterisk) {\r
-        if (!filter.isEmpty()) {\r
-            // Force searching in lowercase.\r
-            filter = filter.toLowerCase();\r
-\r
-            // Construct a regular expression from the specified text.\r
-            String regExFilter = filter\r
-            .replace("\\", "\\\\")   // \ -> \\\r
-            .replace(".", "\\.")     // . -> \.\r
-            .replace("*", ".*")      // * -> Any 0..n characters\r
-            .replace("?", ".")       // ? -> Any single character\r
-            .replace("+", "\\+")     // + -> \+\r
-            .replace("(", "\\(")     // ( -> \(\r
-            .replace(")", "\\)")     // ) -> \)\r
-            .replace("[", "\\[")     // [ -> \[\r
-            .replace("]", "\\]")     // ] -> \]\r
-            .replace("{", "\\{")     // { -> \{\r
-            .replace("}", "\\}")     // } -> \}\r
-            .replace("^", "\\^")     // ^ -> \^\r
-            .replace("$", "\\$")     // $ -> \$\r
-            .replace("|", ".*|")     // $ -> \$\r
-            //.replace("|", "\\|")     // | -> \|\r
-            .replace("&&", "\\&&")   // && -> \&&\r
-            ;\r
-\r
-            if (implicitPreAsterisk)\r
-                if (!regExFilter.startsWith(".*"))\r
-                    regExFilter = ".*" + regExFilter ;\r
-            if (!regExFilter.endsWith(".*"))\r
-                regExFilter += ".*" ;\r
-\r
-            return regExFilter;\r
-        }\r
-        return null;\r
-    }\r
-\r
-    public static String defaultToPatternString(String filter, boolean implicitPreAsterisk) {\r
-        if (filter.isEmpty())\r
-            return null;\r
-\r
-        CharBuffer buf = CharBuffer.allocate(filter.length()*2);\r
-        buf.mark();\r
-        StringBuilder sb = new StringBuilder(filter.length()*2);\r
-        boolean inQuote = false;\r
-        int len = filter.length();\r
-        for (int i = 0; i < len;) {\r
-            char ch = filter.charAt(i);\r
-            if (DEBUG)\r
-                System.out.println("char[" + i + "]: '" + ch + "'");\r
-\r
-            if (ch == '"') {\r
-                if (!inQuote) {\r
-                    if (DEBUG)\r
-                        System.out.println("begin quoted text");\r
-                    inQuote = true;\r
-                } else {\r
-                    if (DEBUG)\r
-                        System.out.println("end quoted text");\r
-                    inQuote = false;\r
-                    addSearchWord(sb, toSinglePatternString( toString(buf), implicitPreAsterisk ));\r
-                }\r
-                ++i;\r
-                continue;\r
-            } else if (ch == '\\') {\r
-                // Next character is escaped, i.e. taken as is.\r
-                ++i;\r
-                if (i >= len)\r
-                    // Unexpected end-of-string\r
-                    break;\r
-\r
-                ch = filter.charAt(i);\r
-                if (DEBUG)\r
-                    System.out.println("append escaped character '" + ch + "'");\r
-\r
-                buf.append(ch);\r
-                ++i;\r
-                break;\r
-            } else if (ch == ' ') {\r
-                if (inQuote) {\r
-                    if (DEBUG)\r
-                        System.out.println("append char '" + ch + "'");\r
-                    buf.append(ch);\r
-                    ++i;\r
-                } else {\r
-                    if (buf.position() > 0) {\r
-                        addSearchWord(sb, toSinglePatternString( toString(buf), implicitPreAsterisk ));\r
-                    }\r
-                    ++i;\r
-                }\r
-            } else {\r
-                if (DEBUG)\r
-                    System.out.println("append char '" + ch + "'");\r
-                buf.append(ch);\r
-                ++i;\r
-            }\r
-        }\r
-        if (buf.position() > 0) {\r
-            addSearchWord(sb, toSinglePatternString( toString(buf), implicitPreAsterisk ));\r
-        }\r
-\r
-        //sb.append(".*");\r
-\r
-        return sb.toString();\r
-    }\r
-\r
-}\r
+/*******************************************************************************
+ * Copyright (c) 2007, 2010 Association for Decentralized Information Management
+ * in Industry THTH ry.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     VTT Technical Research Centre of Finland - initial API and implementation
+ *******************************************************************************/
+package org.simantics.diagram.symbollibrary.ui;
+
+import java.nio.CharBuffer;
+
+/**
+ * Default implementation of IFilterStrategy.
+ * 
+ * <p>
+ * It implements simple search semantics with only the special wildcard
+ * characters '*' ( 0 to n any characters) and '?' (any one character)
+ * recognized. In order to allow the filter to pass arbitrary prefixes, the
+ * client has to give a '*' prefix in the filter string. On the contrary, the
+ * client does not have to specify a '*' in order to pass arbitrary suffixes -
+ * arbitrary suffixes are allowed by default by this strategy.
+ * 
+ * <p>
+ * This strategy forces the filter string to lowercase.
+ * 
+ * TODO: this code is duplicated from org.simantics.browsing.ui.common.views since there was no good way of getting this same. Remove code duplication.
+ * 
+ * @author Tuukka Lehtonen
+ */
+class DefaultFilterStrategy {
+
+    private static final boolean DEBUG = false;
+
+    private static StringBuilder addSearchWord(StringBuilder sb, String pattern) {
+        if (DEBUG)
+            System.out.println("addSearchWord(" + pattern + ") to '" + sb.toString() + "'");
+
+        if (pattern == null || pattern.isEmpty())
+            return sb;
+        if (sb.length() > 0)
+            sb.append('|');
+        sb.append('(');
+        sb.append(pattern);
+        sb.append(')');
+        return sb;
+    }
+
+    private static String toString(CharBuffer cb) {
+        cb.limit(cb.position());
+        cb.reset();
+        if (DEBUG)
+            System.out.println("toString(" + cb + ")");
+        String result = cb.toString();
+        cb.limit(cb.capacity());
+        return result;
+    }
+
+    public static String toSinglePatternString(String filter, boolean implicitPreAsterisk) {
+        if (!filter.isEmpty()) {
+            // Force searching in lowercase.
+            filter = filter.toLowerCase();
+
+            // Construct a regular expression from the specified text.
+            String regExFilter = filter
+            .replace("\\", "\\\\")   // \ -> \\
+            .replace(".", "\\.")     // . -> \.
+            .replace("*", ".*")      // * -> Any 0..n characters
+            .replace("?", ".")       // ? -> Any single character
+            .replace("+", "\\+")     // + -> \+
+            .replace("(", "\\(")     // ( -> \(
+            .replace(")", "\\)")     // ) -> \)
+            .replace("[", "\\[")     // [ -> \[
+            .replace("]", "\\]")     // ] -> \]
+            .replace("{", "\\{")     // { -> \{
+            .replace("}", "\\}")     // } -> \}
+            .replace("^", "\\^")     // ^ -> \^
+            .replace("$", "\\$")     // $ -> \$
+            .replace("|", ".*|")     // $ -> \$
+            //.replace("|", "\\|")     // | -> \|
+            .replace("&&", "\\&&")   // && -> \&&
+            ;
+
+            if (implicitPreAsterisk)
+                if (!regExFilter.startsWith(".*"))
+                    regExFilter = ".*" + regExFilter ;
+            if (!regExFilter.endsWith(".*"))
+                regExFilter += ".*" ;
+
+            return regExFilter;
+        }
+        return null;
+    }
+
+    public static String defaultToPatternString(String filter, boolean implicitPreAsterisk) {
+        if (filter.isEmpty())
+            return null;
+
+        CharBuffer buf = CharBuffer.allocate(filter.length()*2);
+        buf.mark();
+        StringBuilder sb = new StringBuilder(filter.length()*2);
+        boolean inQuote = false;
+        int len = filter.length();
+        for (int i = 0; i < len;) {
+            char ch = filter.charAt(i);
+            if (DEBUG)
+                System.out.println("char[" + i + "]: '" + ch + "'");
+
+            if (ch == '"') {
+                if (!inQuote) {
+                    if (DEBUG)
+                        System.out.println("begin quoted text");
+                    inQuote = true;
+                } else {
+                    if (DEBUG)
+                        System.out.println("end quoted text");
+                    inQuote = false;
+                    addSearchWord(sb, toSinglePatternString( toString(buf), implicitPreAsterisk ));
+                }
+                ++i;
+                continue;
+            } else if (ch == '\\') {
+                // Next character is escaped, i.e. taken as is.
+                ++i;
+                if (i >= len)
+                    // Unexpected end-of-string
+                    break;
+
+                ch = filter.charAt(i);
+                if (DEBUG)
+                    System.out.println("append escaped character '" + ch + "'");
+
+                buf.append(ch);
+                ++i;
+                break;
+            } else if (ch == ' ') {
+                if (inQuote) {
+                    if (DEBUG)
+                        System.out.println("append char '" + ch + "'");
+                    buf.append(ch);
+                    ++i;
+                } else {
+                    if (buf.position() > 0) {
+                        addSearchWord(sb, toSinglePatternString( toString(buf), implicitPreAsterisk ));
+                    }
+                    ++i;
+                }
+            } else {
+                if (DEBUG)
+                    System.out.println("append char '" + ch + "'");
+                buf.append(ch);
+                ++i;
+            }
+        }
+        if (buf.position() > 0) {
+            addSearchWord(sb, toSinglePatternString( toString(buf), implicitPreAsterisk ));
+        }
+
+        //sb.append(".*");
+
+        return sb.toString();
+    }
+
+}