/******************************************************************************* * Copyright (c) 2007,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 org.eclipse.wst.server.ui.internal.viewers; import org.eclipse.debug.core.ILaunchManager; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.viewers.*; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.*; import org.eclipse.wst.server.core.IModuleArtifact; import org.eclipse.wst.server.core.model.ModuleArtifactDelegate; import org.eclipse.wst.server.ui.internal.Messages; public class ModuleArtifactComposite extends Dialog { protected IModuleArtifact[] moduleArtifacts; private ListViewer listViewer; private String launchMode; private IModuleArtifact selection; /** * Creates a Selection dialog with the list of available IModuleArtifact for the selected resource * @param parent * @param moduleArtifacts * @param launchMode */ public ModuleArtifactComposite(Shell parent,final IModuleArtifact[] moduleArtifacts, String launchMode){ super(parent); setShellStyle(SWT.RESIZE | getShellStyle()); this.moduleArtifacts = moduleArtifacts; this.launchMode = launchMode; } /* (non-Javadoc) * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell) */ protected void configureShell(Shell shell) { super.configureShell(shell); shell.setText(getWindowTitle()); } /** * Based on the launch mode, return the NLS String for the Dialog. * * @return the window title */ private String getWindowTitle() { String title = Messages.wizRunOnServerTitle; if (ILaunchManager.DEBUG_MODE.equals(launchMode)) title = Messages.wizDebugOnServerTitle; else if (ILaunchManager.PROFILE_MODE.equals(launchMode)) title = Messages.wizProfileOnServerTitle; return title; } /* (non-Javadoc) * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite) */ protected Control createDialogArea(Composite parent) { Composite composite = new Composite(parent,SWT.NONE); GridLayout layout = new GridLayout(); layout.marginWidth = 10; layout.marginHeight = 10; layout.verticalSpacing = 10; layout.numColumns = 1; GridData data = new GridData(GridData.FILL_BOTH); composite.setLayout(layout); composite.setLayoutData(data); composite.setFont(parent.getFont()); Text description = new Text(composite,SWT.NONE); description.setText(Messages.wizModuleArtifactsDescription); description.setEditable(false); description.setCursor(composite.getDisplay().getSystemCursor(SWT.CURSOR_ARROW)); createContent(composite); return composite; } private void createContent(Composite parent) { Composite contentComposite = new Composite(parent,SWT.NONE |SWT.RESIZE); GridLayout layout = new GridLayout(); layout.marginWidth = 10; layout.verticalSpacing = 5; layout.numColumns = 1; GridData data = new GridData(GridData.FILL_BOTH); contentComposite.setLayout(layout); contentComposite.setLayoutData(data); contentComposite.setFont(parent.getFont()); Label tableTitle = new Label(contentComposite,SWT.None); tableTitle.setText(Messages.wizModuleArtifactsAvailableList); listViewer = new ListViewer(contentComposite,SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER); data = new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL); listViewer.getList().setLayoutData(data); listViewer.getList().setFocus(); listViewer.setContentProvider(new BaseContentProvider() { public Object[] getElements(Object inputElement) { return moduleArtifacts; } }); listViewer.setLabelProvider(new BaseLabelProvider() { public String getText(Object element) { if (element instanceof ModuleArtifactDelegate) { // Try to display the object using its name ModuleArtifactDelegate moduleArtifact = (ModuleArtifactDelegate)element; String artifactName = moduleArtifact.getName(); if (artifactName != null && artifactName.length() >= 0) { int classNameIndex = artifactName.lastIndexOf("."); String packageName = artifactName.substring(0, classNameIndex); String className = artifactName.substring(classNameIndex+1); if (packageName != null && (packageName.length()<=0) == false){ return className + " ("+moduleArtifact.getName()+")"; } return moduleArtifact.getName(); } // If the name is empty we can then use the module artifact class name return moduleArtifact.getClass().getName(); } return Messages.elementUnknownName; } }); listViewer.addDoubleClickListener(new IDoubleClickListener() { public void doubleClick(DoubleClickEvent event) { buttonPressed(IDialogConstants.OK_ID); } }); listViewer.setInput(AbstractTreeContentProvider.ROOT); } /** * Return the selection of the dialog * * @return the selected module artifact */ public IModuleArtifact getSelection() { IStructuredSelection selection2 = (IStructuredSelection) listViewer.getSelection(); if (selection2 == null || selection2.getFirstElement() == null) return selection; selection = (IModuleArtifact)selection2.getFirstElement(); return selection; } /* (non-Javadoc) * @see org.eclipse.jface.dialogs.Dialog#buttonPressed(int) */ protected void buttonPressed(int buttonId) { if (buttonId == IDialogConstants.OK_ID) { if (getSelection() == null){ MessageBox messageBox = new MessageBox(getShell(),SWT.ICON_ERROR | SWT.OK); messageBox.setMessage(Messages.wizModuleArtifactsNoSelectionError); messageBox.setText(getWindowTitle()); messageBox.open(); // bypass the call to super, so that this Dialog doesn't get disposed return; } } super.buttonPressed(buttonId); } }