/* 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;
import org.activiti.explorer.ExplorerApp;
import org.activiti.explorer.Messages;
import org.activiti.explorer.ui.process.simple.editor.table.PropertyTable;
import org.activiti.explorer.ui.process.simple.editor.table.TaskFormModel;
import org.activiti.workflow.simple.definition.form.DatePropertyDefinition;
import org.activiti.workflow.simple.definition.form.FormDefinition;
import org.activiti.workflow.simple.definition.form.FormPropertyDefinition;
import org.activiti.workflow.simple.definition.form.NumberPropertyDefinition;
import org.activiti.workflow.simple.definition.form.TextPropertyDefinition;
import com.vaadin.data.Item;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.CheckBox;
import com.vaadin.ui.ComboBox;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.Window;
/**
* @author Joram Barrez
*/
public class FormPopupWindow extends Window {
protected static final long serialVersionUID = -1754225937375971709L;
protected static final String TITLE = "Define form";
protected static final String DESCRIPTION = "Define the form properties that will be shown with the task";
protected Object taskItemId;
protected TaskFormModel formModel;
protected PropertyTable propertyTable;
public FormPopupWindow(Object taskItemId, TaskFormModel formModel) {
this.taskItemId = taskItemId;
this.formModel = formModel;
setModal(true);
setWidth("50%");
center();
setCaption(TITLE);
initUi();
}
protected void initUi() {
VerticalLayout layout = new VerticalLayout();
layout.setSpacing(true);
addComponent(layout);
// Description
layout.addComponent(new Label(DESCRIPTION));
// Property table
propertyTable = new PropertyTable();
layout.addComponent(propertyTable);
fillFormFields();
// Buttons
HorizontalLayout buttons = new HorizontalLayout();
buttons.setSpacing(true);
// Save button
Button saveButton = new Button(ExplorerApp.get().getI18nManager().getMessage(Messages.BUTTON_SAVE));
buttons.addComponent(saveButton);
saveButton.addListener(new Button.ClickListener() {
private static final long serialVersionUID = -2906886872414089331L;
public void buttonClick(ClickEvent event) {
FormDefinition form = createForm();
formModel.addForm(taskItemId, form);
close();
}
});
// Delete button
Button deleteButton = new Button(ExplorerApp.get().getI18nManager().getMessage(Messages.BUTTON_DELETE));
buttons.addComponent(deleteButton);
deleteButton.addListener(new Button.ClickListener() {
private static final long serialVersionUID = 5267967369680365653L;
public void buttonClick(ClickEvent event) {
formModel.removeForm(taskItemId);
close();
}
});
layout.addComponent(new Label(""));
layout.addComponent(buttons);
}
public FormDefinition createForm() {
FormDefinition formDefinition = new FormDefinition();
for (Object itemId : propertyTable.getItemIds()) {
Item item = propertyTable.getItem(itemId);
FormPropertyDefinition formPropertyDefinition = getFormPropertyDefinition(item);
formDefinition.addFormProperty(formPropertyDefinition);
}
return formDefinition;
}
protected FormPropertyDefinition getFormPropertyDefinition(Item item) {
String type = (String) ((ComboBox) item.getItemProperty(PropertyTable.ID_PROPERTY_TYPE).getValue()).getValue();
FormPropertyDefinition result = null;
if(type.equals("number")) {
result = new NumberPropertyDefinition();
} else if(type.equals("date")) {
result = new DatePropertyDefinition();
} else {
result = new TextPropertyDefinition();
}
// Set generic properties
result.setName((String) item.getItemProperty(PropertyTable.ID_PROPERTY_NAME).getValue());
result.setMandatory((Boolean) ((CheckBox) item.getItemProperty(PropertyTable.ID_PROPERTY_REQUIRED).getValue()).getValue());
return result;
}
protected void fillFormFields() {
FormDefinition form = formModel.getForm(taskItemId);
if (form == null) {
propertyTable.addPropertyRow();
} else {
for (FormPropertyDefinition property : form.getFormPropertyDefinitions()) {
propertyTable.addPropertyRow(property.getName(), getPropertyTypeDisplay(property), property.isMandatory());
}
}
}
protected String getPropertyTypeDisplay(FormPropertyDefinition definition) {
if(definition instanceof NumberPropertyDefinition) {
return "number";
} else if(definition instanceof DatePropertyDefinition) {
return "date";
} else {
// Default
return "text";
}
}
}