/******************************************************************************* * Copyright (c) 2005, 2012 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.bpel.ui.properties; import java.util.List; import org.eclipse.bpel.common.ui.details.IDetailsAreaConstants; import org.eclipse.bpel.common.ui.flatui.FlatFormAttachment; import org.eclipse.bpel.common.ui.flatui.FlatFormData; import org.eclipse.bpel.model.Import; import org.eclipse.bpel.model.Process; import org.eclipse.bpel.model.util.BPELUtils; import org.eclipse.bpel.ui.IBPELUIConstants; import org.eclipse.bpel.ui.IHelpContextIds; import org.eclipse.bpel.ui.Messages; import org.eclipse.bpel.ui.commands.AddImportCommand; import org.eclipse.bpel.ui.commands.RemoveImportCommand; import org.eclipse.bpel.ui.details.providers.ColumnTableProvider; import org.eclipse.bpel.ui.details.providers.ImportContentProvider; import org.eclipse.bpel.ui.dialogs.SchemaImportDialog; import org.eclipse.bpel.ui.util.BPELUtil; import org.eclipse.bpel.ui.util.MultiObjectAdapter; import org.eclipse.bpel.ui.util.NamespaceUtils; import org.eclipse.bpel.ui.util.TableCursor; import org.eclipse.core.resources.IMarker; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.ecore.EObject; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.window.Window; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Table; import org.eclipse.ui.PlatformUI; /** * Edits the import statements of the BPEL file. */ public class ImportsSection extends BPELPropertySection { protected Composite parentComposite; protected Composite activityComposite; protected Label importLabel; protected Table importTable; protected TableViewer importViewer; protected ColumnTableProvider tableProvider; protected TableCursor tableCursor = null; /** * Make this section use all the vertical space it can get. * */ @Override public boolean shouldUseExtraSpace() { return true; } /** * Bug 290085 - Override the super-class because the input is Process not Import * If use super-class's directly, when change the import attributes * the properties section do not change. Grid Qian */ @Override protected void addAllAdapters() { super.addAllAdapters(); if (fAdapters.length > 0) { if (getModel() != null) { EObject obj = getModel(); if (obj instanceof Process) { List<Import> list = ((Process) obj).getImports(); for (int i = 0; i < list.size(); i++) { fAdapters[0].addToObject((Import) list.get(i)); } } } } } @Override protected MultiObjectAdapter[] createAdapters() { return new MultiObjectAdapter[] { new MultiObjectAdapter() { @Override public void notify(Notification n) { importViewer.setInput(getInput()); } }, }; } protected void createImportWidgets(Composite parent) { FlatFormData data; Button browseWSDL = fWidgetFactory.createButton(parent, Messages.ImportsSection_0, SWT.PUSH); Button browseXSD = fWidgetFactory.createButton(parent, Messages.ImportsSection_1, SWT.PUSH); final Button removeImport = fWidgetFactory.createButton(parent, Messages.ImportsSection_2, SWT.PUSH); removeImport.setEnabled(false); removeImport.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(SelectionEvent e) { } public void widgetSelected(SelectionEvent e) { removeImport(); } }); browseWSDL.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(SelectionEvent e) { } public void widgetSelected(SelectionEvent e) { browseAndImportWSDL(); } }); browseXSD.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(SelectionEvent e) { } public void widgetSelected(SelectionEvent e) { browseAndImportXSD(); } }); data = new FlatFormData(); data.right = new FlatFormAttachment(100, -5 * IDetailsAreaConstants.HSPACE); data.top = new FlatFormAttachment(0, IDetailsAreaConstants.VSPACE); removeImport.setLayoutData(data); data = new FlatFormData(); data.right = new FlatFormAttachment(removeImport, -IDetailsAreaConstants.HSPACE); data.top = new FlatFormAttachment(0, IDetailsAreaConstants.VSPACE); browseXSD.setLayoutData(data); data = new FlatFormData(); data.right = new FlatFormAttachment(browseXSD, -IDetailsAreaConstants.HSPACE); data.top = new FlatFormAttachment(0, IDetailsAreaConstants.VSPACE); browseWSDL.setLayoutData(data); importLabel = fWidgetFactory.createLabel(parent, Messages.ImportDetails_Imports_20); data = new FlatFormData(); data.left = new FlatFormAttachment(0, IDetailsAreaConstants.HSPACE); data.top = new FlatFormAttachment(browseWSDL, IDetailsAreaConstants.VSPACE); importLabel.setLayoutData(data); // create table importTable = fWidgetFactory.createTable(parent, SWT.FULL_SELECTION | SWT.V_SCROLL | SWT.READ_ONLY); data = new FlatFormData(); data.left = new FlatFormAttachment(0, IDetailsAreaConstants.HSPACE); data.right = new FlatFormAttachment(100, -5 * IDetailsAreaConstants.HSPACE); data.top = new FlatFormAttachment(importLabel, IDetailsAreaConstants.VSPACE); data.bottom = new FlatFormAttachment(100, -IDetailsAreaConstants.HSPACE); importTable.setLayoutData(data); // set up table importTable.setLinesVisible(true); importTable.setHeaderVisible(true); tableProvider = new ColumnTableProvider(); tableProvider.add(new LocationColumn()); tableProvider.add(new NamespaceColumn()); tableProvider.add(new ImportTypeColumn()); importViewer = new TableViewer(importTable); tableProvider.createTableLayout(importTable); importViewer.setLabelProvider(tableProvider); importViewer.setCellModifier(tableProvider); importViewer.setContentProvider(new ImportContentProvider()); importViewer.setColumnProperties(tableProvider.getColumnProperties()); importViewer.setCellEditors(tableProvider .createCellEditors(importTable)); importViewer .addPostSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { removeImport .setEnabled(!event.getSelection().isEmpty()); } }); tableCursor = BPELUtil.createTableCursor(importTable, importViewer); } public class NamespaceColumn extends ColumnTableProvider.Column implements ILabelProvider { @Override public String getHeaderText() { return Messages.ImportDetails_Import_Namespace_12; } @Override public String getProperty() { return "Namespace"; //$NON-NLS-1$ } @Override public int getInitialWeight() { return 30; } public String getText(Object element) { String s = ((Import) element).getNamespace(); return (s == null) ? "" : NamespaceUtils.convertUriToNamespace(s); //$NON-NLS-1$ } } public class LocationColumn extends ColumnTableProvider.Column implements ILabelProvider { @Override public String getHeaderText() { return Messages.ImportDetails_Import_Location_12; } @Override public String getProperty() { return "Location"; //$NON-NLS-1$ } @Override public int getInitialWeight() { return 30; } public String getText(Object element) { String s = ((Import) element).getLocation(); return (s == null) ? "" : s; //$NON-NLS-1$ } } public class ImportTypeColumn extends ColumnTableProvider.Column implements ILabelProvider { @Override public String getHeaderText() { return Messages.ImportsSection_3; } @Override public String getProperty() { return "ImportType"; //$NON-NLS-1$ } @Override public int getInitialWeight() { return 30; } public String getText(Object element) { String s = ((Import) element).getImportType(); return (s == null) ? "" : s; //$NON-NLS-1$ } } @Override protected void basicSetInput(EObject newInput) { super.basicSetInput(newInput); if (getInput() != null) { importViewer.setInput(getInput()); } } @Override protected void createClient(Composite parent) { Composite composite = parentComposite = createFlatFormComposite(parent); createImportWidgets(composite); PlatformUI.getWorkbench().getHelpSystem().setHelp(parentComposite, IHelpContextIds.PROPERTY_PAGE_IMPORTS); } @Override public Object getUserContext() { return ((StructuredSelection) importViewer.getSelection()) .getFirstElement(); } @Override public void restoreUserContext(Object userContext) { importTable.setFocus(); if (userContext != null) { importViewer.setSelection(new StructuredSelection(userContext)); } } void removeImport () { ISelection selection = importViewer.getSelection(); if (selection.isEmpty()) { return ; } IStructuredSelection ssel = null; if ( (selection instanceof IStructuredSelection) == false) { return; } ssel = (IStructuredSelection) selection; Object obj = ssel.getFirstElement(); RemoveImportCommand cmd = new RemoveImportCommand ( BPELUtils.getProcess( getInput() ), obj, IBPELUIConstants.CMD_REMOVE_IMPORT); if (cmd.canDoExecute()) { getCommandFramework().execute( cmd ); } } void browseAndImportWSDL() { SchemaImportDialog dialog = new SchemaImportDialog(importLabel .getShell(), getInput()); dialog.configureAsWSDLImport(); if (dialog.open() != Window.OK) { return; } Object result[] = dialog.getResult(); if (result.length < 1) { return; } AddImportCommand cmd = new AddImportCommand(BPELUtils .getProcess(getInput()), result[0]); if (cmd.canDoExecute() && cmd.wouldCreateDuplicateImport() == false) { getCommandFramework().execute(cmd); } } void browseAndImportXSD() { SchemaImportDialog dialog = new SchemaImportDialog(importLabel .getShell(), getInput()); if (dialog.open() != Window.OK) { return; } Object result[] = dialog.getResult(); if (result.length < 1) { return; } AddImportCommand cmd = new AddImportCommand(BPELUtils .getProcess(getInput()), result[0]); if (cmd.canDoExecute() && cmd.wouldCreateDuplicateImport() == false) { getCommandFramework().execute(cmd); } } @Override public void gotoMarker(IMarker marker) { // TODO Auto-generated method stub super.gotoMarker(marker); } /** * */ @Override public boolean isValidMarker(IMarker marker) { return super.isValidMarker(marker); } }