Author: vjrj Date: 2008-09-18 17:37:09 +0200 (Thu, 18 Sep 2008) New Revision: 874 Added: trunk/src/main/java/org/ourproject/kune/docs/client/ContentEditAction.java trunk/src/main/java/org/ourproject/kune/docs/client/ContentTranslationAction.java trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionRegistry.java trunk/src/main/java/org/ourproject/kune/platf/client/actions/ContentActionRegistry.java trunk/src/main/java/org/ourproject/kune/platf/client/actions/ContentIconsRegistry.java trunk/src/main/java/org/ourproject/kune/platf/client/actions/ContextActionRegistry.java trunk/src/main/java/org/ourproject/kune/platf/client/actions/DragDropContentRegistry.java trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbar.java trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPanel.java trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPresenter.java trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarView.java Removed: trunk/src/main/java/org/ourproject/kune/docs/client/cnt/folder/FolderEditor.java trunk/src/main/java/org/ourproject/kune/docs/client/cnt/folder/FolderEditorPresenter.java trunk/src/main/java/org/ourproject/kune/docs/client/cnt/folder/FolderEditorView.java trunk/src/main/java/org/ourproject/kune/docs/client/cnt/folder/ui/ trunk/src/main/java/org/ourproject/kune/docs/client/cnt/reader/DocumentReaderControl.java trunk/src/main/java/org/ourproject/kune/docs/client/cnt/reader/DocumentReaderControlPresenter.java trunk/src/main/java/org/ourproject/kune/docs/client/cnt/reader/DocumentReaderControlView.java trunk/src/main/java/org/ourproject/kune/docs/client/cnt/reader/ui/DocumentReaderControlPanel.java trunk/src/main/java/org/ourproject/kune/workspace/client/component/EntityToolbar.java trunk/src/main/java/org/ourproject/kune/workspace/client/component/EntityToolbarView.java trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorToolbar.java Modified: trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientModule.java trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientTool.java trunk/src/main/java/org/ourproject/kune/docs/client/cnt/DocumentContentPresenter.java trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java trunk/src/main/java/org/ourproject/kune/platf/client/state/Session.java trunk/src/main/java/org/ourproject/kune/platf/client/state/SessionDefault.java trunk/src/main/java/org/ourproject/kune/platf/server/manager/FileManager.java trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigator.java trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPanel.java trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java Log: Content/ContextNav refactoring, Content toolbar actions Added: trunk/src/main/java/org/ourproject/kune/docs/client/ContentEditAction.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/docs/client/ContentEditAction.java 2008-09-18 02:06:07 UTC (rev 873) +++ trunk/src/main/java/org/ourproject/kune/docs/client/ContentEditAction.java 2008-09-18 15:37:09 UTC (rev 874) @@ -0,0 +1,21 @@ +package org.ourproject.kune.docs.client; + +import org.ourproject.kune.platf.client.actions.ActionButtonDescriptor; +import org.ourproject.kune.platf.client.actions.ActionPosition; +import org.ourproject.kune.platf.client.dto.AccessRolDTO; +import org.ourproject.kune.platf.client.dto.StateToken; +import org.ourproject.kune.workspace.client.i18n.I18nUITranslationService; + +import com.calclab.suco.client.signal.Slot; + +public class ContentEditAction extends ActionButtonDescriptor<StateToken> { + + public ContentEditAction(final I18nUITranslationService i18n) { + super(AccessRolDTO.Editor, ActionPosition.topbar, new Slot<StateToken>() { + public void onEvent(final StateToken stateToken) { + } + }); + this.setTextDescription(i18n.tWithNT("Edit", "used in button")); + // this.setIconUrl("images/"); + } +} Added: trunk/src/main/java/org/ourproject/kune/docs/client/ContentTranslationAction.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/docs/client/ContentTranslationAction.java 2008-09-18 02:06:07 UTC (rev 873) +++ trunk/src/main/java/org/ourproject/kune/docs/client/ContentTranslationAction.java 2008-09-18 15:37:09 UTC (rev 874) @@ -0,0 +1,24 @@ +package org.ourproject.kune.docs.client; + +import org.ourproject.kune.platf.client.actions.ActionButtonDescriptor; +import org.ourproject.kune.platf.client.actions.ActionPosition; +import org.ourproject.kune.platf.client.dto.AccessRolDTO; +import org.ourproject.kune.platf.client.dto.StateToken; +import org.ourproject.kune.workspace.client.i18n.I18nUITranslationService; +import org.ourproject.kune.workspace.client.site.Site; + +import com.calclab.suco.client.signal.Slot; + +public class ContentTranslationAction extends ActionButtonDescriptor<StateToken> { + + public ContentTranslationAction(final I18nUITranslationService i18n) { + super(AccessRolDTO.Editor, ActionPosition.topbar, new Slot<StateToken>() { + public void onEvent(final StateToken stateToken) { + Site.important(i18n.t("Sorry, this functionality is currently in development")); + } + }); + this.setTextDescription(i18n.tWithNT("Translate", "used in button")); + this.setToolTip(i18n.t("Translate this document to other languages")); + // this.setIconUrl("images/"); + } +} Modified: trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientModule.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientModule.java 2008-09-18 02:06:07 UTC (rev 873) +++ trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientModule.java 2008-09-18 15:37:09 UTC (rev 874) @@ -3,20 +3,13 @@ import org.ourproject.kune.docs.client.cnt.DocumentContent; import org.ourproject.kune.docs.client.cnt.DocumentContentPanel; import org.ourproject.kune.docs.client.cnt.DocumentContentPresenter; -import org.ourproject.kune.docs.client.cnt.folder.FolderEditor; -import org.ourproject.kune.docs.client.cnt.folder.FolderEditorPresenter; -import org.ourproject.kune.docs.client.cnt.folder.ui.FolderEditorPanel; import org.ourproject.kune.docs.client.cnt.folder.viewer.FolderViewer; import org.ourproject.kune.docs.client.cnt.folder.viewer.FolderViewerPresenter; import org.ourproject.kune.docs.client.cnt.folder.viewer.FolderViewerView; import org.ourproject.kune.docs.client.cnt.folder.viewer.ui.FolderViewerPanel; import org.ourproject.kune.docs.client.cnt.reader.DocumentReader; -import org.ourproject.kune.docs.client.cnt.reader.DocumentReaderControl; -import org.ourproject.kune.docs.client.cnt.reader.DocumentReaderControlPresenter; -import org.ourproject.kune.docs.client.cnt.reader.DocumentReaderControlView; import org.ourproject.kune.docs.client.cnt.reader.DocumentReaderPresenter; import org.ourproject.kune.docs.client.cnt.reader.DocumentReaderView; -import org.ourproject.kune.docs.client.cnt.reader.ui.DocumentReaderControlPanel; import org.ourproject.kune.docs.client.cnt.reader.ui.DocumentReaderPanel; import org.ourproject.kune.docs.client.ctx.DocumentContext; import org.ourproject.kune.docs.client.ctx.DocumentContextPanel; @@ -25,6 +18,14 @@ import org.ourproject.kune.docs.client.ctx.admin.AdminContextPresenter; import org.ourproject.kune.docs.client.ctx.admin.AdminContextView; import org.ourproject.kune.docs.client.ctx.admin.ui.AdminContextPanel; +import org.ourproject.kune.platf.client.actions.ActionManager; +import org.ourproject.kune.platf.client.actions.ContentActionRegistry; +import org.ourproject.kune.platf.client.actions.ContentIconsRegistry; +import org.ourproject.kune.platf.client.actions.ContextActionRegistry; +import org.ourproject.kune.platf.client.actions.DragDropContentRegistry; +import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbar; +import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbarPanel; +import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbarPresenter; import org.ourproject.kune.platf.client.rpc.ContentServiceAsync; import org.ourproject.kune.platf.client.services.KuneErrorHandler; import org.ourproject.kune.platf.client.state.Session; @@ -59,33 +60,53 @@ public DocumentClientTool create() { return new DocumentClientTool(i18n, $(ToolSelector.class), $(WsThemePresenter.class), $(WorkspaceSkeleton.class), $$(DocumentContext.class), $(ContextNavigator.class), - $(Session.class), $(StateManager.class), $$(ContentServiceAsync.class), $$(FileUploader.class)); + $(Session.class), $(StateManager.class), $$(ContentServiceAsync.class), $$(FileUploader.class), + $(ContentActionRegistry.class), $(ContextActionRegistry.class), + $(DragDropContentRegistry.class), $(ContentIconsRegistry.class)); } }); - register(SingletonScope.class, new Factory<AdminContext>(AdminContext.class) { - public AdminContext create() { - final AdminContextPresenter presenter = new AdminContextPresenter($(Session.class), - $(StateManager.class), $$(TagsSummary.class), $$(ContentServiceAsync.class), - $(EntityTitle.class), $(EntitySubTitle.class)); - final AdminContextView view = new AdminContextPanel(presenter, i18n); - presenter.init(view); - return presenter; + register(SingletonScope.class, new Factory<ContentEditAction>(ContentEditAction.class) { + public ContentEditAction create() { + return new ContentEditAction(i18n); } + }, new Factory<ContentTranslationAction>(ContentTranslationAction.class) { + public ContentTranslationAction create() { + return new ContentTranslationAction(i18n); + } }); register(SingletonScope.class, new Factory<DocumentContent>(DocumentContent.class) { public DocumentContent create() { + final ActionToolbarPanel contentNavigatorToolbar = new ActionToolbarPanel( + ActionToolbarPanel.Position.content, $(Session.class), $$(ActionManager.class), ws); + final ActionToolbar toolbar = new ActionToolbarPresenter($(Session.class), contentNavigatorToolbar, + $(ContentActionRegistry.class)); + final DocumentContentPresenter presenter = new DocumentContentPresenter($(StateManager.class), $(I18nUITranslationService.class), $(KuneErrorHandler.class), $(Session.class), - $(RateIt.class), $$(DocumentReader.class), $$(DocumentReaderControl.class), - $$(TextEditor.class), $$(FolderViewer.class), $$(FolderEditor.class), - $$(ContentServiceAsync.class)); + $(RateIt.class), $$(DocumentReader.class), $$(TextEditor.class), $$(FolderViewer.class), + $$(ContentServiceAsync.class), toolbar, $(ContentActionRegistry.class)); final DocumentContentPanel panel = new DocumentContentPanel($(WorkspaceSkeleton.class)); + $(ContentActionRegistry.class).addAction(DocumentClientTool.TYPE_DOCUMENT, $(ContentEditAction.class)); + $(ContentActionRegistry.class).addAction(DocumentClientTool.TYPE_DOCUMENT, + $(ContentTranslationAction.class)); presenter.init(panel); return presenter; } }); + + register(SingletonScope.class, new Factory<AdminContext>(AdminContext.class) { + public AdminContext create() { + final AdminContextPresenter presenter = new AdminContextPresenter($(Session.class), + $(StateManager.class), $$(TagsSummary.class), $$(ContentServiceAsync.class), + $(EntityTitle.class), $(EntitySubTitle.class)); + final AdminContextView view = new AdminContextPanel(presenter, i18n); + presenter.init(view); + return presenter; + } + }); + register(SingletonScope.class, new Factory<DocumentContext>(DocumentContext.class) { public DocumentContext create() { final DocumentContextPresenter presenter = new DocumentContextPresenter($(StateManager.class), @@ -104,24 +125,6 @@ } }); - register(SingletonScope.class, new Factory<DocumentReaderControl>(DocumentReaderControl.class) { - public DocumentReaderControl create() { - final DocumentReaderControlPresenter presenter = new DocumentReaderControlPresenter( - $(DocumentContent.class)); - final DocumentReaderControlView view = new DocumentReaderControlPanel(presenter, i18n, ws); - presenter.init(view); - return presenter; - } - }); - - register(SingletonScope.class, new Factory<FolderEditor>(FolderEditor.class) { - public FolderEditor create() { - final FolderEditorPanel view = new FolderEditorPanel(); - final FolderEditorPresenter presenter = new FolderEditorPresenter(view); - return presenter; - } - }); - register(SingletonScope.class, new Factory<FolderViewer>(FolderViewer.class) { public FolderViewer create() { final FolderViewerView view = new FolderViewerPanel(); Modified: trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientTool.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientTool.java 2008-09-18 02:06:07 UTC (rev 873) +++ trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientTool.java 2008-09-18 15:37:09 UTC (rev 874) @@ -27,6 +27,10 @@ import org.ourproject.kune.platf.client.actions.ActionEnableCondition; import org.ourproject.kune.platf.client.actions.ActionMenuDescriptor; import org.ourproject.kune.platf.client.actions.ActionPosition; +import org.ourproject.kune.platf.client.actions.ContentActionRegistry; +import org.ourproject.kune.platf.client.actions.ContentIconsRegistry; +import org.ourproject.kune.platf.client.actions.ContextActionRegistry; +import org.ourproject.kune.platf.client.actions.DragDropContentRegistry; import org.ourproject.kune.platf.client.dto.AccessRolDTO; import org.ourproject.kune.platf.client.dto.ContentDTO; import org.ourproject.kune.platf.client.dto.InitDataDTO; @@ -67,13 +71,19 @@ private final Session session; private final Provider<ContentServiceAsync> contentServiceProvider; private final Provider<FileUploader> fileUploaderProvider; + private final ContentActionRegistry contentActionRegistry; + private final ContextActionRegistry contextActionRegistry; + private final DragDropContentRegistry dragDropContentRegistry; + private final ContentIconsRegistry contentIconsRegistry; public DocumentClientTool(final I18nUITranslationService i18n, final ToolSelector toolSelector, final WsThemePresenter wsThemePresenter, final WorkspaceSkeleton ws, final Provider<DocumentContext> documentContextProvider, final ContextNavigator contextNavigator, final Session session, final StateManager stateManager, final Provider<ContentServiceAsync> contentServiceProvider, - final Provider<FileUploader> fileUploaderProvider) { + final Provider<FileUploader> fileUploaderProvider, final ContentActionRegistry contentActionRegistry, + final ContextActionRegistry contextActionRegistry, final DragDropContentRegistry dragDropContentRegistry, + final ContentIconsRegistry contentIconsRegistry) { super(NAME, i18n.t("documents"), toolSelector, wsThemePresenter, ws); this.i18n = i18n; this.documentContextProvider = documentContextProvider; @@ -82,6 +92,10 @@ this.stateManager = stateManager; this.contentServiceProvider = contentServiceProvider; this.fileUploaderProvider = fileUploaderProvider; + this.contentActionRegistry = contentActionRegistry; + this.contextActionRegistry = contextActionRegistry; + this.dragDropContentRegistry = dragDropContentRegistry; + this.contentIconsRegistry = contentIconsRegistry; createActions(); registerDragDropTypes(); registerImageTypes(); @@ -102,6 +116,7 @@ } private void createActions() { + final ActionMenuDescriptor<StateToken> addFolder = createFolderAction(TYPE_FOLDER, "images/nav/folder_add.png", i18n.t("New folder"), i18n.t("File"), i18n.t("New")); final ActionMenuDescriptor<StateToken> addGallery = createFolderAction(TYPE_GALLERY, @@ -236,41 +251,43 @@ final ActionDescriptor<StateToken> uploadMedia = createUploadAction(i18n.t("Upload media"), "images/nav/upload.png", i18n.t("Upload some media (images, videos)"), session .getGalleryPermittedExtensions()); - contextNavigator.addAction(TYPE_GALLERY, uploadMedia); + contextActionRegistry.addAction(TYPE_GALLERY, uploadMedia); } }); - contextNavigator.addAction(TYPE_FOLDER, go); - contextNavigator.addAction(TYPE_FOLDER, addDoc); - contextNavigator.addAction(TYPE_FOLDER, addFolder); - contextNavigator.addAction(TYPE_FOLDER, delContainer); - contextNavigator.addAction(TYPE_FOLDER, rename); - contextNavigator.addAction(TYPE_FOLDER, goGroupHome); - contextNavigator.addAction(TYPE_FOLDER, refresh); - contextNavigator.addAction(TYPE_FOLDER, uploadFile); + contextActionRegistry.addAction(TYPE_FOLDER, go); + contextActionRegistry.addAction(TYPE_FOLDER, addDoc); + contextActionRegistry.addAction(TYPE_FOLDER, addFolder); + contentActionRegistry.addAction(TYPE_FOLDER, delContainer); + contextActionRegistry.addAction(TYPE_FOLDER, delContainer); + contextActionRegistry.addAction(TYPE_FOLDER, rename); + contextActionRegistry.addAction(TYPE_FOLDER, goGroupHome); + contextActionRegistry.addAction(TYPE_FOLDER, refresh); + contextActionRegistry.addAction(TYPE_FOLDER, uploadFile); - contextNavigator.addAction(TYPE_BLOG, go); - contextNavigator.addAction(TYPE_BLOG, uploadFile); - contextNavigator.addAction(TYPE_BLOG, setAsDefGroupContent); - contextNavigator.addAction(TYPE_BLOG, refresh); + contextActionRegistry.addAction(TYPE_BLOG, go); + contextActionRegistry.addAction(TYPE_BLOG, uploadFile); + contextActionRegistry.addAction(TYPE_BLOG, setAsDefGroupContent); + contextActionRegistry.addAction(TYPE_BLOG, refresh); - contextNavigator.addAction(TYPE_GALLERY, go); - contextNavigator.addAction(TYPE_GALLERY, goGroupHome); - contextNavigator.addAction(TYPE_GALLERY, refresh); + contextActionRegistry.addAction(TYPE_GALLERY, go); + contextActionRegistry.addAction(TYPE_GALLERY, goGroupHome); + contextActionRegistry.addAction(TYPE_GALLERY, refresh); - contextNavigator.addAction(TYPE_ROOT, addDoc); - contextNavigator.addAction(TYPE_ROOT, addFolder); - contextNavigator.addAction(TYPE_ROOT, addGallery); - contextNavigator.addAction(TYPE_ROOT, goGroupHome); - contextNavigator.addAction(TYPE_ROOT, refresh); - contextNavigator.addAction(TYPE_ROOT, uploadFile); + contextActionRegistry.addAction(TYPE_ROOT, addDoc); + contextActionRegistry.addAction(TYPE_ROOT, addFolder); + contextActionRegistry.addAction(TYPE_ROOT, addGallery); + contextActionRegistry.addAction(TYPE_ROOT, goGroupHome); + contextActionRegistry.addAction(TYPE_ROOT, refresh); + contextActionRegistry.addAction(TYPE_ROOT, uploadFile); - contextNavigator.addAction(TYPE_DOCUMENT, go); - contextNavigator.addAction(TYPE_DOCUMENT, delContent); - contextNavigator.addAction(TYPE_DOCUMENT, rename); - contextNavigator.addAction(TYPE_DOCUMENT, goGroupHome); - contextNavigator.addAction(TYPE_DOCUMENT, refresh); - contextNavigator.addAction(TYPE_DOCUMENT, setAsDefGroupContent); + contextActionRegistry.addAction(TYPE_DOCUMENT, go); + contentActionRegistry.addAction(TYPE_DOCUMENT, delContent); + contextActionRegistry.addAction(TYPE_DOCUMENT, delContent); + contextActionRegistry.addAction(TYPE_DOCUMENT, rename); + contextActionRegistry.addAction(TYPE_DOCUMENT, goGroupHome); + contextActionRegistry.addAction(TYPE_DOCUMENT, refresh); + contextActionRegistry.addAction(TYPE_DOCUMENT, setAsDefGroupContent); } private ActionMenuDescriptor<StateToken> createFolderAction(final String contentTypeId, final String iconUrl, @@ -317,20 +334,20 @@ } private void registerDragDropTypes() { - contextNavigator.registerDraggableType(TYPE_DOCUMENT); - contextNavigator.registerDraggableType(TYPE_FOLDER); - contextNavigator.registerDraggableType(TYPE_UPLOADEDFILE); + dragDropContentRegistry.registerDraggableType(TYPE_DOCUMENT); + dragDropContentRegistry.registerDraggableType(TYPE_FOLDER); + dragDropContentRegistry.registerDraggableType(TYPE_UPLOADEDFILE); - contextNavigator.registerDroppableType(TYPE_ROOT); - contextNavigator.registerDroppableType(TYPE_FOLDER); - contextNavigator.registerDroppableType(TYPE_GALLERY); + dragDropContentRegistry.registerDroppableType(TYPE_ROOT); + dragDropContentRegistry.registerDroppableType(TYPE_FOLDER); + dragDropContentRegistry.registerDroppableType(TYPE_GALLERY); } private void registerImageTypes() { - contextNavigator.registerContentTypeIcon(TYPE_BLOG, "images/nav/blog.png"); - contextNavigator.registerContentTypeIcon(TYPE_GALLERY, "images/nav/gallery.png"); - contextNavigator.registerContentTypeIcon(TYPE_DOCUMENT, "images/nav/page.png"); - contextNavigator.registerContentTypeIcon(TYPE_POST, "images/nav/post.png"); + contentIconsRegistry.registerContentTypeIcon(TYPE_BLOG, "images/nav/blog.png"); + contentIconsRegistry.registerContentTypeIcon(TYPE_GALLERY, "images/nav/gallery.png"); + contentIconsRegistry.registerContentTypeIcon(TYPE_DOCUMENT, "images/nav/page.png"); + contentIconsRegistry.registerContentTypeIcon(TYPE_POST, "images/nav/post.png"); } } Modified: trunk/src/main/java/org/ourproject/kune/docs/client/cnt/DocumentContentPresenter.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/docs/client/cnt/DocumentContentPresenter.java 2008-09-18 02:06:07 UTC (rev 873) +++ trunk/src/main/java/org/ourproject/kune/docs/client/cnt/DocumentContentPresenter.java 2008-09-18 15:37:09 UTC (rev 874) @@ -21,11 +21,13 @@ package org.ourproject.kune.docs.client.cnt; import org.ourproject.kune.docs.client.DocumentClientTool; -import org.ourproject.kune.docs.client.cnt.folder.FolderEditor; import org.ourproject.kune.docs.client.cnt.folder.viewer.FolderViewer; import org.ourproject.kune.docs.client.cnt.reader.DocumentReader; -import org.ourproject.kune.docs.client.cnt.reader.DocumentReaderControl; +import org.ourproject.kune.platf.client.actions.ActionCollectionSet; +import org.ourproject.kune.platf.client.actions.ActionRegistry; +import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbar; import org.ourproject.kune.platf.client.dto.StateDTO; +import org.ourproject.kune.platf.client.dto.StateToken; import org.ourproject.kune.platf.client.errors.SessionExpiredException; import org.ourproject.kune.platf.client.rpc.AsyncCallbackSimple; import org.ourproject.kune.platf.client.rpc.ContentServiceAsync; @@ -51,9 +53,7 @@ private StateDTO content; private final Session session; private final RateIt rateIt; - private final Provider<DocumentReaderControl> docReaderControlProvider; private final Provider<DocumentReader> docReaderProvider; - private final Provider<FolderEditor> folderEditorProvider; private final Provider<TextEditor> textEditorProvider; private final Provider<FolderViewer> folderViewerProvider; private final Signal0 onEditing; @@ -61,32 +61,32 @@ private final Provider<ContentServiceAsync> contentServiceProvider; private final I18nUITranslationService i18n; private final KuneErrorHandler errorHandler; + private final ActionToolbar toolbar; + private final ActionRegistry actionRegistry; public DocumentContentPresenter(final StateManager stateManager, final I18nUITranslationService i18n, final KuneErrorHandler errorHandler, final Session session, final RateIt rateIt, - final Provider<DocumentReader> docReaderProvider, - final Provider<DocumentReaderControl> docReaderControlProvider, - final Provider<TextEditor> textEditorProvider, final Provider<FolderViewer> folderViewerProvider, - final Provider<FolderEditor> folderEditorProvider, - final Provider<ContentServiceAsync> contentServiceProvider) { + final Provider<DocumentReader> docReaderProvider, final Provider<TextEditor> textEditorProvider, + final Provider<FolderViewer> folderViewerProvider, + final Provider<ContentServiceAsync> contentServiceProvider, final ActionToolbar toolbar, + final ActionRegistry actionRegistry) { this.stateManager = stateManager; this.i18n = i18n; this.errorHandler = errorHandler; this.session = session; this.rateIt = rateIt; this.docReaderProvider = docReaderProvider; - this.docReaderControlProvider = docReaderControlProvider; this.textEditorProvider = textEditorProvider; this.folderViewerProvider = folderViewerProvider; - this.folderEditorProvider = folderEditorProvider; this.contentServiceProvider = contentServiceProvider; + this.toolbar = toolbar; + this.actionRegistry = actionRegistry; this.onEditing = new Signal0("onEditing"); this.onEditCancelled = new Signal0("onEditCancelled"); stateManager.onStateChanged(new Slot<StateDTO>() { public void onEvent(final StateDTO state) { if (state.getToolName().equals(DocumentClientTool.NAME)) { - content = state; - showContent(); + setState(state); } } }); @@ -137,9 +137,9 @@ editor.setToolbarVisible(true); view.setContent(editor.getView()); } else { - final FolderEditor editor = folderEditorProvider.get(); - editor.setFolder(content.getContainer()); - view.setContent(editor.getView()); + // final FolderEditor editor = folderEditorProvider.get(); + // editor.setFolder(content.getContainer()); + // view.setContent(editor.getView()); } onEditing.fire(); } @@ -186,13 +186,25 @@ public void onTranslate() { } + private void setState(final StateDTO state) { + content = state; + ActionCollectionSet<StateToken> set; + final String typeId = content.getTypeId(); + if (content.hasDocument()) { + set = actionRegistry.selectCurrentActions(content.getContentRights(), typeId); + } else { + set = actionRegistry.selectCurrentActions(content.getContainerRights(), typeId); + } + toolbar.disableMenusAndClearButtons(); + toolbar.setActions(set.getToolbarActions(), true); + showContent(); + } + private void showContent() { textEditorProvider.get().setToolbarVisible(false); if (content.hasDocument()) { docReaderProvider.get().showDocument(content.getContent()); textEditorProvider.get().reset(); - docReaderControlProvider.get().setRights(content.getContentRights()); - docReaderControlProvider.get().show(); docReaderProvider.get().show(); } else { final FolderViewer viewer = folderViewerProvider.get(); Deleted: trunk/src/main/java/org/ourproject/kune/docs/client/cnt/folder/FolderEditor.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/docs/client/cnt/folder/FolderEditor.java 2008-09-18 02:06:07 UTC (rev 873) +++ trunk/src/main/java/org/ourproject/kune/docs/client/cnt/folder/FolderEditor.java 2008-09-18 15:37:09 UTC (rev 874) @@ -1,30 +0,0 @@ -/* - * - * Copyright (C) 2007-2008 The kune development team (see CREDITS for details) - * 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 org.ourproject.kune.docs.client.cnt.folder; - -import org.ourproject.kune.platf.client.View; -import org.ourproject.kune.platf.client.dto.ContainerDTO; - -public interface FolderEditor { - View getView(); - - void setFolder(ContainerDTO folder); -} Deleted: trunk/src/main/java/org/ourproject/kune/docs/client/cnt/folder/FolderEditorPresenter.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/docs/client/cnt/folder/FolderEditorPresenter.java 2008-09-18 02:06:07 UTC (rev 873) +++ trunk/src/main/java/org/ourproject/kune/docs/client/cnt/folder/FolderEditorPresenter.java 2008-09-18 15:37:09 UTC (rev 874) @@ -1,41 +0,0 @@ -/* - * - * Copyright (C) 2007-2008 The kune development team (see CREDITS for details) - * 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 org.ourproject.kune.docs.client.cnt.folder; - -import org.ourproject.kune.platf.client.View; -import org.ourproject.kune.platf.client.dto.ContainerDTO; - -public class FolderEditorPresenter implements FolderEditor { - - private final FolderEditorView view; - - public FolderEditorPresenter(final FolderEditorView view) { - this.view = view; - } - - public View getView() { - return view; - } - - public void setFolder(final ContainerDTO folder) { - - } -} Deleted: trunk/src/main/java/org/ourproject/kune/docs/client/cnt/folder/FolderEditorView.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/docs/client/cnt/folder/FolderEditorView.java 2008-09-18 02:06:07 UTC (rev 873) +++ trunk/src/main/java/org/ourproject/kune/docs/client/cnt/folder/FolderEditorView.java 2008-09-18 15:37:09 UTC (rev 874) @@ -1,27 +0,0 @@ -/* - * - * Copyright (C) 2007-2008 The kune development team (see CREDITS for details) - * 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 org.ourproject.kune.docs.client.cnt.folder; - -import org.ourproject.kune.platf.client.View; - -public interface FolderEditorView extends View { - -} Deleted: trunk/src/main/java/org/ourproject/kune/docs/client/cnt/reader/DocumentReaderControl.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/docs/client/cnt/reader/DocumentReaderControl.java 2008-09-18 02:06:07 UTC (rev 873) +++ trunk/src/main/java/org/ourproject/kune/docs/client/cnt/reader/DocumentReaderControl.java 2008-09-18 15:37:09 UTC (rev 874) @@ -1,31 +0,0 @@ -/* - * - * Copyright (C) 2007-2008 The kune development team (see CREDITS for details) - * 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 org.ourproject.kune.docs.client.cnt.reader; - -import org.ourproject.kune.platf.client.dto.AccessRightsDTO; - -public interface DocumentReaderControl { - - void setRights(AccessRightsDTO accessRights); - - void show(); - -} Deleted: trunk/src/main/java/org/ourproject/kune/docs/client/cnt/reader/DocumentReaderControlPresenter.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/docs/client/cnt/reader/DocumentReaderControlPresenter.java 2008-09-18 02:06:07 UTC (rev 873) +++ trunk/src/main/java/org/ourproject/kune/docs/client/cnt/reader/DocumentReaderControlPresenter.java 2008-09-18 15:37:09 UTC (rev 874) @@ -1,70 +0,0 @@ -/* - * - * Copyright (C) 2007-2008 The kune development team (see CREDITS for details) - * 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 org.ourproject.kune.docs.client.cnt.reader; - -import org.ourproject.kune.docs.client.cnt.DocumentContent; -import org.ourproject.kune.platf.client.dto.AccessRightsDTO; - -import com.calclab.suco.client.signal.Slot0; - -public class DocumentReaderControlPresenter implements DocumentReaderControl { - private DocumentReaderControlView view; - private final DocumentContent docContent; - - public DocumentReaderControlPresenter(final DocumentContent docContent) { - this.docContent = docContent; - docContent.onEditing(new Slot0() { - public void onEvent() { - view.hide(); - } - }); - docContent.onEditCancelled(new Slot0() { - public void onEvent() { - view.show(); - } - }); - } - - public void init(final DocumentReaderControlView view) { - this.view = view; - } - - public void onDeleteClicked() { - // docContent.onDeleteClicked(); - } - - public void onEditClicked() { - // docContent.onEditClicked(); - } - - public void onTranslateClicked() { - } - - public void setRights(final AccessRightsDTO accessRights) { - view.setEditEnabled(accessRights.isEditable()); - view.setDeleteEnabled(accessRights.isAdministrable()); - view.setTranslateEnabled(accessRights.isEditable()); - } - - public void show() { - view.show(); - } -} Deleted: trunk/src/main/java/org/ourproject/kune/docs/client/cnt/reader/DocumentReaderControlView.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/docs/client/cnt/reader/DocumentReaderControlView.java 2008-09-18 02:06:07 UTC (rev 873) +++ trunk/src/main/java/org/ourproject/kune/docs/client/cnt/reader/DocumentReaderControlView.java 2008-09-18 15:37:09 UTC (rev 874) @@ -1,37 +0,0 @@ -/* - * - * Copyright (C) 2007-2008 The kune development team (see CREDITS for details) - * 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 org.ourproject.kune.docs.client.cnt.reader; - -import org.ourproject.kune.platf.client.View; - -public interface DocumentReaderControlView extends View { - - void hide(); - - void setDeleteEnabled(boolean isEnabled); - - void setEditEnabled(boolean isEnabled); - - void setTranslateEnabled(boolean isEnabled); - - void show(); - -} Deleted: trunk/src/main/java/org/ourproject/kune/docs/client/cnt/reader/ui/DocumentReaderControlPanel.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/docs/client/cnt/reader/ui/DocumentReaderControlPanel.java 2008-09-18 02:06:07 UTC (rev 873) +++ trunk/src/main/java/org/ourproject/kune/docs/client/cnt/reader/ui/DocumentReaderControlPanel.java 2008-09-18 15:37:09 UTC (rev 874) @@ -1,102 +0,0 @@ -/* - * - * Copyright (C) 2007-2008 The kune development team (see CREDITS for details) - * 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 org.ourproject.kune.docs.client.cnt.reader.ui; - -import org.ourproject.kune.docs.client.cnt.reader.DocumentReaderControlPresenter; -import org.ourproject.kune.docs.client.cnt.reader.DocumentReaderControlView; -import org.ourproject.kune.workspace.client.i18n.I18nUITranslationService; -import org.ourproject.kune.workspace.client.skel.Toolbar; -import org.ourproject.kune.workspace.client.skel.WorkspaceSkeleton; - -import com.google.gwt.user.client.ui.Widget; -import com.gwtext.client.core.EventObject; -import com.gwtext.client.widgets.Button; -import com.gwtext.client.widgets.ToolbarButton; -import com.gwtext.client.widgets.event.ButtonListenerAdapter; - -public class DocumentReaderControlPanel implements DocumentReaderControlView { - private final ToolbarButton editBtn; - private final ToolbarButton deleteBtn; - private final ToolbarButton translateBtn; - private final Widget space1; - private final Widget space2; - - public DocumentReaderControlPanel(final DocumentReaderControlPresenter presenter, - final I18nUITranslationService i18n, final WorkspaceSkeleton ws) { - editBtn = new ToolbarButton(i18n.tWithNT("Edit", "used in button"), new ButtonListenerAdapter() { - public void onClick(final Button button, final EventObject e) { - presenter.onEditClicked(); - } - }); - - deleteBtn = new ToolbarButton(i18n.tWithNT("Delete", "used in button"), new ButtonListenerAdapter() { - public void onClick(final Button button, final EventObject e) { - presenter.onDeleteClicked(); - } - }); - - translateBtn = new ToolbarButton(i18n.tWithNT("Translate", "used in button"), new ButtonListenerAdapter() { - public void onClick(final Button button, final EventObject e) { - presenter.onTranslateClicked(); - ws.showAlertMessage(i18n.t("Alert"), i18n.t("Sorry, this functionality is currently in development")); - } - }); - - final Toolbar contentTopBar = ws.getEntityWorkspace().getContentTopBar(); - contentTopBar.add(editBtn); - space1 = contentTopBar.addSpacer(); - contentTopBar.add(deleteBtn); - space2 = contentTopBar.addSpacer(); - contentTopBar.add(translateBtn); - setEditEnabled(false); - setDeleteEnabled(false); - setTranslateEnabled(false); - hide(); - } - - public void hide() { - this.setVisible(false); - } - - public void setDeleteEnabled(final boolean isEnabled) { - deleteBtn.setVisible(isEnabled); - } - - public void setEditEnabled(final boolean isEnabled) { - editBtn.setVisible(isEnabled); - } - - public void setTranslateEnabled(final boolean isEnabled) { - translateBtn.setVisible(isEnabled); - } - - public void show() { - this.setVisible(true); - } - - private void setVisible(final boolean visible) { - editBtn.setVisible(visible); - deleteBtn.setVisible(visible); - translateBtn.setVisible(visible); - space1.setVisible(visible); - space2.setVisible(visible); - } -} Added: trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionRegistry.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionRegistry.java 2008-09-18 02:06:07 UTC (rev 873) +++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionRegistry.java 2008-09-18 15:37:09 UTC (rev 874) @@ -0,0 +1,75 @@ +package org.ourproject.kune.platf.client.actions; + +import java.util.HashMap; + +import org.ourproject.kune.platf.client.dto.AccessRightsDTO; +import org.ourproject.kune.platf.client.dto.StateToken; + +public class ActionRegistry { + + private final HashMap<String, ActionCollection<StateToken>> actions; + + public ActionRegistry() { + actions = new HashMap<String, ActionCollection<StateToken>>(); + } + + public void addAction(final String contentTypeId, final ActionDescriptor<StateToken> action) { + final ActionCollection<StateToken> actionColl = getActions(contentTypeId); + actionColl.add(action); + } + + public boolean checkEnabling(final ActionDescriptor<StateToken> action, final StateToken stateToken) { + final ActionEnableCondition<StateToken> enableCondition = action.getEnableCondition(); + return enableCondition != null ? enableCondition.mustBeEnabled(stateToken) : true; + } + + public void removeAction(final String contentTypeId, final ActionDescriptor<StateToken> action) { + actions.get(contentTypeId).remove(action); + } + + public ActionCollectionSet<StateToken> selectCurrentActions(final AccessRightsDTO rights, final String contentTypeId) { + final ActionCollectionSet<StateToken> set = new ActionCollectionSet<StateToken>(); + boolean add = false; + + for (final ActionDescriptor<StateToken> action : getActions(contentTypeId)) { + switch (action.getAccessRol()) { + case Administrator: + add = rights.isAdministrable(); + break; + case Editor: + add = rights.isEditable(); + break; + case Viewer: + add = rights.isVisible(); + break; + } + if (add) { + switch (action.getActionPosition()) { + case topbarAndItemMenu: + set.getItemActions().add(action); + case topbar: + set.getToolbarActions().add(action); + break; + case bootombarAndItemMenu: + set.getItemActions().add(action); + case bottombar: + set.getToolbarActions().add(action); + break; + case itemMenu: + set.getItemActions().add(action); + break; + } + } + } + return set; + } + + private ActionCollection<StateToken> getActions(final String contentTypeId) { + ActionCollection<StateToken> actionColl = actions.get(contentTypeId); + if (actionColl == null) { + actionColl = new ActionCollection<StateToken>(); + actions.put(contentTypeId, actionColl); + } + return actionColl; + } +} Added: trunk/src/main/java/org/ourproject/kune/platf/client/actions/ContentActionRegistry.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/client/actions/ContentActionRegistry.java 2008-09-18 02:06:07 UTC (rev 873) +++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/ContentActionRegistry.java 2008-09-18 15:37:09 UTC (rev 874) @@ -0,0 +1,5 @@ +package org.ourproject.kune.platf.client.actions; + +public class ContentActionRegistry extends ActionRegistry { + +} Added: trunk/src/main/java/org/ourproject/kune/platf/client/actions/ContentIconsRegistry.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/client/actions/ContentIconsRegistry.java 2008-09-18 02:06:07 UTC (rev 873) +++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/ContentIconsRegistry.java 2008-09-18 15:37:09 UTC (rev 874) @@ -0,0 +1,20 @@ +package org.ourproject.kune.platf.client.actions; + +import java.util.HashMap; + +public class ContentIconsRegistry { + private final HashMap<String, String> contentTypesIcons; + + public ContentIconsRegistry() { + contentTypesIcons = new HashMap<String, String>(); + } + + public String getContentTypeIcon(final String typeId) { + final String icon = contentTypesIcons.get(typeId); + return icon == null ? "" : icon; + } + + public void registerContentTypeIcon(final String contentTypeId, final String iconUrl) { + contentTypesIcons.put(contentTypeId, iconUrl); + } +} Added: trunk/src/main/java/org/ourproject/kune/platf/client/actions/ContextActionRegistry.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/client/actions/ContextActionRegistry.java 2008-09-18 02:06:07 UTC (rev 873) +++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/ContextActionRegistry.java 2008-09-18 15:37:09 UTC (rev 874) @@ -0,0 +1,5 @@ +package org.ourproject.kune.platf.client.actions; + +public class ContextActionRegistry extends ActionRegistry { + +} Added: trunk/src/main/java/org/ourproject/kune/platf/client/actions/DragDropContentRegistry.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/client/actions/DragDropContentRegistry.java 2008-09-18 02:06:07 UTC (rev 873) +++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/DragDropContentRegistry.java 2008-09-18 15:37:09 UTC (rev 874) @@ -0,0 +1,31 @@ +package org.ourproject.kune.platf.client.actions; + +import java.util.ArrayList; + +public class DragDropContentRegistry { + + private final ArrayList<String> draggables; + private final ArrayList<String> droppables; + + public DragDropContentRegistry() { + draggables = new ArrayList<String>(); + droppables = new ArrayList<String>(); + } + + public boolean isDraggable(final String typeId, final boolean administrable) { + return administrable && draggables.contains(typeId); + } + + public boolean isDroppable(final String typeId, final boolean administrable) { + return administrable && droppables.contains(typeId); + } + + public void registerDraggableType(final String type) { + draggables.add(type); + } + + public void registerDroppableType(final String type) { + droppables.add(type); + } + +} Added: trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbar.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbar.java 2008-09-18 02:06:07 UTC (rev 873) +++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbar.java 2008-09-18 15:37:09 UTC (rev 874) @@ -0,0 +1,14 @@ +package org.ourproject.kune.platf.client.actions.toolbar; + +import org.ourproject.kune.platf.client.actions.ActionCollection; +import org.ourproject.kune.platf.client.dto.StateToken; + +public interface ActionToolbar { + + void clear(); + + void disableMenusAndClearButtons(); + + void setActions(ActionCollection<StateToken> actionCollection, boolean isItemSelected); + +} Added: trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPanel.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPanel.java 2008-09-18 02:06:07 UTC (rev 873) +++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPanel.java 2008-09-18 15:37:09 UTC (rev 874) @@ -0,0 +1,236 @@ +package org.ourproject.kune.platf.client.actions.toolbar; + +import java.util.ArrayList; +import java.util.HashMap; + +import org.ourproject.kune.platf.client.actions.ActionButtonDescriptor; +import org.ourproject.kune.platf.client.actions.ActionButtonSeparator; +import org.ourproject.kune.platf.client.actions.ActionManager; +import org.ourproject.kune.platf.client.actions.ActionMenuDescriptor; +import org.ourproject.kune.platf.client.actions.ActionPosition; +import org.ourproject.kune.platf.client.dto.StateToken; +import org.ourproject.kune.platf.client.state.Session; +import org.ourproject.kune.workspace.client.skel.Toolbar; +import org.ourproject.kune.workspace.client.skel.WorkspaceSkeleton; + +import com.calclab.suco.client.provider.Provider; +import com.google.gwt.user.client.ui.Widget; +import com.gwtext.client.core.EventObject; +import com.gwtext.client.widgets.Button; +import com.gwtext.client.widgets.ToolbarButton; +import com.gwtext.client.widgets.event.ButtonListenerAdapter; +import com.gwtext.client.widgets.menu.BaseItem; +import com.gwtext.client.widgets.menu.Item; +import com.gwtext.client.widgets.menu.Menu; +import com.gwtext.client.widgets.menu.MenuItem; +import com.gwtext.client.widgets.menu.event.BaseItemListenerAdapter; + +public class ActionToolbarPanel implements ActionToolbarView { + + public enum Position { + content, context + } + + private final HashMap<String, Menu> toolbarMenus; + private final ArrayList<Widget> removableToolbarItems; + private final HashMap<String, Item> menuItems; + private final WorkspaceSkeleton ws; + private final Session session; + private final Provider<ActionManager> actionManagerProvider; + private final Position position; + + public ActionToolbarPanel(final Position position, final Session session, + final Provider<ActionManager> actionManagerProvider, final WorkspaceSkeleton ws) { + this.position = position; + this.session = session; + this.actionManagerProvider = actionManagerProvider; + this.ws = ws; + toolbarMenus = new HashMap<String, Menu>(); + removableToolbarItems = new ArrayList<Widget>(); + menuItems = new HashMap<String, Item>(); + + } + + public void addButtonAction(final ActionButtonDescriptor<StateToken> action) { + final ActionPosition pos = action.getActionPosition(); + final ToolbarButton button = new ToolbarButton(); + final String text = action.getText(); + final String iconUrl = action.getIconUrl(); + if (text != null) { + button.setText(text); + } + button.addListener(new ButtonListenerAdapter() { + @Override + public void onClick(final Button button, final EventObject e) { + actionManagerProvider.get().doAction(action, session.getCurrentState().getStateToken()); + } + }); + if (iconUrl != null) { + button.setIcon(iconUrl); + } + button.setTooltip(action.getToolTip()); + + final Toolbar toolbar = getToolbar(pos); + if (action.hasLeftSeparator()) { + removableToolbarItems.add(add(toolbar, action.getLeftSeparator())); + } + toolbar.add(button); + if (action.hasRightSeparator()) { + removableToolbarItems.add(add(toolbar, action.getRightSeparator())); + } + removableToolbarItems.add(button); + } + + public void addMenuAction(final ActionMenuDescriptor<StateToken> action, final boolean enable) { + final String menuTitle = action.getParentMenuTitle(); + final String menuSubTitle = action.getParentSubMenuTitle(); + final ActionPosition pos = action.getActionPosition(); + final String itemKey = genMenuKey(pos, menuTitle, menuSubTitle, action.getText()); + Item item = menuItems.get(itemKey); + if (item == null) { + item = createToolbarMenu(pos, menuTitle, menuSubTitle, action); + menuItems.put(itemKey, item); + } + if (enable) { + item.enable(); + } else { + item.disable(); + } + doLayoutIfNeeded(pos); + } + + public void clear() { + toolbarMenus.clear(); + menuItems.clear(); + removableToolbarItems.clear(); + getToolbar(ActionPosition.topbar).removeAll(); + getToolbar(ActionPosition.bottombar).removeAll(); + } + + public void clearRemovableActions() { + for (final Widget widget : removableToolbarItems) { + widget.removeFromParent(); + } + removableToolbarItems.clear(); + doLayoutIfNeeded(); + } + + public void disableAllMenuItems() { + for (final Item item : menuItems.values()) { + item.disable(); + } + doLayoutIfNeeded(); + } + + private void add(final ActionPosition toolbar, final Widget widget) { + getToolbar(toolbar).add(widget); + } + + private Widget add(final Toolbar toolbar, final ActionButtonSeparator separator) { + switch (separator) { + case fill: + return toolbar.addFill(); + case separator: + return toolbar.addSeparator(); + case spacer: + default: + return toolbar.addSpacer(); + } + } + + private Item createToolbarMenu(final ActionPosition toolBarPos, final String menuTitle, final String menuSubTitle, + final ActionMenuDescriptor<StateToken> action) { + final Item item = new Item(action.getText(), new BaseItemListenerAdapter() { + @Override + public void onClick(BaseItem item, EventObject e) { + actionManagerProvider.get().doAction(action, session.getCurrentState().getStateToken()); + } + }); + item.setIcon(action.getIconUrl()); + + final String menuKey = genMenuKey(toolBarPos, menuTitle, null, null); + final String subMenuKey = genMenuKey(toolBarPos, menuTitle, menuSubTitle, null); + Menu menu = toolbarMenus.get(menuKey); + Menu subMenu = toolbarMenus.get(subMenuKey); + if (menuSubTitle != null) { + if (subMenu == null) { + subMenu = new Menu(); + final MenuItem subMenuItem = new MenuItem(menuSubTitle, subMenu); + if (menu == null) { + menu = createToolbarMenu(toolBarPos, action.getParentMenuIconUrl(), menuTitle, menuKey); + } + menu.addItem(subMenuItem); + toolbarMenus.put(subMenuKey, subMenu); + } + subMenu.addItem(item); + + } else { + // Menu action without submenu + if (menu == null) { + menu = createToolbarMenu(toolBarPos, action.getParentMenuIconUrl(), menuTitle, menuKey); + } + menu.addItem(item); + } + doLayoutIfNeeded(toolBarPos); + return item; + } + + private Menu createToolbarMenu(final ActionPosition barPosition, final String iconUrl, final String menuTitle, + final String menuKey) { + final Menu menu = new Menu(); + final ToolbarButton toolbarMenu = new ToolbarButton(menuTitle); + if (iconUrl != null) { + toolbarMenu.setIcon(iconUrl); + } + toolbarMenu.addListener(new ButtonListenerAdapter() { + @Override + public void onClick(final Button button, final EventObject e) { + menu.showAt(e.getXY()); + } + }); + toolbarMenus.put(menuKey, menu); + add(barPosition, toolbarMenu); + return menu; + } + + private void doLayoutIfNeeded() { + doLayoutIfNeeded(ActionPosition.topbar); + doLayoutIfNeeded(ActionPosition.bottombar); + } + + private void doLayoutIfNeeded(final ActionPosition pos) { + getToolbar(pos).doLayoutIfNeeded(); + } + + private String genMenuKey(final ActionPosition pos, final String menuTitle, final String menuSubTitle, + final String actionText) { + final String basePart = "km-" + pos.toString() + "-" + menuTitle; + final String subMenuPart = menuSubTitle != null ? "-subm-" + menuSubTitle : ""; + final String itemPart = actionText != null ? "-item-" + actionText : ""; + return basePart + subMenuPart + itemPart; + } + + private Toolbar getToolbar(final ActionPosition pos) { + switch (pos) { + case bootombarAndItemMenu: + case bottombar: + switch (position) { + case content: + return ws.getEntityWorkspace().getContentBottomBar(); + case context: + default: + return ws.getEntityWorkspace().getContextBottomBar(); + } + case topbar: + case topbarAndItemMenu: + default: + switch (position) { + case content: + return ws.getEntityWorkspace().getContentTopBar(); + case context: + default: + return ws.getEntityWorkspace().getContextTopBar(); + } + } + } +} Added: trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPresenter.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPresenter.java 2008-09-18 02:06:07 UTC (rev 873) +++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPresenter.java 2008-09-18 15:37:09 UTC (rev 874) @@ -0,0 +1,52 @@ +package org.ourproject.kune.platf.client.actions.toolbar; + +import org.ourproject.kune.platf.client.actions.ActionButtonDescriptor; +import org.ourproject.kune.platf.client.actions.ActionCollection; +import org.ourproject.kune.platf.client.actions.ActionDescriptor; +import org.ourproject.kune.platf.client.actions.ActionMenuDescriptor; +import org.ourproject.kune.platf.client.actions.ActionRegistry; +import org.ourproject.kune.platf.client.dto.StateToken; +import org.ourproject.kune.platf.client.state.Session; + +import com.allen_sauer.gwt.log.client.Log; + +public class ActionToolbarPresenter implements ActionToolbar { + private final ActionToolbarPanel toolbar; + private final Session session; + private final ActionRegistry actionRegistry; + + public ActionToolbarPresenter(final Session session, final ActionToolbarPanel actionToolbarPanel, + final ActionRegistry actionRegistry) { + this.session = session; + toolbar = actionToolbarPanel; + this.actionRegistry = actionRegistry; + } + + public void clear() { + toolbar.clear(); + } + + public void disableMenusAndClearButtons() { + toolbar.clearRemovableActions(); + toolbar.disableAllMenuItems(); + } + + public void setActions(final ActionCollection<StateToken> actions, final boolean isItemSelected) { + for (final ActionDescriptor<StateToken> action : actions) { + if (action instanceof ActionMenuDescriptor) { + toolbar.addMenuAction((ActionMenuDescriptor<StateToken>) action, isItemSelected + && actionRegistry.checkEnabling(action, session.getCurrentStateToken())); + } else { + if (action instanceof ActionButtonDescriptor) { + if (isItemSelected && actionRegistry.checkEnabling(action, session.getCurrentStateToken())) { + toolbar.addButtonAction((ActionButtonDescriptor<StateToken>) action); + } + } else { + // Code smell + Log.error("Not an ActionMenuDescriptor or ActionButtonDescriptor"); + } + } + } + } + +} Added: trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarView.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarView.java 2008-09-18 02:06:07 UTC (rev 873) +++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarView.java 2008-09-18 15:37:09 UTC (rev 874) @@ -0,0 +1,19 @@ +package org.ourproject.kune.platf.client.actions.toolbar; + +import org.ourproject.kune.platf.client.actions.ActionButtonDescriptor; +import org.ourproject.kune.platf.client.actions.ActionMenuDescriptor; +import org.ourproject.kune.platf.client.dto.StateToken; + +public interface ActionToolbarView { + + void addButtonAction(ActionButtonDescriptor<StateToken> action); + + void addMenuAction(ActionMenuDescriptor<StateToken> action, boolean enable); + + void clear(); + + void clearRemovableActions(); + + void disableAllMenuItems(); + +} Modified: trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java 2008-09-18 02:06:07 UTC (rev 873) +++ trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java 2008-09-18 15:37:09 UTC (rev 874) @@ -3,6 +3,13 @@ import org.ourproject.kune.chat.client.ChatClientModule; import org.ourproject.kune.docs.client.DocumentClientModule; import org.ourproject.kune.platf.client.actions.ActionManager; +import org.ourproject.kune.platf.client.actions.ContentActionRegistry; +import org.ourproject.kune.platf.client.actions.ContentIconsRegistry; +import org.ourproject.kune.platf.client.actions.ContextActionRegistry; +import org.ourproject.kune.platf.client.actions.DragDropContentRegistry; +import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbar; +import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbarPanel; +import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbarPresenter; import org.ourproject.kune.platf.client.app.Application; import org.ourproject.kune.platf.client.app.ApplicationDefault; import org.ourproject.kune.platf.client.app.HistoryWrapper; @@ -36,7 +43,6 @@ import org.ourproject.kune.workspace.client.ctxnav.ContextNavigator; import org.ourproject.kune.workspace.client.ctxnav.ContextNavigatorPanel; import org.ourproject.kune.workspace.client.ctxnav.ContextNavigatorPresenter; -import org.ourproject.kune.workspace.client.ctxnav.ContextNavigatorToolbar; import org.ourproject.kune.workspace.client.editor.TextEditor; import org.ourproject.kune.workspace.client.editor.TextEditorPanel; import org.ourproject.kune.workspace.client.editor.TextEditorPresenter; @@ -588,14 +594,43 @@ } }); + register(SingletonScope.class, new Factory<ContextActionRegistry>(ContextActionRegistry.class) { + public ContextActionRegistry create() { + return new ContextActionRegistry(); + } + }); + + register(SingletonScope.class, new Factory<ContentActionRegistry>(ContentActionRegistry.class) { + public ContentActionRegistry create() { + return new ContentActionRegistry(); + } + }); + + register(SingletonScope.class, new Factory<DragDropContentRegistry>(DragDropContentRegistry.class) { + public DragDropContentRegistry create() { + return new DragDropContentRegistry(); + } + }); + + register(SingletonScope.class, new Factory<ContentIconsRegistry>(ContentIconsRegistry.class) { + public ContentIconsRegistry create() { + return new ContentIconsRegistry(); + } + }); + register(SingletonScope.class, new Factory<ContextNavigator>(ContextNavigator.class) { public ContextNavigator create() { - final ContextNavigatorToolbar contextNavigatorToolbar = new ContextNavigatorToolbar($(Session.class), - $$(ActionManager.class), ws); + final ActionToolbarPanel contextNavigatorToolbar = new ActionToolbarPanel(ActionToolbarPanel.Position.context, + $(Session.class), $$(ActionManager.class), ws); + final ActionToolbar toolbar = new ActionToolbarPresenter($(Session.class), + contextNavigatorToolbar, $(ContextActionRegistry.class)); + final ContextNavigatorPresenter presenter = new ContextNavigatorPresenter($(StateManager.class), $(Session.class), $$(ContentServiceAsync.class), i18n, $(EntityTitle.class), - $$(ActionManager.class), contextNavigatorToolbar); - final ContextNavigatorPanel panel = new ContextNavigatorPanel(presenter, i18n, ws); + $(ContentIconsRegistry.class), $(DragDropContentRegistry.class), + $(ContextActionRegistry.class), toolbar); + final ContextNavigatorPanel panel = new ContextNavigatorPanel(presenter, i18n, ws, + $(ActionManager.class)); presenter.init(panel); return presenter; } Modified: trunk/src/main/java/org/ourproject/kune/platf/client/state/Session.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/client/state/Session.java 2008-09-18 02:06:07 UTC (rev 873) +++ trunk/src/main/java/org/ourproject/kune/platf/client/state/Session.java 2008-09-18 15:37:09 UTC (rev 874) @@ -27,6 +27,7 @@ import org.ourproject.kune.platf.client.dto.InitDataDTO; import org.ourproject.kune.platf.client.dto.LicenseDTO; import org.ourproject.kune.platf.client.dto.StateDTO; +import org.ourproject.kune.platf.client.dto.StateToken; import org.ourproject.kune.platf.client.dto.UserInfoDTO; import org.ourproject.kune.platf.client.rpc.AsyncCallbackSimple; @@ -50,6 +51,8 @@ public StateDTO getCurrentState(); + public StateToken getCurrentStateToken(); + public List<I18nLanguageSimpleDTO> getLanguages(); public Object[][] getLanguagesArray(); Modified: trunk/src/main/java/org/ourproject/kune/platf/client/state/SessionDefault.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/client/state/SessionDefault.java 2008-09-18 02:06:07 UTC (rev 873) +++ trunk/src/main/java/org/ourproject/kune/platf/client/state/SessionDefault.java 2008-09-18 15:37:09 UTC (rev 874) @@ -29,6 +29,7 @@ import org.ourproject.kune.platf.client.dto.InitDataDTO; import org.ourproject.kune.platf.client.dto.LicenseDTO; import org.ourproject.kune.platf.client.dto.StateDTO; +import org.ourproject.kune.platf.client.dto.StateToken; import org.ourproject.kune.platf.client.dto.UserInfoDTO; import org.ourproject.kune.platf.client.rpc.AsyncCallbackSimple; import org.ourproject.kune.workspace.client.site.rpc.UserServiceAsync; @@ -87,6 +88,10 @@ return currentState; } + public StateToken getCurrentStateToken() { + return currentState == null ? null : currentState.getStateToken(); + } + public UserInfoDTO getCurrentUserInfo() { return currentUserInfo; } Modified: trunk/src/main/java/org/ourproject/kune/platf/server/manager/FileManager.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/server/manager/FileManager.java 2008-09-18 02:06:07 UTC (rev 873) +++ trunk/src/main/java/org/ourproject/kune/platf/server/manager/FileManager.java 2008-09-18 15:37:09 UTC (rev 874) @@ -1,9 +1,5 @@ package org.ourproject.kune.platf.server.manager; -import org.ourproject.kune.platf.server.domain.Container; -import org.ourproject.kune.platf.server.domain.Content; -import org.ourproject.kune.platf.server.domain.User; - public interface FileManager { - + } Deleted: trunk/src/main/java/org/ourproject/kune/workspace/client/component/EntityToolbar.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/workspace/client/component/EntityToolbar.java 2008-09-18 02:06:07 UTC (rev 873) +++ trunk/src/main/java/org/ourproject/kune/workspace/client/component/EntityToolbar.java 2008-09-18 15:37:09 UTC (rev 874) @@ -1,233 +0,0 @@ -package org.ourproject.kune.workspace.client.component; - -import java.util.ArrayList; -import java.util.HashMap; - -import org.ourproject.kune.platf.client.actions.ActionButtonDescriptor; -import org.ourproject.kune.platf.client.actions.ActionButtonSeparator; -import org.ourproject.kune.platf.client.actions.ActionManager; -import org.ourproject.kune.platf.client.actions.ActionMenuDescriptor; -import org.ourproject.kune.platf.client.actions.ActionPosition; -import org.ourproject.kune.platf.client.dto.StateToken; -import org.ourproject.kune.platf.client.state.Session; -import org.ourproject.kune.workspace.client.skel.Toolbar; -import org.ourproject.kune.workspace.client.skel.WorkspaceSkeleton; - -import com.calclab.suco.client.provider.Provider; -import com.google.gwt.user.client.ui.Widget; -import com.gwtext.client.core.EventObject; -import com.gwtext.client.widgets.Button; -import com.gwtext.client.widgets.ToolbarButton; -import com.gwtext.client.widgets.event.ButtonListenerAdapter; -import com.gwtext.client.widgets.menu.BaseItem; -import com.gwtext.client.widgets.menu.Item; -import com.gwtext.client.widgets.menu.Menu; -import com.gwtext.client.widgets.menu.MenuItem; -import com.gwtext.client.widgets.menu.event.BaseItemListenerAdapter; - -public class EntityToolbar implements EntityToolbarView { - - protected enum ToolbarPosition { - content, context - } - - private final HashMap<String, Menu> toolbarMenus; - private final ArrayList<Widget> removableToolbarItems; - private final HashMap<String, Item> menuItems; - private final WorkspaceSkeleton ws; - private final Session session; - private final Provider<ActionManager> actionManagerProvider; - private final ToolbarPosition position; - - public EntityToolbar(final ToolbarPosition position, final Session session, - final Provider<ActionManager> actionManagerProvider, final WorkspaceSkeleton ws) { - this.position = position; - this.session = session; - this.actionManagerProvider = actionManagerProvider; - this.ws = ws; - toolbarMenus = new HashMap<String, Menu>(); - removableToolbarItems = new ArrayList<Widget>(); - menuItems = new HashMap<String, Item>(); - - } - - public void addButtonAction(final ActionButtonDescriptor<StateToken> action) { - final ActionPosition pos = action.getActionPosition(); - final ToolbarButton button = new ToolbarButton(); - final String text = action.getText(); - if (text != null) { - button.setText(text); - } - button.addListener(new ButtonListenerAdapter() { - @Override - public void onClick(final Button button, final EventObject e) { - actionManagerProvider.get().doAction(action, session.getCurrentState().getStateToken()); - } - }); - button.setIcon(action.getIconUrl()); - button.setTooltip(action.getToolTip()); - - final Toolbar toolbar = getToolbar(pos); - if (action.hasLeftSeparator()) { - removableToolbarItems.add(add(toolbar, action.getLeftSeparator())); - } - toolbar.add(button); - if (action.hasRightSeparator()) { - removableToolbarItems.add(add(toolbar, action.getRightSeparator())); - } - removableToolbarItems.add(button); - } - - public void addMenuAction(final ActionMenuDescriptor<StateToken> action, final boolean enable) { - final String menuTitle = action.getParentMenuTitle(); - final String menuSubTitle = action.getParentSubMenuTitle(); - final ActionPosition pos = action.getActionPosition(); - final String itemKey = genMenuKey(pos, menuTitle, menuSubTitle, action.getText()); - Item item = menuItems.get(itemKey); - if (item == null) { - item = createToolbarMenu(pos, menuTitle, menuSubTitle, action); - menuItems.put(itemKey, item); - } - if (enable) { - item.enable(); - } else { - item.disable(); - } - doLayoutIfNeeded(pos); - } - - public void clear() { - toolbarMenus.clear(); - menuItems.clear(); - removableToolbarItems.clear(); - getToolbar(ActionPosition.topbar).removeAll(); - getToolbar(ActionPosition.bottombar).removeAll(); - } - - public void clearRemovableActions() { - for (final Widget widget : removableToolbarItems) { - widget.removeFromParent(); - } - removableToolbarItems.clear(); - doLayoutIfNeeded(); - } - - public void disableAllMenuItems() { - for (final Item item : menuItems.values()) { - item.disable(); - } - doLayoutIfNeeded(); - } - - private void add(final ActionPosition toolbar, final Widget widget) { - getToolbar(toolbar).add(widget); - } - - private Widget add(final Toolbar toolbar, final ActionButtonSeparator separator) { - switch (separator) { - case fill: - return toolbar.addFill(); - case separator: - return toolbar.addSeparator(); - case spacer: - default: - return toolbar.addSpacer(); - } - } - - private Item createToolbarMenu(final ActionPosition toolBarPos, final String menuTitle, final String menuSubTitle, - final ActionMenuDescriptor<StateToken> action) { - final Item item = new Item(action.getText(), new BaseItemListenerAdapter() { - @Override - public void onClick(BaseItem item, EventObject e) { - actionManagerProvider.get().doAction(action, session.getCurrentState().getStateToken()); - } - }); - item.setIcon(action.getIconUrl()); - - final String menuKey = genMenuKey(toolBarPos, menuTitle, null, null); - final String subMenuKey = genMenuKey(toolBarPos, menuTitle, menuSubTitle, null); - Menu menu = toolbarMenus.get(menuKey); - Menu subMenu = toolbarMenus.get(subMenuKey); - if (menuSubTitle != null) { - if (subMenu == null) { - subMenu = new Menu(); - final MenuItem subMenuItem = new MenuItem(menuSubTitle, subMenu); - if (menu == null) { - menu = createToolbarMenu(toolBarPos, action.getParentMenuIconUrl(), menuTitle, menuKey); - } - menu.addItem(subMenuItem); - toolbarMenus.put(subMenuKey, subMenu); - } - subMenu.addItem(item); - - } else { - // Menu action without submenu - if (menu == null) { - menu = createToolbarMenu(toolBarPos, action.getParentMenuIconUrl(), menuTitle, menuKey); - } - menu.addItem(item); - } - doLayoutIfNeeded(toolBarPos); - return item; - } - - private Menu createToolbarMenu(final ActionPosition barPosition, final String iconUrl, final String menuTitle, - final String menuKey) { - final Menu menu = new Menu(); - final ToolbarButton toolbarMenu = new ToolbarButton(menuTitle); - if (iconUrl != null) { - toolbarMenu.setIcon(iconUrl); - } - toolbarMenu.addListener(new ButtonListenerAdapter() { - @Override - public void onClick(final Button button, final EventObject e) { - menu.showAt(e.getXY()); - } - }); - toolbarMenus.put(menuKey, menu); - add(barPosition, toolbarMenu); - return menu; - } - - private void doLayoutIfNeeded() { - doLayoutIfNeeded(ActionPosition.topbar); - doLayoutIfNeeded(ActionPosition.bottombar); - } - - private void doLayoutIfNeeded(final ActionPosition pos) { - getToolbar(pos).doLayoutIfNeeded(); - } - - private String genMenuKey(final ActionPosition pos, final String menuTitle, final String menuSubTitle, - final String actionText) { - final String basePart = "km-" + pos.toString() + "-" + menuTitle; - final String subMenuPart = menuSubTitle != null ? "-subm-" + menuSubTitle : ""; - final String itemPart = actionText != null ? "-item-" + actionText : ""; - return basePart + subMenuPart + itemPart; - } - - private Toolbar getToolbar(final ActionPosition pos) { - switch (pos) { - case bootombarAndItemMenu: - case bottombar: - switch (position) { - case content: - return ws.getEntityWorkspace().getContentBottomBar(); - case context: - default: - return ws.getEntityWorkspace().getContextBottomBar(); - } - case topbar: - case topbarAndItemMenu: - default: - switch (position) { - case content: - return ws.getEntityWorkspace().getContentTopBar(); - case context: - default: - return ws.getEntityWorkspace().getContextTopBar(); - } - } - } -} Deleted: trunk/src/main/java/org/ourproject/kune/workspace/client/component/EntityToolbarView.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/workspace/client/component/EntityToolbarView.java 2008-09-18 02:06:07 UTC (rev 873) +++ trunk/src/main/java/org/ourproject/kune/workspace/client/component/EntityToolbarView.java 2008-09-18 15:37:09 UTC (rev 874) @@ -1,19 +0,0 @@ -package org.ourproject.kune.workspace.client.component; - -import org.ourproject.kune.platf.client.actions.ActionButtonDescriptor; -import org.ourproject.kune.platf.client.actions.ActionMenuDescriptor; -import org.ourproject.kune.platf.client.dto.StateToken; - -public interface EntityToolbarView { - - void addButtonAction(ActionButtonDescriptor<StateToken> action); - - void addMenuAction(ActionMenuDescriptor<StateToken> action, boolean enable); - - void clear(); - - void clearRemovableActions(); - - void disableAllMenuItems(); - -} Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigator.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigator.java 2008-09-18 02:06:07 UTC (rev 873) +++ trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigator.java 2008-09-18 15:37:09 UTC (rev 874) @@ -21,28 +21,17 @@ package org.ourproject.kune.workspace.client.ctxnav; import org.ourproject.kune.platf.client.View; -import org.ourproject.kune.platf.client.actions.ActionDescriptor; import org.ourproject.kune.platf.client.dto.StateDTO; import org.ourproject.kune.platf.client.dto.StateToken; public interface ContextNavigator { - void addAction(String contentTypeId, ActionDescriptor<StateToken> action); - void editItem(StateToken stateToken); View getView(); boolean isSelected(StateToken stateToken); - void registerContentTypeIcon(String contentTypeId, String iconUrl); - - void registerDraggableType(String typeId); - - void registerDroppableType(String typeId); - - void removeAction(String contentTypeId, ActionDescriptor<StateToken> action); - void selectItem(StateToken stateToken); void setEditOnNextStateChange(boolean edit); Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPanel.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPanel.java 2008-09-18 02:06:07 UTC (rev 873) +++ trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPanel.java 2008-09-18 15:37:09 UTC (rev 874) @@ -24,6 +24,7 @@ import org.ourproject.kune.platf.client.actions.ActionCollection; import org.ourproject.kune.platf.client.actions.ActionDescriptor; +import org.ourproject.kune.platf.client.actions.ActionManager; import org.ourproject.kune.platf.client.dto.StateToken; import org.ourproject.kune.platf.client.services.I18nTranslationService; import org.ourproject.kune.workspace.client.site.Site; @@ -57,13 +58,15 @@ private final HashMap<String, Menu> contextMenus; private final WorkspaceSkeleton ws; private boolean fireOnTextChange; + private boolean isEditable; + private final ActionManager actionManager; private final ContextNavigatorPresenter presenter; - private boolean isEditable; public ContextNavigatorPanel(final ContextNavigatorPresenter presenter, final I18nTranslationService i18n, - final WorkspaceSkeleton ws) { + final WorkspaceSkeleton ws, final ActionManager actionManager) { this.presenter = presenter; this.ws = ws; + this.actionManager = actionManager; contextMenus = new HashMap<String, Menu>(); fireOnTextChange = true; @@ -279,7 +282,7 @@ } private void doAction(final ActionDescriptor<StateToken> action, final StateToken stateToken) { - presenter.doAction(action, stateToken); + actionManager.doAction(action, stateToken); } private TreeNode getNode(final String id) { Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java 2008-09-18 02:06:07 UTC (rev 873) +++ trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java 2008-09-18 15:37:09 UTC (rev 874) @@ -20,17 +20,15 @@ package org.ourproject.kune.workspace.client.ctxnav; -import java.util.ArrayList; import java.util.HashMap; import org.ourproject.kune.platf.client.View; -import org.ourproject.kune.platf.client.actions.ActionButtonDescriptor; import org.ourproject.kune.platf.client.actions.ActionCollection; import org.ourproject.kune.platf.client.actions.ActionCollectionSet; -import org.ourproject.kune.platf.client.actions.ActionDescriptor; -import org.ourproject.kune.platf.client.actions.ActionEnableCondition; -import org.ourproject.kune.platf.client.actions.ActionManager; -import org.ourproject.kune.platf.client.actions.ActionMenuDescriptor; +import org.ourproject.kune.platf.client.actions.ActionRegistry; +import org.ourproject.kune.platf.client.actions.ContentIconsRegistry; +import org.ourproject.kune.platf.client.actions.DragDropContentRegistry; +import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbar; import org.ourproject.kune.platf.client.dto.AccessRightsDTO; import org.ourproject.kune.platf.client.dto.ContainerDTO; import org.ourproject.kune.platf.client.dto.ContainerSimpleDTO; @@ -58,48 +56,32 @@ private final Session session; private final Provider<ContentServiceAsync> contentServiceProvider; private final I18nUITranslationService i18n; - private final HashMap<String, ActionCollection<StateToken>> actions; private final HashMap<StateToken, ActionCollection<StateToken>> actionsByItem; - private final ArrayList<String> draggables; - private final ArrayList<String> droppables; - private final HashMap<String, String> contentTypesIcons; private final EntityTitle entityTitle; - private final Provider<ActionManager> actionManagerProvider; private boolean editOnNextStateChange; - private final ContextNavigatorToolbar toolbar; + private final ContentIconsRegistry contentIconsRegistry; + private final DragDropContentRegistry dragDropContentRegistry; + private final ActionRegistry actionRegistry; + private final ActionToolbar toolbar; public ContextNavigatorPresenter(final StateManager stateManager, final Session session, final Provider<ContentServiceAsync> contentServiceProvider, final I18nUITranslationService i18n, - final EntityTitle entityTitle, final Provider<ActionManager> actionManagerProvider, - final ContextNavigatorToolbar contextNavigatorToolbar) { + final EntityTitle entityTitle, final ContentIconsRegistry contentIconsRegistry, + final DragDropContentRegistry dragDropContentRegistry, final ActionRegistry actionRegistry, + final ActionToolbar toolbar) { this.stateManager = stateManager; this.session = session; this.contentServiceProvider = contentServiceProvider; this.i18n = i18n; this.entityTitle = entityTitle; - this.actionManagerProvider = actionManagerProvider; - this.toolbar = contextNavigatorToolbar; - actions = new HashMap<String, ActionCollection<StateToken>>(); + this.contentIconsRegistry = contentIconsRegistry; + this.dragDropContentRegistry = dragDropContentRegistry; + this.actionRegistry = actionRegistry; + this.toolbar = toolbar; actionsByItem = new HashMap<StateToken, ActionCollection<StateToken>>(); - draggables = new ArrayList<String>(); - droppables = new ArrayList<String>(); - contentTypesIcons = new HashMap<String, String>(); editOnNextStateChange = false; } - public void addAction(final String contentTypeId, final ActionDescriptor<StateToken> action) { - ActionCollection<StateToken> actionColl = actions.get(contentTypeId); - if (actionColl == null) { - actionColl = new ActionCollection<StateToken>(); - actions.put(contentTypeId, actionColl); - } - actionColl.add(action); - } - - public void doAction(final ActionDescriptor<StateToken> action, final StateToken stateToken) { - actionManagerProvider.get().doAction(action, stateToken); - } - public void editItem(final StateToken stateToken) { view.editItem(genId(stateToken)); } @@ -167,27 +149,10 @@ } } - public void registerContentTypeIcon(final String contentTypeId, final String iconUrl) { - contentTypesIcons.put(contentTypeId, iconUrl); - } - - public void registerDraggableType(final String type) { - draggables.add(type); - } - - public void registerDroppableType(final String type) { - droppables.add(type); - } - - public void removeAction(final String contentTypeId, final ActionDescriptor<StateToken> action) { - actions.get(contentTypeId).remove(action); - } - public void selectItem(final StateToken stateToken) { view.selectItem(genId(stateToken)); - toolbar.clearRemovableActions(); - toolbar.disableAllMenuItems(); - setActions(actionsByItem.get(stateToken), true); + toolbar.disableMenusAndClearButtons(); + toolbar.setActions(actionsByItem.get(stateToken), true); } public void setEditOnNextStateChange(final boolean edit) { @@ -215,10 +180,11 @@ // childs to view) final ContainerDTO root = state.getRootContainer(); if (root != null) { - final ActionCollectionSet<StateToken> set = createItemActions(containerRights, root.getTypeId()); + final ActionCollectionSet<StateToken> set = actionRegistry.selectCurrentActions(containerRights, root + .getTypeId()); view.setRootItem(genId(root.getStateToken()), i18n.t(root.getName()), root.getStateToken(), set .getItemActions()); - setActions(set.getToolbarActions(), false); + toolbar.setActions(set.getToolbarActions(), false); createChildItems(root, containerRights); actionsByItem.put(root.getStateToken(), set.getToolbarActions()); } @@ -252,33 +218,27 @@ } } + protected void clear() { + toolbar.clear(); + view.clear(); + actionsByItem.clear(); + } + private void addItem(final String title, final String contentTypeId, final ContentStatusDTO status, final StateToken stateToken, final StateToken parentStateToken, final AccessRightsDTO rights, final boolean isNodeSelected) { - final ActionCollectionSet<StateToken> set = createItemActions(rights, contentTypeId); - setActions(set.getToolbarActions(), isNodeSelected); + final ActionCollectionSet<StateToken> set = actionRegistry.selectCurrentActions(rights, contentTypeId); + toolbar.setActions(set.getToolbarActions(), isNodeSelected); final ContextNavigatorItem item = new ContextNavigatorItem(genId(stateToken), genId(parentStateToken), - getContentTypeIcon(contentTypeId), title, status, stateToken, isDraggable(contentTypeId, rights - .isAdministrable()), isDroppable(contentTypeId, rights.isAdministrable()), set.getItemActions()); + contentIconsRegistry.getContentTypeIcon(contentTypeId), title, status, stateToken, + dragDropContentRegistry.isDraggable(contentTypeId, rights.isAdministrable()), dragDropContentRegistry + .isDroppable(contentTypeId, rights.isAdministrable()), set.getItemActions()); view.addItem(item); actionsByItem.put(stateToken, set.getToolbarActions()); } - private boolean checkEnabling(final boolean isNodeSelected, final ActionDescriptor<StateToken> action) { - final ActionEnableCondition<StateToken> enableCondition = action.getEnableCondition(); - final boolean mustBeEnabled = enableCondition != null ? enableCondition.mustBeEnabled(getCurrentStateToken()) - : true; - return isNodeSelected && mustBeEnabled; - } - - private void clear() { - view.clear(); - actionsByItem.clear(); - toolbar.clear(); - } - private void createChildItems(final ContainerDTO container, final AccessRightsDTO containerRights) { for (final ContentDTO content : container.getContents()) { addItem(content.getTitle(), content.getTypeId(), content.getStatus(), content.getStateToken(), content @@ -292,43 +252,6 @@ } } - private ActionCollectionSet<StateToken> createItemActions(final AccessRightsDTO rights, final String contentTypeId) { - final ActionCollectionSet<StateToken> set = new ActionCollectionSet<StateToken>(); - boolean add = false; - - for (final ActionDescriptor<StateToken> action : actions.get(contentTypeId)) { - switch (action.getAccessRol()) { - case Administrator: - add = rights.isAdministrable(); - break; - case Editor: - add = rights.isEditable(); - break; - case Viewer: - add = rights.isVisible(); - break; - } - if (add) { - switch (action.getActionPosition()) { - case topbarAndItemMenu: - set.getItemActions().add(action); - case topbar: - set.getToolbarActions().add(action); - break; - case bootombarAndItemMenu: - set.getItemActions().add(action); - case bottombar: - set.getToolbarActions().add(action); - break; - case itemMenu: - set.getItemActions().add(action); - break; - } - } - } - return set; - } - private void createTreePath(final StateToken state, final ContainerSimpleDTO[] absolutePath, final AccessRightsDTO rights) { for (int i = 0; i < absolutePath.length; i++) { @@ -349,28 +272,4 @@ return "k-" + token.toString().replace(StateToken.SEPARATOR, "-"); } - private String getContentTypeIcon(final String typeId) { - final String icon = contentTypesIcons.get(typeId); - return icon == null ? "" : icon; - } - - private boolean isDraggable(final String typeId, final boolean administrable) { - return administrable && draggables.contains(typeId); - } - - private boolean isDroppable(final String typeId, final boolean administrable) { - return administrable && droppables.contains(typeId); - } - - private void setActions(final ActionCollection<StateToken> actions, final boolean isNodeSelected) { - for (final ActionDescriptor<StateToken> action : actions) { - if (action instanceof ActionMenuDescriptor) { - toolbar.addMenuAction((ActionMenuDescriptor<StateToken>) action, checkEnabling(isNodeSelected, action)); - } else { - if (checkEnabling(isNodeSelected, action)) { - toolbar.addButtonAction((ActionButtonDescriptor<StateToken>) action); - } - } - } - } } Deleted: trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorToolbar.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorToolbar.java 2008-09-18 02:06:07 UTC (rev 873) +++ trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorToolbar.java 2008-09-18 15:37:09 UTC (rev 874) @@ -1,15 +0,0 @@ -package org.ourproject.kune.workspace.client.ctxnav; - -import org.ourproject.kune.platf.client.actions.ActionManager; -import org.ourproject.kune.platf.client.state.Session; -import org.ourproject.kune.workspace.client.component.EntityToolbar; -import org.ourproject.kune.workspace.client.skel.WorkspaceSkeleton; - -import com.calclab.suco.client.provider.Provider; - -public class ContextNavigatorToolbar extends EntityToolbar { - public ContextNavigatorToolbar(final Session session, final Provider<ActionManager> actionManagerProvider, - final WorkspaceSkeleton ws) { - super(ToolbarPosition.context, session, actionManagerProvider, ws); - } -}