blob: 06b1f09e20e24a9bda839de32f01871b56c8b4b6 [file] [log] [blame]
/*
*
* Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Florian Pirchner - Initial implementation
* Loetz GmbH&Co.KG
*
*/
package org.eclipse.osbp.vaadin.emf.data.fields;
import java.util.Collection;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.osbp.runtime.web.vaadin.common.resource.IResourceProvider;
import org.eclipse.osbp.vaadin.emf.api.IModelingContext;
import org.eclipse.osbp.vaadin.emf.data.JvmSubTypesContainer;
import org.eclipse.osbp.vaadin.emf.data.JvmSubTypesContainer.SubTypesCallback;
import org.eclipse.xtext.common.types.JvmDeclaredType;
import com.vaadin.data.util.ObjectProperty;
import com.vaadin.ui.ComboBox;
import com.vaadin.ui.Component;
import com.vaadin.ui.CustomField;
/**
* A combobox to select referenced JvmDeclaredType.
*/
@SuppressWarnings("serial")
public class JvmSubTypesComboBox extends CustomField<JvmDeclaredType> {
/** The combobox. */
private ComboBox combobox;
/** The property. */
private ObjectProperty<JvmDeclaredType> property;
JvmSubTypesContainer container;
/**
* Instantiates a new e object combo box.
*
* @param adapterFactory
* the adapter factory
*/
public JvmSubTypesComboBox(IModelingContext modelingContext,
IResourceProvider resourceProvider, SubTypesCallback callback) {
container = new JvmSubTypesContainer(modelingContext, resourceProvider,
callback);
// eager init
initContent();
}
/*
* (non-Javadoc)
*
* @see com.vaadin.ui.CustomField#initContent()
*/
@Override
protected Component initContent() {
if (combobox != null) {
return combobox;
}
combobox = new ComboBox();
combobox.setWidth("100%");
combobox.setContainerDataSource(container);
combobox.setItemCaptionPropertyId(JvmSubTypesContainer.LABEL);
combobox.setItemIconPropertyId(JvmSubTypesContainer.ICON);
property = new ObjectProperty<JvmDeclaredType>(null,
JvmDeclaredType.class);
combobox.setPropertyDataSource(property);
property.addValueChangeListener(e -> {
super.setValue((JvmDeclaredType) e.getProperty().getValue());
});
return combobox;
}
/**
* Returns the root type.
*
* @return
*/
public EObject getRootType() {
return container.getRootElement();
}
/**
* Sets the root type.
*
* @param rootElement
*/
public void setRootType(JvmDeclaredType rootElement) {
container.setRootElement(rootElement);
}
/*
* (non-Javadoc)
*
* @see com.vaadin.ui.AbstractField#getType()
*/
@Override
public Class<JvmDeclaredType> getType() {
return JvmDeclaredType.class;
}
/*
* (non-Javadoc)
*
* @see com.vaadin.ui.AbstractField#setInternalValue(java.lang.Object)
*/
@Override
protected void setInternalValue(JvmDeclaredType newValue) {
super.setInternalValue(newValue);
if (property != null) {
property.setValue(newValue);
}
}
/**
* Gets the collection.
*
* @return the collection
*/
@SuppressWarnings("unchecked")
public Collection<JvmDeclaredType> getCollection() {
return (Collection<JvmDeclaredType>) combobox.getItemIds();
}
}