Quantcast
Channel: SmartClient Forums
Viewing all articles
Browse latest Browse all 4756

Disable treegrid lazy loading

$
0
0
So we had a web app started by a consultant from isomorphic. He initially wrote our treegrid to load children on demand. Here is the code:

Datasource:
Code:

<DataSource serverType="sql" dbName="CSODatabaseCities"
    ID="Sensor"
    schema="dynamic"
    tableName="sensor_data">
   
    <fields>
   
        <field name="nodeId" type="int" />
        <field name="nodeName" type="text" />
        <field name="number" type="int" />
        <field name="title" type="text" />
        <field name="multiplier" type="float" />
        <field name="offset" type="float" />
        <field name="latitude" type="float"/>
        <field name="longitude" type="float"/>
        <field name="controlUrl" type="text" />
       
        <field name="structureType" type="text" />
        <field name="sensorType" type="text" >
            <valueMap>
                <value ID="d">Depth</value>
                <value ID="q">Flow</value>
                <value ID="rg">Rain Gauge</value>
                <value ID="t">Temperature</value>
                <value ID="v">Velocity</value>
            </valueMap>
        </field>
       
        <field name="criticalLow" type="float" />
        <field name="criticalHigh" type="float" />
       
        <field name="units" type="text" />
        <field name="latestValue" type="float" title="Reading" format="#.###"/>
        <field name="lastCollected" type="datetime" />
        <field name="percentUtilization" type="float" format="##.##'%'" title="Utilization" />
        <field name="percentUtilizationImageUrl" type="image">
            <customSelectExpression>
                        CASE
                          WHEN percentUtilization &lt; 0
                            THEN CONCAT('structure/', structureType, '_0.bmp')
                          WHEN percentUtilization &gt; 100
                            THEN CONCAT('structure/', structureType, '_100.bmp')
                          WHEN structureType = 'raingauge' AND percentUtilization BETWEEN 0 AND 10
                            THEN CONCAT('structure/', structureType, '_10.bmp')     
                          ELSE
                            CONCAT('structure/', structureType, '_', ROUND(percentUtilization, -1),'.bmp')     
                        END
            </customSelectExpression>
        </field>

        <field name="parentId" type="text" title="Group" />
        <field name="sensorId" type="text" customSelectExpression="CONCAT('c',nodeId, '_', number)" />
        <field name="isFolder" hidden="true" canFilter="false" customSelectExpression="false" />
       
    </fields>
   
    <operationBinding operationType="fetch" operationId="fetchByParentGroup">
      <script language="groovy"><![CDATA[
              if (criteria.get('parentId', '/') == '/') {
                  dsRequest.setOperationId('fetchSensorGroups');
              } else {
                  dsRequest.setOperationId(null);
              }
          return dsRequest.execute();
      ]]></script>
     
    </operationBinding>
   
    <operationBinding operationType="fetch" operationId="fetchSensorGroups" >
      <selectClause>'/' AS parentId, TRIM(descr) AS sensorId, TRIM(descr) AS title, true AS isFolder, COUNT(*) AS sensorCount</selectClause>
      <tableClause>${rawValue.schema}.inodes</tableClause>
      <whereClause>
        sensType1 != 'No Sensor'
                  OR sensType2 != 'No Sensor'
                  OR sensType3 != 'No Sensor'
                  OR sensType4 != 'No Sensor'
      </whereClause>
      <groupClause>descr</groupClause>
    </operationBinding>

    <operationBinding operationType="fetch" qualifyColumnNames="false">
                <tableClause>
                (
                  SELECT TRIM(i.descr) AS parentId, i.id AS nodeId, i.name AS nodeName,
                    1 AS number, i.sensType1 AS title, i.a1 AS multiplier, i.b1 AS offset,
                    i.lat AS latitude, i.lon AS longitude, i.controlURL as controlUrl,
                    s.structure_type_s1 AS structureType, s.sensor_type_s1 AS sensorType,
                    s.critical_low_s1 AS criticalLow, s.critical_high_s1 AS criticalHigh,
                    s.sensor1_units AS units, lv.sens1 AS latestValue, lv.time AS lastCollected,
                    (lv.sens1 / s.critical_high_s1) * 100 AS percentUtilization
                  FROM #schema.inodes i
                    INNER JOIN #schema.inodes_structure_data s
                      ON i.id = s.id
                    LEFT JOIN #schema.inodes_latest_values lv
                      ON i.id = lv.node_id
                  WHERE i.sensType1 != 'No Sensor'
                 
                  UNION
                 
                  SELECT TRIM(i.descr) AS nodeGroup, i.id AS nodeId, i.name AS nodeName,
                    2 AS sensorNumber, i.sensType2 AS title, i.a2 AS multiplier, i.b2 AS offset,
                    i.lat AS latitude, i.lon AS longitude, i.controlURL as controlUrl,
                    s.structure_type_s2 AS structureType, s.sensor_type_s2 AS sensorType,
                    s.critical_low_s2 AS criticalLow, s.critical_high_s2 AS criticalHigh,
                    s.sensor2_units AS units, lv.sens2 AS latestValue, lv.time AS lastCollected,
                    (lv.sens2 / s.critical_high_s2) * 100
                  FROM #schema.inodes i
                    INNER JOIN #schema.inodes_structure_data s
                      ON i.id = s.id
                    LEFT JOIN #schema.inodes_latest_values lv
                      ON i.id = lv.node_id
                  WHERE i.sensType2 != 'No Sensor'
                   
                  UNION
                 
                  SELECT TRIM(i.descr) AS nodeGroup, i.id AS nodeId, i.name AS nodeName,
                    3 AS sensorNumber, i.sensType3 AS title, i.a3 AS multiplier, i.b3 AS offset,
                    i.lat AS latitude, i.lon AS longitude, i.controlURL as controlUrl,
                    s.structure_type_s3 AS structureType, s.sensor_type_s3 AS sensorType,
                    s.critical_low_s3 AS criticalLow, s.critical_high_s3 AS criticalHigh,
                    s.sensor3_units AS units, lv.sens3 AS latestValue, lv.time AS lastCollected,
                    (lv.sens3 / s.critical_high_s3) * 100
                  FROM #schema.inodes i
                    INNER JOIN #schema.inodes_structure_data s
                      ON i.id = s.id
                    LEFT JOIN #schema.inodes_latest_values lv
                      ON i.id = lv.node_id
                  WHERE i.sensType3 != 'No Sensor'
                   
                  UNION
                 
                  SELECT TRIM(i.descr) AS nodeGroup, i.id AS nodeId, i.name AS nodeName,
                    4 AS sensorNumber, i.sensType4 AS title, i.a4 AS multiplier, i.b4 AS offset,
                    i.lat AS latitude, i.lon AS longitude, i.controlURL as controlUrl,
                    s.structure_type_s4 AS structureType, s.sensor_type_s4 AS sensorType,
                    s.critical_low_s4 AS criticalLow, s.critical_high_s4 AS criticalHigh,
                    s.sensor4_units AS units, lv.sens4 AS latestValue, lv.time AS lastCollected,
                    (lv.sens4 / s.critical_high_s4) * 100
                  FROM #schema.inodes i
                    INNER JOIN #schema.inodes_structure_data s
                      ON i.id = s.id
                    LEFT JOIN #schema.inodes_latest_values lv
                      ON i.id = lv.node_id
                  WHERE i.sensType4 != 'No Sensor'
               
                ) sensor_data
                </tableClause>
     
    </operationBinding>
   
    <operationBinding operationType="add" requires="false" />
    <operationBinding operationType="remove" requires="false" />
    <operationBinding operationType="update" requires="false" />
   
</DataSource>

TreeGrid relevant code:
Code:

Tree tree = new Tree();
        tree.setModelType(TreeModelType.PARENT);
        tree.setRootValue("/");
        tree.setIdField("sensorId"); 

        treeGrid.setFetchOperation("fetchByParentGroup");
        //treeGrid.setLoadDataOnDemand(false);
        treeGrid.setDataProperties(tree);
        treeGrid.setSort(new SortSpecifier("title", SortDirection.ASCENDING));

        treeGrid.setSelectionAppearance(SelectionAppearance.CHECKBOX);
        treeGrid.setShowPartialSelection(true);
        treeGrid.setCascadeSelection(true);

        treeGrid.setNodeIcon("[SKINIMG]SchemaViewer/simpleType.png");
        treeGrid.setFolderIcon("[SKINIMG]SchemaViewer/complexType.gif");

        treeGrid.setShowOpenIcons(false);
        treeGrid.setShowDropIcons(false);
        treeGrid.setClosedIconSuffix("");
       
        /*
        * Load selected children on demand and update listPane with currently
        * selected items
        */
        treeGrid.addSelectionUpdatedHandler(new SelectionUpdatedHandler() {
            @Override
            public void onSelectionUpdated(SelectionUpdatedEvent event) {

                final TreeNode updated = treeGrid.getRecord(treeGrid.getEventRow());
                final TreeNode[] children = treeGrid.getTree().getChildren(updated);

                if (updated.getAttributeAsBoolean("isFolder") && children.length == 0) {
                    treeGrid.getData().loadChildren(updated, new DSCallback() {
                        @Override
                        public void execute(DSResponse dsResponse, Object data,
                            DSRequest dsRequest) {
                            treeGrid.selectRecords(dsResponse.getData());
                        }
                    });
                } else {
                    RecordList selected = new RecordList(treeGrid.getSelectedRecords());
                    listGrid.setData(selected.findAll(new AdvancedCriteria("isFolder",
                        OperatorId.NOT_EQUAL, true)));

                }

                listGrid.selectRecord(0);
            }
        });

I have tried many things, but cannot seem to figure out how to keep the same appearance, but load all nodes right away. See attachment for current appearance! Please help! Thanks

Attached Images
File Type: png Capture.PNG (64.6 KB)

Viewing all articles
Browse latest Browse all 4756

Trending Articles