cc.kune.gspace.client.viewers.ContentViewerPanel.java Source code

Java tutorial

Introduction

Here is the source code for cc.kune.gspace.client.viewers.ContentViewerPanel.java

Source

/*
 *
 * Copyright (C) 2007-2015 Licensed to the Comunes Association (CA) under
 * one or more contributor license agreements (see COPYRIGHT for details).
 * The CA licenses this file to you under the GNU Affero General Public
 * License version 3, (the "License"); you may not use this file except in
 * compliance with the License. This file is part of kune.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 *
 * This program 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 Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 */
package cc.kune.gspace.client.viewers;

import com.google.gwt.core.client.Callback;
import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.ScriptInjector;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Widget;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.web.bindery.event.shared.EventBus;

import cc.kune.common.client.actions.BeforeActionListener;
import cc.kune.common.client.actions.ui.IsActionExtensible;
import cc.kune.common.client.actions.ui.descrip.GuiActionDescCollection;
import cc.kune.common.client.log.Log;
import cc.kune.common.client.ui.EditableLabel;
import cc.kune.common.client.ui.HasEditHandler;
import cc.kune.common.client.ui.UiUtils;
import cc.kune.common.shared.i18n.I18nTranslationService;
import cc.kune.core.client.registry.ContentCapabilitiesRegistry;
import cc.kune.core.client.state.StateManager;
import cc.kune.core.shared.dto.StateContentDTO;
import cc.kune.gspace.client.armor.GSpaceArmor;
import cc.kune.gspace.client.armor.GSpaceCenter;
import cc.kune.gspace.client.viewers.ContentViewerPresenter.ContentViewerView;
import cc.kune.wave.client.CustomEditToolbar;
import cc.kune.wave.client.CustomSavedStateIndicator;
import cc.kune.wave.client.kspecific.AurorisColorPicker;
import cc.kune.wave.client.kspecific.WaveClientProvider;
import cc.kune.wave.client.kspecific.WaveClientUtils;

/**
 * The Class ContentViewerPanel.
 *
 * @author vjrj@ourproject.org (Vicente J. Ruiz Jurado)
 */
public class ContentViewerPanel extends WaveViewerPanel implements ContentViewerView {

    /**
     * The Interface ContentViewerPanelUiBinder.
     *
     */
    interface ContentViewerPanelUiBinder extends UiBinder<Widget, ContentViewerPanel> {
    }

    /** The ui binder. */
    private static ContentViewerPanelUiBinder uiBinder = GWT.create(ContentViewerPanelUiBinder.class);

    /** The capabilities registry. */
    private final ContentCapabilitiesRegistry capabilitiesRegistry;

    /** The content title. */
    private final ContentTitleWidget contentTitle;
    /** The drop controller. */
    private final ContentDropController dropController;
    private final CustomEditToolbar editToolbar;

    /** The gs armor. */
    private final GSpaceArmor gsArmor;

    /** The state manager. */
    private final StateManager stateManager;

    /** The widget. */
    private final Widget widget;

    /**
     * Instantiates a new content viewer panel.
     *
     * @param wsArmor
     *          the ws armor
     * @param waveClient
     *          the wave client
     * @param capabilitiesRegistry
     *          the capabilities registry
     * @param i18n
     *          the i18n
     * @param eventBus
     *          the event bus
     * @param stateManager
     *          the state manager
     * @param dropController
     *          the drop controller
     * @param waveUnsavedIndicator
     *          the wave unsaved indicator
     * @param colorPicker
     *          the color picker
     */
    @Inject
    public ContentViewerPanel(final GSpaceArmor wsArmor, final WaveClientProvider waveClient,
            final ContentCapabilitiesRegistry capabilitiesRegistry, final I18nTranslationService i18n,
            final EventBus eventBus, final StateManager stateManager, final ContentDropController dropController,
            final CustomSavedStateIndicator waveUnsavedIndicator, final Provider<AurorisColorPicker> colorPicker,
            final Provider<CustomEditToolbar> customEditToolbar, final CustomEditToolbar editToolbar) {
        super(waveClient, eventBus, waveUnsavedIndicator, colorPicker, customEditToolbar);
        this.gsArmor = wsArmor;
        this.capabilitiesRegistry = capabilitiesRegistry;
        this.stateManager = stateManager;
        this.dropController = dropController;
        this.editToolbar = editToolbar;
        widget = uiBinder.createAndBindUi(this);
        contentTitle = new ContentTitleWidget(i18n, gsArmor, capabilitiesRegistry.getIconsRegistry());
        final EditableLabel dummyEditLabel = new EditableLabel();
        super.setEditableTitle(dummyEditLabel);
    }

    /*
     * (non-Javadoc)
     *
     * @see com.gwtplatform.mvp.client.View#asWidget()
     */
    @Override
    public Widget asWidget() {
        return widget;
    }

    /*
     * (non-Javadoc)
     *
     * @see
     * cc.kune.gspace.client.viewers.ContentViewerPresenter.ContentViewerView#
     * attach()
     */
    @Override
    public void attach() {
        final GSpaceCenter docContainer = gsArmor.getDocContainer();
        docContainer.add(widget);
        docContainer.showWidget(widget);
    }

    /*
     * (non-Javadoc)
     *
     * @see
     * cc.kune.gspace.client.viewers.ContentViewerPresenter.ContentViewerView#
     * blinkTitle()
     */
    @Override
    public void blinkTitle() {
        contentTitle.highlightTitle();
    }

    /*
     * (non-Javadoc)
     *
     * @see
     * cc.kune.gspace.client.viewers.ContentViewerPresenter.ContentViewerView#
     * clear()
     */
    @Override
    public void clear() {
        gsArmor.getDocHeaderRightActionsToolbar().clear();
        gsArmor.getTopActionsToolbar().clear();
        gsArmor.getDocFooterActionsToolbar().clear();
        gsArmor.getDocContainer().clear();
        editToolbar.setEditAndReplyVisible(false);
        editToolbar.setEditDoneVisible(false);
        UiUtils.clear(gsArmor.getDocHeader());
        super.clear();
    }

    /*
     * (non-Javadoc)
     *
     * @see
     * cc.kune.gspace.client.viewers.ContentViewerPresenter.ContentViewerView#
     * detach()
     */
    @Override
    public void detach() {
        clear();
    }

    /*
     * (non-Javadoc)
     *
     * @see
     * cc.kune.gspace.client.viewers.ContentViewerPresenter.ContentViewerView#
     * getEditTitle()
     */
    @Override
    public HasEditHandler getEditTitle() {
        return contentTitle.getEditableTitle();
    }

    /**
     * Inits the wave client if needed.
     */
    @Override
    protected void initWaveClientIfNeeded() {
        if (channel == null) {
            super.initWaveClientIfNeeded();
            dropController.init(waveHolder);
            stateManager.addBeforeStateChangeListener(new BeforeActionListener() {
                @Override
                public boolean beforeAction() {
                    // This fix lot of problems when you are editing and move to other
                    // location (without stop editing)
                    Log.info("Before change history, clear wave");
                    WaveClientUtils.clear(wave);
                    editToolbar.setEditAndReplyVisible(false);
                    editToolbar.setEditDoneVisible(false);
                    return true;
                }
            });
        }
    }

    @Override
    public void injectSplash() {
        ScriptInjector.fromUrl("others/splash/js/wave-rpc.js").setWindow(ScriptInjector.TOP_WINDOW).inject();
        ScriptInjector.fromUrl("others/splash/js/gadget.js").setWindow(ScriptInjector.TOP_WINDOW).inject();
        ScriptInjector.fromUrl("others/splash/js/rpc.js").setWindow(ScriptInjector.TOP_WINDOW)
                .setCallback(new Callback<Void, Exception>() {
                    @Override
                    public void onFailure(Exception reason) {
                        Log.error("Failed to load rpc.js");
                    }

                    @Override
                    public void onSuccess(Void result) {
                        ScriptInjector.fromUrl("others/splash/js/common_client.js")
                                .setWindow(ScriptInjector.TOP_WINDOW).inject();
                        ScriptInjector.fromUrl("others/splash/js/permalink_client.js")
                                .setWindow(ScriptInjector.TOP_WINDOW).inject();
                    }
                }).inject();
    }

    /*
     * (non-Javadoc)
     *
     * @see
     * cc.kune.gspace.client.viewers.ContentViewerPresenter.ContentViewerView#
     * setContent(cc.kune.core.shared.dto.StateContentDTO)
     */
    @Override
    public void setContent(final StateContentDTO state) {
        final boolean editable = state.getContentRights().isEditable();
        if (editable) {
            dropController.setTarget(state.getStateToken());
        }
        gsArmor.enableCenterScroll(true);
        setTitle(state, editable);
        super.setContent(state);
    }

    @Override
    public void setDocHeaderActions(final GuiActionDescCollection docHeaderActions) {
        setToolbarActions(docHeaderActions, gsArmor.getDocHeaderRightActionsToolbar());
    }

    /*
     * (non-Javadoc)
     *
     * @see
     * cc.kune.gspace.client.viewers.ContentViewerPresenter.ContentViewerView#
     * setSubheaderActions
     * (cc.kune.common.client.actions.ui.descrip.GuiActionDescCollection)
     */
    @Override
    public void setDocTopToolbarActions(final GuiActionDescCollection actions) {
        setToolbarActions(actions, gsArmor.getDocTopActionsToolbar());
    }

    /*
     * (non-Javadoc)
     *
     * @see
     * cc.kune.gspace.client.viewers.ContentViewerPresenter.ContentViewerView#
     * setEditableContent(cc.kune.core.shared.dto.StateContentDTO)
     */
    @Override
    public void setEditableContent(final StateContentDTO state) {
        gsArmor.enableCenterScroll(true);
        dropController.setTarget(state.getStateToken());
        setTitle(state, true);
        super.setEditableContent(state);
    }

    /*
     * (non-Javadoc)
     *
     * @see
     * cc.kune.gspace.client.viewers.ContentViewerPresenter.ContentViewerView#
     * setEditableTitle(java.lang.String)
     */
    @Override
    public void setEditableTitle(final String title) {
        contentTitle.setText(title);
    }

    /**
     * Sets the editable wave content.
     *
     * @param waveRefS
     *          the wave ref s
     * @param isNewWave
     *          the is new wave
     */
    @Override
    protected void setEditableWaveContent(final String waveRefS, final boolean isNewWave) {
        super.setEditableWaveContent(waveRefS, isNewWave);
    }

    /*
     * (non-Javadoc)
     *
     * @see
     * cc.kune.gspace.client.viewers.ContentViewerPresenter.ContentViewerView#
     * setFooterActions
     * (cc.kune.common.client.actions.ui.descrip.GuiActionDescCollection)
     */
    @Override
    public void setFooterActions(final GuiActionDescCollection actions) {
        setToolbarActions(actions, gsArmor.getDocFooterActionsToolbar());
    }

    /**
     * Sets the title.
     *
     * @param state
     *          the state
     * @param editable
     *          the editable
     */
    private void setTitle(final StateContentDTO state, final boolean editable) {
        contentTitle.setTitle(state.getTitle(), state.getTypeId(), state.getMimeType(),
                editable && capabilitiesRegistry.isRenamable(state.getTypeId()));
        Window.setTitle(state.getGroup().getLongName() + ": " + state.getTitle());
    }

    /**
     * Sets the toolbar actions.
     *
     * @param actions
     *          the actions
     * @param toolbar
     *          the toolbar
     */
    private void setToolbarActions(final GuiActionDescCollection actions, final IsActionExtensible toolbar) {
        toolbar.clear();
        toolbar.addAll(actions);
    }

    /*
     * (non-Javadoc)
     *
     * @see
     * cc.kune.gspace.client.viewers.ContentViewerPresenter.ContentViewerView#
     * signIn()
     */
    @Override
    public void signIn() {
        // Do nothing (now)
        super.signIn();
    }

    /*
     * (non-Javadoc)
     *
     * @see
     * cc.kune.gspace.client.viewers.ContentViewerPresenter.ContentViewerView#
     * signOut()
     */
    @Override
    public void signOut() {
        super.signOut();
    }

}