blob: 590ba6ea390e6f8bb508b6266e13270f82bf347d [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 org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
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.List;
import org.eclipse.swt.widgets.Text;
import org.apache.uima.analysis_engine.TypeOrFeature;
import org.apache.uima.resource.ResourceCreationSpecifier;
import org.apache.uima.resource.ResourceSpecifier;
import org.apache.uima.resource.metadata.Capability;
import org.apache.uima.taeconfigurator.CDEpropertyPage;
import org.apache.uima.taeconfigurator.editors.ui.AbstractSection;
public class PickTaeForTypesDialog extends AbstractDialog {
private java.util.List m_DelegateComponentDescriptors, m_delegateComponentDescriptions;
private String[] m_selectedDelegateComponentDescriptors;
// private boolean m_bAutoAddToFlow;
private String m_aggregateFileName;
private Text delegateComponentDescriptionText;
List delegateComponentListGUI;
private List inputTypesList;
private List outputTypesList;
// private Button autoAddToFlowButton;
private DialogSelectionListener dialogSelectionListener = new DialogSelectionListener();
private Button importByNameUI;
private Button importByLocationUI;
public boolean isImportByName;
public class DialogSelectionListener implements SelectionListener {
public void widgetSelected(SelectionEvent e) {
if (e.widget == delegateComponentListGUI) {
update();
} else {
if (okButton != null)
enableOK();
}
}
public void widgetDefaultSelected(SelectionEvent e) {
// nothing to do in this case
}
}
/**
* @param parentShell
*/
public PickTaeForTypesDialog(AbstractSection aSection, String aggregateFileName,
java.util.List delegateComponentDescriptors, java.util.List delegateComponentDescriptions) {
super(aSection, "Select Delegate Component Descriptor(s)",
"Select one or more delegate components to add and press OK");
m_aggregateFileName = aggregateFileName;
m_DelegateComponentDescriptors = delegateComponentDescriptors;
m_delegateComponentDescriptions = delegateComponentDescriptions;
}
protected Control createDialogArea(Composite parent) {
Composite composite = (Composite) super.createDialogArea(parent);
Label specialMsgLabel = new Label(composite, SWT.WRAP);
AbstractSection.spacer(composite);
// create m_taePrompt
createWideLabel(composite, "Delegate Components:");
delegateComponentListGUI = new List(composite, SWT.MULTI | SWT.BORDER | SWT.V_SCROLL);
GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
gridData.heightHint = 100;
delegateComponentListGUI.setLayoutData(gridData);
boolean bContainsConstituentsAlreadyInAggregate = false;
boolean bContainsAggregate = false;
for (int i = 0; i < m_DelegateComponentDescriptors.size(); i++) {
String sAdditional = "";
if (m_aggregateFileName.equals(m_DelegateComponentDescriptors.get(i))) {
sAdditional = "**";
bContainsAggregate = true;
}
delegateComponentListGUI.add((String) m_DelegateComponentDescriptors.get(i) + sAdditional);
}
delegateComponentListGUI.addSelectionListener(dialogSelectionListener);
if (bContainsConstituentsAlreadyInAggregate && bContainsAggregate) {
specialMsgLabel
.setText("(* indicates delegate component is already part of aggregate, ** is aggregate currently being configured)");
} else if (bContainsConstituentsAlreadyInAggregate) {
specialMsgLabel.setText("(* indicates delegate component is already part of aggregate)");
} else if (bContainsAggregate) {
specialMsgLabel.setText("(** is aggregate currently being configured)");
}
createWideLabel(composite, "Delegate Component Description:");
delegateComponentDescriptionText = new Text(composite, SWT.MULTI | SWT.WRAP | SWT.V_SCROLL
| SWT.BORDER);
delegateComponentDescriptionText.setLayoutData(new GridData(GridData.FILL_BOTH));
GridData dcgd = new GridData(GridData.FILL_HORIZONTAL);
dcgd.heightHint = 50;
delegateComponentDescriptionText.setLayoutData(dcgd);
delegateComponentDescriptionText.setEditable(false);
createWideLabel(composite, "Input Types:");
inputTypesList = new List(composite, SWT.BORDER | SWT.V_SCROLL);
inputTypesList.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
createWideLabel(composite, "Output Types:");
outputTypesList = new List(composite, SWT.BORDER | SWT.V_SCROLL);
outputTypesList.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
// autoAddToFlowButton = new Button(composite, SWT.CHECK);
// autoAddToFlowButton.setText("Add selected delegate components to end of flow");
// autoAddToFlowButton.setSelection(true);
// autoAddToFlowButton.setBackground(null);
importByNameUI = newButton(composite, SWT.RADIO, "Import by Name",
"Importing by name looks up the name on the classpath and datapath.");
importByLocationUI = newButton(composite, SWT.RADIO, "Import by Location",
"Importing by location requires a relative or absolute URL");
String defaultBy = CDEpropertyPage.getImportByDefault(editor.getProject());
if (defaultBy.equals("location")) {
importByNameUI.setSelection(false);
importByLocationUI.setSelection(true);
} else {
importByNameUI.setSelection(true);
importByLocationUI.setSelection(false);
}
return composite;
}
public void update() {
int nSelectedAeIndex = delegateComponentListGUI.getSelectionIndices()[0];
ResourceSpecifier rs = (ResourceSpecifier) m_delegateComponentDescriptions
.get(nSelectedAeIndex);
String description = rs instanceof ResourceCreationSpecifier ? ((ResourceCreationSpecifier) rs)
.getMetaData().getDescription() : "No Description - remote service descriptor";
delegateComponentDescriptionText.setText(convertNull(description));
inputTypesList.removeAll();
outputTypesList.removeAll();
Capability[] capabilities = AbstractSection.getCapabilities(rs);
if (capabilities != null && capabilities.length > 0) {
TypeOrFeature[] inputs = capabilities[0].getInputs();
if (inputs != null) {
for (int i = 0; i < inputs.length; i++) {
if (inputs[i].isType()) {
inputTypesList.add(section.formatName(inputs[i].getName()));
}
}
}
TypeOrFeature[] outputs = capabilities[0].getOutputs();
if (outputs != null) {
for (int i = 0; i < outputs.length; i++) {
if (outputs[i].isType()) {
outputTypesList.add(section.formatName(outputs[i].getName()));
}
}
}
}
if (okButton != null)
enableOK();
}
public void enableOK() {
boolean bEnableOk = false;
String[] selections = delegateComponentListGUI.getSelection();
for (int i = 0; i < selections.length; i++) {
if (!selections[i].endsWith("*")) {
bEnableOk = true;
i = selections.length;
}
}
okButton.setEnabled(bEnableOk);
}
public String[] getSelectedDelegateComponentDescriptors() {
return (String[]) m_selectedDelegateComponentDescriptors.clone();
}
// public boolean getAutoAddToFlow() {
// return m_bAutoAddToFlow;
// }
/*
* (non-Javadoc)
*
* @see org.apache.uima.taeconfigurator.editors.ui.dialogs.AbstractDialog#copyValuesFromGUI()
*/
public void copyValuesFromGUI() {
// this is where we do rollup and detect if we need any additional
// types based on types of features and whether we are a supertype
// of a type that is not yet defined
int[] selIndices = delegateComponentListGUI.getSelectionIndices();
int nRealCount = 0;
for (int i = 0; i < selIndices.length; i++) {
if (!delegateComponentListGUI.getItem(selIndices[i]).endsWith("*")) {
nRealCount++;
}
}
m_selectedDelegateComponentDescriptors = new String[nRealCount];
for (int i = 0, j = 0; i < selIndices.length; i++) {
if (!delegateComponentListGUI.getItem(selIndices[i]).endsWith("*")) {
m_selectedDelegateComponentDescriptors[j] = (String) m_DelegateComponentDescriptors
.get(selIndices[i]);
}
}
// m_bAutoAddToFlow = autoAddToFlowButton.getSelection();
isImportByName = importByNameUI.getSelection();
CDEpropertyPage.setImportByDefault(editor.getProject(), isImportByName ? "name" : "location");
}
/*
* (non-Javadoc)
*
* @see org.apache.uima.taeconfigurator.editors.ui.dialogs.AbstractDialog#isValid()
*/
public boolean isValid() {
return true;
}
}