teichmann@5835: package org.dive4elements.river.client.client.ui; sascha@276: ingo@911: import java.util.ArrayList; ingo@911: import java.util.List; ingo@911: sascha@276: import com.google.gwt.core.client.GWT; ingo@910: import com.google.gwt.user.client.rpc.AsyncCallback; sascha@276: ingo@910: import com.smartgwt.client.util.SC; sascha@276: import com.smartgwt.client.widgets.Window; sascha@821: teichmann@5835: import org.dive4elements.river.client.client.Config; teichmann@5835: import org.dive4elements.river.client.client.FLYSConstants; sascha@816: teichmann@5835: import org.dive4elements.river.client.client.event.DatacageHandler; teichmann@5835: import org.dive4elements.river.client.client.event.DatacageDoubleClickHandler; teichmann@5835: import org.dive4elements.river.client.client.event.HasRedrawRequestHandlers; teichmann@5835: import org.dive4elements.river.client.client.event.RedrawRequestHandler; teichmann@5835: import org.dive4elements.river.client.client.event.RedrawRequestEvent; teichmann@5835: import org.dive4elements.river.client.client.event.RedrawRequestEvent.Type; ingo@910: teichmann@5835: import org.dive4elements.river.client.client.services.LoadArtifactService; teichmann@5835: import org.dive4elements.river.client.client.services.LoadArtifactServiceAsync; teichmann@5835: teichmann@5835: import org.dive4elements.river.client.shared.model.Artifact; teichmann@5835: import org.dive4elements.river.client.shared.model.ArtifactDescription; teichmann@5835: import org.dive4elements.river.client.shared.model.Collection; teichmann@5835: import org.dive4elements.river.client.shared.model.Data; teichmann@5835: import org.dive4elements.river.client.shared.model.DataItem; teichmann@5835: import org.dive4elements.river.client.shared.model.DataList; teichmann@5835: import org.dive4elements.river.client.shared.model.ToLoad; teichmann@5835: import org.dive4elements.river.client.shared.model.User; teichmann@5835: import org.dive4elements.river.client.shared.model.Recommendation; sascha@276: sascha@814: felix@4869: /** Window that access the datacageservice and shows a datacagewidget. */ sascha@276: public class DatacageWindow sascha@276: extends Window ingo@1267: implements DatacageHandler, ingo@1267: DatacageDoubleClickHandler, ingo@1267: HasRedrawRequestHandlers sascha@276: { felix@1442: /** i18ner. */ sascha@276: protected FLYSConstants messages = sascha@276: GWT.create(FLYSConstants.class); sascha@276: felix@1442: /** Service to create/clone artifacts. */ ingo@910: protected LoadArtifactServiceAsync loadService = ingo@910: GWT.create(LoadArtifactService.class); ingo@910: sascha@848: protected CollectionView view; sascha@278: ingo@911: protected List handlers; ingo@911: ingo@911: protected int inProgress; ingo@911: ingo@911: sascha@848: public DatacageWindow( sascha@2905: Artifact artifact, sascha@848: User user, sascha@848: String outs, sascha@848: CollectionView view sascha@848: ) { ingo@911: this.view = view; ingo@911: this.handlers = new ArrayList(); ingo@911: this.inProgress = 0; ingo@911: sascha@848: setWidth(400); sascha@822: setHeight(500); sascha@278: felix@1374: DatacageWidget dw = new DatacageWidget( felix@1374: artifact, felix@1374: user, felix@1374: outs, felix@1374: "load-system:true", felix@1374: true); sascha@848: dw.addDatacageHandler(this); ingo@1267: dw.addDatacageDoubleClickHandler(this); sascha@821: sascha@848: addItem(dw); sascha@278: sascha@848: String river = findRiver(artifact); sascha@811: // TODO: i18n sascha@615: setTitle("Datenkorb: " + river); sascha@615: setShowMinimizeButton(false); sascha@615: setIsModal(true); sascha@615: setShowModalMask(true); sascha@278: setCanDragResize(true); sascha@278: sascha@276: centerInPage(); sascha@822: } sascha@822: felix@864: sascha@848: @Override sascha@848: public void toLoad(ToLoad toLoad) { sascha@848: destroy(); sascha@848: List recs = toLoad.toRecommendations(); bjoern@4381: loadArtifacts(recs); sascha@276: } sascha@276: felix@864: ingo@911: @Override ingo@1267: public void onDoubleClick(ToLoad toLoad) { ingo@1267: destroy(); ingo@1267: List recs = toLoad.toRecommendations(); bjoern@4381: loadArtifacts(recs); ingo@1267: } ingo@1267: ingo@1267: ingo@1267: @Override ingo@911: public void addRedrawRequestHandler(RedrawRequestHandler handler) { ingo@911: if (handler != null) { ingo@911: handlers.add(handler); ingo@911: } ingo@911: } ingo@911: ingo@911: sascha@848: protected String findRiver(Artifact artifact) { sascha@276: ArtifactDescription adescr = artifact.getArtifactDescription(); sascha@276: DataList [] data = adescr.getOldData(); sascha@276: sascha@276: if (data != null && data.length > 0) { sascha@276: for (int i = 0; i < data.length; i++) { sascha@276: DataList dl = data[i]; sascha@276: if (dl.getState().equals("state.winfo.river")) { sascha@276: for (int j = dl.size()-1; j >= 0; --j) { sascha@276: Data d = dl.get(j); sascha@276: DataItem [] di = d.getItems(); sascha@276: if (di != null && di.length == 1) { sascha@276: return d.getItems()[0].getStringValue(); sascha@276: } sascha@276: } sascha@276: } sascha@276: } sascha@276: } sascha@276: sascha@276: return ""; sascha@276: } ingo@910: ingo@910: ingo@911: protected void decreateInProgress() { ingo@911: if (this.inProgress > 0) { ingo@911: this.inProgress--; ingo@911: } ingo@911: ingo@911: if (this.inProgress == 0) { ingo@911: fireRedrawRequest(); ingo@911: } ingo@911: } ingo@911: ingo@911: ingo@911: protected void fireRedrawRequest() { ingo@911: RedrawRequestEvent evt = new RedrawRequestEvent(Type.DEFAULT); ingo@911: ingo@911: for (RedrawRequestHandler handler: handlers) { ingo@911: handler.onRedrawRequest(evt); ingo@911: } ingo@911: } ingo@911: ingo@911: bjoern@4381: protected void loadArtifacts(List recommendations) { ingo@910: Config cfg = Config.getInstance(); ingo@910: ingo@910: final Collection collection = view.getCollection(); ingo@910: final Artifact masterArtifact = view.getArtifact(); ingo@910: final String locale = cfg.getLocale(); ingo@910: bjoern@4381: this.inProgress = recommendations.size(); ingo@911: ingo@910: for (final Recommendation recommendation: recommendations) { ingo@910: // XXX: UGLY! If no reference artifact given use uuid of ingo@910: // current artifact as reference. ingo@910: if (recommendation.getMasterArtifact() == null) { ingo@910: recommendation.setMasterArtifact(masterArtifact.getUuid()); ingo@910: } ingo@910: ingo@910: final String factory = recommendation.getFactory(); ingo@910: ingo@910: GWT.log("Load new artifact with factory: " + factory); ingo@910: ingo@910: loadService.load( ingo@910: collection, ingo@910: recommendation, ingo@910: factory, ingo@910: locale, ingo@910: new AsyncCallback() { ingo@910: public void onFailure(Throwable caught) { ingo@911: decreateInProgress(); felix@1442: GWT.log("Create-artifact failed: " + caught.getMessage()); ingo@910: SC.warn(caught.getMessage()); ingo@910: } ingo@910: ingo@910: public void onSuccess(Artifact artifact) { ingo@911: decreateInProgress(); ingo@910: GWT.log("Created new artifact: " + artifact.getUuid()); ingo@910: } ingo@910: }); ingo@910: } ingo@910: } sascha@276: } sascha@276: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :