ingo@862: package de.intevation.flys.client.client.ui; ingo@862: ingo@862: import com.google.gwt.core.client.GWT; ingo@862: import com.google.gwt.user.client.Timer; ingo@865: import com.google.gwt.user.client.rpc.AsyncCallback; ingo@862: ingo@862: import com.smartgwt.client.types.Alignment; ingo@862: import com.smartgwt.client.types.Positioning; ingo@862: import com.smartgwt.client.widgets.Canvas; ingo@862: import com.smartgwt.client.widgets.Label; ingo@862: import com.smartgwt.client.widgets.layout.HLayout; ingo@862: ingo@865: import de.intevation.flys.client.client.Config; ingo@865: import de.intevation.flys.client.client.services.DescribeArtifactService; ingo@865: import de.intevation.flys.client.client.services.DescribeArtifactServiceAsync; ingo@862: import de.intevation.flys.client.shared.model.Artifact; ingo@862: ingo@862: ingo@862: public class LoadingPanel extends Canvas { ingo@862: ingo@865: public static final int UPDATE_INTERVAL = 1000 * 10; ingo@865: ingo@865: public static final DescribeArtifactServiceAsync describe = ingo@865: GWT.create(DescribeArtifactService.class); ingo@865: ingo@862: ingo@862: protected CollectionView parent; ingo@862: protected Artifact artifact; ingo@862: ingo@862: protected HLayout dialog; ingo@862: protected Label msg; ingo@862: ingo@862: protected int i; ingo@862: ingo@862: ingo@862: public LoadingPanel(CollectionView parent, Artifact artifact) { ingo@862: super(); ingo@862: ingo@862: this.parent = parent; ingo@862: this.artifact = artifact; ingo@862: this.msg = new Label(); ingo@862: this.dialog = createDialog(); ingo@862: ingo@862: this.i = 0; ingo@862: ingo@862: initLayout(); ingo@862: startTimer(); ingo@862: } ingo@862: ingo@862: ingo@862: private void initLayout() { ingo@862: setWidth("100%"); ingo@862: setHeight("98%"); ingo@862: setBackgroundColor("#22AAFF"); ingo@862: setOpacity(50); ingo@862: setPosition(Positioning.RELATIVE); ingo@862: ingo@862: parent.addChild(this); ingo@862: parent.addChild(dialog); ingo@862: dialog.moveTo(0, 20); ingo@862: moveTo(0, 7); ingo@862: } ingo@862: ingo@862: ingo@865: public void setArtifact(Artifact artifact) { ingo@865: this.artifact = artifact; ingo@865: } ingo@865: ingo@865: ingo@862: protected HLayout createDialog() { ingo@862: msg.setStyleName("loading-message"); ingo@862: msg.setWidth(200); ingo@862: msg.setHeight(100); ingo@862: ingo@862: dialog = new HLayout(); ingo@862: dialog.setDefaultLayoutAlign(Alignment.CENTER); ingo@862: dialog.setAlign(Alignment.CENTER); ingo@862: dialog.setWidth100(); ingo@862: dialog.setHeight100(); ingo@862: dialog.setBorder("1px solid green"); ingo@862: ingo@862: dialog.addMember(msg); ingo@862: ingo@862: return dialog; ingo@862: } ingo@862: ingo@862: ingo@862: private void startTimer() { ingo@862: Timer t = new Timer() { ingo@862: @Override ingo@862: public void run() { ingo@862: update(); ingo@862: } ingo@862: }; ingo@862: t.schedule(UPDATE_INTERVAL); ingo@862: } ingo@862: ingo@862: ingo@865: protected void update() { ingo@862: msg.setContents("This is update -> " + String.valueOf(i++)); ingo@862: ingo@865: final Config config = Config.getInstance(); ingo@865: final String url = config.getServerUrl(); ingo@865: final String locale = config.getLocale(); ingo@862: ingo@865: describe.describe(url, locale, artifact, new AsyncCallback() { ingo@865: public void onFailure(Throwable t) { ingo@865: GWT.log("Error while DESCRIBE artifact: " + t.getMessage()); ingo@865: // SC.warn()... ingo@865: startTimer(); ingo@865: } ingo@862: ingo@865: public void onSuccess(Artifact artifact) { ingo@865: GWT.log("Successfully DESCRIBE artifact."); ingo@865: ingo@865: setArtifact(artifact); ingo@865: ingo@865: if (artifact.isInBackground()) { ingo@865: startTimer(); ingo@865: } ingo@865: else { ingo@865: finish(); ingo@865: } ingo@865: } ingo@865: }); ingo@862: } ingo@862: ingo@862: ingo@862: private void finish() { ingo@862: parent.removeChild(this); ingo@862: parent.removeChild(dialog); ingo@862: } ingo@862: } ingo@862: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :