# HG changeset patch # User Ingo Weinzierl # Date 1315403848 0 # Node ID c9549074ecd1ee3152ea197a7a2f30e0d08c21d8 # Parent 65204f30877b371287b0a299a4549a0fa04379be Parse Artifact's 'background-processing' attribute and lock the UI if this attribute is true. flys-client/trunk@2669 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r 65204f30877b -r c9549074ecd1 flys-client/ChangeLog --- a/flys-client/ChangeLog Wed Sep 07 10:40:56 2011 +0000 +++ b/flys-client/ChangeLog Wed Sep 07 13:57:28 2011 +0000 @@ -1,3 +1,28 @@ +2011-09-07 Ingo Weinzierl + + * src/main/java/de/intevation/flys/client/shared/model/Artifact.java,, + src/main/java/de/intevation/flys/client/shared/model/WINFOArtifact.java, + src/main/java/de/intevation/flys/client/shared/model/DefaultArtifact.java: + An Artifact got a method isInBackground() that returns true, if the + Artifact has been started a background thread in the Artifact-Server - + otherwise it returns false. + + * src/main/java/de/intevation/flys/client/server/FLYSArtifactCreator.java: + Parse the "background-processing" attribute from Artifact's DESCRIBE + document. + + * src/main/java/de/intevation/flys/client/client/ui/CollectionView.java: Add + a LoadingPanel if the new Artifact that is injected via setArtifact() is + in background mode. + + * src/main/java/de/intevation/flys/client/client/ui/LoadingPanel.java: New. + A window that places itself in front of another component - which disables + user interaction with the parent component. Currently, the loading panel + waits a few seconds an removes itself from parent component. + + * src/main/webapp/FLYS.css: Added a style for the loading panel's label + 'loading-message'. + 2011-09-07 Felix Wolfsteller Display Action Widget only for cross_section theme/facet. diff -r 65204f30877b -r c9549074ecd1 flys-client/src/main/java/de/intevation/flys/client/client/ui/CollectionView.java --- a/flys-client/src/main/java/de/intevation/flys/client/client/ui/CollectionView.java Wed Sep 07 10:40:56 2011 +0000 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/CollectionView.java Wed Sep 07 13:57:28 2011 +0000 @@ -326,6 +326,15 @@ */ public void setArtifact(Artifact artifact) { this.artifact = artifact; + + onArtifactChanged(artifact); + } + + + public void onArtifactChanged(Artifact artifact) { + if (artifact.isInBackground()) { + new LoadingPanel(this, artifact); + } } diff -r 65204f30877b -r c9549074ecd1 flys-client/src/main/java/de/intevation/flys/client/client/ui/LoadingPanel.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/LoadingPanel.java Wed Sep 07 13:57:28 2011 +0000 @@ -0,0 +1,107 @@ +package de.intevation.flys.client.client.ui; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.user.client.Timer; + +import com.smartgwt.client.types.Alignment; +import com.smartgwt.client.types.Positioning; +import com.smartgwt.client.types.VerticalAlignment; +import com.smartgwt.client.widgets.Canvas; +import com.smartgwt.client.widgets.Label; +import com.smartgwt.client.widgets.layout.HLayout; +import com.smartgwt.client.widgets.layout.VLayout; + +import de.intevation.flys.client.shared.model.Artifact; + + +public class LoadingPanel extends Canvas { + + public static final int UPDATE_INTERVAL = 1000 * 5; + + 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); + } + + + 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); + } + + + private void update() { + msg.setContents("This is update -> " + String.valueOf(i++)); + + // TODO FETCH ARTIFACT's DESCRIBE DOCUMENT AND REMOVE THIS LOADING PANEL + // IF IT IS NO LONGER IN BACKGROUND MODE! + + if (i == 5) { + finish(); + } + + startTimer(); + } + + + private void finish() { + parent.removeChild(this); + parent.removeChild(dialog); + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : diff -r 65204f30877b -r c9549074ecd1 flys-client/src/main/java/de/intevation/flys/client/server/FLYSArtifactCreator.java --- a/flys-client/src/main/java/de/intevation/flys/client/server/FLYSArtifactCreator.java Wed Sep 07 10:40:56 2011 +0000 +++ b/flys-client/src/main/java/de/intevation/flys/client/server/FLYSArtifactCreator.java Wed Sep 07 13:57:28 2011 +0000 @@ -30,6 +30,11 @@ /** The XPath to the artifact's name value.*/ public static final String XPATH_NAME = "/art:result/art:name/@art:value"; + /** The XPath to the value that determines if the artifact is processing in + * background.*/ + public static final String XPATH_BACKGROUND = + "/art:result/art:background-processing/@art:value"; + /** * Creates a new instance of an {@link ArtifactCreator}. @@ -76,22 +81,31 @@ String name = XMLUtils.xpathString( doc, XPATH_NAME, ArtifactNamespaceContext.INSTANCE); + String backgroundStr = XMLUtils.xpathString( + doc, XPATH_BACKGROUND, ArtifactNamespaceContext.INSTANCE); + + boolean background = false; + if (backgroundStr != null && backgroundStr.length() > 0) { + background = Boolean.valueOf(backgroundStr); + } + System.out.println("NEW Artifact UUID: " + uuid); System.out.println("NEW Artifact HASH: " + hash); System.out.println("NEW Artifact NAME: " + name); + System.out.println("NEW Artifact IN BACKGROUND: " + background); if (name == null) { - return new DefaultArtifact(uuid, hash); + return new DefaultArtifact(uuid, hash, background); } name = name.trim(); if (name.length() > 0 && name.equals("winfo")) { System.out.println("+++++ NEW WINFO ARTIFACT."); - return new WINFOArtifact(uuid, hash); + return new WINFOArtifact(uuid, hash, background); } - return new DefaultArtifact(uuid, hash); + return new DefaultArtifact(uuid, hash, background); } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : diff -r 65204f30877b -r c9549074ecd1 flys-client/src/main/java/de/intevation/flys/client/shared/model/Artifact.java --- a/flys-client/src/main/java/de/intevation/flys/client/shared/model/Artifact.java Wed Sep 07 10:40:56 2011 +0000 +++ b/flys-client/src/main/java/de/intevation/flys/client/shared/model/Artifact.java Wed Sep 07 13:57:28 2011 +0000 @@ -43,6 +43,14 @@ /** + * Returns true, if the Artifact is in Background mode. + * + * @return true, if the artifact is in background mode. + */ + public boolean isInBackground(); + + + /** * Sets a new ArtifactDescription. * * @param artifactDescription The new artifact description. diff -r 65204f30877b -r c9549074ecd1 flys-client/src/main/java/de/intevation/flys/client/shared/model/DefaultArtifact.java --- a/flys-client/src/main/java/de/intevation/flys/client/shared/model/DefaultArtifact.java Wed Sep 07 10:40:56 2011 +0000 +++ b/flys-client/src/main/java/de/intevation/flys/client/shared/model/DefaultArtifact.java Wed Sep 07 13:57:28 2011 +0000 @@ -14,6 +14,9 @@ /** The artifacts hash value. */ protected String hash; + /** Determines if the artifact is in background mode.*/ + protected boolean inBackground; + /** The current artifact description. */ protected ArtifactDescription artifactDescription; @@ -26,15 +29,21 @@ } + public DefaultArtifact(String uuid, String hash) { + this(uuid, hash, false); + } + + /** * This constructor creates a new artifact instance with a uuid and a hash. * * @param uuid The artifact's uuid. * @param hash The artifact's hash. */ - public DefaultArtifact(String uuid, String hash) { - this.uuid = uuid; - this.hash = hash; + public DefaultArtifact(String uuid, String hash, boolean inBackground) { + this.uuid = uuid; + this.hash = hash; + this.inBackground = inBackground; } @@ -53,6 +62,11 @@ } + public boolean isInBackground() { + return inBackground; + } + + public ArtifactDescription getArtifactDescription() { return artifactDescription; } diff -r 65204f30877b -r c9549074ecd1 flys-client/src/main/java/de/intevation/flys/client/shared/model/WINFOArtifact.java --- a/flys-client/src/main/java/de/intevation/flys/client/shared/model/WINFOArtifact.java Wed Sep 07 10:40:56 2011 +0000 +++ b/flys-client/src/main/java/de/intevation/flys/client/shared/model/WINFOArtifact.java Wed Sep 07 13:57:28 2011 +0000 @@ -21,6 +21,11 @@ } + public WINFOArtifact(String uuid, String hash, boolean inBackground) { + super(uuid, hash, inBackground); + } + + public String getName() { return NAME; } diff -r 65204f30877b -r c9549074ecd1 flys-client/src/main/webapp/FLYS.css --- a/flys-client/src/main/webapp/FLYS.css Wed Sep 07 10:40:56 2011 +0000 +++ b/flys-client/src/main/webapp/FLYS.css Wed Sep 07 13:57:28 2011 +0000 @@ -107,3 +107,12 @@ font-weight: 400; color: #000000; } + +.loading-message { + background: white; + border: 1px solid black; + color: red; + font-size: 20px; + font-style: normal; + font-weight: bolder; +}