package sushi.application.components.form; import java.io.Serializable; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior; import org.apache.wicket.markup.html.form.DropDownChoice; import org.apache.wicket.markup.html.form.TextField; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.PropertyModel; import sushi.event.SushiEventType; import sushi.notification.SushiCondition; /* * This Component can be used to let the user define a condition. * It contains an AttributeSelect and a ValueSelect. At the moment only "=" is possible, but this could be extended. * Correspond with this Component by setting the attribute "selectedEventTypes". This will update the attributes and values. */ public class FlexConditionInputPanel extends Panel{ private DropDownChoice<String> conditionAttributeSelect; private TextField conditionValueInput; private String selectedConditionAttribute; private List<SushiEventType> selectedEventTypes = new ArrayList<SushiEventType>(); private String selectedConditionValue; public FlexConditionInputPanel(String id) { super(id); conditionAttributeSelect = new DropDownChoice<String>("conditionAttributeSelect", new PropertyModel<String>(this, "selectedConditionAttribute"), new ArrayList<String>()); conditionAttributeSelect.setOutputMarkupId(true); conditionAttributeSelect.add(new AjaxFormComponentUpdatingBehavior("onChange"){ @Override protected void onUpdate(AjaxRequestTarget target) { //collect all attributes Set<Serializable> attributes = new HashSet<Serializable>(); for (SushiEventType eventType : selectedEventTypes) { attributes.addAll(eventType.findAttributeValues(selectedConditionAttribute)); } } }); add(conditionAttributeSelect); conditionValueInput = new TextField("conditionValueInput", new PropertyModel<String>(this, "selectedConditionValue")); conditionValueInput.setOutputMarkupId(true); add(conditionValueInput); } public DropDownChoice<String> getConditionAttributeSelect() { return conditionAttributeSelect; } public void setConditionAttributeSelect(DropDownChoice<String> conditionAttributeSelect) { this.conditionAttributeSelect = conditionAttributeSelect; } public TextField getConditionValueSelect() { return conditionValueInput; } public void setConditionValueSelect(TextField conditionValueInput) { this.conditionValueInput = conditionValueInput; } public String getSelectedConditionAttribute() { return selectedConditionAttribute; } public void setSelectedConditionAttribute(String selectedConditionAttribute) { this.selectedConditionAttribute = selectedConditionAttribute; } public List<SushiEventType> getSelectedEventTypes() { return selectedEventTypes; } public void setSelectedEventTypes(List<SushiEventType> selectedEventTypes) { this.selectedEventTypes = selectedEventTypes; updateAttributesValues(); } public void addSelectedEventTypes(List<SushiEventType> selectedEventTypes) { this.selectedEventTypes = selectedEventTypes; updateAttributesValues(); } public void addSelectedEventType(SushiEventType selectedEventType) { this.selectedEventTypes.add(selectedEventType); updateAttributesValues(); } public void clearSelectedEventType() { this.selectedEventTypes.clear(); } public String getSelectedConditionValue() { return selectedConditionValue; } public void setSelectedConditionValue(String selectedConditionValue) { this.selectedConditionValue = selectedConditionValue; } public SushiCondition getCondition() { return new SushiCondition(selectedConditionAttribute, selectedConditionValue); } public void updateAttributesValues() { Set<String> attributeValues = new HashSet(); for (SushiEventType eventType : selectedEventTypes) { attributeValues.addAll(eventType.getAttributeExpressionsWithoutTimestampName()); } conditionAttributeSelect.setChoices(new ArrayList(attributeValues)); } }