/** * */ package org.gcube.portlets.user.performfishanalytics.client.view; import java.util.ArrayList; import java.util.List; import org.gcube.portlets.user.performfishanalytics.client.controllers.PerformFishAnalyticsController; import org.gcube.portlets.user.performfishanalytics.client.event.SelectedKPIEvent; import org.gcube.portlets.user.performfishanalytics.shared.KPI; import org.gcube.portlets.user.performfishanalytics.shared.PopulationType; import com.google.gwt.cell.client.AbstractCell; import com.google.gwt.cell.client.Cell; import com.google.gwt.cell.client.CheckboxCell; import com.google.gwt.cell.client.CompositeCell; import com.google.gwt.cell.client.FieldUpdater; import com.google.gwt.cell.client.HasCell; import com.google.gwt.core.shared.GWT; import com.google.gwt.dom.client.Element; import com.google.gwt.safehtml.shared.SafeHtmlBuilder; import com.google.gwt.view.client.ListDataProvider; import com.google.gwt.view.client.MultiSelectionModel; import com.google.gwt.view.client.SelectionChangeEvent; import com.google.gwt.view.client.TreeViewModel; /** * The model that defines the nodes in the tree. */ public class Copy_2_of_CustomTreeModel implements TreeViewModel { // private final List kpis = new // ArrayList(); /** * This selection model is shared across all leaf nodes. A selection model * can also be shared across all nodes in the tree, or each set of child * nodes can have its own instance. This gives you flexibility to determine * how nodes are selected. */ private final MultiSelectionModel multiSelectionModel = new MultiSelectionModel(); private ListDataProvider rootProvider = new ListDataProvider(); private ListDataProvider populationTypeProvider = new ListDataProvider(); private ListDataProvider kpiProvider = new ListDataProvider(); private Cell kpiCell; // private ListDataProvider dataProvider = new ListDataProvider(); public Copy_2_of_CustomTreeModel() { init(); multiSelectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() { public void onSelectionChange(SelectionChangeEvent event) { GWT.log("Selected: " + multiSelectionModel.getSelectedSet()); } }); } public void init() { // Construct a composite cell for contacts that includes a checkbox. final List> hasCells = new ArrayList>(); hasCells.add(new HasCell() { private CheckboxCell cell = new CheckboxCell(true, false); public Cell getCell() { return cell; } public FieldUpdater getFieldUpdater() { return new FieldUpdater() { @Override public void update(int index, KPI object, Boolean value) { // TODO Auto-generated method stub GWT.log("Checked: "+object.getName() + " value: "+value); PerformFishAnalyticsController.eventBus.fireEvent(new SelectedKPIEvent(null, object, value)); } }; } public Boolean getValue(KPI object) { return multiSelectionModel.isSelected(object); } }); hasCells.add(new HasCell() { private KPICell cell = new KPICell(null); public Cell getCell() { return cell; } public FieldUpdater getFieldUpdater() { return null; } public KPI getValue(KPI object) { return object; } }); kpiCell = new CompositeCell(hasCells) { @Override public void render(Context context, KPI value, SafeHtmlBuilder sb) { sb.appendHtmlConstant(""); super.render(context, value, sb); sb.appendHtmlConstant("
"); /*if(value.isLeaf()){ sb.appendHtmlConstant(""); //hasCells.get(0).getCell().render(context, value.getClass(), sb); //super.render(context, value, sb); sb.appendHtmlConstant("
"); }else{ sb.appendHtmlConstant(""); //sb.appendHtmlConstant(value.getName()); //superrender(context, value, sb); sb.appendHtmlConstant("
"); }*/ } @Override protected Element getContainerElement(Element parent) { // Return the first TR element in the table. return parent.getFirstChildElement().getFirstChildElement().getFirstChildElement(); } @Override protected void render( Context context, KPI value, SafeHtmlBuilder sb, HasCell hasCell) { Cell cell = hasCell.getCell(); sb.appendHtmlConstant(""); cell.render(context, hasCell.getValue(value), sb); sb.appendHtmlConstant(""); } }; } public void setNewPopulationType(PopulationType populationType) { GWT.log("Displayng KPI for: " + populationType.toString()); // dataProvider.getList().clear(); // dataProvider.setList(list); // dataProvider.refresh(); if (this.populationTypeProvider != null) { // this.kpis.clear(); this.populationTypeProvider.getList().clear(); this.populationTypeProvider.getList().addAll( populationType.getListKPI()); } // fillFirstRootLevel(populationType.getListKPI()); // // this.getNodeInfo(populationType); } // private void fillFirstRootLevel(List listKPI){ // kpis.clear(); // PopulationType rootKPI = new PopulationType("", "KPIs","","",null); // rootKPI.setListKPI(rootKPI.getListKPI()); // kpis.add(rootKPI); // //rootProvider.refresh(); // } /** * Get the {@link NodeInfo} that provides the children of the specified * value. */ public NodeInfo getNodeInfo(T value) { GWT.log("Get Node Info fired: " + value); if (value == null) { // LEVEL 0. // We passed null as the root value. Return the composers. // Create a data provider that contains the list of composers. // PopulationType root = fillFirstRootLevel(null); // Create a cell to display a composer. PopulationType rootKPI = new PopulationType("", "KPIs", "", "", null); rootKPI.setListKPI(rootKPI.getListKPI()); rootProvider.getList().add(rootKPI); Cell cell = new AbstractCell() { @Override public void render( com.google.gwt.cell.client.Cell.Context context, PopulationType value, SafeHtmlBuilder sb) { GWT.log("Rendering Root: " + value + " KPIs: " + value.getListKPI()); // sb.appendHtmlConstant(" ROOT "); sb.appendEscaped(value.getName()); } }; // Return a node info that pairs the data provider and the cell. return new DefaultNodeInfo(rootProvider, cell); } else if (value instanceof PopulationType) { // LEVEL 1. // We want the children of PopulationType. Getting its list of KPI. // List listOfKpi = ((PopulationType) value).getListKPI(); GWT.log("PopulationType listOfKpi: " + populationTypeProvider.getList()); // populationTypeProvider = new ListDataProvider(listOfKpi); // Cell cell = new AbstractCell() { // // @Override // public void render( // com.google.gwt.cell.client.Cell.Context context, KPI value, // SafeHtmlBuilder sb) { // // GWT.log("Rendering PopulationType: " + value); // if (value != null) { // sb.appendHtmlConstant(" "); // sb.appendEscaped(value.getName()); // } // } // }; return new DefaultNodeInfo(populationTypeProvider, kpiCell); } else if (value instanceof KPI) { // LEVEL 2 - LEAF. // We want the children of the KPI. Return them. List listOfKpi = ((KPI) value).getListKPI(); if (listOfKpi != null) { GWT.log("KPI type listOfKpi: " + listOfKpi.toString()); kpiProvider = new ListDataProvider(((KPI) value).getListKPI()); // Cell cell = new AbstractCell() { // // @Override // public void render( // com.google.gwt.cell.client.Cell.Context context, // KPI value, SafeHtmlBuilder sb) { // // GWT.log("Rendering KPI: " + value); // if (value != null) { // sb.appendHtmlConstant(" ---- "); // sb.appendEscaped(value.getName()); // } // } // }; return new DefaultNodeInfo( kpiProvider, kpiCell, multiSelectionModel, null); } } return null; } /** * Check if the specified value represents a leaf node. Leaf nodes cannot be * opened. */ public boolean isLeaf(Object value) { // The leaf nodes are the songs, which are Strings. if (value instanceof KPI) { KPI toKPI = (KPI) value; return toKPI.isLeaf(); } return false; } }