blob: 7d0668e0de328da4f991a5be385c87622817ab01 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.uima.taeconfigurator.editors.ui.dialogs;
import java.util.List;
import org.eclipse.core.resources.IProject;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CCombo;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.apache.uima.taeconfigurator.TAEConfiguratorPlugin;
import org.apache.uima.taeconfigurator.editors.ui.AbstractSection;
public class FindComponentDialog extends AbstractDialog {
private Text searchByNameText, inputTypeText, outputTypeText;
private CCombo lookInCombo;
private List m_matchingDelegateComponetDescriptors;
private List m_matchingDelegateComponentDescriptions;
private Button cancelButton;
public static final String ALL_PROJECTS = "All projects";
private Label statusLabel1, statusLabel2;
private SearchThread m_searchThread = null;
private String[] componentHeaders;
/**
* @param parentShell
*/
public FindComponentDialog(AbstractSection aSection, String title, String header,
String[] componentHeaders) {
super(aSection, title, header);
this.componentHeaders = componentHeaders;
}
protected Control createDialogArea(Composite parent) {
Composite composite = (Composite) super.createDialogArea(parent);
AbstractSection.spacer(composite);
new Label(composite, SWT.WRAP).setText("Descriptor file name pattern (e.g. ab*cde):");
searchByNameText = new Text(composite, SWT.BORDER);
searchByNameText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
new Label(composite, SWT.WRAP).setText("Descriptor must specify the input type:");
inputTypeText = new Text(composite, SWT.BORDER);
inputTypeText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
new Label(composite, SWT.WRAP).setText("Descriptor must specify the output type:");
outputTypeText = new Text(composite, SWT.BORDER);
outputTypeText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
new Label(composite, SWT.WRAP).setText("Look in:");
lookInCombo = new CCombo(composite, SWT.FLAT | SWT.BORDER | SWT.READ_ONLY);
String[] projectNames = getProjectNames();
lookInCombo.add(' ' + ALL_PROJECTS);
for (int i = 0; i < projectNames.length; i++) {
lookInCombo.add(' ' + projectNames[i]);
}
lookInCombo.setText(' ' + ALL_PROJECTS);
statusLabel1 = new Label(composite, SWT.NONE);
statusLabel1.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
statusLabel2 = new Label(composite, SWT.NONE);
statusLabel2.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
newErrorMessage(composite);
return composite;
}
protected void createButtonsForButtonBar(Composite parent) {
// create OK and Cancel buttons by default
createButton(parent, IDialogConstants.OK_ID, "Search", true);
cancelButton = createButton(parent, IDialogConstants.CANCEL_ID, "Stop Search", false);
cancelButton.setEnabled(false);
}
private String[] getProjectNames() {
IProject[] projects = TAEConfiguratorPlugin.getWorkspace().getRoot().getProjects();
String[] projectNames = new String[projects.length];
for (int i = 0; i < projects.length; i++) {
projectNames[i] = projects[i].getName();
}
return projectNames;
}
// also called by Search Monitoring Thread when
// it notices the search thread is finished
protected void buttonPressed(int buttonId) {
if (buttonId == IDialogConstants.OK_ID) { // start search
if (null != m_searchThread)
errorMessageUI.setText("Search already in progress");
else
copyValuesFromGUI();
} else { // cancel in-progress search
if (m_searchThread.isDone()) {
m_matchingDelegateComponetDescriptors = m_searchThread
.getMatchingDelegateComponentDescriptors();
m_matchingDelegateComponentDescriptions = m_searchThread
.getMatchingDelegateComponentDescriptions();
m_searchThread = null;
super.superButtonPressed(IDialogConstants.OK_ID);
} else {
m_searchThread.setDieNow();
this.handleShellCloseEvent();
}
return;
}
}
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("(?i)"); // case insensitive
for (int i = 0; i < searchPatternLowerCase.length(); i++) {
char ch = searchPatternLowerCase.charAt(i);
if (ch == '*') {
buffer.append(".*");
} else if (0 <= needToEscapeTheseChars.indexOf(ch)) {
buffer.append('\\').append(ch);
} else {
buffer.append(ch);
}
}
return new String(buffer);
}
public List getMatchingDelegateComponentDescriptors() {
return m_matchingDelegateComponetDescriptors;
}
public List getMatchingDelegateComponentDescriptions() {
return m_matchingDelegateComponentDescriptions;
}
public Label getStatusLabel1() {
return statusLabel1;
}
public Label getStatusLabel2() {
return statusLabel2;
}
/*
* (non-Javadoc)
*
* @see org.apache.uima.taeconfigurator.editors.ui.dialogs.AbstractDialog#copyValuesFromGUI()
*/
public void copyValuesFromGUI() {
String fileNameSearch = convertToRegexSearchPattern(searchByNameText.getText());
String inputTypeSearch = convertToRegexSearchPattern(inputTypeText.getText());
String outputTypeSearch = convertToRegexSearchPattern(outputTypeText.getText());
String projectToSearch = lookInCombo.getText().substring(1);
m_searchThread = new SearchThread(this, section, fileNameSearch, inputTypeSearch,
outputTypeSearch, projectToSearch, componentHeaders);
cancelButton.setEnabled(true);
Thread searchThreadThread = new Thread(m_searchThread);
searchThreadThread.start();
SearchMonitoringThread monitoringThread = new SearchMonitoringThread(this, m_searchThread);
monitoringThread.start();
}
/*
* (non-Javadoc)
*
* @see org.apache.uima.taeconfigurator.editors.ui.dialogs.AbstractDialog#isValid()
*/
public boolean isValid() {
return true;
}
/*
* (non-Javadoc)
*
* @see org.apache.uima.taeconfigurator.editors.ui.dialogs.AbstractDialog#enableOK()
*/
public void enableOK() {
}
}