blob: 885ec5301fbae942f3ab95de39972539e5d97dfb [file] [log] [blame]
package org.eclipse.wst.xsl.jaxp.debug.ui.internal.tabs.processor;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.StatusDialog;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
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.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.Text;
import org.eclipse.wst.xsl.jaxp.launching.IAttribute;
import org.eclipse.wst.xsl.jaxp.launching.IProcessorType;
import org.eclipse.wst.xsl.jaxp.launching.JAXPRuntime;
import org.eclipse.wst.xsl.jaxp.launching.LaunchAttributes;
import org.eclipse.wst.xsl.launching.config.LaunchAttribute;
public class AttributeDialog extends StatusDialog
{
private Table table;
private TableViewer tViewer;
private Text text;
private List<IAttribute> attributes = new ArrayList<IAttribute>();
private List<IAttribute> selectedAttributes = new ArrayList<IAttribute>();
public AttributeDialog(Shell parent, LaunchAttributes launchAttributes)
{
super(parent);
setTitle("Select Processor Attributes");
Set<String> attributeSet = new HashSet<String>();
for (LaunchAttribute att : launchAttributes.getAttributes())
{
attributeSet.add(att.uri);
}
for (IProcessorType type : JAXPRuntime.getProcessorTypes())
{
for (IAttribute attribute : type.getAttributes())
{
if (!attributeSet.contains(attribute.getURI()))
{
attributeSet.add(attribute.getURI());
attributes.add(attribute);
}
}
}
}
@Override
protected Control createDialogArea(Composite parent)
{
Composite comp = new Composite(parent,SWT.NONE);
GridData gd = new GridData(SWT.FILL,SWT.FILL,true,true);
gd.widthHint = 400;
comp.setLayoutData(gd);
comp.setLayout(new GridLayout());
Label label = new Label(comp,SWT.NONE);
label.setText("Select one or more attributes to set on the XSLT processor.");
table = new Table(comp,SWT.BORDER | SWT.FULL_SELECTION | SWT.V_SCROLL | SWT.MULTI);
table.setHeaderVisible(false);
gd = new GridData(SWT.FILL,SWT.FILL,true,true);
gd.verticalIndent = 10;
gd.heightHint = 200;
table.setLayoutData(gd);
tViewer = new TableViewer(table);
tViewer.setContentProvider(new IStructuredContentProvider()
{
public Object[] getElements(Object inputElement)
{
return attributes.toArray(new IAttribute[0]);
}
public void dispose()
{
}
public void inputChanged(Viewer viewer, Object oldInput, Object newInput)
{
}
});
tViewer.setLabelProvider(new LabelProvider(){
@Override
public String getText(Object element)
{
IAttribute attribute = (IAttribute)element;
return attribute.getURI();
}
});
tViewer.setSorter(new ViewerSorter()
{
@Override
public int compare(Viewer viewer, Object e1, Object e2)
{
IAttribute a1 = (IAttribute) e1;
IAttribute a2 = (IAttribute) e2;
return a1.getURI().compareTo(a2.getURI());
}
});
tViewer.addSelectionChangedListener(new ISelectionChangedListener(){
public void selectionChanged(SelectionChangedEvent event)
{
IStructuredSelection sel = (IStructuredSelection)event.getSelection();
selectedAttributes = sel.toList();
if (sel.isEmpty())
text.setText("");
else
{
IAttribute attribute = (IAttribute)sel.getFirstElement();
text.setText(attribute.getDescription());
}
}
});
tViewer.addDoubleClickListener(new IDoubleClickListener(){
public void doubleClick(DoubleClickEvent event)
{
buttonPressed(IDialogConstants.OK_ID);
}
});
tViewer.setInput(attributes);
text = new Text(comp,SWT.BORDER | SWT.WRAP | SWT.READ_ONLY | SWT.V_SCROLL);
text.setEditable(false);
gd = new GridData(SWT.FILL,SWT.FILL,true,false);
gd.heightHint = 80;
text.setLayoutData(gd);
if (attributes.size() > 0)
{
tViewer.setSelection(new StructuredSelection(tViewer.getElementAt(0)), true);
}
return comp;
}
public List<IAttribute> getAttributes()
{
return selectedAttributes;
}
}