org.nuxeo.opensocial.container.client.external.picture.PicturePresenter.java Source code

Java tutorial

Introduction

Here is the source code for org.nuxeo.opensocial.container.client.external.picture.PicturePresenter.java

Source

/*
 * (C) Copyright 2011 Nuxeo SA (http://nuxeo.com/) and contributors.
 *
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the GNU Lesser General Public License
 * (LGPL) version 2.1 which accompanies this distribution, and is available at
 * http://www.gnu.org/licenses/lgpl.html
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * Contributors:
 *     Stphane Fourrier
 */

package org.nuxeo.opensocial.container.client.external.picture;

import java.util.ArrayList;
import java.util.List;

import net.customware.gwt.presenter.client.EventBus;
import net.customware.gwt.presenter.client.place.Place;
import net.customware.gwt.presenter.client.place.PlaceRequest;
import net.customware.gwt.presenter.client.widget.WidgetDisplay;
import net.customware.gwt.presenter.client.widget.WidgetPresenter;

import org.nuxeo.gwt.habyt.upload.client.FileChanges;
import org.nuxeo.gwt.habyt.upload.client.FileRef;
import org.nuxeo.opensocial.container.client.ContainerConfiguration;
import org.nuxeo.opensocial.container.client.event.priv.app.portlet.WebContentUpdatedEvent;
import org.nuxeo.opensocial.container.client.event.priv.app.portlet.WebContentUpdatedEventHandler;
import org.nuxeo.opensocial.container.client.event.publ.UpdateWebContentEvent;
import org.nuxeo.opensocial.container.client.external.FileUtils;
import org.nuxeo.opensocial.container.shared.PermissionsConstants;
import org.nuxeo.opensocial.container.shared.webcontent.PictureData;

import com.google.gwt.dom.client.Style;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.HasText;
import com.google.gwt.user.client.ui.Image;

/**
 * @author Stphane Fourrier
 */
public class PicturePresenter extends WidgetPresenter<PicturePresenter.Display> {

    public interface Display extends WidgetDisplay {
        Image getPicture();

        HasClickHandlers getModifyButton();

        HasClickHandlers getSaveButton();

        HasClickHandlers getCancelButton();

        FileChanges getUploadedFiles();

        HasText getTitleTextBox();

        HasText getPictureTitle();

        HasText getLinkTextBox();

        HasText getLegendTextBox();

        void enableModifPanel(String baseUrl);

        void switchToModifyPanel();

        void switchToMainPanel();

        void enableFacets();

        void initializeUploadSource(String baseUrl);
    }

    public static final Place PLACE = null;

    protected static final String HTTP_PREFIX = "http://";

    private PictureModel model;

    public PicturePresenter(Display display, EventBus eventBus, PictureModel model) {
        super(display, eventBus);

        this.model = model;
        fetchContent();
    }

    private void fetchContent() {
        setPictureUrl();
        setPictureStyle();
        setPictureTitle();
        setPictureLegend();

        if (model.hasPermission(PermissionsConstants.EVERYTHING)) {
            display.enableFacets();
            display.enableModifPanel(FileUtils.getBaseUrl());
        }
    }

    private void setPictureLegend() {
        display.getPicture().getElement().setTitle(model.getData().getPictureLegend());
    }

    private void setPictureTitle() {
        display.getPictureTitle().setText(model.getData().getPictureTitle());
    }

    private void setPictureStyle() {
        if (model.getData().getPictureLink() != null && !model.getData().getPictureLink().isEmpty()) {
            display.getPicture().getElement().getStyle().setCursor(Style.Cursor.POINTER);
        } else {
            display.getPicture().getElement().getStyle().setCursor(Style.Cursor.DEFAULT);
        }
    }

    private void setPictureUrl() {
        display.getPicture().setUrl(FileUtils.buildFileUrl(ContainerConfiguration.getRepositoryName(),
                model.getData().getId(), "content"));
    }

    @Override
    public Place getPlace() {
        return PLACE;
    }

    @Override
    protected void onBind() {
        registerImageClick();
        if (model.hasPermission(PermissionsConstants.EVERYTHING)) {
            registerModifyEvent();
            registerSaveButtonEvent();
            registerCancelButtonEvent();
            registerPictureUpdate();
        }
    }

    private void registerImageClick() {
        display.getPicture().addClickHandler(new ClickHandler() {
            public void onClick(ClickEvent event) {
                String url = model.getData().getPictureLink();
                if (url != null && !url.isEmpty()) {
                    Window.open(url, "_blank", null);
                }
            }
        });
    }

    private native String getBaseUrl() /*-{
                                       return $wnd.nuxeo.baseURL;
                                       }-*/;

    @Override
    protected void onPlaceRequest(PlaceRequest request) {
    }

    @Override
    protected void onUnbind() {
    }

    public void refreshDisplay() {
    }

    public void revealDisplay() {
    }

    private void registerModifyEvent() {
        registerHandler(display.getModifyButton().addClickHandler(new ClickHandler() {
            public void onClick(ClickEvent event) {
                display.getTitleTextBox().setText(model.getData().getPictureTitle());
                display.getLinkTextBox().setText(model.getData().getPictureLink());
                display.getLegendTextBox().setText(model.getData().getPictureLegend());

                display.switchToModifyPanel();
            }
        }));
    }

    private void registerSaveButtonEvent() {
        registerHandler(display.getSaveButton().addClickHandler(new ClickHandler() {
            public void onClick(ClickEvent event) {
                PictureData picData = model.getData();

                List<FileRef> fileRefList = display.getUploadedFiles().getAddedFiles();
                List<String> files = new ArrayList<String>();

                for (FileRef ref : fileRefList) {
                    files.add(ref.getId());
                }

                picData.setPictureTitle(display.getTitleTextBox().getText());
                picData.setPictureLegend(display.getLegendTextBox().getText());
                String link = display.getLinkTextBox().getText();
                if (!link.isEmpty() && !link.startsWith(HTTP_PREFIX)) {
                    link = HTTP_PREFIX + link;
                }
                picData.setPictureLink(link);

                display.initializeUploadSource(FileUtils.getBaseUrl());

                eventBus.fireEvent(new UpdateWebContentEvent(model.getData().getId(), files));
            }
        }));
    }

    private void registerPictureUpdate() {
        eventBus.addHandler(WebContentUpdatedEvent.TYPE, new WebContentUpdatedEventHandler() {
            public void onWebContentUpdated(WebContentUpdatedEvent event) {
                if (event.getWebContentId().equals(model.getData().getId())) {
                    setPictureTitle();
                    setPictureLegend();
                    setPictureUrl();
                    setPictureStyle();
                    display.switchToMainPanel();
                }
            }
        });
    }

    private void registerCancelButtonEvent() {
        registerHandler(display.getCancelButton().addClickHandler(new ClickHandler() {
            public void onClick(ClickEvent event) {
                display.switchToMainPanel();
            }
        }));
    }
}