package sushi.application.pages.eventrepository.eventview; import java.io.Serializable; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.List; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.panel.Panel; import sushi.application.components.tree.TreeExpansion; import sushi.application.components.tree.TreeExpansionModel; import sushi.application.components.tree.TreeProvider; import sushi.application.components.tree.SushiLabelTree; import sushi.event.SushiEvent; import sushi.event.collection.SushiMapElement; import sushi.event.collection.SushiTreeElement; /** * This panel displays an event with its key information and its attributes in a tree structure. */ public class EventViewPanel extends Panel { private static final long serialVersionUID = 1L; private SushiEvent event; private SushiLabelTree<SushiTreeElement> tree; private Label label; private Label timestamp; private SimpleDateFormat dateFormatter = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss"); public EventViewPanel(String id, SushiEvent event) { super(id); setEvent(event); } public EventViewPanel(String id) { super(id); //add eventtype label = new Label("eventType"); label.setOutputMarkupId(true); add(label); //timestamp timestamp = new Label("timestamp"); timestamp.setOutputMarkupId(true); add(timestamp); // hierarchical display of attributes tree = new SushiLabelTree<SushiTreeElement>("treeTable", new TreeProvider(new ArrayList<SushiTreeElement<String>>(generateNodesOfEventTypeTree())), new TreeExpansionModel()); TreeExpansion.get().expandAll(); tree.setOutputMarkupId(true); add(tree); } public void setEvent(SushiEvent event) { this.event = event; //add eventtype label = new Label("eventType", event.getEventType().getTypeName()); label.setOutputMarkupId(true); addOrReplace(label); //timestamp timestamp = new Label("timestamp", dateFormatter.format(event.getTimestamp())); timestamp.setOutputMarkupId(true); addOrReplace(timestamp); // hierarchical display of attributes tree = new SushiLabelTree<SushiTreeElement>("treeTable", new TreeProvider(generateNodesOfEventTypeTree()), new TreeExpansionModel()); TreeExpansion.get().expandAll(); tree.setOutputMarkupId(true); addOrReplace(tree); } protected ArrayList<SushiTreeElement<String>> generateNodesOfEventTypeTree() { ArrayList<SushiTreeElement<String>> treeElements = new ArrayList<SushiTreeElement<String>>(); if (event != null) { List<SushiMapElement<String, Serializable>> firstLevelValues = event.getValues().getTreeRootElements(); for (SushiMapElement<String, Serializable> firstLevelValue : firstLevelValues) { SushiTreeElement<String> rootElement; if (!firstLevelValue.hasChildren()) { rootElement = new SushiTreeElement<String>(firstLevelValue.getKey() + " : " + firstLevelValue.getValue()); treeElements.add(rootElement); } else { rootElement = new SushiTreeElement<String>(firstLevelValue.getKey()); treeElements.add(rootElement); fillTreeLevel(rootElement, firstLevelValue.getChildren()); } } } return treeElements; } private void fillTreeLevel(SushiTreeElement<String> parent, List<SushiMapElement<String, Serializable>> children) { for (SushiMapElement<String, Serializable> newValue : children) { SushiTreeElement<String> newElement; if (!newValue.hasChildren()) { newElement = new SushiTreeElement<String>(parent, newValue.getKey() + " : " + newValue.getValue()); } else { newElement = new SushiTreeElement<String>(parent, newValue.getKey()); fillTreeLevel(newElement, newValue.getChildren()); } } } }