blob: 0b06af2a0617a6d83d09e583c70cd13621d45e53 [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;
import org.apache.uima.Constants;
import org.apache.uima.UIMAFramework;
import org.apache.uima.analysis_engine.metadata.FlowConstraints;
import org.apache.uima.resource.ExternalResourceDependency;
import org.apache.uima.resource.ExternalResourceDescription;
import org.apache.uima.resource.ResourceInitializationException;
import org.apache.uima.resource.metadata.ConfigurationParameter;
import org.apache.uima.resource.metadata.ConfigurationParameterSettings;
import org.apache.uima.resource.metadata.ExternalResourceBinding;
import org.apache.uima.resource.metadata.FsIndexDescription;
import org.apache.uima.resource.metadata.ResourceManagerConfiguration;
import org.apache.uima.taeconfigurator.InternalErrorCDE;
import org.apache.uima.taeconfigurator.editors.MultiPageEditor;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event;
import org.eclipse.ui.forms.IManagedForm;
public class GeneralSection extends AbstractSection {
public void enable() {
}
private Button cppButton;
private Button javaButton;
private Button primitiveButton;
private Button aggregateButton;
/**
* Creates a section to edit general information like primitive or aggregate and C++ or Java
*
* @param editor
* the referenced multipage editor
*/
public GeneralSection(MultiPageEditor aEditor, Composite parent) {
super(aEditor, parent, "Implementation Details", null);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.forms.IFormPart#initialize(org.eclipse.ui.forms.IManagedForm)
*/
public void initialize(IManagedForm form) {
super.initialize(form);
((GridData) this.getSection().getLayoutData()).grabExcessVerticalSpace = false;
Composite sectionClient = new2ColumnComposite(this.getSection());
((GridData) sectionClient.getLayoutData()).grabExcessVerticalSpace = false;
// FrameworkImplementation choose, 2 radio buttons
if (isAeDescriptor() || isCasConsumerDescriptor()) {
toolkit.createLabel(sectionClient, "Implementation Language").setToolTipText(
"Choose the implementation language here.");
Composite buttons = new2ColumnComposite(sectionClient);
cppButton = newRadioButton(buttons, "C/C++", "C/C++", NOT_SELECTED);
javaButton = newRadioButton(buttons, "Java", "Java", SELECTED);
// DescriptorType choose, 2 radio buttons
toolkit.createLabel(sectionClient, "Engine Type").setToolTipText(
"Choose the type of the engine here.");
buttons = new2ColumnComposite(sectionClient);
primitiveButton = newRadioButton(buttons, "Primitive", S_, SELECTED);
aggregateButton = newRadioButton(buttons, "Aggregate", S_, NOT_SELECTED);
}
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.forms.IFormPart#refresh()
*/
public void refresh() {
super.refresh();
boolean isPrimitive = isPrimitive();
// select primitive or aggregate
if (isAeDescriptor() || isCasConsumerDescriptor()) {
primitiveButton.setSelection(isPrimitive);
aggregateButton.setSelection(!isPrimitive);
// select C++ or Java
String implType = editor.getAeDescription().getFrameworkImplementation();
cppButton.setSelection(Constants.CPP_FRAMEWORK_NAME.equals(implType));
javaButton.setSelection(Constants.JAVA_FRAMEWORK_NAME.equals(implType));
}
}
/*
* (non-Javadoc)
*
* @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event)
*/
public void handleEvent(Event event) {
if (event.widget == primitiveButton || event.widget == aggregateButton) {
boolean isPrimitive = primitiveButton.getSelection();
// Note: events occur when button is selected or deselected
if (event.widget == primitiveButton && !isPrimitive)
return; // deselecting
if (event.widget == aggregateButton && isPrimitive)
return; // deselecting
if (isPrimitive && isPrimitive())
return; // nothing changed
if (!isPrimitive && isAggregate())
return; // nothing changed
if (isPrimitive) {
if (Window.CANCEL == Utility.popOkCancel("Switching from Aggregate",
"This action will clear the capabilities, reset the delegates, "
+ "reset the flow, reset the parameters, reset any resource information "
+ "and start with an empty type system. Are you sure?",
MessageDialog.WARNING)) {
aggregateButton.setSelection(true);
primitiveButton.setSelection(false);
return;
}
editor.getAeDescription().setAnnotatorImplementationName("");
} else {
// if (isLocalProcessingDescriptor() && !isAeDescriptor()) {
// Utility.popMessage("Not Allowed",
// "Cas Consumers, Cas Initializers, Collection Readers, and Flow Controllers cannot be
// Aggregates.",
// MessageDialog.ERROR);
// primitiveButton.setSelection(true);
// aggregateButton.setSelection(false);
// return;
// }
if (Window.CANCEL == Utility.popOkCancel("Switching from Primitive AE",
"This action will clear the capabilities, reset the delegates, "
+ "reset the parameters, reset any resource information "
+ "and reset the type system. Are you sure?", MessageDialog.WARNING)) {
primitiveButton.setSelection(true);
aggregateButton.setSelection(false);
return;
}
editor.getAeDescription().setAnnotatorImplementationName(null);
}
editor.getAeDescription().setPrimitive(isPrimitive);
commonResets();
try {
editor.setAeDescription(editor.getAeDescription());
} catch (ResourceInitializationException e) {
throw new InternalErrorCDE("invalid state", e);
}
javaButton.setEnabled(isPrimitive);
cppButton.setEnabled(isPrimitive);
HeaderPage page = editor.getAggregatePage();
if (null != page)
page.markStale();
page = editor.getParameterPage();
if (null != page)
page.markStale();
page = editor.getSettingsPage();
if (null != page)
page.markStale();
page = editor.getTypePage();
if (null != page)
markRestOfPageStale(page.getManagedForm(), null);
page = editor.getCapabilityPage();
if (null != page)
page.markStale();
page = editor.getIndexesPage();
if (null != page)
page.markStale();
page = editor.getResourcesPage();
if (null != page)
page.markStale();
}
if (event.widget == javaButton || event.widget == cppButton) {
valueChanged = false;
if (cppButton.getSelection()) {
editor.getAeDescription().setFrameworkImplementation(
setValueChanged(Constants.CPP_FRAMEWORK_NAME, editor.getAeDescription()
.getFrameworkImplementation()));
} else {
editor.getAeDescription().setFrameworkImplementation(
setValueChanged(Constants.JAVA_FRAMEWORK_NAME, editor.getAeDescription()
.getFrameworkImplementation()));
}
if (!valueChanged)
return;
}
PrimitiveSection s = editor.getOverviewPage().getPrimitiveSection();
if (null != s) {
s.refresh();
// next line makes the bounding rectangle show up
s.getSection().getClient().redraw();
}
setFileDirty();
}
private void commonResets() {
// clear the delegates
getDelegateAnalysisEngineSpecifiersWithImports().clear();
editor.getResolvedDelegates().clear();
if (isAggregate()) {
// reset the flow to fixed flow with null as the set
FlowConstraints flowConstraints = UIMAFramework.getResourceSpecifierFactory()
.createFixedFlow();
flowConstraints.setAttributeValue("fixedFlow", stringArray0);
getAnalysisEngineMetaData().setFlowConstraints(flowConstraints);
} else
getAnalysisEngineMetaData().setFlowConstraints(null);
// clear capabilities
getAnalysisEngineMetaData().setCapabilities(capabilityArray0);
addCapabilitySet();
// reset parameters
// reset the parameters not declared in a group
getConfigurationParameterDeclarations().setConfigurationParameters(
new ConfigurationParameter[0]);
// reset groups
getConfigurationParameterDeclarations().setConfigurationGroups(
AbstractSection.configurationGroupArray0);
// reset common parameters
getConfigurationParameterDeclarations().setCommonParameters(new ConfigurationParameter[0]);
// reset default group name
getConfigurationParameterDeclarations().setDefaultGroupName("");
// reset search strategy
getConfigurationParameterDeclarations().setSearchStrategy("");
// reset the parm settings
ConfigurationParameterSettings configParmSettings = UIMAFramework.getResourceSpecifierFactory()
.createConfigurationParameterSettings();
getAnalysisEngineMetaData().setConfigurationParameterSettings(configParmSettings);
// reset typesystem, needed when going from primitive to aggregate
getAnalysisEngineMetaData().setTypeSystem(null);
// reset resources
editor.getAeDescription().setExternalResourceDependencies(new ExternalResourceDependency[0]);
ResourceManagerConfiguration rmc = editor.getAeDescription().getResourceManagerConfiguration();
if (null != rmc) {
rmc.setExternalResourceBindings(new ExternalResourceBinding[0]);
rmc.setExternalResources(new ExternalResourceDescription[0]);
}
// reset indexes
getAnalysisEngineMetaData().setFsIndexCollection(null);
getAnalysisEngineMetaData().setFsIndexes(new FsIndexDescription[0]);
// reset index type priorities
getAnalysisEngineMetaData().setTypePriorities(null);
}
}