Java tutorial
/******************************************************************************* * Copyright (c) 2000, 2008 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 com.siteview.mde.internal.ui.editor.feature; import java.net.MalformedURLException; import java.net.URL; import java.util.Iterator; import org.eclipse.core.runtime.CoreException; import org.eclipse.jface.action.*; import org.eclipse.jface.viewers.*; import com.siteview.mde.core.IModel; import com.siteview.mde.core.IModelChangedEvent; import com.siteview.mde.internal.core.MDECore; import com.siteview.mde.internal.core.feature.FeatureURLElement; import com.siteview.mde.internal.core.ifeature.*; import com.siteview.mde.internal.ui.*; import com.siteview.mde.internal.ui.editor.*; import com.siteview.mde.internal.ui.elements.DefaultContentProvider; import com.siteview.mde.internal.ui.parts.TablePart; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.BusyIndicator; import org.eclipse.swt.dnd.Clipboard; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.actions.ActionFactory; import org.eclipse.ui.forms.widgets.*; public class URLSection extends TableSection { private TableViewer fUrlViewer; private Action fNewAction; private Action fDeleteAction; private Image fUrlImage; class URLContentProvider extends DefaultContentProvider implements IStructuredContentProvider { public Object[] getElements(Object input) { IFeature feature = (IFeature) input; IFeatureURL featureUrl = feature.getURL(); if (featureUrl != null) { return featureUrl.getDiscoveries(); } return new Object[0]; } } class URLLabelProvider extends LabelProvider { public Image getImage(Object obj) { if (obj instanceof IFeatureURLElement) { return fUrlImage; } return null; } } public URLSection(MDEFormPage page, Composite parent) { super(page, parent, Section.DESCRIPTION | ExpandableComposite.NO_TITLE, false, new String[] { MDEUIMessages.FeatureEditor_URLSection_new }); MDELabelProvider provider = MDEPlugin.getDefault().getLabelProvider(); fUrlImage = provider.get(MDEPluginImages.DESC_LINK_OBJ); createClient(getSection(), page.getManagedForm().getToolkit()); getSection().setDescription(MDEUIMessages.FeatureEditor_URLSection_desc); } public void commit(boolean onSave) { super.commit(onSave); } public void createClient(Section section, FormToolkit toolkit) { Composite container = createClientContainer(section, 2, toolkit); GridLayout layout = (GridLayout) container.getLayout(); layout.verticalSpacing = 5; createViewerPartControl(container, SWT.SINGLE, 2, toolkit); TablePart tablePart = getTablePart(); fUrlViewer = tablePart.getTableViewer(); fUrlViewer.setContentProvider(new URLContentProvider()); fUrlViewer.setLabelProvider(new URLLabelProvider()); toolkit.paintBordersFor(container); makeActions(); section.setClient(container); initialize(); } protected void buttonSelected(int index) { if (index == 0) handleNew(); } public void dispose() { IFeatureModel model = (IFeatureModel) getPage().getModel(); if (model != null) model.removeModelChangedListener(this); super.dispose(); } protected void fillContextMenu(IMenuManager manager) { IModel model = (IModel) getPage().getModel(); ISelection selection = fUrlViewer.getSelection(); Object object = ((IStructuredSelection) selection).getFirstElement(); manager.add(fNewAction); fNewAction.setEnabled(model.isEditable()); if (object != null && object instanceof IFeatureURLElement) { manager.add(fDeleteAction); fDeleteAction.setEnabled(model.isEditable()); } manager.add(new Separator()); getPage().getMDEEditor().getContributor().contextMenuAboutToShow(manager); } private void handleNew() { IFeatureModel model = (IFeatureModel) getPage().getModel(); IFeature feature = model.getFeature(); IFeatureURL url = feature.getURL(); if (url == null) { url = model.getFactory().createURL(); try { feature.setURL(url); } catch (CoreException e) { return; } } try { IFeatureURLElement element = model.getFactory().createURLElement(url, IFeatureURLElement.DISCOVERY); element.setLabel(MDEUIMessages.FeatureEditor_URLSection_newDiscoverySite); element.setURL(new URL(MDEUIMessages.FeatureEditor_URLSection_newURL)); url.addDiscovery(element); fUrlViewer.setSelection(new StructuredSelection(element)); } catch (CoreException e) { MDEPlugin.logException(e); } catch (MalformedURLException e) { MDEPlugin.logException(e); } } private void handleSelectAll() { IStructuredContentProvider provider = (IStructuredContentProvider) fUrlViewer.getContentProvider(); Object[] elements = provider.getElements(fUrlViewer.getInput()); StructuredSelection ssel = new StructuredSelection(elements); fUrlViewer.setSelection(ssel); } private void handleDelete() { IStructuredSelection ssel = (IStructuredSelection) fUrlViewer.getSelection(); if (ssel.isEmpty()) return; IFeatureModel model = (IFeatureModel) getPage().getModel(); if (!model.isEditable()) { return; } IFeature feature = model.getFeature(); IFeatureURL url = feature.getURL(); if (url == null) { return; } for (Iterator iter = ssel.iterator(); iter.hasNext();) { IFeatureURLElement urlElement = (IFeatureURLElement) iter.next(); // IFeature feature = urlElement.getFeature(); try { url.removeDiscovery(urlElement); } catch (CoreException e) { MDEPlugin.logException(e); } } } public boolean doGlobalAction(String actionId) { if (actionId.equals(ActionFactory.DELETE.getId())) { BusyIndicator.showWhile(fUrlViewer.getTable().getDisplay(), new Runnable() { public void run() { handleDelete(); } }); return true; } if (actionId.equals(ActionFactory.CUT.getId())) { // delete here and let the editor transfer // the selection to the clipboard handleDelete(); return false; } if (actionId.equals(ActionFactory.PASTE.getId())) { doPaste(); return true; } if (actionId.equals(ActionFactory.SELECT_ALL.getId())) { BusyIndicator.showWhile(fUrlViewer.getTable().getDisplay(), new Runnable() { public void run() { handleSelectAll(); } }); return true; } return false; } protected void selectionChanged(IStructuredSelection selection) { getPage().getMDEEditor().setSelection(selection); } public void initialize() { IFeatureModel model = (IFeatureModel) getPage().getModel(); refresh(); getTablePart().setButtonEnabled(0, model.isEditable()); model.addModelChangedListener(this); } public void modelChanged(IModelChangedEvent e) { if (e.getChangeType() == IModelChangedEvent.WORLD_CHANGED) { markStale(); return; } Object obj = e.getChangedObjects()[0]; if (obj instanceof IFeatureURL) { markStale(); return; } if (obj instanceof IFeatureURLElement) { markStale(); return; // IFeatureURLElement element = (IFeatureURLElement) obj; // if (element.getElementType() == IFeatureURLElement.DISCOVERY) { // if (e.getChangeType() == IModelChangedEvent.INSERT) { // fUrlViewer.add(element); // fUrlViewer // .setSelection(new StructuredSelection(element), // true); // } else if (e.getChangeType() == IModelChangedEvent.REMOVE) { // fUrlViewer.remove(obj); // } else { // fUrlViewer.update(obj, null); // } // } } } private void makeActions() { IModel model = (IModel) getPage().getModel(); fNewAction = new Action() { public void run() { handleNew(); } }; fNewAction.setText(MDEUIMessages.Menus_new_label); fNewAction.setEnabled(model.isEditable()); fDeleteAction = new Action() { public void run() { BusyIndicator.showWhile(fUrlViewer.getTable().getDisplay(), new Runnable() { public void run() { handleDelete(); } }); } }; fDeleteAction.setText(MDEUIMessages.Actions_delete_label); fDeleteAction.setEnabled(model.isEditable()); } public void setFocus() { if (fUrlViewer != null) fUrlViewer.getTable().setFocus(); } public void refresh() { IFeatureModel model = (IFeatureModel) getPage().getModel(); IFeature feature = model.getFeature(); fUrlViewer.setInput(feature); super.refresh(); } public boolean canPaste(Clipboard clipboard) { ModelDataTransfer modelTransfer = ModelDataTransfer.getInstance(); Object[] objects = (Object[]) clipboard.getContents(modelTransfer); if (objects != null && objects.length > 0) { return canPaste(null, objects); } return false; } /** * @see org.eclipse.pde.internal.ui.editor.StructuredViewerSection#canPaste(Object, * Object[]) */ protected boolean canPaste(Object target, Object[] objects) { for (int i = 0; i < objects.length; i++) { if (!(objects[i] instanceof FeatureURLElement)) return false; } return true; } protected void doPaste() { Clipboard clipboard = getPage().getMDEEditor().getClipboard(); ModelDataTransfer modelTransfer = ModelDataTransfer.getInstance(); Object[] objects = (Object[]) clipboard.getContents(modelTransfer); if (objects != null) { doPaste(null, objects); } } /** * @see org.eclipse.pde.internal.ui.editor.StructuredViewerSection#doPaste(Object, * Object[]) */ protected void doPaste(Object target, Object[] objects) { IFeatureModel model = (IFeatureModel) getPage().getModel(); if (!model.isEditable()) { return; } IFeature feature = model.getFeature(); for (int i = 0; i < objects.length; i++) { if (objects[i] instanceof FeatureURLElement) { FeatureURLElement element = (FeatureURLElement) objects[i]; element.setModel(model); element.setParent(feature); try { feature.getURL().addDiscovery(element); } catch (CoreException e) { MDECore.logException(e); } } } } void fireSelection() { fUrlViewer.setSelection(fUrlViewer.getSelection()); } }