blob: a172b0be63b44c0b5972ef5a743a38ae3b426ae6 [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.Iterator;
import java.util.Map;
import java.util.Set;
import org.apache.uima.taeconfigurator.editors.ui.AbstractSection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.swt.widgets.Text;
public class SelectTypeDialog extends AbstractDialog {
private Text typeNameUI;
private Table matchingTypesUI;
private Table nameSpacesUI;
public String typeName = "error-TypeName-never-set";
public String nameSpaceName = "error-NameSpaceName-never-set";
private TypesWithNameSpaces types;
/**
* @param aSection
* @param title
* @param description
*/
public SelectTypeDialog(AbstractSection section, TypesWithNameSpaces types) {
super(section, "Select Type Name", "Select an Existing CAS Type name from the set of defined types");
this.types = types;
}
/*
* (non-Javadoc)
* @see org.apache.uima.taeconfigurator.editors.ui.dialogs.AbstractDialog#createDialogArea(org.eclipse.swt.widgets.Composite)
*
* Use labels on left (2 column layout)
* Create a text input area labeled: Type:
* Create a list output area labeled: Matching:
* Create a list output area labeled: NameSpaces:
* Bottom gets normal OK / Cancel buttons
*/
protected Control createDialogArea(Composite parent) {
Composite mainArea = (Composite)super.createDialogArea(parent);
createWideLabel(mainArea, "Type Name:");
typeNameUI = newText(mainArea, SWT.SINGLE, "Specify the type name");
typeNameUI.addListener(SWT.Modify, this);
createWideLabel(mainArea, "Matching Types:");
matchingTypesUI = newTable(mainArea, SWT.SINGLE);
((GridData)matchingTypesUI.getLayoutData()).heightHint = 250;
((GridData)matchingTypesUI.getLayoutData()).minimumHeight = 100;
typeNameUI.addListener(SWT.Selection, this);
createWideLabel(mainArea, "NameSpaces:");
nameSpacesUI = newTable(mainArea, SWT.SINGLE);
((GridData)nameSpacesUI.getLayoutData()).heightHint = 75;
((GridData)nameSpacesUI.getLayoutData()).minimumHeight = 40;
displayFilteredTypes("");
return mainArea;
}
private void displayFilteredTypes(String aTypeName) {
matchingTypesUI.setRedraw(false);
matchingTypesUI.removeAll();
Map.Entry topEntry = null;
aTypeName = aTypeName.toLowerCase();
for (Iterator it = types.sortedNames.entrySet().iterator(); it.hasNext();) {
Map.Entry entry = (Map.Entry) it.next();
String candidateTypeName = ((String)entry.getKey()).toLowerCase();
if (candidateTypeName.startsWith(aTypeName)) {
if (null == topEntry)
topEntry = entry;
TableItem item = new TableItem(matchingTypesUI, SWT.NULL);
item.setText((String) entry.getKey());
item.setData(entry);
}
}
if (matchingTypesUI.getItemCount() > 0) {
matchingTypesUI.select(0);
displayNameSpacesForSelectedItem(topEntry);
}
matchingTypesUI.setRedraw(true);
}
private void displayNameSpacesForSelectedItem(Map.Entry entry) {
Set nameSpaces = (Set)entry.getValue();
nameSpacesUI.removeAll();
for (Iterator it = nameSpaces.iterator(); it.hasNext();) {
String nameSpace = (String) it.next();
TableItem item = new TableItem(nameSpacesUI, SWT.NULL);
item.setText(nameSpace);
item.setData(entry);
}
if (nameSpacesUI.getItemCount() > 0) {
nameSpacesUI.select(0);
}
}
/* (non-Javadoc)
* @see org.apache.uima.taeconfigurator.editors.ui.dialogs.AbstractDialog#handleEvent(org.eclipse.swt.widgets.Event)
*/
public void handleEvent(Event event) {
if (event.widget == typeNameUI && event.type == SWT.Modify) {
typeName = typeNameUI.getText();
displayFilteredTypes(typeName);
}
else if (event.widget == matchingTypesUI && event.type == SWT.Selection) {
displayNameSpacesForSelectedItem(
(Map.Entry)(matchingTypesUI.getSelection()[0].getData()));
}
super.handleEvent(event);
}
/* (non-Javadoc)
* @see org.apache.uima.taeconfigurator.editors.ui.dialogs.AbstractDialog#copyValuesFromGUI()
*/
public void copyValuesFromGUI() {
if (0 < matchingTypesUI.getSelectionCount()) {
typeName = matchingTypesUI.getSelection()[0].getText();
}
if (0 < nameSpacesUI.getSelectionCount()) {
nameSpaceName = nameSpacesUI.getSelection()[0].getText();
}
}
/* (non-Javadoc)
* @see org.apache.uima.taeconfigurator.editors.ui.dialogs.AbstractDialog#enableOK()
*/
public void enableOK() {
copyValuesFromGUI();
okButton.setEnabled( (0 < nameSpacesUI.getSelectionCount()) &&
(0 < matchingTypesUI.getSelectionCount()));
}
/* (non-Javadoc)
* @see org.apache.uima.taeconfigurator.editors.ui.dialogs.AbstractDialog#isValid()
*/
public boolean isValid() {
return true;
}
}