/** * */ package org.nightlabs.jfire.reporting.ui.parameter.guifactory.jfireobjects; import java.util.ArrayList; import java.util.Collection; import javax.jdo.JDOHelper; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.nightlabs.base.ui.composite.XComposite; import org.nightlabs.base.ui.composite.XComposite.LayoutMode; import org.nightlabs.jfire.base.ui.workstation.WorkstationSearchComposite; import org.nightlabs.jfire.reporting.ReportingConstants; import org.nightlabs.jfire.reporting.parameter.config.ValueProviderConfig; import org.nightlabs.jfire.reporting.parameter.id.ValueProviderID; import org.nightlabs.jfire.reporting.ui.parameter.AbstractValueProviderGUI; import org.nightlabs.jfire.reporting.ui.parameter.IValueProviderGUI; import org.nightlabs.jfire.reporting.ui.parameter.IValueProviderGUIFactory; import org.nightlabs.jfire.reporting.ui.resource.Messages; import org.nightlabs.jfire.workstation.Workstation; import org.nightlabs.jfire.workstation.id.WorkstationID; /** * @author Alexander Bieber <!-- alex [AT] nightlabs [DOT] de --> * */ public class ValueProviderGUIWorkstations extends AbstractValueProviderGUI<Collection<WorkstationID>> { public static class Factory implements IValueProviderGUIFactory { public IValueProviderGUI<Collection<WorkstationID>> createValueProviderGUI(ValueProviderConfig valueProviderConfig, boolean isScheduledReportParameterConfig) { return new ValueProviderGUIWorkstations(valueProviderConfig); } public ValueProviderID getValueProviderID() { return ReportingConstants.VALUE_PROVIDER_ID_WORKSTATIONS; } public void setInitializationData(IConfigurationElement config, String propertyName, Object data) throws CoreException { } } private WorkstationSearchComposite searchComposite; private SelectedWorkstationsTable selectedWorkstationsTable; /** * */ public ValueProviderGUIWorkstations(ValueProviderConfig valueProviderConfig) { super(valueProviderConfig); } /* (non-Javadoc) * @see org.nightlabs.jfire.reporting.ui.parameter.IValueProviderGUI#createGUI(org.eclipse.swt.widgets.Composite) */ public Control createGUI(Composite wrapper) { Group group = new Group(wrapper, SWT.NONE); GridLayout gl = new GridLayout(); XComposite.configureLayout(LayoutMode.ORDINARY_WRAPPER, gl); group.setLayout(gl); group.setLayoutData(new GridData(GridData.FILL_BOTH)); group.setText(getValueProviderConfig().getMessage().getText()); gl.numColumns = 3; gl.makeColumnsEqualWidth = false; searchComposite = new WorkstationSearchComposite(group, SWT.NONE, WorkstationSearchComposite.FLAG_MULTI_SELECTION | WorkstationSearchComposite.FLAG_SEARCH_BUTTON); searchComposite.addSelectionChangedListener(new ISelectionChangedListener() { @Override public void selectionChanged(SelectionChangedEvent event) { notifyOutputChanged(); } }); XComposite buttonComp = new XComposite(group, SWT.NONE); buttonComp.getGridData().grabExcessHorizontalSpace = false; Button add = new Button(buttonComp, SWT.PUSH); add.setText(">>"); //$NON-NLS-1$ add.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { Collection<Workstation> workstations = searchComposite.getSelectedElements(); for (Workstation workstation : workstations) { selectedWorkstationsTable.addWorkstation(workstation); notifyOutputChanged(); } } }); Button remove = new Button(buttonComp, SWT.PUSH); remove.setText("<<"); //$NON-NLS-1$ remove.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { selectedWorkstationsTable.removeSelectedWorkstations(); notifyOutputChanged(); } }); XComposite selectionWrapper = new XComposite(group, SWT.NONE, LayoutMode.TIGHT_WRAPPER); Label label = new Label(selectionWrapper, SWT.WRAP); label.setText(Messages.getString("org.nightlabs.jfire.reporting.ui.parameter.guifactory.jfireobjects.ValueProviderGUIWorkstations.label.selectedWorkstations")); //$NON-NLS-1$ label.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); selectedWorkstationsTable = new SelectedWorkstationsTable(selectionWrapper, SWT.NONE); return group; } /* (non-Javadoc) * @see org.nightlabs.jfire.reporting.ui.parameter.IValueProviderGUI#getOutputValue() */ public Collection<WorkstationID> getOutputValue() { Collection<Workstation> workstations; Collection<Workstation> selectedWorkstations = selectedWorkstationsTable.getSelectedElements(); if (selectedWorkstations.size() == 0) { workstations = searchComposite.getSelectedElements(); } else { workstations = selectedWorkstations; } Collection<WorkstationID> result = new ArrayList<WorkstationID>(workstations.size()); for (Workstation workstation : workstations) { result.add((WorkstationID) JDOHelper.getObjectId(workstation)); } return result; } /* (non-Javadoc) * @see org.nightlabs.jfire.reporting.ui.parameter.IValueProviderGUI#isAcquisitionComplete() */ public boolean isAcquisitionComplete() { if (selectedWorkstationsTable.getSelectedElements().size() == 0) return searchComposite.getSelectedElements().size() > 0; return true; } /* (non-Javadoc) * @see org.nightlabs.jfire.reporting.ui.parameter.IValueProviderGUI#setInputParameterValue(java.lang.String, java.lang.Object) */ public void setInputParameterValue(String parameterID, Object value) { } }