/*
* Copyright (c) 2015 Data Harmonisation Panel
*
* All rights reserved. This program and the accompanying materials are made
* available under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, either version 3 of the License,
* or (at your option) any later version.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this distribution. If not, see <http://www.gnu.org/licenses/>.
*
* Contributors:
* Data Harmonisation Panel <http://www.dhpanel.eu>
*/
package eu.esdihumboldt.hale.ui.functions.custom.pages.internal;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Group;
import eu.esdihumboldt.hale.common.schema.SchemaSpaceID;
import eu.esdihumboldt.hale.ui.common.editors.AbstractEditor;
import eu.esdihumboldt.hale.ui.util.viewer.EnumContentProvider;
/**
* TODO Type description
*
* @author simon
*/
public class BindingOrTypeEditor extends AbstractEditor<BindingOrType> {
private ComboViewer bindingSelect;
private static enum PossibleBindings {
NONE(null, "Schema type"), STRING(String.class, "String"), NUMBER(Number.class,
"Number"), BOOLEAN(boolean.class, "Boolean");
PossibleBindings(Class<?> binding, String name) {
this.binding = binding;
this.name = name;
}
public final Class<?> binding;
public final String name;
}
private PropertyTypeSelector typeSelect;
private Control mainControl;
@SuppressWarnings("javadoc")
public BindingOrTypeEditor(Composite parent, SchemaSpaceID ssid) {
super();
// GridLayoutFactory.fillDefaults().applyTo(page);
Group group = new Group(parent, SWT.NONE);
GridDataFactory.fillDefaults().grab(true, false).applyTo(group);
GridLayoutFactory.swtDefaults().numColumns(1).applyTo(group);
GridDataFactory fieldData = GridDataFactory.swtDefaults().align(SWT.FILL, SWT.CENTER)
.grab(true, false);
// binding
bindingSelect = new ComboViewer(group);
fieldData.applyTo(bindingSelect.getControl());
bindingSelect.setContentProvider(EnumContentProvider.getInstance());
bindingSelect.setLabelProvider(new LabelProvider() {
@Override
public String getText(Object element) {
if (element instanceof PossibleBindings) {
return ((PossibleBindings) element).name;
}
return super.getText(element);
}
});
bindingSelect.setInput(PossibleBindings.class);
bindingSelect.setSelection(new StructuredSelection(PossibleBindings.NONE));
// type (through property selection)
typeSelect = new PropertyTypeSelector(group, "Select a property type", ssid, null);
fieldData.applyTo(typeSelect.getControl());
// main control
mainControl = group;
}
@Override
public void setValue(BindingOrType value) {
if (value.isUseBinding()) {
bindingSelect.setSelection(
new StructuredSelection(possibleBindingForClass(value.getBinding())));
}
else {
bindingSelect.setSelection(new StructuredSelection(PossibleBindings.NONE));
}
if (value.getType() != null) {
typeSelect.setSelection(new StructuredSelection(value.getType()));
}
else {
typeSelect.setSelection(StructuredSelection.EMPTY);
}
}
private PossibleBindings possibleBindingForClass(Class<?> binding) {
if (binding == null) {
return PossibleBindings.NONE;
}
if (Number.class.isAssignableFrom(binding)) {
return PossibleBindings.NUMBER;
}
if (Boolean.class.isAssignableFrom(binding)) {
return PossibleBindings.BOOLEAN;
}
return PossibleBindings.STRING;
}
@Override
public BindingOrType getValue() {
BindingOrType result = new BindingOrType();
result.setType(typeSelect.getSelectedObject());
ISelection bs = bindingSelect.getSelection();
PossibleBindings binding = PossibleBindings.NONE;
if (bs instanceof IStructuredSelection && !bs.isEmpty()) {
binding = (PossibleBindings) ((IStructuredSelection) bs).getFirstElement();
}
result.setBinding(binding.binding);
result.setUseBinding(binding.binding != null);
return result;
}
@Override
public boolean isValid() {
// TODO Auto-generated method stub
return true;
}
@Override
public Control getControl() {
return mainControl;
}
}