Java tutorial
/** * Aptana Studio * Copyright (c) 2005-2012 by Appcelerator, Inc. All Rights Reserved. * Licensed under the terms of the Eclipse Public License (EPL). * Please see the license-epl.html included with this distribution for details. * Any modifications to this file must keep this entire header intact. */ package com.aptana.php.debug.ui.pathmapper; import java.text.MessageFormat; import java.util.Arrays; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.TitleAreaDialog; import org.eclipse.jface.layout.GridLayoutFactory; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.swt.SWT; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IPropertyListener; import org2.eclipse.php.debug.core.debugger.pathmapper.PathMapper; import org2.eclipse.php.debug.core.debugger.pathmapper.PathMapper.Mapping; import org2.eclipse.php.internal.debug.core.pathmapper.PathMapperRegistry; import org2.eclipse.php.internal.debug.ui.wizard.IControlHandler; import org2.eclipse.php.internal.debug.ui.wizard.web.PathMapperCompositeFragment; import com.aptana.webserver.core.IServer; /** * A path mapper dialog that is presented when a path mapping setup is needeed for a single server. * * @author Shalom G */ public class PathMapperDialog extends TitleAreaDialog implements IControlHandler, IPropertyListener { private IServer server; private Image image; private PathMapperCompositeFragment pathMapperCompositeFragment; /** * @param parent * @param style */ public PathMapperDialog(Shell shell, IServer server) { super(shell); this.server = server; setHelpAvailable(false); } /* * (non-Javadoc) * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell) */ protected void configureShell(Shell newShell) { if (newShell != null) { if (server != null) { newShell.setText( MessageFormat.format(Messages.PathMapperDialog_titleTextForServer, server.getName())); } else { newShell.setText(Messages.PathMapperDialog_titleText); } } super.configureShell(newShell); } /* * (non-Javadoc) * @see org.eclipse.jface.dialogs.TitleAreaDialog#createDialogArea(org.eclipse.swt.widgets.Composite) */ protected Control createDialogArea(Composite parent) { Composite composite = new Composite(parent, SWT.NONE); composite.setLayout(GridLayoutFactory.fillDefaults().margins(0, 0).spacing(0, 0).create()); composite.setLayoutData(new GridData(GridData.FILL_BOTH)); composite.setFont(parent.getFont()); // Build the separator line Label titleBarSeparator = new Label(composite, SWT.HORIZONTAL | SWT.SEPARATOR); titleBarSeparator.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); pathMapperCompositeFragment = new PathMapperCompositeFragment(composite, this, true); pathMapperCompositeFragment.setData(server); pathMapperCompositeFragment.addPropertyChangeListener(this); pathMapperCompositeFragment.setLayoutData(new GridData(GridData.FILL_BOTH)); parent.addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent e) { if (image != null && !image.isDisposed()) { image.dispose(); } } }); return composite; } /* * (non-Javadoc) * @see org.eclipse.jface.dialogs.Dialog#okPressed() */ protected void okPressed() { if (pathMapperCompositeFragment != null) { pathMapperCompositeFragment.performOk(); } super.okPressed(); } /* * (non-Javadoc) * @see org.eclipse.jface.dialogs.TitleAreaDialog#createContents(org.eclipse.swt.widgets.Composite) */ protected Control createContents(Composite parent) { Control c = super.createContents(parent); Button button = getButton(IDialogConstants.OK_ID); if (button != null) { button.setEnabled(false); } return c; } /* * (non-Javadoc) * @see org.eclipse.jface.dialogs.Dialog#isResizable() */ protected boolean isResizable() { return true; } /* * (non-Javadoc) * @see org2.eclipse.php.internal.ui.wizards.IControlHandler#setDescription(java.lang.String) */ public void setDescription(String desc) { super.setTitle(desc); } /* * (non-Javadoc) * @see * org2.eclipse.php.internal.ui.wizards.IControlHandler#setImageDescriptor(org.eclipse.jface.resource.ImageDescriptor * ) */ public void setImageDescriptor(ImageDescriptor image) { if (image != null) { this.image = image.createImage(); super.setTitleImage(this.image); } } /* * (non-Javadoc) * @see org2.eclipse.php.internal.ui.wizards.IControlHandler#update() */ public void update() { } /* * (non-Javadoc) * @see org.eclipse.ui.IPropertyListener#propertyChanged(java.lang.Object, int) */ public void propertyChanged(Object source, int propId) { // Make sure that we enable the ok button only when something is really changed in the path mapping. // We sort and compare the old mappings and the new ones before we enable the button. PathMapper currentServerMapping = PathMapperRegistry.getByServer(server); Button button = getButton(IDialogConstants.OK_ID); if (button != null) { if (currentServerMapping != null) { Mapping[] currentMappings = currentServerMapping.getMapping(); Mapping[] newMappings = pathMapperCompositeFragment.getMappings(); Arrays.sort(currentMappings); Arrays.sort(newMappings); if (!Arrays.equals(currentMappings, newMappings)) { button.setEnabled(true); return; } } button.setEnabled(false); } } }