package org.aperteworkflow.editor.ui.queue;
import com.vaadin.data.Property;
import com.vaadin.ui.*;
import org.aperteworkflow.editor.domain.Queue;
import org.aperteworkflow.editor.domain.QueueRolePermission;
import org.aperteworkflow.editor.vaadin.DataHandler;
import org.aperteworkflow.util.liferay.LiferayBridge;
import org.aperteworkflow.util.vaadin.VaadinUtility;
import pl.net.bluesoft.rnd.util.i18n.I18NSource;
import java.util.ArrayList;
import java.util.Collection;
import java.util.logging.Logger;
public class SingleQueueEditor extends GridLayout implements QueueRolePermissionBoxHandler, DataHandler {
private static final Logger logger = Logger.getLogger(SingleQueueEditor.class.getName());
private Queue queue;
private QueueHandler handler;
private TextField queueDescriptionField;
private Label queueNameLabel;
private Button removeQueueButton;
private Label roleNameDescription;
private RoleNameComboBox roleNameComboBox;
private CssLayout rolePermissionLayout;
public SingleQueueEditor(Queue queue, QueueHandler handler) {
super(2, 4);
this.handler = handler;
this.queue = queue;
initComponent();
initLayout();
}
private void initComponent() {
I18NSource messages = I18NSource.ThreadUtil.getThreadI18nSource();
queueDescriptionField = new TextField();
queueDescriptionField.setWidth("75%");
queueDescriptionField.setNullRepresentation("");
queueDescriptionField.setInputPrompt(messages.getMessage("queue.editor.description.prompt"));
queueDescriptionField.addListener(new Property.ValueChangeListener() {
@Override
public void valueChange(Property.ValueChangeEvent event) {
queue.setDescription((String) queueDescriptionField.getValue());
}
});
roleNameComboBox = new RoleNameComboBox();
roleNameComboBox.setHandler(this);
queueNameLabel = new Label("<h2>" + queue.getName() + "</h2>");
queueNameLabel.setContentMode(Label.CONTENT_XHTML);
removeQueueButton = VaadinUtility.button(messages.getMessage(" X "), new Runnable() {
@Override
public void run() {
handler.removeQueue(queue);
}
});
roleNameDescription = new Label(messages.getMessage("queue.editor.assigned.roles"));
rolePermissionLayout = new CssLayout() {
@Override
protected String getCss(Component c) {
if (c instanceof QueueRolePermissionBox) {
String basicCss = "float: left; margin: 3px; margin-bottom: 8px; padding: 3px; display: inline; font-weight: bold; border: 2px solid ";
return basicCss + "#287ece; -moz-border-radius: 5px; border-radius: 5px; padding-left: 6px; padding-right: 6px;";
}
return super.getCss(c);
}
};
rolePermissionLayout.setWidth("100%");
}
private void initLayout() {
setSpacing(true);
setWidth("100%");
addComponent(queueNameLabel, 0, 0);
addComponent(queueDescriptionField, 0, 1);
addComponent(removeQueueButton, 1, 0, 1, 1);
addComponent(roleNameDescription, 0, 2);
addComponent(roleNameComboBox, 1, 2);
addComponent(rolePermissionLayout, 0, 3, 1, 3);
setComponentAlignment(removeQueueButton, Alignment.TOP_RIGHT);
setComponentAlignment(roleNameDescription, Alignment.MIDDLE_LEFT);
setComponentAlignment(roleNameComboBox, Alignment.MIDDLE_RIGHT);
setColumnExpandRatio(0, 1);
setColumnExpandRatio(1, 0);
}
@Override
public void addQueueRolePermissionBox(QueueRolePermissionBox box) {
rolePermissionLayout.addComponent(box);
if (queue.getRolePermissions() == null) {
queue.setRolePermissions(new ArrayList<QueueRolePermission>());
}
if (!queue.getRolePermissions().contains(box.getQueueRolePermission())) {
queue.getRolePermissions().add(box.getQueueRolePermission());
}
String roleName = box.getQueueRolePermission().getRoleName();
if (roleNameComboBox.containsId(roleName)) {
roleNameComboBox.removeItem(roleName);
}
}
@Override
public void removeQueueRolePermissionBox(QueueRolePermissionBox box) {
rolePermissionLayout.removeComponent(box);
roleNameComboBox.addItem(box.getQueueRolePermission().getRoleName());
if (queue.getRolePermissions() != null) {
queue.getRolePermissions().remove(box.getQueueRolePermission());
}
}
@Override
public void loadData() {
roleNameComboBox.removeAllItems();
roleNameComboBox.addItem(".*");
for (String roleName : LiferayBridge.getRegularRoleNames()) {
roleNameComboBox.addItem(roleName);
}
if (queue.getDescription() != null && !queue.getDescription().trim().isEmpty()) {
queueDescriptionField.setValue(queue.getDescription());
}
if (queue.getRolePermissions() != null && !queue.getRolePermissions().isEmpty()) {
for (QueueRolePermission rolePermission : queue.getRolePermissions()) {
QueueRolePermissionBox box = new QueueRolePermissionBox(rolePermission, this);
addQueueRolePermissionBox(box);
}
}
}
@Override
public void saveData() {
// List<QueueRolePermission> permissions = new ArrayList<QueueRolePermission>();
//
// Iterator<Component> it = rolePermissionLayout.getComponentIterator();
// while (it.hasNext()) {
// Component c = it.next();
// if (c instanceof QueueRolePermissionBox) {
// QueueRolePermissionBox box = (QueueRolePermissionBox) c;
// QueueRolePermission permission = box.getQueueRolePermission();
// permissions.add(permission);
// }
// }
}
@Override
public Collection<String> validateData() {
return null;
}
}