blob: 467db0cc0b8e47201f6eee6b6b7db1050692f843 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007 Innoopract Informationssysteme GmbH.
* 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:
* Innoopract Informationssysteme GmbH - initial API and implementation
******************************************************************************/
package org.eclipse.rap.ui.internal.launch.tab;
import java.util.Comparator;
import org.eclipse.core.runtime.*;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.rap.ui.internal.launch.Activator;
import org.eclipse.rap.ui.internal.launch.util.Images;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.*;
import org.eclipse.ui.IMemento;
import org.eclipse.ui.dialogs.*;
final class ServletNameSelectionDialog extends FilteredItemsSelectionDialog {
private static final String SETTINGS_ID
= Activator.PLUGIN_ID + ".SERVLET_NAME_SELECTION_DIALOG"; //$NON-NLS-1$
private static final Comparator COMPARATOR = new BrandingComparator();
private BrandingExtension[] brandings;
ServletNameSelectionDialog( final Shell shell ) {
super( shell );
setTitle( "Select Servlet Name" );
String msg
= "&Select a servlet name to open (? = any character, * = any string, "
+ "SN = ServletName)";
setMessage( msg );
setSelectionHistory( new ServletNameSelectionHistory() );
setListLabelProvider( new BrandingLabelProvider() );
setDetailsLabelProvider( new BrandingLabelProvider() );
}
//////////////////////////////////////////////////////////
// FilteredItemsSelectionDialog overrides - UI adjustments
protected Control createExtendedContentArea( final Composite parent ) {
return null;
}
protected IDialogSettings getDialogSettings() {
IDialogSettings settings = Activator.getDefault().getDialogSettings();
IDialogSettings section = settings.getSection( SETTINGS_ID );
if( section == null ) {
section = settings.addNewSection( SETTINGS_ID );
}
return section;
}
///////////////////////////////////////////////////////////
// FilteredItemsSelectionDialog overrides - item management
protected void fillContentProvider( final AbstractContentProvider provider,
final ItemsFilter itemsFilter,
final IProgressMonitor monitor )
throws CoreException
{
if( brandings == null ) {
if( monitor != null ) {
String msg = "Searching for servlet names in workspace";
monitor.beginTask( msg, IProgressMonitor.UNKNOWN );
}
brandings = BrandingExtension.findInWorkspace( monitor );
}
for( int i = 0; i < brandings.length; i++ ) {
provider.add( brandings[ i ], itemsFilter );
}
if( monitor != null ) {
monitor.done();
}
}
protected ItemsFilter createFilter() {
return new BrandingItemsFilter( SelectionDialogUtil.createSearchPattern() );
}
public String getElementName( final Object element ) {
BrandingExtension branding = ( BrandingExtension )element;
String project = branding.getProject();
String servletName = branding.getServletName();
return SelectionDialogUtil.getLabel( project, servletName );
}
protected Comparator getItemsComparator() {
return COMPARATOR;
}
protected IStatus validateItem( final Object item ) {
return Status.OK_STATUS;
}
////////////////
// Inner classes
private static final class BrandingComparator implements Comparator {
public int compare( final Object object1, final Object object2 ) {
BrandingExtension extension1 = ( BrandingExtension )object1;
BrandingExtension extension2 = ( BrandingExtension )object2;
String string1 = extension1.getProject() + extension1.getServletName();
String string2 = extension2.getProject() + extension2.getServletName();
return string1.compareTo( string2 );
}
}
private final class BrandingItemsFilter extends ItemsFilter {
public BrandingItemsFilter( final SearchPattern searchPattern ) {
super( searchPattern );
}
public boolean isConsistentItem( final Object item ) {
return true;
}
public boolean matchItem( final Object item ) {
return matches( ( ( BrandingExtension )item ).getServletName() );
}
}
private static final class BrandingLabelProvider
extends LabelProvider
{
private final Image image = Images.EXTENSION.createImage();
public String getText( final Object element ) {
String result = null;
if( element != null ) {
BrandingExtension branding = ( BrandingExtension )element;
String project = branding.getProject();
String servletName = branding.getServletName();
result = SelectionDialogUtil.getLabel( project, servletName );
}
return result;
}
public Image getImage( final Object element ) {
return image;
}
public void dispose() {
image.dispose();
super.dispose();
}
}
private static final class ServletNameSelectionHistory
extends SelectionHistory
{
private static final String SEPARATOR = "#"; //$NON-NLS-1$
protected Object restoreItemFromMemento( final IMemento memento ) {
Object result = null;
String textData = memento.getTextData();
if( textData != null ) {
String[] parts = textData.split( SEPARATOR );
if( parts.length == 3 ) {
String project = parts[ 0 ];
String servletName = parts[ 1 ];
String defaultEntryPointId = parts[ 2 ];
if( "null".equals( defaultEntryPointId ) ) { //$NON-NLS-1$
defaultEntryPointId = null;
}
result = new BrandingExtension( project,
servletName,
defaultEntryPointId );
}
}
return result;
}
protected void storeItemToMemento( final Object item,
final IMemento memento )
{
BrandingExtension branding = ( BrandingExtension )item;
String text
= branding.getProject()
+ SEPARATOR
+ branding.getServletName()
+ SEPARATOR
+ branding.getDefaultEntryPointId();
memento.putTextData( text );
}
}
}