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;
}
}