package pl.net.bluesoft.rnd.processtool.ui.buttons.dialog;
import com.vaadin.data.Item;
import com.vaadin.data.Validator;
import com.vaadin.data.util.BeanItem;
import com.vaadin.data.util.BeanItemContainer;
import com.vaadin.terminal.Sizeable;
import com.vaadin.ui.*;
import org.aperteworkflow.util.liferay.LiferayBridge;
import pl.net.bluesoft.rnd.processtool.model.UserData;
import pl.net.bluesoft.rnd.processtool.model.processdata.ProcessComment;
import pl.net.bluesoft.util.lang.Strings;
import java.util.Arrays;
import java.util.List;
/**
* User: POlszewski
* Date: 2012-02-20
* Time: 11:24
*/
public class AssignUserTaskDialog extends AddCommentDialog {
private AssigneeBean assigneeBean;
private String roleName;
public class AssigneeBean {
private UserData assignee;
private String comment;
public void setAssignee(UserData assignee) {
this.assignee = assignee;
}
public UserData getAssignee() {
return assignee;
}
public void setComment(String comment) {
this.comment = comment;
}
public String getComment() {
return comment;
}
}
public AssignUserTaskDialog(ProcessComment processComment, String roleName) {
super(processComment);
this.roleName = roleName;
}
@Override
protected String getTitle() {
return getMessage("processdata.comments.assignee.title");
}
@Override
protected String getHelpContents() {
return getMessage("processdata.comments.assignee.help");
}
protected Form getCommentDetailsForm() {
BeanItem<AssigneeBean> bi = new BeanItem<AssigneeBean>(assigneeBean = new AssigneeBean());
Form f = new Form() {
@Override
public void commit() throws SourceException, Validator.InvalidValueException {
super.commit();
processComment.setBody(assigneeBean.getComment());
}
};
f.setWriteThrough(false);
f.setInvalidCommitted(false);
f.setFormFieldFactory(new DefaultFieldFactory() {
@Override
public Field createField(Item item, Object propertyId, Component uiContext) {
Field f = null;
if ("comment".equals(propertyId)) {
RichTextArea rta = new RichTextArea();
rta.setRequired(true);
rta.setNullRepresentation("");
rta.setWidth(400, Sizeable.UNITS_PIXELS);
rta.focus();
f = rta;
}
else if ("assignee".equals(propertyId)) {
Select users = new Select();
List<UserData> allUsers = Strings.hasText(roleName) ? LiferayBridge.getUsersByRole(roleName) : LiferayBridge.getAllUsers();
BeanItemContainer<UserData> ds = new BeanItemContainer<UserData>(UserData.class, allUsers);
ds.sort(new Object[] { "realName" }, new boolean[] { true });
users.setNullSelectionAllowed(false);
users.setContainerDataSource(ds);
users.setItemCaptionPropertyId("filteredName");
users.setItemCaptionMode(AbstractSelect.ITEM_CAPTION_MODE_PROPERTY);
users.setFilteringMode(AbstractSelect.Filtering.FILTERINGMODE_CONTAINS);
users.setImmediate(true);
users.setWidth(400, Sizeable.UNITS_PIXELS);
users.setRequired(true);
f = users;
}
if (f != null) {
f.setCaption(getMessage("processdata.comments.assignee.form." + propertyId));
f.setRequiredError(getMessage("processdata.comments.assignee.form." + propertyId + ".required"));
}
return f;
}
});
f.setItemDataSource(bi);
f.setVisibleItemProperties(Arrays.asList("assignee", "comment"));
f.setWidth(600, Sizeable.UNITS_PIXELS);
return f;
}
public AssigneeBean getAssigneeBean() {
return assigneeBean;
}
}