ingo@6: package de.intevation.flys.client.client.ui; ingo@6: ingo@19: import java.util.ArrayList; ingo@19: import java.util.List; ingo@19: ingo@6: import com.google.gwt.core.client.GWT; ingo@6: import com.google.gwt.i18n.client.DateTimeFormat; ingo@13: import com.google.gwt.user.client.rpc.AsyncCallback; ingo@6: ingo@7: import com.smartgwt.client.widgets.Canvas; ingo@13: import com.smartgwt.client.widgets.IButton; ingo@6: import com.smartgwt.client.widgets.Window; ingo@13: import com.smartgwt.client.widgets.events.ClickEvent; ingo@13: import com.smartgwt.client.widgets.events.ClickHandler; ingo@7: import com.smartgwt.client.widgets.form.DynamicForm; ingo@7: import com.smartgwt.client.widgets.form.fields.RadioGroupItem; ingo@23: import com.smartgwt.client.widgets.layout.Layout; ingo@7: import com.smartgwt.client.widgets.layout.VLayout; ingo@7: import com.smartgwt.client.widgets.tab.Tab; ingo@23: import com.smartgwt.client.widgets.tab.TabSet; ingo@6: ingo@13: import de.intevation.flys.client.shared.model.Artifact; ingo@23: import de.intevation.flys.client.shared.model.ArtifactDescription; ingo@6: import de.intevation.flys.client.shared.model.Collection; ingo@23: import de.intevation.flys.client.shared.model.Data; ingo@30: import de.intevation.flys.client.shared.model.DataItem; ingo@30: import de.intevation.flys.client.shared.model.DefaultData; ingo@30: import de.intevation.flys.client.shared.model.DefaultDataItem; ingo@19: import de.intevation.flys.client.shared.model.DefaultCollection; ingo@30: import de.intevation.flys.client.shared.model.River; ingo@6: ingo@14: import de.intevation.flys.client.client.Config; ingo@13: import de.intevation.flys.client.client.FLYS; ingo@6: import de.intevation.flys.client.client.FLYSMessages; ingo@19: import de.intevation.flys.client.client.event.HasCollectionChangeHandlers; ingo@23: import de.intevation.flys.client.client.event.HasStepForwardHandlers; ingo@19: import de.intevation.flys.client.client.event.CollectionChangeEvent; ingo@23: import de.intevation.flys.client.client.event.StepForwardEvent; ingo@23: import de.intevation.flys.client.client.event.StepForwardHandler; ingo@19: import de.intevation.flys.client.client.event.CollectionChangeHandler; ingo@13: import de.intevation.flys.client.client.services.ArtifactService; ingo@13: import de.intevation.flys.client.client.services.ArtifactServiceAsync; ingo@26: import de.intevation.flys.client.client.services.CreateCollectionService; ingo@26: import de.intevation.flys.client.client.services.CreateCollectionServiceAsync; ingo@30: import de.intevation.flys.client.client.ui.ModuleSelection; ingo@6: ingo@6: ingo@6: /** ingo@6: * @author Ingo Weinzierl ingo@6: */ ingo@19: public class CollectionView ingo@19: extends Window ingo@23: implements CollectionChangeHandler, HasCollectionChangeHandlers, ingo@23: StepForwardHandler ingo@23: { ingo@13: /** The ArtifactService used to communicate with the Artifact server. */ ingo@13: protected ArtifactServiceAsync artifactService = ingo@13: GWT.create(ArtifactService.class); ingo@13: ingo@26: /** The ArtifactService used to communicate with the Artifact server. */ ingo@26: protected CreateCollectionServiceAsync createCollectionService = ingo@26: GWT.create(CreateCollectionService.class); ingo@26: ingo@6: /** The message class that provides i18n strings.*/ ingo@6: FLYSMessages messages = GWT.create(FLYSMessages.class); ingo@6: ingo@13: /** The FLYS instance used to call services.*/ ingo@13: protected FLYS flys; ingo@13: ingo@23: /** The ParameterList.*/ ingo@23: protected ParameterList parameterList; ingo@23: ingo@19: /** The list of ValueChangeHandlers.*/ ingo@19: protected List handlers; ingo@19: ingo@6: /** The collection to be displayed.*/ ingo@6: protected Collection collection; ingo@6: ingo@30: /** The artifact that handles the parameterization.*/ ingo@30: protected Artifact artifact; ingo@30: ingo@23: protected TabSet tabs; ingo@23: ingo@7: /** The parameter tab.*/ ingo@7: protected Tab parameterTab; ingo@7: ingo@7: /** The output tab.*/ ingo@7: protected Tab outputTab; ingo@7: ingo@23: /** The layout.*/ ingo@23: protected Layout layout; ingo@23: ingo@6: ingo@6: /** ingo@6: * This constructor creates a new CollectionView that is used to display the ingo@6: * collection. ingo@6: * ingo@6: * @param collection The collection to be displayed. ingo@6: */ ingo@13: public CollectionView(FLYS flys, Collection collection) { ingo@13: this.flys = flys; ingo@6: this.collection = collection; ingo@6: ingo@23: this.tabs = new TabSet(); ingo@23: this.parameterTab = new Tab(messages.winfo()); ingo@23: this.parameterList = new ParameterList(); ingo@23: this.handlers = new ArrayList(); ingo@23: this.layout = new VLayout(); ingo@19: ingo@19: addCollectionChangeHandler(this); ingo@19: ingo@6: init(); ingo@6: } ingo@6: ingo@6: ingo@6: /** ingo@6: * This method handles the initial layout stuff. ingo@6: */ ingo@6: protected void init() { ingo@6: setWidth(600); ingo@6: setHeight(400); ingo@6: ingo@23: layout.setWidth100(); ingo@23: ingo@6: setCanDragResize(true); ingo@6: ingo@6: DateTimeFormat dtf = DateTimeFormat.getFormat(messages.date_format()); ingo@6: String lastAccess = dtf.format(collection.getLastAccess()); ingo@6: setTitle(lastAccess + " - " + collection.getName()); ingo@7: ingo@7: addItem(layout); ingo@7: ingo@23: layout.addMember(tabs); ingo@23: tabs.addTab(parameterTab); ingo@23: ingo@7: if (isNew()) { ingo@23: tabs.setTabTitle(0, "MODUL"); ingo@23: tabs.updateTab(0, renderNew()); ingo@7: } ingo@7: } ingo@7: ingo@7: ingo@7: /** ingo@26: * This method triggers the CreateCollectionService to create a new ingo@26: * collection in the artifact server. ingo@26: * ingo@26: * @param ownerId The uuid of the user that should own the new collection. ingo@26: */ ingo@26: protected void createNewCollection(String ownerId) { ingo@26: Config config = Config.getInstance(); ingo@26: String serverUrl = config.getServerUrl(); ingo@26: ingo@26: createCollectionService.create( ingo@26: serverUrl, ownerId, ingo@26: new AsyncCallback() { ingo@26: public void onFailure(Throwable caught) { ingo@26: GWT.log("Could not create the new collection."); ingo@26: GWT.log(caught.getMessage()); ingo@26: } ingo@26: ingo@26: public void onSuccess(String uuid) { ingo@26: GWT.log("Successfully created a new collection."); ingo@26: GWT.log("NEW collection uuid: " + uuid); ingo@26: } ingo@26: }); ingo@26: } ingo@26: ingo@26: ingo@26: protected FLYS getFlys() { ingo@26: return flys; ingo@26: } ingo@26: ingo@26: ingo@26: ingo@26: /** ingo@19: * This method registers a new ValueChangeHandler. ingo@19: * ingo@19: * @param handler The new ValueChangeHandler. ingo@19: */ ingo@19: public void addCollectionChangeHandler(CollectionChangeHandler handler) { ingo@19: if (handler != null) { ingo@19: handlers.add(handler); ingo@19: } ingo@19: } ingo@19: ingo@19: ingo@19: /** ingo@19: * This method calls the onValueChange() method of all ingo@19: * registered ValueChangeHanders. ingo@19: */ ingo@19: protected void fireCollectionChangeEvent( ingo@19: Collection old, Collection newCol) ingo@19: { ingo@19: for (CollectionChangeHandler handler: handlers) { ingo@19: handler.onCollectionChange(new CollectionChangeEvent(old, newCol)); ingo@19: } ingo@19: } ingo@19: ingo@19: ingo@19: /** ingo@7: * This method returns true, if the Collection is new and no plugins has ingo@7: * been chosen. ingo@7: * ingo@7: * @return true, if the Collection is new. ingo@7: */ ingo@7: public boolean isNew() { ingo@19: return collection.getArtifactLength() == 0 ? true : false; ingo@7: } ingo@7: ingo@7: ingo@7: /** ingo@30: * This method creates a Canvas displaying the plugins of FLYS combined with ingo@30: * a widget to select a river. ingo@7: * ingo@30: * @return a Canvas that displays the supported plugins and rivers of FLYS. ingo@7: */ ingo@7: protected Canvas renderNew() { ingo@30: River[] rivers = flys.getRivers(); ingo@30: DataItem[] items = new DataItem[rivers.length]; ingo@7: ingo@30: int i = 0; ingo@30: for (River river: rivers) { ingo@30: String name = river.getName(); ingo@30: items[i++] = new DefaultDataItem(name, null, name); ingo@30: } ingo@7: ingo@30: Data data = new DefaultData( ingo@30: "RIVER", "RIVER SELECTION", null, items, null); ingo@7: ingo@30: ModuleSelection widget = new ModuleSelection(); ingo@30: HasStepForwardHandlers handler = (HasStepForwardHandlers) widget; ingo@30: ingo@30: handler.addStepForwardHandler(new StepForwardHandler() { ingo@30: public void onStepForward(StepForwardEvent event) { ingo@30: Data[] data = event.getData(); ingo@30: ingo@30: DataItem[] moduleItems = data[0].getItems(); ingo@30: DataItem[] riversItems = data[1].getItems(); ingo@30: ingo@30: String module = moduleItems[0].getStringValue(); ingo@30: String river = riversItems[0].getStringValue(); ingo@30: ingo@14: String serverUrl = Config.getInstance().getServerUrl(); ingo@14: artifactService.create( ingo@30: serverUrl, module.toLowerCase(), ingo@14: new AsyncCallback() { ingo@14: public void onFailure(Throwable caught) { ingo@14: GWT.log("Could not create the new artifact."); ingo@14: GWT.log(caught.getMessage()); ingo@14: } ingo@14: ingo@14: public void onSuccess(Artifact artifact) { ingo@14: GWT.log("Successfully created a new artifact."); ingo@30: setArtifact(artifact); ingo@23: ingo@30: GWT.log("TODO: FEED WITH RIVER!"); ingo@14: } ingo@13: }); ingo@13: } ingo@13: }); ingo@13: ingo@30: return widget.create(data); ingo@30: } ingo@7: ingo@30: ingo@30: /** ingo@30: * Set the current artifact that is the master of the parameterization. ingo@30: * ingo@30: * @param artifact The new artifact. ingo@30: */ ingo@30: protected void setArtifact(Artifact artifact) { ingo@30: this.artifact = artifact; ingo@6: } ingo@13: ingo@13: ingo@13: /** ingo@19: * Set the current collection. ingo@13: * ingo@19: * @param collection The new collection. ingo@13: */ ingo@19: protected void setCollection(Collection collection) { ingo@19: Collection tmp = this.collection; ingo@19: this.collection = collection; ingo@13: ingo@19: fireCollectionChangeEvent(tmp, this.collection); ingo@19: } ingo@19: ingo@19: ingo@19: public void onCollectionChange(CollectionChangeEvent event) { ingo@13: updateView(); ingo@13: } ingo@13: ingo@13: ingo@23: public void onStepForward(StepForwardEvent event) { ingo@23: GWT.log("CollectionView - onStepForward()"); ingo@23: GWT.log("TODO: IMPLEMENT FEED!"); ingo@23: } ingo@23: ingo@23: ingo@23: /** ingo@23: * Update the view (refresh the list of old and current data). ingo@23: */ ingo@13: protected void updateView() { ingo@19: GWT.log("Update view of the collection: " + collection.identifier()); ingo@23: Artifact artifact = collection.getArtifact(0); ingo@23: ArtifactDescription desc = artifact.getArtifactDescription(); ingo@23: ingo@23: Data currentData = desc.getCurrentData(); ingo@23: if (currentData != null) { ingo@23: String uiProvider = currentData.getUIProvider(); ingo@23: UIProvider provider = UIProviderFactory.getProvider(uiProvider); ingo@23: ingo@23: HasStepForwardHandlers handler = (HasStepForwardHandlers) provider; ingo@23: handler.addStepForwardHandler(this); ingo@23: ingo@23: parameterList.setCurrentData(currentData, provider); ingo@23: } ingo@23: ingo@23: parameterList.addOldDatas(desc.getOldData()); ingo@23: ingo@23: tabs.setTabTitle(0, messages.winfo()); ingo@23: tabs.updateTab(0, parameterList); ingo@13: } ingo@6: } ingo@6: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :