/* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.activiti.explorer.ui.process.simple.editor.table;
import java.util.Arrays;
import org.activiti.explorer.ExplorerApp;
import org.activiti.explorer.I18nManager;
import org.activiti.explorer.Messages;
import org.activiti.explorer.ui.process.simple.editor.listener.AddPropertyClickListener;
import org.activiti.explorer.ui.process.simple.editor.listener.DeletePropertyClickListener;
import com.vaadin.data.Item;
import com.vaadin.ui.Button;
import com.vaadin.ui.CheckBox;
import com.vaadin.ui.ComboBox;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Table;
/**
* @author Joram Barrez
*/
public class PropertyTable extends Table {
private static final long serialVersionUID = 6521446909987945815L;
public static final String ID_PROPERTY_NAME = "property";
public static final String ID_PROPERTY_TYPE = "type";
public static final String ID_PROPERTY_REQUIRED = "required";
public static final String ID_PROPERTY_ACTIONS = "actions";
private static final String DEFAULT_PROPERTY_NAME = "My property";
protected I18nManager i18nManager;
public PropertyTable() {
this.i18nManager = ExplorerApp.get().getI18nManager();
setEditable(true);
setColumnReorderingAllowed(true);
setPageLength(size());
addContainerProperty(ID_PROPERTY_NAME, String.class, null);
addContainerProperty(ID_PROPERTY_TYPE, ComboBox.class, null);
addContainerProperty(ID_PROPERTY_REQUIRED, CheckBox.class, null);
addContainerProperty(ID_PROPERTY_ACTIONS, HorizontalLayout.class, null);
setColumnHeader(ID_PROPERTY_NAME, i18nManager.getMessage(Messages.PROCESS_EDITOR_PROPERTY_NAME));
setColumnHeader(ID_PROPERTY_TYPE, i18nManager.getMessage(Messages.PROCESS_EDITOR_PROPERTY_TYPE));
setColumnHeader(ID_PROPERTY_REQUIRED, i18nManager.getMessage(Messages.PROCESS_EDITOR_PROPERTY_REQUIRED));
setColumnHeader(ID_PROPERTY_ACTIONS, i18nManager.getMessage(Messages.PROCESS_EDITOR_ACTIONS));
}
public void addPropertyRow() {
addPropertyRow(null, null, null, null);
}
public void addPropertyRow(String propertyName, String propertyType, Boolean required) {
addPropertyRow(null, propertyName, propertyType, required);
}
public void addPropertyRowAfter(Object itemId) {
addPropertyRow(itemId, null, null, null);
}
protected void addPropertyRow(Object itemId, String propertyName, String propertyType, Boolean required) {
Object newItemId = null;
if (itemId == null) { // add at the end of list
newItemId = addItem();
} else {
newItemId = addItemAfter(itemId);
}
Item newItem = getItem(newItemId);
// name
newItem.getItemProperty(ID_PROPERTY_NAME).setValue(propertyName == null ? DEFAULT_PROPERTY_NAME : propertyName);
// type
ComboBox typeComboBox = new ComboBox("", Arrays.asList("text", "number", "date"));
typeComboBox.setNullSelectionAllowed(false);
if (propertyType == null) {
typeComboBox.setValue(typeComboBox.getItemIds().iterator().next());
} else {
typeComboBox.setValue(propertyType);
}
newItem.getItemProperty(ID_PROPERTY_TYPE).setValue(typeComboBox);
// required
CheckBox requiredCheckBox = new CheckBox();
requiredCheckBox.setValue(required == null ? false : required);
newItem.getItemProperty(ID_PROPERTY_REQUIRED).setValue(requiredCheckBox);
// actions
HorizontalLayout actionButtons = new HorizontalLayout();
Button deleteRowButton = new Button("-");
deleteRowButton.setData(newItemId);
deleteRowButton.addListener(new DeletePropertyClickListener(this));
actionButtons.addComponent(deleteRowButton);
Button addRowButton = new Button("+");
addRowButton.setData(newItemId);
addRowButton.addListener(new AddPropertyClickListener(this));
actionButtons.addComponent(addRowButton);
newItem.getItemProperty(ID_PROPERTY_ACTIONS).setValue(actionButtons);
}
}