/* * * 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(); } }