view flys-client/src/main/java/de/intevation/flys/client/client/ui/DatacageWindow.java @ 278:f33af25b7490

Datacage: transport rpc result to ui. flys-client/trunk@1905 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Wed, 11 May 2011 16:38:54 +0000
parents f4c8ce11df33
children 3629d36f0e5d
line wrap: on
line source
package de.intevation.flys.client.client.ui;

import java.util.List;
import java.util.ArrayList;

import com.google.gwt.core.client.GWT;

import com.google.gwt.user.client.rpc.AsyncCallback;

import com.smartgwt.client.util.SC;

import com.smartgwt.client.widgets.Window;

import com.smartgwt.client.widgets.tree.Tree;
import com.smartgwt.client.widgets.tree.TreeNode;
import com.smartgwt.client.widgets.tree.TreeGrid;

import com.smartgwt.client.widgets.layout.Layout;
import com.smartgwt.client.widgets.layout.VLayout;

import de.intevation.flys.client.shared.model.Artifact;
import de.intevation.flys.client.shared.model.ArtifactDescription;
import de.intevation.flys.client.shared.model.Data;
import de.intevation.flys.client.shared.model.DataList;
import de.intevation.flys.client.shared.model.DataItem;

import de.intevation.flys.client.client.FLYSConstants;
import de.intevation.flys.client.client.Config;

import de.intevation.flys.client.client.services.MetaDataService;
import de.intevation.flys.client.client.services.MetaDataServiceAsync;

import de.intevation.flys.client.shared.model.DataCageTree;
import de.intevation.flys.client.shared.model.DataCageNode;

public class DatacageWindow
extends      Window
{
    protected MetaDataServiceAsync metaDataService =
        GWT.create(MetaDataService.class);

    protected FLYSConstants messages =
        GWT.create(FLYSConstants.class);


    protected Artifact artifact;

    protected TreeGrid treeGrid;

    protected Layout layout;


    public DatacageWindow(Artifact artifact) {
        this.artifact = artifact;

        setWidth(200);
        setHeight(300);

        layout = new VLayout();
        layout.setWidth100();

        addItem(layout);

        treeGrid = new TreeGrid();  
        treeGrid.setLoadDataOnDemand(false);          
        treeGrid.setWidth100();  
        treeGrid.setHeight100();

        layout.addMember(treeGrid);

        String river =  findRiver();
        setTitle("Datenkorb: " + river);  
        setShowMinimizeButton(false);  
        setIsModal(true);  
        setShowModalMask(true);  
        setCanDragResize(true);

        centerInPage();

        triggerTreeBuilding(river);
    }

    protected void triggerTreeBuilding(String river) {
        Config config = Config.getInstance();
        String url    = config.getServerUrl();
        String locale = config.getLocale();

        metaDataService.getMetaData(
            url, locale, river,
            new AsyncCallback<DataCageTree>() {
                public void onFailure(Throwable caught) {
                    GWT.log("Could not load meta data.");
                    SC.warn(messages.getString(caught.getMessage()));
                }

                public void onSuccess(DataCageTree tree) {
                    GWT.log("Successfully loaded meta data.");
                    buildTree(tree);
                }
            });
    }

    protected void buildTree(DataCageTree tree) {
        treeGrid.setData(convert(tree));
    }

    protected static TreeNode convert(DataCageNode node) {
        List<DataCageNode> children = node.getChildren();

        TreeNode [] cs;

        if (children != null) {
            ArrayList<TreeNode> nc = new ArrayList<TreeNode>(children.size());

            for (DataCageNode dcn: children) {
                nc.add(convert(dcn));
            }

            cs = nc.toArray(new TreeNode[nc.size()]);
        }
        else {
            cs = new TreeNode[0];
        }

        return new TreeNode(node.getName(), cs);
    }

    protected static Tree convert(DataCageTree tree) {
        DataCageNode root = tree.getRoot();

        List<DataCageNode> children = root.getChildren();

        TreeNode [] cs;

        if (children != null) {
            ArrayList<TreeNode> nc = new ArrayList<TreeNode>(children.size());

            if (nc != null) {
                for (DataCageNode dcn: children) {
                    nc.add(convert(dcn));
                }
            }
            cs = nc.toArray(new TreeNode[nc.size()]);
        }
        else {
            cs = new TreeNode[0];
        }

        TreeNode rn = new TreeNode(root.getName(), cs);

        Tree r = new Tree();
        r.setRoot(rn);

        return r;
    }

    protected String findRiver() {

        ArtifactDescription adescr = artifact.getArtifactDescription();
        DataList [] data = adescr.getOldData();

        if (data != null && data.length > 0) {
            for (int i = 0; i < data.length; i++) {
                DataList dl = data[i];
                if (dl.getState().equals("state.winfo.river")) {
                    for (int j = dl.size()-1; j >= 0; --j) {
                        Data d = dl.get(j);
                        DataItem [] di = d.getItems();
                        if (di != null && di.length == 1) {
                           return d.getItems()[0].getStringValue();
                        }
                    }
                }
            }
        }

        return "";
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org