sascha@276: package de.intevation.flys.client.client.ui; sascha@276: sascha@276: import java.util.List; sascha@278: import java.util.ArrayList; sascha@276: sascha@276: import com.google.gwt.core.client.GWT; sascha@276: sascha@276: import com.google.gwt.user.client.rpc.AsyncCallback; sascha@276: sascha@276: import com.smartgwt.client.util.SC; sascha@276: sascha@276: import com.smartgwt.client.widgets.Window; sascha@276: sascha@278: import com.smartgwt.client.widgets.tree.Tree; sascha@278: import com.smartgwt.client.widgets.tree.TreeNode; sascha@278: import com.smartgwt.client.widgets.tree.TreeGrid; sascha@278: sascha@278: import com.smartgwt.client.widgets.layout.Layout; sascha@278: import com.smartgwt.client.widgets.layout.VLayout; sascha@276: sascha@276: import de.intevation.flys.client.shared.model.Artifact; sascha@276: import de.intevation.flys.client.shared.model.ArtifactDescription; sascha@276: import de.intevation.flys.client.shared.model.Data; sascha@276: import de.intevation.flys.client.shared.model.DataList; sascha@276: import de.intevation.flys.client.shared.model.DataItem; sascha@276: sascha@276: import de.intevation.flys.client.client.FLYSConstants; sascha@276: import de.intevation.flys.client.client.Config; sascha@276: sascha@276: import de.intevation.flys.client.client.services.MetaDataService; sascha@276: import de.intevation.flys.client.client.services.MetaDataServiceAsync; sascha@276: sascha@278: import de.intevation.flys.client.shared.model.DataCageTree; sascha@278: import de.intevation.flys.client.shared.model.DataCageNode; sascha@276: sascha@276: public class DatacageWindow sascha@276: extends Window sascha@276: { sascha@276: protected MetaDataServiceAsync metaDataService = sascha@276: GWT.create(MetaDataService.class); sascha@276: sascha@276: protected FLYSConstants messages = sascha@276: GWT.create(FLYSConstants.class); sascha@276: sascha@276: sascha@276: protected Artifact artifact; sascha@276: sascha@278: protected TreeGrid treeGrid; sascha@278: sascha@278: protected Layout layout; sascha@278: sascha@278: sascha@276: public DatacageWindow(Artifact artifact) { sascha@276: this.artifact = artifact; sascha@278: sascha@278: setWidth(200); sascha@278: setHeight(300); sascha@278: sascha@278: layout = new VLayout(); sascha@278: layout.setWidth100(); sascha@278: sascha@278: addItem(layout); sascha@278: sascha@278: treeGrid = new TreeGrid(); sascha@278: treeGrid.setLoadDataOnDemand(false); sascha@278: treeGrid.setWidth100(); sascha@278: treeGrid.setHeight100(); sascha@278: sascha@278: layout.addMember(treeGrid); sascha@278: sascha@276: String river = findRiver(); sascha@276: setTitle("Datenkorb: " + river); sascha@276: setShowMinimizeButton(false); sascha@276: setIsModal(true); sascha@276: setShowModalMask(true); sascha@278: setCanDragResize(true); sascha@278: sascha@276: centerInPage(); sascha@276: sascha@276: triggerTreeBuilding(river); sascha@276: } sascha@276: sascha@276: protected void triggerTreeBuilding(String river) { sascha@276: Config config = Config.getInstance(); sascha@276: String url = config.getServerUrl(); sascha@276: String locale = config.getLocale(); sascha@276: sascha@276: metaDataService.getMetaData( sascha@276: url, locale, river, sascha@278: new AsyncCallback() { sascha@276: public void onFailure(Throwable caught) { sascha@276: GWT.log("Could not load meta data."); sascha@276: SC.warn(messages.getString(caught.getMessage())); sascha@276: } sascha@276: sascha@278: public void onSuccess(DataCageTree tree) { sascha@278: GWT.log("Successfully loaded meta data."); sascha@278: buildTree(tree); sascha@276: } sascha@276: }); sascha@276: } sascha@276: sascha@278: protected void buildTree(DataCageTree tree) { sascha@278: treeGrid.setData(convert(tree)); sascha@278: } sascha@278: sascha@278: protected static TreeNode convert(DataCageNode node) { sascha@278: List children = node.getChildren(); sascha@278: sascha@278: TreeNode [] cs; sascha@278: sascha@278: if (children != null) { sascha@278: ArrayList nc = new ArrayList(children.size()); sascha@278: sascha@278: for (DataCageNode dcn: children) { sascha@278: nc.add(convert(dcn)); sascha@278: } sascha@278: sascha@278: cs = nc.toArray(new TreeNode[nc.size()]); sascha@278: } sascha@278: else { sascha@278: cs = new TreeNode[0]; sascha@278: } sascha@278: sascha@278: return new TreeNode(node.getName(), cs); sascha@278: } sascha@278: sascha@278: protected static Tree convert(DataCageTree tree) { sascha@278: DataCageNode root = tree.getRoot(); sascha@278: sascha@278: List children = root.getChildren(); sascha@278: sascha@278: TreeNode [] cs; sascha@278: sascha@278: if (children != null) { sascha@278: ArrayList nc = new ArrayList(children.size()); sascha@278: sascha@278: if (nc != null) { sascha@278: for (DataCageNode dcn: children) { sascha@278: nc.add(convert(dcn)); sascha@278: } sascha@278: } sascha@278: cs = nc.toArray(new TreeNode[nc.size()]); sascha@278: } sascha@278: else { sascha@278: cs = new TreeNode[0]; sascha@278: } sascha@278: sascha@278: TreeNode rn = new TreeNode(root.getName(), cs); sascha@278: sascha@278: Tree r = new Tree(); sascha@278: r.setRoot(rn); sascha@278: sascha@278: return r; sascha@278: } sascha@278: sascha@276: protected String findRiver() { sascha@276: sascha@276: ArtifactDescription adescr = artifact.getArtifactDescription(); sascha@276: DataList [] data = adescr.getOldData(); sascha@276: sascha@276: if (data != null && data.length > 0) { sascha@276: for (int i = 0; i < data.length; i++) { sascha@276: DataList dl = data[i]; sascha@276: if (dl.getState().equals("state.winfo.river")) { sascha@276: for (int j = dl.size()-1; j >= 0; --j) { sascha@276: Data d = dl.get(j); sascha@276: DataItem [] di = d.getItems(); sascha@276: if (di != null && di.length == 1) { sascha@276: return d.getItems()[0].getStringValue(); sascha@276: } sascha@276: } sascha@276: } sascha@276: } sascha@276: } sascha@276: sascha@276: return ""; sascha@276: } sascha@276: } sascha@276: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :