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@19: import de.intevation.flys.client.shared.model.DefaultCollection;
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@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@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@7: * This method creates a Canvas displaying the plugins of FLYS.
ingo@7: *
ingo@7: * @return a Canvas that displays the plugins of FLYS.
ingo@7: */
ingo@7: protected Canvas renderNew() {
ingo@23: VLayout newLayout = new VLayout();
ingo@7:
ingo@7: DynamicForm form = new DynamicForm();
ingo@7: RadioGroupItem radio = new RadioGroupItem("plugin");
ingo@7:
ingo@7: radio.setShowTitle(false);
ingo@7: radio.setVertical(false);
ingo@7: radio.setValueMap(
ingo@7: messages.winfo(),
ingo@7: messages.minfo(),
ingo@7: messages.map(),
ingo@7: messages.fix());
ingo@7:
ingo@7: form.setFields(radio);
ingo@7:
ingo@13: IButton go = new IButton(messages.next());
ingo@13: go.addClickHandler(new ClickHandler() {
ingo@13: public void onClick(ClickEvent event) {
ingo@14: String serverUrl = Config.getInstance().getServerUrl();
ingo@13:
ingo@14: artifactService.create(
ingo@14: serverUrl, "winfo",
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@19: Collection c = new DefaultCollection("TODO");
ingo@23:
ingo@19: c.addArtifact(artifact);
ingo@19: setCollection(c);
ingo@14: }
ingo@13: });
ingo@13: }
ingo@13: });
ingo@13:
ingo@23: newLayout.addMember(form);
ingo@23: newLayout.addMember(go);
ingo@7:
ingo@23: return newLayout;
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 :