001: package org.drools.eclipse.flow.common.view.datatype.editor.impl;
002:
003: /*
004: * Copyright 2005 JBoss Inc
005: *
006: * Licensed under the Apache License, Version 2.0 (the "License");
007: * you may not use this file except in compliance with the License.
008: * You may obtain a copy of the License at
009: *
010: * http://www.apache.org/licenses/LICENSE-2.0
011: *
012: * Unless required by applicable law or agreed to in writing, software
013: * distributed under the License is distributed on an "AS IS" BASIS,
014: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015: * See the License for the specific language governing permissions and
016: * limitations under the License.
017: */
018:
019: import org.drools.eclipse.DroolsEclipsePlugin;
020: import org.drools.eclipse.flow.common.datatype.DataTypeRegistry;
021: import org.drools.ruleflow.common.datatype.DataType;
022: import org.eclipse.jface.viewers.ComboViewer;
023: import org.eclipse.jface.viewers.ISelection;
024: import org.eclipse.jface.viewers.ISelectionChangedListener;
025: import org.eclipse.jface.viewers.LabelProvider;
026: import org.eclipse.jface.viewers.StructuredSelection;
027: import org.eclipse.swt.SWT;
028: import org.eclipse.swt.layout.FillLayout;
029: import org.eclipse.swt.widgets.Composite;
030:
031: /**
032: * Combobox for datatypes based on a datatype registry.
033: *
034: * @author <a href="mailto:kris_verlaenen@hotmail.com">Kris Verlaenen</a>
035: */
036: public class DataTypeCombo extends Composite {
037:
038: private DataTypeRegistry registry;
039: private ComboViewer dataTypeCombo;
040:
041: public DataTypeCombo(Composite parent, int style,
042: DataTypeRegistry registry) {
043: super (parent, style);
044: this .registry = registry;
045: setLayout(new FillLayout());
046: dataTypeCombo = new ComboViewer(this , SWT.READ_ONLY);
047: dataTypeCombo.setLabelProvider(new LabelProvider() {
048: public String getText(Object element) {
049: return ((DataTypeRegistry.IDataTypeInfo) element)
050: .getName();
051: }
052: });
053: dataTypeCombo.add(registry.getDataTypes().toArray(
054: new DataTypeRegistry.IDataTypeInfo[0]));
055: }
056:
057: private DataTypeRegistry.IDataTypeInfo getSelectedTypeInfo() {
058: ISelection selection = dataTypeCombo.getSelection();
059: if (!selection.isEmpty()) {
060: return (DataTypeRegistry.IDataTypeInfo) ((StructuredSelection) selection)
061: .getFirstElement();
062: }
063: return null;
064: }
065:
066: public void setDataType(DataType dataType) {
067: if (dataType == null) {
068: dataTypeCombo.setSelection(null);
069: } else {
070: // TODO : check what happens if dataType not in combo
071: try {
072: dataTypeCombo.setSelection(new StructuredSelection(
073: registry.getDataTypeInfo(dataType.getClass())));
074: } catch (IllegalArgumentException e) {
075: // "DataTypeInfo not found in registry: " + dataType.getClass()
076: DroolsEclipsePlugin.log(e);
077: }
078: }
079: }
080:
081: public DataType getDataType() {
082: DataTypeRegistry.IDataTypeInfo dataTypeInfo = getSelectedTypeInfo();
083: return dataTypeInfo == null ? null : dataTypeInfo
084: .getDataTypeFactory().createDataType();
085: }
086:
087: public void reset() {
088: dataTypeCombo.setSelection(null);
089: }
090:
091: public void setEnabled(boolean enabled) {
092: super .setEnabled(enabled);
093: dataTypeCombo.getCombo().setEnabled(enabled);
094: }
095:
096: public void addSelectionChangedListener(
097: ISelectionChangedListener listener) {
098: dataTypeCombo.addSelectionChangedListener(listener);
099: }
100: }
|