/*******************************************************************************
* Copyright (c) 2011 Subgraph.
* 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:
* Subgraph - initial API and implementation
******************************************************************************/
package com.subgraph.vega.ui.http.conditions;
import java.util.List;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import com.subgraph.vega.api.model.conditions.IHttpConditionType;
public class ConditionTypeComboViewer extends ComboViewer {
private MatchActionComboViewer matchActionViewer;
public ConditionTypeComboViewer(Composite parent, List<IHttpConditionType> conditionTypes) {
super(parent, SWT.READ_ONLY);
setContentProvider(new ArrayContentProvider());
setLabelProvider(createLabelProvider());
addSelectionChangedListener(createSelectionChangedListener());
setInput(conditionTypes.toArray());
reset();
}
private ILabelProvider createLabelProvider() {
return new LabelProvider() {
@Override
public String getText(Object element) {
if(element instanceof IHttpConditionType)
return ((IHttpConditionType) element).getName();
else
return null;
}
};
}
private ISelectionChangedListener createSelectionChangedListener() {
return new ISelectionChangedListener() {
@Override
public void selectionChanged(SelectionChangedEvent event) {
setMatchActionInputForSelection(event.getSelection());
}
};
}
public void reset() {
final Object element = getElementAt(0);
if(element != null)
setSelection(new StructuredSelection(element));
}
public void setMatchTypeViewer(MatchActionComboViewer viewer) {
matchActionViewer = viewer;
setMatchActionInputForSelection(getSelection());
}
private void setMatchActionInputForSelection(ISelection selection) {
if(matchActionViewer == null || !(selection instanceof IStructuredSelection))
return;
final IStructuredSelection ss = (IStructuredSelection) selection;
if(!(ss.getFirstElement() instanceof IHttpConditionType))
return;
final IHttpConditionType conditionType = (IHttpConditionType) ss.getFirstElement();
matchActionViewer.setMatchActionInput(conditionType.getMatchActions());
}
public IHttpConditionType getSelectedConditionType() {
final IStructuredSelection selection = (IStructuredSelection) getSelection();
if(selection.isEmpty())
return null;
return (IHttpConditionType) selection.getFirstElement();
}
}