package pl.net.bluesoft.rnd.processtool.ui.basewidgets;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.logging.Logger;
import pl.net.bluesoft.rnd.processtool.ProcessToolContext;
import pl.net.bluesoft.rnd.processtool.model.BpmTask;
import pl.net.bluesoft.rnd.processtool.model.config.ProcessStateWidget;
import pl.net.bluesoft.rnd.processtool.ui.widgets.ProcessToolChildrenFilteringWidget;
import pl.net.bluesoft.rnd.processtool.ui.widgets.ProcessToolVaadinRenderable;
import pl.net.bluesoft.rnd.processtool.ui.widgets.ProcessToolWidget;
import pl.net.bluesoft.rnd.processtool.ui.widgets.annotations.AliasName;
import pl.net.bluesoft.rnd.processtool.ui.widgets.annotations.AperteDoc;
import pl.net.bluesoft.rnd.processtool.ui.widgets.annotations.AutoWiredProperty;
import pl.net.bluesoft.rnd.processtool.ui.widgets.annotations.ChildrenAllowed;
import pl.net.bluesoft.rnd.processtool.ui.widgets.annotations.WidgetGroup;
import pl.net.bluesoft.rnd.processtool.ui.widgets.impl.BaseProcessToolVaadinWidget;
import com.vaadin.ui.Component;
import com.vaadin.ui.Label;
@AliasName(name = "SwitchWidgets")
@AperteDoc(humanNameKey = "widget.switch_widget.name", descriptionKey = "widget.switch_widget.description")
@ChildrenAllowed(true)
@WidgetGroup("base-widgets")
public class SwitchWidget extends BaseProcessToolVaadinWidget implements ProcessToolVaadinRenderable,
ProcessToolChildrenFilteringWidget {
private static final Logger logger = Logger.getLogger(SwitchWidget.class.getName());
@AutoWiredProperty(required = true)
@AperteDoc(humanNameKey = "widget.switch_widget.property.selectorKey.name", descriptionKey = "widget.switch_widget.property.selectorKey.description")
String selectorKey;
@AutoWiredProperty(required = true)
@AperteDoc(humanNameKey = "widget.switch_widget.property.conditions.name", descriptionKey = "widget.switch_widget.property.conditions.description")
String conditions;
List<ProcessToolVaadinRenderable> widgets = new ArrayList<ProcessToolVaadinRenderable>();
public SwitchWidget() {
}
@Override
public Component render() {
if (widgets.size() > 0)
return widgets.get(0).render();
else {
return null;
}
}
public boolean hasWidgets() {
return widgets.size() > 0;
}
@Override
public void addChild(ProcessToolWidget child) {
if (!(child instanceof ProcessToolVaadinRenderable)) {
throw new IllegalArgumentException("child is not instance of "
+ ProcessToolVaadinRenderable.class.getName());
}
ProcessToolVaadinRenderable vChild = (ProcessToolVaadinRenderable) child;
widgets.add(vChild);
}
@Override
public List<ProcessStateWidget> filterChildren(BpmTask task, List<ProcessStateWidget> sortedList) {
String key = task.getProcessInstance().getSimpleAttributeValue(selectorKey);
if (key == null) {
key = task.getProcessInstance().getRootProcessInstance().getSimpleAttributeValue(selectorKey);
}
if(key == null){
Map<String, Object> variables = ProcessToolContext.Util.getThreadProcessToolContext().getBpmVariables(task.getProcessInstance());
key = (String) variables.get(selectorKey);
}
if(key == null)
return new ArrayList<ProcessStateWidget>(0);
String[] conditionsArray = conditions.split("[,; ]+");
int index = -1;
for (int i = 0; i < conditionsArray.length; i++) {
if (key.equals(conditionsArray[i].trim()))
index = i;
}
try {
return Arrays.asList(sortedList.get(index));
} catch (IndexOutOfBoundsException e) {
return new ArrayList<ProcessStateWidget>(0);
}
}
}