package pl.net.bluesoft.rnd.processtool.ui.activity;
import com.vaadin.data.Item;
import com.vaadin.data.util.BeanItemContainer;
import com.vaadin.ui.*;
import pl.net.bluesoft.rnd.processtool.ProcessToolContext;
import pl.net.bluesoft.rnd.processtool.model.TaskState;
import pl.net.bluesoft.rnd.processtool.model.UserData;
import pl.net.bluesoft.rnd.processtool.model.nonpersistent.ProcessQueue;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
/**
* Created by IntelliJ IDEA.
* User: mwysocki_bls
* Date: 8/19/11
* Time: 10:33 AM
* To change this template use File | Settings | File Templates.
*/
public class TasksFilterFieldFactory extends DefaultFieldFactory {
final private static String PREFIX = "tasks.filter.";
private TasksFilterBox parent;
public TasksFilterFieldFactory(TasksFilterBox parent) {
this.parent = parent;
}
@Override
public Field createField(Item item, Object propertyId, Component uiContext) {
AbstractField field;
if (Arrays.asList("creators", "owners", "queues", "states").contains(propertyId)) {
ListSelect select = new ListSelect(getMessage(PREFIX + propertyId));
select.setMultiSelect(true);
select.setRows(5);
select.setNullSelectionAllowed(true);
select.setNullSelectionItemId(null);
if ("owners".equals(propertyId) || "creators".equals(propertyId)) {
List<UserData> users = getUsers();
BeanItemContainer bic = new BeanItemContainer<UserData>(UserData.class, users);
select.setContainerDataSource(bic);
select.setItemCaptionPropertyId("filteredName");
} else if ("queues".equals(propertyId)) {
Collection<ProcessQueue> queues = getQueues();
for (ProcessQueue queue : queues) {
select.addItem(queue.getName());
select.setItemCaption(queue.getName(), queue.getDescription());
}
} else if ("states".equals(propertyId)) {
select.addItem(TaskState.OPEN);
select.setItemCaption(TaskState.OPEN, getMessage(PREFIX + propertyId + ".open"));
select.addItem(TaskState.CLOSED);
select.setItemCaption(TaskState.CLOSED, getMessage(PREFIX + propertyId + ".closed"));
}
field = select;
} else if (Arrays.asList("createdBefore", "createdAfter", "notUpdatedAfter", "updatedAfter").contains(propertyId)) {
DateField dateField = new DateField(getMessage(PREFIX + propertyId));
dateField.setResolution(DateField.RESOLUTION_HOUR);
field = dateField;
} else {
field = (AbstractField) super.createField(item, propertyId, uiContext);
}
field.setRequiredError(getMessage("error.field.start") + field.getCaption() + getMessage("error.field.is.required.end"));
field.setInvalidCommitted(true);
field.setInvalidAllowed(true);
field.setImmediate(true);
if (field instanceof AbstractTextField && "null".equals(((AbstractTextField) field).getNullRepresentation()))
((AbstractTextField) field).setNullRepresentation("");
return field;
}
private Collection<ProcessQueue> queues;
private List<UserData> users;
private Collection<ProcessQueue> getQueues() {
if (queues == null) {
ProcessToolContext ctx = ProcessToolContext.Util.getThreadProcessToolContext();
queues = parent.getSession().getUserAvailableQueues(ctx);
}
return queues;
}
private List<UserData> getUsers() {
if (users == null) {
ProcessToolContext ctx = ProcessToolContext.Util.getThreadProcessToolContext();
users = ctx.getUserDataDAO().findAll();
}
return users;
}
public String getMessage(String key) {
return parent.getMessage(key);
}
}