teichmann@5835: package org.dive4elements.river.client.client.ui.map; ingo@1411: ingo@1411: import java.util.ArrayList; ingo@1411: import java.util.List; ingo@1411: ingo@1418: import com.google.gwt.core.client.GWT; ingo@1418: ingo@1411: import com.smartgwt.client.types.TreeModelType; ingo@1411: import com.smartgwt.client.widgets.tree.Tree; ingo@1411: import com.smartgwt.client.widgets.tree.TreeGrid; ingo@1411: import com.smartgwt.client.widgets.tree.TreeNode; ingo@1411: teichmann@5835: import org.dive4elements.river.client.shared.model.Capabilities; teichmann@5835: import org.dive4elements.river.client.shared.model.WMSLayer; ingo@1411: ingo@1411: ingo@1411: public class WMSLayersTree extends TreeGrid { ingo@1411: ingo@1412: /** ingo@1412: * An internal TreeNode that stores besides some string attribute a WMSLayer ingo@1412: * object. ingo@1412: */ ingo@1412: public static class WMSLayerNode extends TreeNode { ingo@1412: ingo@1412: protected WMSLayer wms; ingo@1412: ingo@1412: public WMSLayerNode(WMSLayer wms) { ingo@1412: super(); ingo@1412: this.wms = wms; ingo@1412: ingo@1412: setAttribute("name", wms.getName()); ingo@1412: setAttribute("title", wms.getTitle()); ingo@1412: } ingo@1412: ingo@1412: public WMSLayer getWMSLayer() { ingo@1412: return wms; ingo@1412: } ingo@1412: } // end of class WMSLayerNode ingo@1412: ingo@1412: ingo@1411: protected Capabilities capabilites; ingo@1418: protected String srs; ingo@1418: ingo@1411: ingo@1411: public WMSLayersTree(Capabilities capabilites) { ingo@1411: super(); ingo@1411: this.capabilites = capabilites; ingo@1411: ingo@1411: initTree(); ingo@1411: } ingo@1411: ingo@1411: ingo@1418: public WMSLayersTree(Capabilities capabilites, String srs) { ingo@1418: super(); ingo@1418: ingo@1418: this.capabilites = capabilites; ingo@1418: this.srs = srs; ingo@1418: ingo@1418: initTree(); ingo@1418: } ingo@1418: ingo@1418: ingo@1411: protected void initTree() { ingo@1411: setLoadDataOnDemand(false); ingo@1411: setWidth100(); ingo@1411: setHeight100(); ingo@1411: setShowRoot(false); ingo@1411: setShowConnectors(true); ingo@1411: setNodeIcon("[SKIN]/images/blank.gif"); ingo@1411: ingo@1411: Tree tree = new Tree(); ingo@1411: tree.setChildrenProperty("children-nodes"); ingo@1411: tree.setNameProperty("title"); ingo@1411: tree.setIdField("title"); ingo@1411: tree.setModelType(TreeModelType.CHILDREN); ingo@1411: tree.setShowRoot(false); ingo@1411: ingo@1411: TreeNode root = new TreeNode("Root"); ingo@1411: TreeNode[] layers = buildTree(capabilites.getLayers()); ingo@1411: ingo@1411: root.setAttribute("children-nodes", layers); ingo@1411: tree.setRoot(root); ingo@1411: ingo@1411: setData(tree); ingo@1411: ingo@1411: if (layers != null && layers.length == 1) { ingo@1411: tree.openFolder(layers[0]); ingo@1411: } ingo@1411: } ingo@1411: ingo@1411: ingo@1411: protected TreeNode[] buildTree(List layers) { ingo@1411: List layerNodes = new ArrayList(); ingo@1411: ingo@1411: for (WMSLayer layer: layers) { ingo@1412: WMSLayerNode tn = buildTreeNode(layer); ingo@1411: ingo@1418: if (tn != null) { ingo@1418: TreeNode[] tns = buildTree(layer.getLayers()); ingo@1418: ingo@1418: if (tns != null && tns.length > 0) { ingo@1418: tn.setAttribute("children-nodes", tns); ingo@1418: } ingo@1418: ingo@1418: layerNodes.add(tn); ingo@1411: } ingo@1411: } ingo@1411: sascha@3379: return layerNodes.toArray(new TreeNode[layerNodes.size()]); ingo@1411: } ingo@1412: ingo@1412: ingo@1418: protected WMSLayerNode buildTreeNode(WMSLayer wms) { ingo@1418: if (srs != null && srs.length() > 0) { ingo@1418: return wms.supportsSrs(srs) ? new WMSLayerNode(wms) : null; ingo@1418: } ingo@1418: else { ingo@1418: GWT.log("No target SRS specified."); ingo@1418: return new WMSLayerNode(wms); ingo@1418: } ingo@1412: } ingo@1411: }