diff gwt-client/src/main/java/org/dive4elements/river/client/client/ui/DatacageWindow.java @ 5838:5aa05a7a34b7

Rename modules to more fitting names.
author Sascha L. Teichmann <teichmann@intevation.de>
date Thu, 25 Apr 2013 15:23:37 +0200
parents flys-client/src/main/java/org/dive4elements/river/client/client/ui/DatacageWindow.java@821a02bbfb4e
children 172338b1407f
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/DatacageWindow.java	Thu Apr 25 15:23:37 2013 +0200
@@ -0,0 +1,201 @@
+package org.dive4elements.river.client.client.ui;
+
+import java.util.ArrayList;
+import java.util.List;
+
+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 org.dive4elements.river.client.client.Config;
+import org.dive4elements.river.client.client.FLYSConstants;
+
+import org.dive4elements.river.client.client.event.DatacageHandler;
+import org.dive4elements.river.client.client.event.DatacageDoubleClickHandler;
+import org.dive4elements.river.client.client.event.HasRedrawRequestHandlers;
+import org.dive4elements.river.client.client.event.RedrawRequestHandler;
+import org.dive4elements.river.client.client.event.RedrawRequestEvent;
+import org.dive4elements.river.client.client.event.RedrawRequestEvent.Type;
+
+import org.dive4elements.river.client.client.services.LoadArtifactService;
+import org.dive4elements.river.client.client.services.LoadArtifactServiceAsync;
+
+import org.dive4elements.river.client.shared.model.Artifact;
+import org.dive4elements.river.client.shared.model.ArtifactDescription;
+import org.dive4elements.river.client.shared.model.Collection;
+import org.dive4elements.river.client.shared.model.Data;
+import org.dive4elements.river.client.shared.model.DataItem;
+import org.dive4elements.river.client.shared.model.DataList;
+import org.dive4elements.river.client.shared.model.ToLoad;
+import org.dive4elements.river.client.shared.model.User;
+import org.dive4elements.river.client.shared.model.Recommendation;
+
+
+/** Window that access the datacageservice and shows a datacagewidget. */
+public class DatacageWindow
+extends      Window
+implements   DatacageHandler,
+             DatacageDoubleClickHandler,
+             HasRedrawRequestHandlers
+{
+    /** i18ner. */
+    protected FLYSConstants messages =
+        GWT.create(FLYSConstants.class);
+
+    /** Service to create/clone artifacts. */
+    protected LoadArtifactServiceAsync loadService =
+        GWT.create(LoadArtifactService.class);
+
+    protected CollectionView view;
+
+    protected List<RedrawRequestHandler> handlers;
+
+    protected int inProgress;
+
+
+    public DatacageWindow(
+        Artifact       artifact,
+        User           user,
+        String         outs,
+        CollectionView view
+    ) {
+        this.view       = view;
+        this.handlers   = new ArrayList<RedrawRequestHandler>();
+        this.inProgress = 0;
+
+        setWidth(400);
+        setHeight(500);
+
+        DatacageWidget dw = new DatacageWidget(
+            artifact,
+            user,
+            outs,
+            "load-system:true",
+            true);
+        dw.addDatacageHandler(this);
+        dw.addDatacageDoubleClickHandler(this);
+
+        addItem(dw);
+
+        String river =  findRiver(artifact);
+        // TODO: i18n
+        setTitle("Datenkorb: " + river);
+        setShowMinimizeButton(false);
+        setIsModal(true);
+        setShowModalMask(true);
+        setCanDragResize(true);
+
+        centerInPage();
+    }
+
+
+    @Override
+    public void toLoad(ToLoad toLoad) {
+        destroy();
+        List<Recommendation> recs = toLoad.toRecommendations();
+        loadArtifacts(recs);
+    }
+
+
+    @Override
+    public void onDoubleClick(ToLoad toLoad) {
+        destroy();
+        List<Recommendation> recs = toLoad.toRecommendations();
+        loadArtifacts(recs);
+    }
+
+
+    @Override
+    public void addRedrawRequestHandler(RedrawRequestHandler handler) {
+        if (handler != null) {
+            handlers.add(handler);
+        }
+    }
+
+
+    protected String findRiver(Artifact artifact) {
+        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 "";
+    }
+
+
+    protected void decreateInProgress() {
+        if (this.inProgress > 0) {
+            this.inProgress--;
+        }
+
+        if (this.inProgress == 0) {
+            fireRedrawRequest();
+        }
+    }
+
+
+    protected void fireRedrawRequest() {
+        RedrawRequestEvent evt = new RedrawRequestEvent(Type.DEFAULT);
+
+        for (RedrawRequestHandler handler: handlers) {
+            handler.onRedrawRequest(evt);
+        }
+    }
+
+
+    protected void loadArtifacts(List<Recommendation> recommendations) {
+        Config cfg = Config.getInstance();
+
+        final Collection collection     = view.getCollection();
+        final Artifact   masterArtifact = view.getArtifact();
+        final String     locale         = cfg.getLocale();
+
+        this.inProgress = recommendations.size();
+
+        for (final Recommendation recommendation: recommendations) {
+            // XXX: UGLY! If no reference artifact given use uuid of
+            //      current artifact as reference.
+            if (recommendation.getMasterArtifact() == null) {
+                recommendation.setMasterArtifact(masterArtifact.getUuid());
+            }
+
+            final String factory = recommendation.getFactory();
+
+            GWT.log("Load new artifact with factory: " + factory);
+
+            loadService.load(
+                collection,
+                recommendation,
+                factory,
+                locale,
+                new AsyncCallback<Artifact>() {
+                    public void onFailure(Throwable caught) {
+                        decreateInProgress();
+                        GWT.log("Create-artifact failed: " + caught.getMessage());
+                        SC.warn(caught.getMessage());
+                    }
+
+                    public void onSuccess(Artifact artifact) {
+                        decreateInProgress();
+                        GWT.log("Created new artifact: " + artifact.getUuid());
+                    }
+            });
+        }
+    }
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org