Java tutorial
/* * 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.opennlp.caseditor.namefinder; import java.util.ArrayList; import java.util.List; import org.apache.opennlp.caseditor.OpenNLPPreferenceConstants; import org.apache.opennlp.caseditor.TypeListFieldEditor; import org.apache.uima.cas.TypeSystem; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.preference.FieldEditor; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.TableItem; /** * Field editor for configuring name finder models and corresponding types. */ // TODO: // Model type names are encoded into two string and saved to the pref store. // That should be enhanced and in a reliable way coded into one string. class NameFinderModelFieldEditor extends FieldEditor { private static final String MODEL_PATH_KEY = "ModelPathKey"; private static final String TYPE_NAME_KEY = "TypeNameKey"; private TypeSystem ts; private Table modelTypeTable; private Button editButton; private Button removeButton; NameFinderModelFieldEditor(String name, String labelText, TypeSystem ts, Composite parent) { super(name, labelText, parent); this.ts = ts; } @Override protected void adjustForNumColumns(int numColumns) { } private void createTableItem(String modelPath, String typeName) { TableItem item = new TableItem(modelTypeTable, SWT.NONE); item.setData(MODEL_PATH_KEY, modelPath); item.setText(0, modelPath); item.setData(TYPE_NAME_KEY, typeName); item.setText(1, typeName); } private void checkState() { editButton.setEnabled(modelTypeTable.getSelectionCount() == 1); removeButton.setEnabled(modelTypeTable.getSelectionCount() == 1); } @Override protected void doFillIntoGrid(final Composite parent, int numColumns) { Label messageLabel = getLabelControl(parent); GridData messageGridDate = new GridData(); messageGridDate.horizontalSpan = numColumns; messageLabel.setLayoutData(messageGridDate); modelTypeTable = new Table(parent, SWT.BORDER); GridData gd = new GridData(); gd.horizontalSpan = numColumns - 1; gd.horizontalAlignment = GridData.FILL; gd.grabExcessHorizontalSpace = true; gd.verticalAlignment = GridData.FILL; modelTypeTable.setLayoutData(gd); modelTypeTable.setLinesVisible(true); modelTypeTable.setHeaderVisible(true); modelTypeTable.addListener(SWT.Selection, new Listener() { @Override public void handleEvent(Event event) { checkState(); } }); TableColumn modelColumn = new TableColumn(modelTypeTable, SWT.NONE); modelColumn.setText("Model Path"); modelColumn.setWidth(220); TableColumn typeColumn = new TableColumn(modelTypeTable, SWT.NONE); typeColumn.setText("Type"); typeColumn.setWidth(220); Composite buttonGroup = new Composite(parent, SWT.NONE); GridLayout buttonLayout = new GridLayout(); buttonGroup.setLayout(buttonLayout); Button addButton = new Button(buttonGroup, SWT.PUSH); addButton.setLayoutData(GridDataFactory.fillDefaults().create()); addButton.setText("Add"); addButton.addListener(SWT.Selection, new Listener() { @Override public void handleEvent(Event event) { NameFinderModelInputDialog dialog = new NameFinderModelInputDialog(parent.getShell(), "Add a name finder model", ts); if (Dialog.OK == dialog.open()) { createTableItem(dialog.getModelPath(), dialog.getTypeName()); } } }); editButton = new Button(buttonGroup, SWT.PUSH); editButton.setLayoutData(GridDataFactory.fillDefaults().create()); editButton.setText("Edit"); editButton.addListener(SWT.Selection, new Listener() { @Override public void handleEvent(Event event) { NameFinderModelInputDialog dialog = new NameFinderModelInputDialog(parent.getShell(), "Edit name finder model", ts); TableItem item = modelTypeTable.getItem(modelTypeTable.getSelectionIndex()); dialog.setModelPath((String) item.getData(MODEL_PATH_KEY)); dialog.setTypeName((String) item.getData(TYPE_NAME_KEY)); if (Dialog.OK == dialog.open()) { item.setData(MODEL_PATH_KEY, dialog.getModelPath()); item.setText(0, dialog.getModelPath()); item.setData(TYPE_NAME_KEY, dialog.getTypeName()); item.setText(1, dialog.getTypeName()); } } }); removeButton = new Button(buttonGroup, SWT.PUSH); removeButton.setLayoutData(GridDataFactory.fillDefaults().create()); removeButton.setText("Remove"); removeButton.addListener(SWT.Selection, new Listener() { @Override public void handleEvent(Event event) { modelTypeTable.remove(modelTypeTable.getSelectionIndex()); checkState(); } }); checkState(); } @Override protected void doLoad() { if (modelTypeTable != null) { String modelPathsString = getPreferenceStore() .getString(OpenNLPPreferenceConstants.NAME_FINDER_MODEL_PATH); String modelPaths[] = TypeListFieldEditor.getTypeList(modelPathsString); String typeNamesString = getPreferenceStore().getString(OpenNLPPreferenceConstants.NAME_TYPE); String typeNames[] = TypeListFieldEditor.getTypeList(typeNamesString); // Don't load anything ... if (modelPaths.length != typeNames.length) { // TODO: Log error message return; } for (int i = 0; i < modelPaths.length; i++) { createTableItem(modelPaths[i], typeNames[i]); } } } @Override protected void doLoadDefault() { // there is no default } @Override protected void doStore() { List<String> modelPaths = new ArrayList<String>(); List<String> typeNames = new ArrayList<String>(); // iterate over table for (int i = 0; i < modelTypeTable.getItemCount(); i++) { TableItem item = modelTypeTable.getItem(i); String modelPath = (String) item.getData(MODEL_PATH_KEY); modelPaths.add(modelPath); String typeName = (String) item.getData(TYPE_NAME_KEY); typeNames.add(typeName); } String modelPathsString = TypeListFieldEditor .listToString(modelPaths.toArray(new String[modelPaths.size()])); String typeNamesString = TypeListFieldEditor.listToString(typeNames.toArray(new String[typeNames.size()])); getPreferenceStore().setValue(OpenNLPPreferenceConstants.NAME_FINDER_MODEL_PATH, modelPathsString); getPreferenceStore().setValue(OpenNLPPreferenceConstants.NAME_TYPE, typeNamesString); } @Override public int getNumberOfControls() { return 3; } }