view flys-client/src/main/java/de/intevation/flys/client/client/ui/LoadingPanel.java @ 865:43f520f923a8

Remove the loading panel when its Artifact's background process is finished. flys-client/trunk@2672 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Thu, 08 Sep 2011 07:44:05 +0000
parents c9549074ecd1
children d5fb88ba99d2
line wrap: on
line source
package de.intevation.flys.client.client.ui;

import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.rpc.AsyncCallback;

import com.smartgwt.client.types.Alignment;
import com.smartgwt.client.types.Positioning;
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.Label;
import com.smartgwt.client.widgets.layout.HLayout;

import de.intevation.flys.client.client.Config;
import de.intevation.flys.client.client.services.DescribeArtifactService;
import de.intevation.flys.client.client.services.DescribeArtifactServiceAsync;
import de.intevation.flys.client.shared.model.Artifact;


public class LoadingPanel extends Canvas {

    public static final int UPDATE_INTERVAL = 1000 * 10;

    public static final DescribeArtifactServiceAsync describe =
        GWT.create(DescribeArtifactService.class);


    protected CollectionView parent;
    protected Artifact       artifact;

    protected HLayout dialog;
    protected Label   msg;

    protected int i;


    public LoadingPanel(CollectionView parent, Artifact artifact) {
        super();

        this.parent   = parent;
        this.artifact = artifact;
        this.msg      = new Label();
        this.dialog   = createDialog();

        this.i = 0;

        initLayout();
        startTimer();
    }


    private void initLayout() {
        setWidth("100%");
        setHeight("98%");
        setBackgroundColor("#22AAFF");
        setOpacity(50);
        setPosition(Positioning.RELATIVE);

        parent.addChild(this);
        parent.addChild(dialog);
        dialog.moveTo(0, 20);
        moveTo(0, 7);
    }


    public void setArtifact(Artifact artifact) {
        this.artifact = artifact;
    }


    protected HLayout createDialog() {
        msg.setStyleName("loading-message");
        msg.setWidth(200);
        msg.setHeight(100);

        dialog = new HLayout();
        dialog.setDefaultLayoutAlign(Alignment.CENTER);
        dialog.setAlign(Alignment.CENTER);
        dialog.setWidth100();
        dialog.setHeight100();
        dialog.setBorder("1px solid green");

        dialog.addMember(msg);

        return dialog;
    }


    private void startTimer() {
        Timer t = new Timer() {
            @Override
            public void run() {
                update();
            }
        };
        t.schedule(UPDATE_INTERVAL);
    }


    protected void update() {
        msg.setContents("This is update -> " + String.valueOf(i++));

        final Config config = Config.getInstance();
        final String url    = config.getServerUrl();
        final String locale = config.getLocale();

        describe.describe(url, locale, artifact, new AsyncCallback<Artifact>() {
            public void onFailure(Throwable t) {
                GWT.log("Error while DESCRIBE artifact: " + t.getMessage());
                // SC.warn()...
                startTimer();
            }

            public void onSuccess(Artifact artifact) {
                GWT.log("Successfully DESCRIBE artifact.");

                setArtifact(artifact);

                if (artifact.isInBackground()) {
                    startTimer();
                }
                else {
                    finish();
                }
            }
        });
    }


    private void finish() {
        parent.removeChild(this);
        parent.removeChild(dialog);
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org