package com.anjlab.ping.components;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import org.apache.tapestry5.Block;
import org.apache.tapestry5.annotations.BeforeRenderTemplate;
import org.apache.tapestry5.annotations.Component;
import org.apache.tapestry5.annotations.Parameter;
import org.apache.tapestry5.annotations.Property;
import org.apache.tapestry5.beaneditor.BeanModel;
import org.apache.tapestry5.corelib.components.Grid;
import org.apache.tapestry5.ioc.Messages;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.apache.tapestry5.services.BeanModelSource;
import com.anjlab.tapestry5.AbstractReadonlyPropertyConduit;
@SuppressWarnings("rawtypes")
public class MapVisualizer {
@Inject
private BeanModelSource beanModelSource;
@Inject
private Messages messages;
private int counter;
@Parameter(required=true)
private Map map;
@Parameter(defaultPrefix="literal", value="Key")
private String key;
@Parameter(defaultPrefix="literal", value="Value")
private String value;
@Parameter
private Block keyBlock;
@Parameter
private Block valueBlock;
@Inject
private Block defaultKeyBlock;
@Inject
private Block defaultValueBlock;
public Block getKeyBlock() {
return keyBlock != null ? keyBlock : defaultKeyBlock;
}
public Block getValueBlock() {
return valueBlock != null ? valueBlock : defaultValueBlock;
}
@Component(id="grid")
private Grid grid;
@BeforeRenderTemplate
void beforeRender() {
if (grid.getSortModel().getSortConstraints().isEmpty()) {
grid.getSortModel().updateSort("value"); // asc
grid.getSortModel().updateSort("value"); // desc
}
}
public BeanModel<?> getModel() {
BeanModel<?> beanModel = beanModelSource.createDisplayModel(Entry.class, messages);
beanModel.add("SN", new AbstractReadonlyPropertyConduit()
{
@Override
public Object get(Object instance) {
return ++counter;
}
}).sortable(false);
beanModel.add("key", new AbstractReadonlyPropertyConduit() {
@Override
public Object get(Object instance) {
return ((Entry) instance).getKey();
}
}).label(key);
beanModel.add("value", new AbstractReadonlyPropertyConduit() {
@Override
public Object get(Object instance) {
return ((Entry) instance).getValue();
}
}).label(value);
return beanModel;
}
@SuppressWarnings("unused")
@Property
@Parameter
private Entry entry;
@SuppressWarnings("unchecked")
public Set<Entry> getEntries() {
return map.entrySet();
}
}