package com.griddynamics.jagger.webclient.client.components; import com.google.gwt.uibinder.client.UiConstructor; import com.griddynamics.jagger.dbapi.dto.TaskDataDto; import com.griddynamics.jagger.webclient.client.components.control.CheckHandlerMap; import com.griddynamics.jagger.dbapi.model.*; import com.sencha.gxt.core.client.ValueProvider; import com.sencha.gxt.data.shared.TreeStore; import com.sencha.gxt.widget.core.client.event.CheckChangeEvent; import com.sencha.gxt.widget.core.client.tree.Tree; import java.util.HashSet; import java.util.Set; /** * Extension of com.sencha.gxt.widget.core.client.tree.Tree allows to disable tree items. * + no icons. * * * @param <C> cell data type */ public class ControlTree<C> extends AbstractTree<AbstractIdentifyNode, C> { /** * Model helps to fetch all data at once */ private RootNode rootNode; public RootNode getRootNode() { return rootNode; } public void setRootNode(RootNode rootNode) { this.rootNode = rootNode; } @Override protected void check(AbstractIdentifyNode item, CheckState state) { CheckHandlerMap.getHandler(item.getClass()) .onCheckChange(new CheckChangeEvent(item, state)); } public void setCheckedWithParent (AbstractIdentifyNode item) { setChecked(item, Tree.CheckState.CHECKED); setStateToSubTree(item, Tree.CheckState.CHECKED); checkParent(item); } public void setCheckedExpandedWithParent (AbstractIdentifyNode item) { setChecked(item, Tree.CheckState.CHECKED); setStateToSubTree(item, Tree.CheckState.CHECKED); checkParent(item); setExpanded(item, true, false); } @UiConstructor public ControlTree(TreeStore<AbstractIdentifyNode> store, ValueProvider<? super AbstractIdentifyNode, C> valueProvider) { super(store, valueProvider); } /** * results should be chosen from both Summary and Details subtree * @return List<TaskDataDto> to use the same link creator. */ public Set<TaskDataDto> getSelectedTests() { Set<TaskDataDto> resultSet = new HashSet<TaskDataDto>(); for (TestNode testNode : rootNode.getSummaryNode().getTests()) { if (isChosen(testNode)) { resultSet.add(testNode.getTaskDataDto()); } } for (TestDetailsNode testNode : rootNode.getDetailsNode().getTests()) { if (isChosen(testNode)) { resultSet.add(testNode.getTaskDataDto()); } } return resultSet; } /** * @return MetricNameDto from all Tests */ public Set<MetricNode> getCheckedMetrics() { Set<MetricNode> resultSet = new HashSet<MetricNode>(); for (TestNode test : rootNode.getSummaryNode().getTests()) { resultSet.addAll(getCheckedMetrics(test)); } return resultSet; } /** * @param testNode / * @return MetricNameDto from 'TestNode' test */ public Set<MetricNode> getCheckedMetrics(TestNode testNode) { Set<MetricNode> resultSet = new HashSet<MetricNode>(); for (MetricNode metricNode : testNode.getMetrics()) { if (isChecked(metricNode)) { resultSet.add(metricNode); } } return resultSet; } public TestNode findTestNode(TaskDataDto taskDataDto) { for (TestNode test : rootNode.getSummaryNode().getTests()) { if (test.getTaskDataDto().equals(taskDataDto)) { return test; } } new ExceptionPanel("can not find TestNode with: " + taskDataDto); return null; } /** * @return checked MetricNameDto from all Tests */ public Set<MetricNode> getCheckedPlots() { Set<MetricNode> resultSet = new HashSet<MetricNode>(); for (TestDetailsNode test : rootNode.getDetailsNode().getTests()) { for (PlotNode plotNode : test.getMetrics()) { if (isChecked(plotNode)) { resultSet.add(plotNode); } } } return resultSet; } public void onSummaryTrendsTab() { onMetricsTab(false); } public void onMetricsTab() { onMetricsTab(true); } private void onMetricsTab(boolean boo) { if (rootNode != null) { setExpanded(rootNode.getSummaryNode(), !boo); setExpanded(rootNode.getDetailsNode(), boo); } } }