package sushi.application.pages.simulator;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.apache.wicket.extensions.markup.html.tabs.AbstractTab;
import org.apache.wicket.extensions.markup.html.tabs.ITab;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.Model;
import de.agilecoders.wicket.markup.html.bootstrap.tabs.Collapsible;
import sushi.application.pages.AbstractSushiPage;
import sushi.application.pages.simulator.model.SimulationTreeTableProvider;
import sushi.bpmn.element.BPMNTask;
import sushi.event.SushiEventType;
import sushi.event.attribute.SushiAttribute;
public abstract class SimulationPanel extends Panel{
protected AbstractSushiPage abstractSushiPage;
protected TextField<String> instanceNumberInput;
protected TextField<String> daysNumberInput;
protected Form<Void> layoutForm;
protected SimulationPanel simulationPanel;
protected AdvancedValuesPanel advancedValuesPanel;
protected IndependentUnexpectedEventPanel indipendentUnexpectedEventPanel;
protected SimulationTreeTableProvider<Object> treeTableProvider;
public SimulationPanel(String id, AbstractSushiPage abstractSushiPage) {
super(id);
this.simulationPanel = this;
this.abstractSushiPage = abstractSushiPage;
this.treeTableProvider = new SimulationTreeTableProvider<Object>();
}
protected void addTabs() {
List<ITab> tabs = new ArrayList<ITab>();
addAdvancedValuesPanel(tabs);
addUnexpectedEventPanel(tabs);
addIndependentUnexpectedEventPanel(tabs);
layoutForm.add(new Collapsible("collapsible", tabs, Model.of(-1)));
}
private void addAdvancedValuesPanel(List<ITab> tabs) {
tabs.add(new AbstractTab(new Model<String>("Advanced values for attributes")) {
public Panel getPanel(String panelId) {
advancedValuesPanel = new AdvancedValuesPanel(panelId, simulationPanel);
return advancedValuesPanel;
}
});
}
protected abstract void addUnexpectedEventPanel(List<ITab> tabs);
protected void addIndependentUnexpectedEventPanel(List<ITab> tabs) {
tabs.add(new AbstractTab(new Model<String>("Unexpected Events (instance-independent)")) {
public Panel getPanel(String panelId) {
indipendentUnexpectedEventPanel = new IndependentUnexpectedEventPanel(panelId);
return indipendentUnexpectedEventPanel;
}
});
}
public List<SushiEventType> getUsedEventTypes(){
return treeTableProvider.getEventTypes();
}
public List<BPMNTask> getTasks(){
return treeTableProvider.getTasks();
}
public List<SushiAttribute> getAttributesFromTable() {
return treeTableProvider.getAttributes();
}
}