ingo@862: package de.intevation.flys.client.client.ui; ingo@862: ingo@870: import java.util.List; ingo@870: ingo@862: import com.google.gwt.core.client.GWT; ingo@870: import com.google.gwt.resources.client.ImageResource; 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@870: import com.smartgwt.client.types.VerticalAlignment; ingo@862: import com.smartgwt.client.widgets.Canvas; ingo@870: import com.smartgwt.client.widgets.Img; ingo@862: import com.smartgwt.client.widgets.Label; ingo@870: import com.smartgwt.client.widgets.layout.VLayout; ingo@862: ingo@865: import de.intevation.flys.client.client.Config; ingo@878: import de.intevation.flys.client.client.FLYSConstants; ingo@870: import de.intevation.flys.client.client.FLYSImages; 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@870: import de.intevation.flys.client.shared.model.CalculationMessage; ingo@862: ingo@862: ingo@862: public class LoadingPanel extends Canvas { ingo@862: ingo@870: public static final int UPDATE_INTERVAL = 1000 * 3; ingo@865: ingo@865: public static final DescribeArtifactServiceAsync describe = ingo@865: GWT.create(DescribeArtifactService.class); ingo@865: ingo@878: private FLYSImages IMAGES = GWT.create(FLYSImages.class); ingo@878: private FLYSConstants MSG = GWT.create(FLYSConstants.class); ingo@870: ingo@862: ingo@862: protected CollectionView parent; ingo@862: protected Artifact artifact; ingo@862: ingo@870: protected VLayout dialog; ingo@862: protected Label msg; ingo@870: protected Label title; 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@870: this.msg = new Label(""); ingo@870: this.title = 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%"); raimund@898: setBackgroundColor("#7f7f7f"); 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@870: protected VLayout createDialog() { ingo@870: title.setStyleName("loading-title"); ingo@870: title.setHeight(25); ingo@870: title.setWidth100(); ingo@870: ingo@862: msg.setStyleName("loading-message"); ingo@870: msg.setValign(VerticalAlignment.TOP); ingo@870: msg.setWidth100(); ingo@862: msg.setHeight(100); ingo@862: ingo@870: ImageResource res = IMAGES.loading(); ingo@870: Img img = new Img(res.getURL(), 25, 25); ingo@870: ingo@870: VLayout box = new VLayout(); ingo@870: box.setStyleName("loading-box"); ingo@870: box.setAlign(VerticalAlignment.TOP); ingo@870: box.setDefaultLayoutAlign(VerticalAlignment.TOP); ingo@870: box.addMember(title); ingo@870: box.addMember(msg); ingo@870: box.setMembersMargin(0); ingo@870: box.setHeight(125); ingo@870: box.setWidth(275); ingo@870: ingo@870: dialog = new VLayout(); ingo@870: dialog.setAlign(Alignment.CENTER); ingo@862: dialog.setDefaultLayoutAlign(Alignment.CENTER); ingo@870: dialog.setMembersMargin(5); ingo@870: dialog.setHeight100(); ingo@862: dialog.setWidth100(); ingo@862: ingo@870: dialog.addMember(img); ingo@870: dialog.addMember(box); 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@870: updateMessage(); 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@870: protected void updateMessage() { ingo@870: List messages = artifact.getBackgroundMessages(); ingo@870: if (messages != null && messages.size() > 0) { ingo@870: CalculationMessage calcMsg = messages.get(0); ingo@870: title.setContents(getStepTitle(calcMsg)); ingo@870: msg.setContents(calcMsg.getMessage()); ingo@870: } ingo@870: else { ingo@878: title.setContents(MSG.calculationStarted()); ingo@870: } ingo@870: } ingo@870: ingo@870: ingo@870: protected String getStepTitle(CalculationMessage msg) { ingo@878: return MSG.step() + " " + msg.getCurrentStep() + "/" + msg.getSteps(); ingo@870: } ingo@870: ingo@870: ingo@862: private void finish() { ingo@862: parent.removeChild(this); ingo@862: parent.removeChild(dialog); ingo@1270: parent.setArtifact(artifact); ingo@862: } ingo@862: } ingo@862: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :