blob: bff52ae9c148528679d429e1e123b73e1a646190 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011 SAP AG, Walldorf.
* 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:
* SAP AG - initial API and implementation
*******************************************************************************/
package org.eclipse.platform.discovery.ui.internal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import org.eclipse.jface.resource.ImageRegistry;
import org.eclipse.platform.discovery.runtime.api.GroupingHierarchy;
import org.eclipse.platform.discovery.runtime.api.ISearchDestination;
import org.eclipse.platform.discovery.runtime.api.ISearchSubdestination;
import org.eclipse.platform.discovery.runtime.internal.model.descriptions.ISearchProviderDescription;
import org.eclipse.platform.discovery.ui.api.ISearchParametersUI;
import org.eclipse.platform.discovery.ui.internal.plugin.DiscoveryUIMessages;
import org.eclipse.platform.discovery.ui.internal.plugin.DiscoveryUIPlugin;
import org.eclipse.platform.discovery.ui.internal.selector.InteractiveComboSelector;
import org.eclipse.platform.discovery.ui.internal.view.SearchConsoleView;
import org.eclipse.platform.discovery.ui.internal.view.impl.SubdestinationsSelectedListener;
import org.eclipse.platform.discovery.ui.internal.view.impl.TextControl;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.forms.widgets.FormToolkit;
public class SearchParametersUI implements ISearchParametersUI {
private final static String DROP_DOWN_ICON_LOCATION = "icon-dropdown-keyword-ALT.gif"; //$NON-NLS-1$
private static final int UI_IN_CONTROL_SPACING = 5;
private Label openSubdestinationsButton;
private TextControl keywordTextControl;
private IConsoleContext consoleContext;
private InteractiveComboSelector<GroupingHierarchy> groupingHierarchySelector;
@Override
public void createUI(Composite parent, FormToolkit formToolkit, final IConsoleContext consoleContext) {
parent.setLayout(new FormLayout());
this.consoleContext = consoleContext;
final Label searchLabel = new Label(parent, SWT.NONE);
searchLabel.setText(DiscoveryUIMessages.SEARCH_KEYWORD_LABEL);
final FormData labelFormData = new FormData();
labelFormData.top = new FormAttachment(0, UI_IN_CONTROL_SPACING);
labelFormData.left = new FormAttachment(0, UI_IN_CONTROL_SPACING);
searchLabel.setLayoutData(labelFormData);
openSubdestinationsButton = createSubdestinationsSelector(parent);
keywordTextControl = createKeywordTextControl(parent, formToolkit, searchLabel, consoleContext.secondColumnLeftOffset(), openSubdestinationsButton);
createGroupByComposite(parent, formToolkit, consoleContext.secondColumnLeftOffset(), keywordTextControl.getControl());
}
private TextControl createKeywordTextControl(final Composite parent, final FormToolkit formToolkit, final Label leftNeighbour, final int leftOffset, final Control rightNeighbour)
{
final Text keywordText = formToolkit.createText(parent, "", SWT.BORDER | SWT.SEARCH); //$NON-NLS-1$
final FormData keywordTextFormData = new FormData();
// TODO: Think about layouting controls in separate columns
keywordTextFormData.left = new FormAttachment(0, leftOffset + 2*SearchConsoleView.UI_IN_CONTROL_SPACING);
keywordTextFormData.right = new FormAttachment(rightNeighbour, -UI_IN_CONTROL_SPACING);
keywordText.setLayoutData(keywordTextFormData);
final TextControl control = new TextControl(keywordText, leftNeighbour);
control.setEnabled(false);
control.setMessage(DiscoveryUIMessages.SearchConsoleView_NoObjectTypeSelectedHint);
control.getControl().addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
SearchParametersUI.this.consoleContext.notifyComplete(isComplete());
}
});
return control;
}
private Image dropDownButtonImage(final Display display)
{
Image img = imageRegistry().get(DROP_DOWN_ICON_LOCATION);
if (img == null)
{
img = new Image(display, SearchConsoleView.class.getResourceAsStream(DROP_DOWN_ICON_LOCATION));
imageRegistry().put(DROP_DOWN_ICON_LOCATION, img);
}
return img;
}
private ImageRegistry imageRegistry()
{
return DiscoveryUIPlugin.getDefault().getImageRegistry();
}
private boolean isComplete()
{
return (consoleContext.searchProvider() != null) && !keywordTextControl.get().isEmpty();
}
@Override
public Map<Object, Object> getParameters() {
return Collections.emptyMap();
}
@Override
public String getKeyword() {
return this.keywordTextControl.get();
}
@Override
public GroupingHierarchy getGroupingHierarchy() {
return this.groupingHierarchySelector.getSelectedItem();
}
private Label createSubdestinationsSelector(final Composite parent) {
final Label selector = new Label(parent, SWT.NONE);
final FormData subDestButtonFormData = new FormData();
//subDestButtonFormData.left = new FormAttachment(100, -25);
subDestButtonFormData.right = new FormAttachment(100, -UI_IN_CONTROL_SPACING);
selector.setLayoutData(subDestButtonFormData);
selector.setImage(dropDownButtonImage(parent.getDisplay()));
selector.setEnabled(false);
selector.addListener(SWT.MouseDown, new SubdestinationsSelectedListener(selector, consoleContext));
return selector;
}
private void createGroupByComposite(final Composite parent, final FormToolkit formToolkit, final int leftLabelsSize, final Control upperNeighbour)
{
groupingHierarchySelector = new InteractiveComboSelector<GroupingHierarchy>(parent, formToolkit, new ArrayList<GroupingHierarchy>(), DiscoveryUIMessages.GROUP_BY_LABEL, leftLabelsSize , upperNeighbour);
groupingHierarchySelector.setEnabled(false);
}
@Override
public void showGroupingHierarchies(final List<GroupingHierarchy> groupingHierarchies) {
groupingHierarchySelector.setInput(groupingHierarchies);
}
@Override
public void searchProviderSelected(ISearchProviderDescription provider) {
final ISearchDestination destination = consoleContext.searchDestination();
keywordTextControl.setEnabled((provider == null ? false : provider.supportsTextSearch()));
updateKeywordTextMessage(provider, destination);
if (destination == null || provider == null)
{
openSubdestinationsButton.setEnabled(false);
} else
{
final List<ISearchSubdestination> allSubdestintations = consoleContext.searchProviderConfiguration().getAvailableSearchSubdestinations(consoleContext.selectedObjectType(), consoleContext.destinationCategory(), consoleContext.searchProvider());
openSubdestinationsButton.setEnabled(allSubdestintations.size() > 0);
}
consoleContext.notifyComplete(isComplete());
}
private void updateKeywordTextMessage(ISearchProviderDescription provider, final ISearchDestination destination)
{
if(provider==null)
{
if(consoleContext.selectedObjectType()==null)
{
keywordTextControl.setMessage(DiscoveryUIMessages.SearchConsoleView_NoObjectTypeSelectedHint);
return;
}
assert destination==null;
keywordTextControl.setMessage(DiscoveryUIMessages.SearchConsoleView_NoDestinationSelectedHint);
return;
}
if(provider.supportsTextSearch())
{
keywordTextControl.setMessage(DiscoveryUIMessages.SearchConsoleView_EnterKeywordHint);
return;
}
else
{
keywordTextControl.setMessage(DiscoveryUIMessages.SearchConsoleView_UnsupportedTextSearch);
}
}
@Override
public void dispose() {
// TODO Auto-generated method stub
}
}