package org.aperteworkflow.editor.ui.queue;
import com.vaadin.ui.*;
import org.aperteworkflow.editor.domain.Queue;
import org.aperteworkflow.editor.vaadin.DataHandler;
import org.aperteworkflow.util.vaadin.VaadinUtility;
import pl.net.bluesoft.rnd.util.i18n.I18NSource;
import java.util.*;
public class QueueEditor extends VerticalLayout implements QueueHandler, DataHandler {
private QueueProvider provider;
private TextField addQueueNameField;
private Button addQueueButton;
private Label queueDescriptionLabel;
private Map<Queue, SingleQueueEditor> queueEditors;
public QueueEditor() {
queueEditors = new HashMap<Queue, SingleQueueEditor>();
initComponent();
initLayout();
}
private void initComponent() {
final I18NSource messages = I18NSource.ThreadUtil.getThreadI18nSource();
queueDescriptionLabel = new Label(messages.getMessage("queue.editor.description"));
addQueueNameField = new TextField();
addQueueNameField.setNullRepresentation("");
addQueueNameField.setInputPrompt(messages.getMessage("queue.editor.name.prompt"));
addQueueButton = VaadinUtility.button(messages.getMessage("queue.editor.add"), new Runnable() {
@Override
public void run() {
String queueName = (String) addQueueNameField.getValue();
if (queueName == null || queueName.trim().isEmpty()) {
getApplication().getMainWindow().showNotification(
messages.getMessage("queue.new.no.name"),
Window.Notification.TYPE_TRAY_NOTIFICATION
);
return;
}
addQueueNameField.setValue(null);
Queue queue = new Queue();
queue.setName(queueName);
addQueue(queue);
}
});
}
private void initLayout() {
setSpacing(true);
addComponent(queueDescriptionLabel);
HorizontalLayout addQueueLayout = new HorizontalLayout();
addQueueLayout.setSpacing(true);
addQueueLayout.addComponent(addQueueNameField);
addQueueLayout.addComponent(addQueueButton);
addComponent(addQueueLayout);
}
public QueueProvider getProvider() {
return provider;
}
public void setProvider(QueueProvider provider) {
this.provider = provider;
}
@Override
public void loadData() {
List<Queue> queues = provider.getQueues();
if (queues != null && !queues.isEmpty()) {
for (Queue queue : queues) {
addQueue(queue);
}
}
}
@Override
public void saveData() {
List<Queue> queues = new ArrayList<Queue>(queueEditors.keySet());
provider.setQueues(queues);
}
@Override
public Collection<String> validateData() {
return null;
}
@Override
public void addQueue(Queue queue) {
if (queueEditors.containsKey(queue)) {
// duplicated queue, do not add editor
return;
}
SingleQueueEditor editor = new SingleQueueEditor(queue, this);
editor.loadData();
queueEditors.put(queue, editor);
addComponent(editor);
}
@Override
public void removeQueue(Queue queue) {
if (!queueEditors.containsKey(queue)) {
// nothing to remove from editors
return;
}
SingleQueueEditor editor = queueEditors.get(queue);
queueEditors.remove(queue);
removeComponent(editor);
}
}