Java tutorial
/******************************************************************************* * Copyright (c) 2000, 2004 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Common Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/cpl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package net.bioclipse.qsar.ui.editors; import java.util.ArrayList; import java.util.List; import net.bioclipse.qsar.QsarPackage; import net.bioclipse.qsar.QsarType; import net.bioclipse.qsar.business.IQsarManager; import net.bioclipse.qsar.descriptor.model.ResponseUnit; import net.bioclipse.qsar.init.Activator; import net.sf.bibtexml.BibtexmlPackage; import org.eclipse.core.databinding.DataBindingContext; import org.eclipse.core.databinding.observable.Realm; import org.eclipse.core.databinding.observable.map.IObservableMap; import org.eclipse.core.databinding.observable.set.IObservableSet; import org.eclipse.core.resources.IProject; import org.eclipse.emf.common.command.Command; import org.eclipse.emf.common.command.CompoundCommand; import org.eclipse.emf.databinding.edit.EMFEditObservables; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.emf.edit.command.AddCommand; import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain; import org.eclipse.emf.edit.domain.EditingDomain; import org.eclipse.emf.edit.domain.IEditingDomainProvider; import org.eclipse.jface.databinding.swt.SWTObservables; import org.eclipse.jface.databinding.viewers.ObservableListContentProvider; import org.eclipse.jface.databinding.viewers.ObservableMapLabelProvider; import org.eclipse.jface.dialogs.IPageChangedListener; import org.eclipse.jface.dialogs.PageChangedEvent; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.ColumnPixelData; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.TableLayout; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TableViewerColumn; import org.eclipse.jface.window.Window; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.*; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.layout.*; import org.eclipse.swt.widgets.*; import org.eclipse.ui.dialogs.ListDialog; import org.eclipse.ui.forms.*; import org.eclipse.ui.forms.editor.*; import org.eclipse.ui.forms.widgets.*; /** * */ public class InformationPage extends FormPage implements IEditingDomainProvider, IPageChangedListener { private CTabFolder tabFolder; private AdapterFactoryEditingDomain editingDomain; private ScrolledForm form; private TableViewer unitViewer; // private TableViewer refViewer; // private Table refTable; class TextSection { String text; public TextSection(String text) { this.text = text; } } public InformationPage(QsarEditor editor, AdapterFactoryEditingDomain editingDomain) { super(editor, "qsar.model.information", "Information"); this.editingDomain = editingDomain; editor.addPageChangedListener(this); } protected void createFormContent(IManagedForm managedForm) { form = managedForm.getForm(); FormToolkit toolkit = managedForm.getToolkit(); form.setText("Qsar Model Information"); toolkit.decorateFormHeading(form.getForm()); IProject project = ((QsarEditor) getEditor()).getActiveProject(); ToolbarHelper.setupToolbar(form, project); // form.setBackgroundImage(FormArticlePlugin.getDefault().getImage( // FormArticlePlugin.IMG_FORM_BG)); GridLayout layout = new GridLayout(); layout.marginWidth = 10; form.getBody().setLayout(layout); tabFolder = new CTabFolder(form.getBody(), SWT.FLAT | SWT.TOP); toolkit.adapt(tabFolder, true, true); GridData gd = new GridData(GridData.FILL_BOTH); gd.heightHint = 0; tabFolder.setLayoutData(gd); Color selectedColor = toolkit.getColors().getColor(IFormColors.SEPARATOR); tabFolder.setSelectionBackground(new Color[] { selectedColor, toolkit.getColors().getBackground() }, new int[] { 50 }); //tabFolder.setCursor(FormsResources.getHandCursor()); toolkit.paintBordersFor(tabFolder); //Add the tabs createGeneralTab(toolkit); //TODO: Update when implemented, as of now it does not work // createReferenceTab( toolkit); createUnitsTab(toolkit); tabFolder.setSelection(0); // PlatformUI.getWorkbench().getHelpSystem().setHelp(form.getBody(), IHelpContextIds.MANIFEST_FEATURE_INFO); } private void createGeneralTab(FormToolkit toolkit) { CTabItem item = new CTabItem(tabFolder, SWT.NULL); item.setText("General information"); QsarType qsarModel = ((QsarEditor) getEditor()).getQsarModel(); Composite tabContent = toolkit.createComposite(tabFolder); item.setControl(tabContent); tabContent.setLayoutData(new GridData(GridData.FILL_BOTH)); GridLayout layout = new GridLayout(); tabContent.setLayout(layout); layout.numColumns = 2; layout.marginWidth = 0; //Dataset Name //============= Label lblDatasetName = toolkit.createLabel(tabContent, "Dataset Name:", SWT.NONE); GridData gd2 = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING); lblDatasetName.setLayoutData(gd2); Text txtDatasetName = toolkit.createText(tabContent, "", SWT.MULTI | SWT.WRAP); GridData gd = new GridData(GridData.FILL_HORIZONTAL); txtDatasetName.setLayoutData(gd); gd.heightHint = 16; // Bind to EMF DataBindingContext bindingContext = new DataBindingContext(); bindingContext.bindValue(SWTObservables.observeText(txtDatasetName, SWT.Modify), EMFEditObservables.observeValue(editingDomain, qsarModel.getMetadata(), QsarPackage.Literals.METADATA_TYPE__DATASETNAME), null, null); //Authors //============= Label lblAuthors = toolkit.createLabel(tabContent, "Author(s)", SWT.NONE); GridData gd3 = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING); lblAuthors.setLayoutData(gd3); Text txtAuthors = toolkit.createText(tabContent, "", SWT.MULTI | SWT.WRAP); GridData gd4 = new GridData(GridData.FILL_HORIZONTAL); txtAuthors.setLayoutData(gd4); gd4.heightHint = 40; // Bind to EMF bindingContext.bindValue(SWTObservables.observeText(txtAuthors, SWT.Modify), EMFEditObservables .observeValue(editingDomain, qsarModel.getMetadata(), QsarPackage.Literals.METADATA_TYPE__AUTHORS), null, null); //Description //============= Label lblDescription = toolkit.createLabel(tabContent, "Description:", SWT.NONE); GridData gd9 = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING); lblDescription.setLayoutData(gd9); Text txtDescription = toolkit.createText(tabContent, "", SWT.MULTI | SWT.WRAP); GridData gd10 = new GridData(GridData.FILL_HORIZONTAL); txtDescription.setLayoutData(gd10); gd10.heightHint = 70; // Bind to EMF bindingContext.bindValue(SWTObservables.observeText(txtDescription, SWT.Modify), EMFEditObservables.observeValue(editingDomain, qsarModel.getMetadata(), QsarPackage.Literals.METADATA_TYPE__DESCRIPTION), null, null); //URL //============= Label lblUrl = toolkit.createLabel(tabContent, "URL:", SWT.NONE); GridData gd5 = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING); lblUrl.setLayoutData(gd5); Text txtUrl = toolkit.createText(tabContent, "", SWT.MULTI | SWT.WRAP); GridData gd6 = new GridData(GridData.FILL_HORIZONTAL); txtUrl.setLayoutData(gd6); gd6.heightHint = 16; // Bind to EMF bindingContext.bindValue(SWTObservables.observeText(txtUrl, SWT.Modify), EMFEditObservables.observeValue( editingDomain, qsarModel.getMetadata(), QsarPackage.Literals.METADATA_TYPE__URL), null, null); //License //============= Label lblLicense = toolkit.createLabel(tabContent, "License:", SWT.NONE); GridData gd7 = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING); lblLicense.setLayoutData(gd7); Text txtLicense = toolkit.createText(tabContent, "", SWT.MULTI | SWT.WRAP); GridData gd8 = new GridData(GridData.FILL_BOTH); txtLicense.setLayoutData(gd8); // Bind to EMF bindingContext.bindValue(SWTObservables.observeText(txtLicense, SWT.Modify), EMFEditObservables .observeValue(editingDomain, qsarModel.getMetadata(), QsarPackage.Literals.METADATA_TYPE__LICENSE), null, null); } private void createReferenceTab(FormToolkit toolkit) { CTabItem item = new CTabItem(tabFolder, SWT.NULL); item.setText("References"); Composite tabContent = toolkit.createComposite(tabFolder); item.setControl(tabContent); tabContent.setLayoutData(new GridData(GridData.FILL_BOTH)); GridLayout layout = new GridLayout(); tabContent.setLayout(layout); layout.numColumns = 2; layout.marginWidth = 0; TableViewer refViewer = new TableViewer(tabContent, SWT.BORDER | SWT.MULTI); Table refTable = refViewer.getTable(); toolkit.adapt(refTable, true, true); GridData gd = new GridData(GridData.FILL_BOTH); gd.verticalSpan = 2; refTable.setLayoutData(gd); refTable.setHeaderVisible(true); // molTable.setLinesVisible(true); toolkit.adapt(refTable, true, true); //Add name columns TableLayout tableLayout = new TableLayout(); refTable.setLayout(tableLayout); TableViewerColumn ixcol = new TableViewerColumn(refViewer, SWT.BORDER); ixcol.getColumn().setText("Title"); tableLayout.addColumnData(new ColumnPixelData(150)); TableViewerColumn col = new TableViewerColumn(refViewer, SWT.BORDER); col.getColumn().setText("Authors"); tableLayout.addColumnData(new ColumnPixelData(100)); col = new TableViewerColumn(refViewer, SWT.BORDER); col.getColumn().setText("journal"); tableLayout.addColumnData(new ColumnPixelData(100)); col = new TableViewerColumn(refViewer, SWT.BORDER); col.getColumn().setText("Year"); tableLayout.addColumnData(new ColumnPixelData(50)); col = new TableViewerColumn(refViewer, SWT.BORDER); col.getColumn().setText("URL"); tableLayout.addColumnData(new ColumnPixelData(100)); Button btnAdd = toolkit.createButton(tabContent, "Add...", SWT.PUSH); btnAdd.addListener(SWT.Selection, new Listener() { public void handleEvent(Event e) { // addRef(); } }); GridData gd2 = new GridData(); gd2.verticalAlignment = SWT.BEGINNING; gd2.widthHint = 60; btnAdd.setLayoutData(gd2); Button btnDel = toolkit.createButton(tabContent, "Remove", SWT.PUSH); btnDel.addListener(SWT.Selection, new Listener() { public void handleEvent(Event e) { // deleteRef(); } }); gd2 = new GridData(GridData.VERTICAL_ALIGN_BEGINNING); gd2.widthHint = 60; btnDel.setLayoutData(gd2); // The content provider is responsible to handle add and // remove notification for the Person#address EList ObservableListContentProvider provider = new ObservableListContentProvider(); refViewer.setContentProvider(provider); // The label provider in turn handles the addresses // The EStructuralFeature[] defines which fields get shown // in the TableViewer columns IObservableSet knownElements = provider.getKnownElements(); IObservableMap[] observeMaps = EMFEditObservables.observeMaps(editingDomain, knownElements, new EStructuralFeature[] { BibtexmlPackage.Literals.ARTICLE_TYPE__AUTHOR, BibtexmlPackage.Literals.BIB_TE_XML_ENTRIES_CLASS__ARTICLE, BibtexmlPackage.Literals.BIB_TE_XML_ENTRY_TYPE__ID, BibtexmlPackage.Literals.ARTICLE_TYPE__YEAR, BibtexmlPackage.Literals.ARTICLE_TYPE__URL }); ObservableMapLabelProvider labelProvider = new ObservableQSARLabelProvider(observeMaps); refViewer.setLabelProvider(labelProvider); QsarType qsarModel = ((QsarEditor) getEditor()).getQsarModel(); EObject entryList = qsarModel.getMetadata(); // Set the Viewer's input refViewer.setInput(EMFEditObservables.observeList(Realm.getDefault(), editingDomain, entryList, QsarPackage.Literals.METADATA_TYPE__REFERENCE)); } private void createUnitsTab(FormToolkit toolkit) { CTabItem item = new CTabItem(tabFolder, SWT.NULL); item.setText("Response units"); Composite tabContent = toolkit.createComposite(tabFolder); item.setControl(tabContent); tabContent.setLayoutData(new GridData(GridData.FILL_BOTH)); GridLayout layout = new GridLayout(); tabContent.setLayout(layout); layout.numColumns = 2; layout.marginWidth = 0; unitViewer = new TableViewer(tabContent, SWT.BORDER | SWT.MULTI); Table unitTable = unitViewer.getTable(); toolkit.adapt(unitTable, true, true); GridData gd = new GridData(GridData.FILL_BOTH); gd.verticalSpan = 2; unitTable.setLayoutData(gd); unitTable.setHeaderVisible(true); // molTable.setLinesVisible(true); toolkit.adapt(unitTable, true, true); //Add name columns TableLayout tableLayout = new TableLayout(); unitTable.setLayout(tableLayout); TableViewerColumn ixcol = new TableViewerColumn(unitViewer, SWT.BORDER); ixcol.getColumn().setText("Name"); tableLayout.addColumnData(new ColumnPixelData(150)); TableViewerColumn col = new TableViewerColumn(unitViewer, SWT.BORDER); col.getColumn().setText("Shortname"); tableLayout.addColumnData(new ColumnPixelData(100)); col = new TableViewerColumn(unitViewer, SWT.BORDER); col.getColumn().setText("Description"); tableLayout.addColumnData(new ColumnPixelData(100)); col = new TableViewerColumn(unitViewer, SWT.BORDER); col.getColumn().setText("URL"); tableLayout.addColumnData(new ColumnPixelData(150)); Button btnAdd = toolkit.createButton(tabContent, "Add...", SWT.PUSH); btnAdd.addListener(SWT.Selection, new Listener() { public void handleEvent(Event e) { addUnit(); unitViewer.refresh(); } }); GridData gd2 = new GridData(); gd2.verticalAlignment = SWT.BEGINNING; gd2.widthHint = 60; btnAdd.setLayoutData(gd2); Button btnDel = toolkit.createButton(tabContent, "Remove", SWT.PUSH); btnDel.addListener(SWT.Selection, new Listener() { public void handleEvent(Event e) { // deleteUnit(); } }); gd2 = new GridData(GridData.VERTICAL_ALIGN_BEGINNING); gd2.widthHint = 60; btnDel.setLayoutData(gd2); // The content provider is responsible to handle add and // remove notification for the Person#address EList ObservableListContentProvider provider = new ObservableListContentProvider(); unitViewer.setContentProvider(provider); // The label provider in turn handles the addresses // The EStructuralFeature[] defines which fields get shown // in the TableViewer columns IObservableSet knownElements = provider.getKnownElements(); IObservableMap[] observeMaps = EMFEditObservables.observeMaps(editingDomain, knownElements, new EStructuralFeature[] { QsarPackage.Literals.RESPONSEUNIT_TYPE__NAME, QsarPackage.Literals.RESPONSEUNIT_TYPE__SHORTNAME, QsarPackage.Literals.RESPONSEUNIT_TYPE__DESCRIPTION, QsarPackage.Literals.RESPONSEUNIT_TYPE__URL }); ObservableMapLabelProvider labelProvider = new ObservableQSARLabelProvider(observeMaps); unitViewer.setLabelProvider(labelProvider); QsarType qsarModel = ((QsarEditor) getEditor()).getQsarModel(); // Set the Viewer's input unitViewer.setInput(EMFEditObservables.observeList(Realm.getDefault(), editingDomain, qsarModel, QsarPackage.Literals.QSAR_TYPE__RESPONSEUNIT)); } protected void addUnit() { List<ResponseUnit> list = Activator.getDefault().getQsarManager().getFullResponseUnits(); ListDialog dlg = new ListDialog(getSite().getShell()); dlg.setContentProvider(new ArrayContentProvider()); dlg.setLabelProvider(new LabelProvider() { @Override public String getText(Object element) { if (element instanceof ResponseUnit) { ResponseUnit unit = (ResponseUnit) element; return "" + unit.getShortname() + " - " + unit.getName(); } return super.getText(element); } }); dlg.setInput(list); int res = dlg.open(); if (res == Window.CANCEL) return; Object[] objs = dlg.getResult(); if (objs == null) return; System.out.println("Got back: " + objs.length + " selections"); //Add selected units to model QsarType qsarModel = ((QsarEditor) getEditor()).getQsarModel(); IQsarManager qsar = Activator.getDefault().getQsarManager(); List<ResponseUnit> toAddList = new ArrayList<ResponseUnit>(); for (Object u : objs) { ResponseUnit newUnit = (ResponseUnit) u; toAddList.add(newUnit); System.out.println("Added new unit: " + newUnit + " to qsar model"); } qsar.addResponseUnitToModel(qsarModel, editingDomain, toAddList); } public EditingDomain getEditingDomain() { return editingDomain; } public void pageChanged(PageChangedEvent event) { } }