/******************************************************************************* * Copyright (c) 2013 AGETO Service GmbH 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: * Gunnar Wagenknecht - initial API and implementation *******************************************************************************/ package org.eclipse.gyrex.admin.ui.jobs.internal; import java.util.Comparator; import java.util.Map.Entry; import org.eclipse.gyrex.admin.ui.internal.widgets.FilteredItemsSelectionDialog; import org.eclipse.gyrex.jobs.internal.JobsActivator; import org.eclipse.gyrex.jobs.internal.registry.JobProviderRegistry; import org.eclipse.gyrex.jobs.provider.JobProvider; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.jface.dialogs.DialogSettings; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.rap.rwt.widgets.DialogCallback; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Shell; import org.osgi.framework.ServiceReference; /** * */ public class JobTypeSelectionDialog extends FilteredItemsSelectionDialog { /** serialVersionUID */ private static final long serialVersionUID = 1L; public JobTypeSelectionDialog(final Shell shell) { super(shell); setListLabelProvider(new LabelProvider() { private static final long serialVersionUID = 1L; @Override public String getText(final Object element) { if (element instanceof JobType) return ((JobType) element).getName(); return super.getText(element); } }); setInitialPattern("*"); } @Override protected Control createExtendedContentArea(final Composite parent) { return null; } @Override protected ItemsFilter createFilter() { return new ItemsFilter() { @Override public boolean isConsistentItem(final Object item) { return true; } @Override public boolean matchItem(final Object item) { if (item instanceof JobType) { final JobType type = (JobType) item; return patternMatcher.matches(type.getName()) || patternMatcher.matches(type.getId()); } return false; } }; } @Override protected void fillContentProvider(final AbstractContentProvider contentProvider, final ItemsFilter itemsFilter, final IProgressMonitor progressMonitor) throws CoreException { final JobProviderRegistry registry = JobsActivator.getInstance().getJobProviderRegistry(); for (final Entry<ServiceReference<JobProvider>, JobProvider> e : registry.getTracked().entrySet()) { final JobProvider provider = e.getValue(); for (final String typeId : provider.getProvidedTypeIds()) { contentProvider.add(new JobType(typeId, registry.getName(typeId), provider), itemsFilter); } } } @Override protected IDialogSettings getDialogSettings() { return new DialogSettings(JobTypeSelectionDialog.class.getName()); } @Override public String getElementName(final Object item) { if (item instanceof JobType) return ((JobType) item).getName(); return null; } @Override protected Comparator<Object> getItemsComparator() { return new Comparator<Object>() { @Override public int compare(final Object o1, final Object o2) { String id1 = null; String id2 = null; if (o1 instanceof JobType) { id1 = ((JobType) o1).getName(); } else return 0; if (o2 instanceof JobType) { id2 = ((JobType) o2).getName(); } else return 0; return id1.compareTo(id2); } }; } @Override public void openNonBlocking(final DialogCallback callback) { super.openNonBlocking(callback); refresh(); } @Override protected IStatus validateItem(final Object item) { return Status.OK_STATUS; } }