You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by sc...@apache.org on 2007/01/18 21:09:38 UTC

svn commit: r497557 - in /incubator/uima/uimaj/trunk/uimaj-ep-configurator/src/main/java/org/apache/uima/taeconfigurator/editors: MultiPageEditor.java ui/dialogs/FindComponentDialog.java ui/dialogs/SearchThread.java

Author: schor
Date: Thu Jan 18 12:09:38 2007
New Revision: 497557

URL: http://svn.apache.org/viewvc?view=rev&rev=497557
Log:
UIMA-84 Found that search code for matching things validated
the match by checking the first 1024 chars of a file to see
if it had a descriptor of the right kind in it.  This is too
small - the apache copyright is > 1024 chars.

Also found wrong reading method (didn't check for partial buffer
filling).  Also found use of regex was not very good - wasn't
using the built-in mechansim for case-insensitive, wasn't escaping
things like "periods", was recompiling the regex expressions
every match rather than just once.

Modified:
    incubator/uima/uimaj/trunk/uimaj-ep-configurator/src/main/java/org/apache/uima/taeconfigurator/editors/MultiPageEditor.java
    incubator/uima/uimaj/trunk/uimaj-ep-configurator/src/main/java/org/apache/uima/taeconfigurator/editors/ui/dialogs/FindComponentDialog.java
    incubator/uima/uimaj/trunk/uimaj-ep-configurator/src/main/java/org/apache/uima/taeconfigurator/editors/ui/dialogs/SearchThread.java

Modified: incubator/uima/uimaj/trunk/uimaj-ep-configurator/src/main/java/org/apache/uima/taeconfigurator/editors/MultiPageEditor.java
URL: http://svn.apache.org/viewvc/incubator/uima/uimaj/trunk/uimaj-ep-configurator/src/main/java/org/apache/uima/taeconfigurator/editors/MultiPageEditor.java?view=diff&rev=497557&r1=497556&r2=497557
==============================================================================
--- incubator/uima/uimaj/trunk/uimaj-ep-configurator/src/main/java/org/apache/uima/taeconfigurator/editors/MultiPageEditor.java (original)
+++ incubator/uima/uimaj/trunk/uimaj-ep-configurator/src/main/java/org/apache/uima/taeconfigurator/editors/MultiPageEditor.java Thu Jan 18 12:09:38 2007
@@ -2087,6 +2087,8 @@
     return bRes;
   }
 
+  private static final int previewSize = 1024 * 16;
+  
   /**
    * Used by code to get lists of delegate components by input/output type specs.
    */
@@ -2096,12 +2098,23 @@
       return null;
     }
     // make a quick assesment of whether file is a TAE
-    char[] acBuffer = new char[1024];
+    // looking in the first part of the file, but 1024 isn't big enough
+    // because initial comment blocks like the apache license are that big
+    // Do 16 K
+    char[] acBuffer = new char[previewSize];
     FileReader fileReader = null;
-    int nCharsRead;
+    int nCharsRead = 0;
     try {
+      // FileReader is FileInputStream using "default" char-encoding
       fileReader = new FileReader(iFile.getLocation().toString());
-      nCharsRead = fileReader.read(acBuffer);
+      while (true) {
+        int tempCharsRead = fileReader.read(acBuffer, nCharsRead, previewSize - nCharsRead);
+        if (-1 == tempCharsRead)
+          break;
+        nCharsRead = nCharsRead + tempCharsRead;
+        if (nCharsRead >= previewSize)
+          break;
+      }
     } catch (FileNotFoundException e) {
       return null;
     } catch (IOException e) {

Modified: incubator/uima/uimaj/trunk/uimaj-ep-configurator/src/main/java/org/apache/uima/taeconfigurator/editors/ui/dialogs/FindComponentDialog.java
URL: http://svn.apache.org/viewvc/incubator/uima/uimaj/trunk/uimaj-ep-configurator/src/main/java/org/apache/uima/taeconfigurator/editors/ui/dialogs/FindComponentDialog.java?view=diff&rev=497557&r1=497556&r2=497557
==============================================================================
--- incubator/uima/uimaj/trunk/uimaj-ep-configurator/src/main/java/org/apache/uima/taeconfigurator/editors/ui/dialogs/FindComponentDialog.java (original)
+++ incubator/uima/uimaj/trunk/uimaj-ep-configurator/src/main/java/org/apache/uima/taeconfigurator/editors/ui/dialogs/FindComponentDialog.java Thu Jan 18 12:09:38 2007
@@ -144,24 +144,24 @@
     }
   }
 
+  private static final String needToEscapeTheseChars = 
+    ".+{}()\\";
   private String convertToRegexSearchPattern(String searchPattern) {
     if (searchPattern == null || searchPattern.equals("")) {
       return null;
     }
-
     String searchPatternLowerCase = searchPattern.toLowerCase();
-    StringBuffer buffer = new StringBuffer(".*");
+    StringBuffer buffer = new StringBuffer("(?i)"); // case insensitive
     for (int i = 0; i < searchPatternLowerCase.length(); i++) {
       char ch = searchPatternLowerCase.charAt(i);
-      if (ch >= 'a' && ch <= 'z') {
-        buffer.append("[" + ch + ((char) (ch - 32)) + ']');
-      } else if (ch == '*') {
+      if (ch == '*') {
         buffer.append(".*");
+      } else if (0 <= needToEscapeTheseChars.indexOf(ch)) {
+        buffer.append('\\').append(ch);
       } else {
         buffer.append(ch);
       }
     }
-    buffer.append(".*");
 
     return new String(buffer);
   }

Modified: incubator/uima/uimaj/trunk/uimaj-ep-configurator/src/main/java/org/apache/uima/taeconfigurator/editors/ui/dialogs/SearchThread.java
URL: http://svn.apache.org/viewvc/incubator/uima/uimaj/trunk/uimaj-ep-configurator/src/main/java/org/apache/uima/taeconfigurator/editors/ui/dialogs/SearchThread.java?view=diff&rev=497557&r1=497556&r2=497557
==============================================================================
--- incubator/uima/uimaj/trunk/uimaj-ep-configurator/src/main/java/org/apache/uima/taeconfigurator/editors/ui/dialogs/SearchThread.java (original)
+++ incubator/uima/uimaj/trunk/uimaj-ep-configurator/src/main/java/org/apache/uima/taeconfigurator/editors/ui/dialogs/SearchThread.java Thu Jan 18 12:09:38 2007
@@ -21,6 +21,7 @@
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.regex.Pattern;
 
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IFolder;
@@ -38,7 +39,11 @@
 import org.apache.uima.taeconfigurator.editors.ui.AbstractSection;
 
 public class SearchThread implements Runnable /* extends Thread */{
-  private String m_fileNameSearch, m_inputTypeSearch, m_outputTypeSearch, m_projectToSearch;
+  private Pattern m_fileNameSearch; 
+  private Pattern m_inputTypeSearch;
+  private Pattern m_outputTypeSearch;
+  
+  private String  m_projectToSearch;
 
   FindComponentDialog m_dialog;
 
@@ -60,9 +65,9 @@
 
     m_dialog = dialog;
     m_aggregateSection = aggregateSection;
-    m_fileNameSearch = fileNameSearch;
-    m_inputTypeSearch = inputTypeSearch;
-    m_outputTypeSearch = outputTypeSearch;
+    m_fileNameSearch = (null == fileNameSearch)? null : Pattern.compile(fileNameSearch);
+    m_inputTypeSearch = (null == inputTypeSearch)? null : Pattern.compile(inputTypeSearch);
+    m_outputTypeSearch = (null == outputTypeSearch)? null : Pattern.compile(outputTypeSearch);
     m_projectToSearch = projectToSearch;
     m_componentHeaders = componentHeaders;
   }
@@ -86,6 +91,8 @@
   public void run() {
     m_matchingDelegateComponentDescriptors = new ArrayList();
     m_matchingDelegateComponentDescriptions = new ArrayList();
+    
+    
 
     getDelegateComponentsByInputOutputTypes(m_projectToSearch);
 
@@ -98,7 +105,7 @@
         if (resource.getName().toLowerCase().endsWith(".xml")
                 // exclude potentially many data files, not descriptors
                 && !resource.getName().toLowerCase().endsWith(".txt.xml")
-                && (m_fileNameSearch == null || resource.getName().matches(m_fileNameSearch))) {
+                && (m_fileNameSearch == null || m_fileNameSearch.matcher(resource.getName()).find())) {
           String fileDescriptorRelPath = m_aggregateSection.editor
                   .getDescriptorRelativePath(resource.getLocation().toString());
           setStatusMsg(2, "Examining " + getBriefDisplayVersion(fileDescriptorRelPath));
@@ -180,7 +187,7 @@
   }
 
   private boolean delegateComponentMatchesCapabilityReqs(ResourceCreationSpecifier rs,
-          String inputTypeSearch, String outputTypeSearch) {
+          Pattern inputTypeSearch, Pattern outputTypeSearch) {
 
     if (inputTypeSearch == null && outputTypeSearch == null) {
       return true;
@@ -200,7 +207,7 @@
 
   private static final boolean OUTPUT = false;
 
-  private boolean matchCapabilitiesTo(Capability[] capabilities, String search, boolean isInput) {
+  private boolean matchCapabilitiesTo(Capability[] capabilities, Pattern search, boolean isInput) {
     if (null == search)
       return true;
     for (int i = 0; i < capabilities.length; i++) {
@@ -208,7 +215,7 @@
               .getOutputs();
       if (null != typeOrFeatures) {
         for (int j = 0; j < typeOrFeatures.length; j++) {
-          if (typeOrFeatures[j].getName().matches(search)) {
+          if (search.matcher(typeOrFeatures[j].getName()).find()) {
             return true;
           }
         }