package com.vaadin.tests;
import java.util.HashMap;
import java.util.Iterator;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Label;
import com.vaadin.ui.LegacyWindow;
import com.vaadin.v7.data.Container.ItemSetChangeEvent;
import com.vaadin.v7.data.Container.ItemSetChangeListener;
import com.vaadin.v7.data.Container.PropertySetChangeEvent;
import com.vaadin.v7.data.Container.PropertySetChangeListener;
import com.vaadin.v7.data.Item;
import com.vaadin.v7.data.Property.ValueChangeEvent;
import com.vaadin.v7.data.Property.ValueChangeListener;
import com.vaadin.v7.ui.Select;
public class ListenerOrder extends com.vaadin.server.LegacyApplication
implements Button.ClickListener, PropertySetChangeListener,
ItemSetChangeListener, ValueChangeListener {
Button b1;
Select s1;
HashMap<String, Integer> buttonListeners = new HashMap<>();
@Override
public void init() {
createNewView();
}
public void createNewView() {
final LegacyWindow main = new LegacyWindow("Test window");
setMainWindow(main);
main.removeAllComponents();
main.addComponent(new Label("Testing multiple listeners."));
//
// Button listeners
//
b1 = new Button("Button 1");
main.addComponent(b1);
MyClickListener mutualListener = new MyClickListener("mutual1");
addListeners(b1, 1);
b1.addClickListener(mutualListener);
b1.addClickListener(mutualListener);
b1.addClickListener(this);
b1.addClickListener(mutualListener);
Button.ClickListener b1Listener = addListeners(b1, 3);
b1.addClickListener(mutualListener);
b1.addClickListener(this);
// b1.addListener((ValueChangeListener) this);
b1.addClickListener(mutualListener);
b1.removeClickListener(b1Listener);
// remove non-existing listener
b1.removeClickListener(new Button.ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
}
});
//
// Select listeners
//
s1 = new Select("Select 1");
main.addComponent(s1);
s1.setImmediate(true);
s1.setNewItemsAllowed(true);
s1.addItem("first");
s1.addItem("first");
s1.addItem("first");
s1.addItem("second");
s1.addItem("third");
s1.addItem("fourth");
s1.addListener((ValueChangeListener) this);
s1.addListener((PropertySetChangeListener) this);
s1.addListener((ItemSetChangeListener) this);
s1.addListener((ItemSetChangeListener) this);
s1.addListener((PropertySetChangeListener) this);
s1.addListener((PropertySetChangeListener) this);
s1.addListener((ItemSetChangeListener) this);
s1.addListener((ValueChangeListener) this);
s1.addListener((ValueChangeListener) this);
Item i = s1.getItem("second");
for (Iterator<?> it = i.getItemPropertyIds().iterator(); it
.hasNext();) {
Object o = it.next();
System.out.println("[" + o + "]");
}
}
private Button.ClickListener addListeners(Button b, int count) {
String name = b.getCaption();
// System.out.println("Adding listener for " + name);
Button.ClickListener listener = null;
for (int i = 0; i < count; i++) {
listener = new MyClickListener(name);
b.addClickListener(listener);
}
// return last listener added
return listener;
}
@Override
public void buttonClick(ClickEvent event) {
System.out.println("ClickEvent from Test1");
s1.addItem("new item " + System.currentTimeMillis());
}
public class MyClickListener implements Button.ClickListener {
String name = "";
int count = 0;
public MyClickListener(String name) {
Integer count = null;
try {
count = buttonListeners.get(name);
count = new Integer(count.intValue() + 1);
buttonListeners.put(name, count);
} catch (Exception e) {
count = new Integer(1);
buttonListeners.put(name, count);
}
this.name = name;
this.count = count.intValue();
System.out.println("Created listener " + name + ", id=" + count);
}
@Override
public void buttonClick(ClickEvent event) {
String msg = "ClickEvent from MyClickListener " + name + ", id="
+ count;
System.out.println(msg);
getMainWindow().showNotification(msg);
}
}
@Override
public void containerPropertySetChange(PropertySetChangeEvent event) {
String msg = "containerPropertySetChange from " + this;
System.out.println(msg);
getMainWindow().showNotification(msg);
}
@Override
public void containerItemSetChange(ItemSetChangeEvent event) {
String msg = "containerItemSetChange from " + this;
System.out.println(msg);
getMainWindow().showNotification(msg);
}
@Override
public void valueChange(ValueChangeEvent event) {
String msg = "valueChange from " + this;
System.out.println(msg);
getMainWindow().showNotification(msg);
}
}