Author: vjrj Date: 2008-11-10 21:44:20 +0100 (Mon, 10 Nov 2008) New Revision: 944 Added: trunk/src/main/java/org/ourproject/kune/chat/client/ctx/room/AddRoom.java trunk/src/main/java/org/ourproject/kune/chat/client/ctx/room/AddRoomPanel.java trunk/src/main/java/org/ourproject/kune/chat/client/ctx/room/AddRoomPresenter.java trunk/src/main/java/org/ourproject/kune/chat/client/ctx/room/AddRoomView.java trunk/src/main/java/org/ourproject/kune/workspace/client/cxt/ trunk/src/main/java/org/ourproject/kune/workspace/client/cxt/FoldableContextPresenter.java Removed: trunk/src/main/java/org/ourproject/kune/chat/client/ctx/room/RoomAdmin.java trunk/src/main/java/org/ourproject/kune/chat/client/ctx/room/RoomAdminPresenter.java Modified: trunk/src/main/java/org/ourproject/kune/chat/client/ChatClientActions.java trunk/src/main/java/org/ourproject/kune/chat/client/ChatClientModule.java trunk/src/main/java/org/ourproject/kune/chat/client/ChatClientTool.java trunk/src/main/java/org/ourproject/kune/chat/client/ctx/ChatContext.java trunk/src/main/java/org/ourproject/kune/chat/client/ctx/ChatContextPresenter.java trunk/src/main/java/org/ourproject/kune/docs/client/ctx/DocumentContextPresenter.java trunk/src/main/java/org/ourproject/kune/platf/client/ui/TextUtils.java trunk/src/main/java/org/ourproject/kune/workspace/client/cnt/AbstractContentPanel.java trunk/src/main/java/org/ourproject/kune/workspace/client/cnt/FoldableContentPanel.java trunk/src/main/java/org/ourproject/kune/workspace/client/cnt/FoldableContentPresenter.java Log: Incomplete - taskUI tools & workspace refactorization Modified: trunk/src/main/java/org/ourproject/kune/chat/client/ChatClientActions.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/chat/client/ChatClientActions.java 2008-11-10 19:00:10 UTC (rev 943) +++ trunk/src/main/java/org/ourproject/kune/chat/client/ChatClientActions.java 2008-11-10 20:44:20 UTC (rev 944) @@ -18,6 +18,7 @@ * */package org.ourproject.kune.chat.client; +import org.ourproject.kune.chat.client.ctx.room.AddRoom; import org.ourproject.kune.docs.client.DocumentClientTool; import org.ourproject.kune.platf.client.actions.ActionToolbarButtonDescriptor; import org.ourproject.kune.platf.client.actions.ActionToolbarButtonSeparator; @@ -39,15 +40,17 @@ private final ContentActionRegistry contentActionRegistry; private final I18nUITranslationService i18n; private final ContextActionRegistry contextActionRegistry; + private final Provider<AddRoom> addRoomProvider; public ChatClientActions(final I18nUITranslationService i18n, final Session session, final ContentActionRegistry contentActionRegistry, final ContextActionRegistry contextActionRegistry, - final Provider<ChatEngine> chatEngine) { + final Provider<ChatEngine> chatEngine, Provider<AddRoom> addRoomProvider) { this.i18n = i18n; this.session = session; this.contentActionRegistry = contentActionRegistry; this.contextActionRegistry = contextActionRegistry; this.chatEngineProvider = chatEngine; + this.addRoomProvider = addRoomProvider; createActions(); } @@ -68,8 +71,10 @@ ActionToolbarButtonDescriptor<StateToken> joinRoom = new ActionToolbarButtonDescriptor<StateToken>( AccessRolDTO.Viewer, ActionToolbarPosition.topbar, new Listener<StateToken>() { public void onEvent(StateToken token) { - chatEngineProvider.get().joinRoom(session.getContainerState().getContainer().getName(), + ChatEngine chatEngine = chatEngineProvider.get(); + chatEngine.joinRoom(session.getContainerState().getContainer().getName(), session.getCurrentUserInfo().getShortName()); + chatEngine.show(); } }); joinRoom.setTextDescription(i18n.t("Enter room")); @@ -79,7 +84,7 @@ ActionToolbarButtonDescriptor<StateToken> addRoom = new ActionToolbarButtonDescriptor<StateToken>( AccessRolDTO.Administrator, ActionToolbarPosition.topbar, new Listener<StateToken>() { public void onEvent(StateToken token) { - + addRoomProvider.get().show(); } }); addRoom.setTextDescription(i18n.t("New room")); @@ -92,6 +97,7 @@ contentActionRegistry.addAction(chatAbout, DocumentClientTool.TYPE_POST); contentActionRegistry.addAction(chatAbout, DocumentClientTool.TYPE_UPLOADEDFILE); - contextActionRegistry.addAction(joinRoom, ChatClientTool.TYPE_ROOT); + contextActionRegistry.addAction(addRoom, ChatClientTool.TYPE_ROOT, ChatClientTool.TYPE_ROOM); + contentActionRegistry.addAction(joinRoom, ChatClientTool.TYPE_ROOM); } } Modified: trunk/src/main/java/org/ourproject/kune/chat/client/ChatClientModule.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/chat/client/ChatClientModule.java 2008-11-10 19:00:10 UTC (rev 943) +++ trunk/src/main/java/org/ourproject/kune/chat/client/ChatClientModule.java 2008-11-10 20:44:20 UTC (rev 944) @@ -23,8 +23,9 @@ import org.ourproject.kune.chat.client.cnt.room.ChatRoomPresenter; import org.ourproject.kune.chat.client.ctx.ChatContext; import org.ourproject.kune.chat.client.ctx.ChatContextPresenter; -import org.ourproject.kune.chat.client.ctx.room.RoomAdmin; -import org.ourproject.kune.chat.client.ctx.room.RoomAdminPresenter; +import org.ourproject.kune.chat.client.ctx.room.AddRoom; +import org.ourproject.kune.chat.client.ctx.room.AddRoomPanel; +import org.ourproject.kune.chat.client.ctx.room.AddRoomPresenter; import org.ourproject.kune.platf.client.actions.ContentActionRegistry; import org.ourproject.kune.platf.client.actions.ContentIconsRegistry; import org.ourproject.kune.platf.client.actions.ContextActionRegistry; @@ -56,7 +57,7 @@ @Override public ChatClientActions create() { return new ChatClientActions($(I18nUITranslationService.class), $(Session.class), - $(ContentActionRegistry.class), $(ContextActionRegistry.class), $$(ChatEngine.class)); + $(ContentActionRegistry.class), $(ContextActionRegistry.class), $$(ChatEngine.class), $$(AddRoom.class)); } }); @@ -69,11 +70,11 @@ } }); - register(Singleton.class, new Factory<ChatContext>(ChatContext.class) { + register(ToolGroup.class, new Factory<ChatContext>(ChatContext.class) { @Override public ChatContext create() { final ChatContextPresenter presenter = new ChatContextPresenter($(StateManager.class), - $$(ContextNavigator.class), $$(RoomAdmin.class)); + $$(ContextNavigator.class)); return presenter; } }); @@ -99,12 +100,13 @@ } }); - register(Singleton.class, new Factory<RoomAdmin>(RoomAdmin.class) { + register(Singleton.class, new Factory<AddRoom>(AddRoom.class) { @Override - public RoomAdmin create() { - final RoomAdminPresenter presenter = new RoomAdminPresenter($(ContextNavigator.class), - $(I18nUITranslationService.class), $$(StateManager.class), $(Session.class), - $$(ContentServiceAsync.class)); + public AddRoom create() { + final AddRoomPresenter presenter = new AddRoomPresenter($(Session.class), + $$(ContentServiceAsync.class), $(StateManager.class)); + final AddRoomPanel panel = new AddRoomPanel(presenter, $(I18nTranslationService.class)); + presenter.init(panel); return presenter; } }); Modified: trunk/src/main/java/org/ourproject/kune/chat/client/ChatClientTool.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/chat/client/ChatClientTool.java 2008-11-10 19:00:10 UTC (rev 943) +++ trunk/src/main/java/org/ourproject/kune/chat/client/ChatClientTool.java 2008-11-10 20:44:20 UTC (rev 944) @@ -46,6 +46,6 @@ @Override protected void registerIcons() { - contentIconsRegistry.registerContentTypeIcon(TYPE_ROOM, "public/images/emite-room.png"); + contentIconsRegistry.registerContentTypeIcon(TYPE_ROOM, "images/emite-room.png"); } } Modified: trunk/src/main/java/org/ourproject/kune/chat/client/ctx/ChatContext.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/chat/client/ctx/ChatContext.java 2008-11-10 19:00:10 UTC (rev 943) +++ trunk/src/main/java/org/ourproject/kune/chat/client/ctx/ChatContext.java 2008-11-10 20:44:20 UTC (rev 944) @@ -19,10 +19,6 @@ */ package org.ourproject.kune.chat.client.ctx; -import org.ourproject.kune.platf.client.dto.StateContainerDTO; public interface ChatContext { - - void setState(StateContainerDTO state); - } Modified: trunk/src/main/java/org/ourproject/kune/chat/client/ctx/ChatContextPresenter.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/chat/client/ctx/ChatContextPresenter.java 2008-11-10 19:00:10 UTC (rev 943) +++ trunk/src/main/java/org/ourproject/kune/chat/client/ctx/ChatContextPresenter.java 2008-11-10 20:44:20 UTC (rev 944) @@ -19,24 +19,23 @@ */ package org.ourproject.kune.chat.client.ctx; -import org.ourproject.kune.chat.client.ctx.room.RoomAdmin; +import org.ourproject.kune.chat.client.ChatClientTool; import org.ourproject.kune.platf.client.dto.StateContainerDTO; import org.ourproject.kune.platf.client.state.StateManager; import org.ourproject.kune.workspace.client.ctxnav.ContextNavigator; +import org.ourproject.kune.workspace.client.cxt.FoldableContextPresenter; import com.calclab.suco.client.ioc.Provider; -public class ChatContextPresenter implements ChatContext { +public class ChatContextPresenter extends FoldableContextPresenter implements ChatContext { - private final Provider<RoomAdmin> roomAdminsProvider; - public ChatContextPresenter(final StateManager stateManager, - final Provider<ContextNavigator> contextNavigatorProvider, final Provider<RoomAdmin> roomAdminsProvider) { - this.roomAdminsProvider = roomAdminsProvider; + final Provider<ContextNavigator> contextNavigatorProvider) { + super(ChatClientTool.NAME, stateManager, contextNavigatorProvider); } - public void setState(final StateContainerDTO state) { - final RoomAdmin rooms = roomAdminsProvider.get(); - rooms.showRoom(state.getStateToken(), state.getContainer(), state.getContainerRights()); + @Override + protected void setState(final StateContainerDTO state) { + super.setState(state); } } Added: trunk/src/main/java/org/ourproject/kune/chat/client/ctx/room/AddRoom.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/chat/client/ctx/room/AddRoom.java 2008-11-10 19:00:10 UTC (rev 943) +++ trunk/src/main/java/org/ourproject/kune/chat/client/ctx/room/AddRoom.java 2008-11-10 20:44:20 UTC (rev 944) @@ -0,0 +1,7 @@ +package org.ourproject.kune.chat.client.ctx.room; + +public interface AddRoom { + + void show(); + +} Added: trunk/src/main/java/org/ourproject/kune/chat/client/ctx/room/AddRoomPanel.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/chat/client/ctx/room/AddRoomPanel.java 2008-11-10 19:00:10 UTC (rev 943) +++ trunk/src/main/java/org/ourproject/kune/chat/client/ctx/room/AddRoomPanel.java 2008-11-10 20:44:20 UTC (rev 944) @@ -0,0 +1,99 @@ +package org.ourproject.kune.chat.client.ctx.room; + +import org.ourproject.kune.platf.client.services.I18nTranslationService; +import org.ourproject.kune.platf.client.ui.TextUtils; + +import com.calclab.emiteuimodule.client.dialog.BasicDialogExtended; +import com.calclab.emiteuimodule.client.dialog.BasicDialogListener; +import com.google.gwt.user.client.Command; +import com.google.gwt.user.client.DeferredCommand; +import com.gwtext.client.core.EventObject; +import com.gwtext.client.widgets.form.Field; +import com.gwtext.client.widgets.form.FormPanel; +import com.gwtext.client.widgets.form.TextField; +import com.gwtext.client.widgets.form.event.FieldListenerAdapter; + +public class AddRoomPanel implements AddRoomView { + + public static final String CANCEL_ID = "k-ct-arp-cb"; + public static final String ADD_ROOM_ID = "k-ct-arp-ab"; + public static final String ROOM_NAME_ID = "k-ct-arp-rfield"; + private final AddRoomPresenter presenter; + private BasicDialogExtended dialog; + private final I18nTranslationService i18n; + private FormPanel formPanel; + private TextField roomName; + + public AddRoomPanel(final AddRoomPresenter presenter, final I18nTranslationService i18n) { + this.i18n = i18n; + this.presenter = presenter; + } + + public void reset() { + formPanel.getForm().reset(); + } + + public void show() { + if (dialog == null) { + dialog = new BasicDialogExtended(i18n.t("Add a chat room"), false, false, 330, 130, "chat-icon", + i18n.tWithNT("Add", "used in button"), ADD_ROOM_ID, i18n.tWithNT("Cancel", "used in button"), + CANCEL_ID, new BasicDialogListener() { + public void onCancelButtonClick() { + dialog.hide(); + reset(); + } + + public void onFirstButtonClick() { + doAddRoom(); + } + }); + dialog.setResizable(false); + createForm(); + + // TODO define a UI Extension Point here + } + dialog.show(); + roomName.focus(); + } + + protected void doAddRoom() { + roomName.validate(); + if (formPanel.getForm().isValid()) { + DeferredCommand.addCommand(new Command() { + public void execute() { + presenter.addRoom(roomName.getValueAsString()); + reset(); + } + }); + dialog.hide(); + } + } + + private void createForm() { + formPanel = new FormPanel(); + formPanel.setFrame(true); + formPanel.setAutoScroll(false); + + formPanel.setWidth(333); + formPanel.setLabelWidth(100); + formPanel.setPaddings(10); + + roomName = new TextField(i18n.t("Room Name"), "name", 150); + roomName.setAllowBlank(false); + roomName.setValidationEvent(false); + roomName.setRegex(TextUtils.UNIX_NAME); + roomName.setRegexText(i18n.t("Can only contain characters, numbers, and dashes")); + roomName.setId(ROOM_NAME_ID); + formPanel.add(roomName); + + dialog.add(formPanel); + roomName.addListener(new FieldListenerAdapter() { + @Override + public void onSpecialKey(Field field, EventObject e) { + if (e.getKey() == 13) { + doAddRoom(); + } + } + }); + } +} Added: trunk/src/main/java/org/ourproject/kune/chat/client/ctx/room/AddRoomPresenter.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/chat/client/ctx/room/AddRoomPresenter.java 2008-11-10 19:00:10 UTC (rev 943) +++ trunk/src/main/java/org/ourproject/kune/chat/client/ctx/room/AddRoomPresenter.java 2008-11-10 20:44:20 UTC (rev 944) @@ -0,0 +1,51 @@ +package org.ourproject.kune.chat.client.ctx.room; + +import org.ourproject.kune.platf.client.View; +import org.ourproject.kune.platf.client.dto.StateContainerDTO; +import org.ourproject.kune.platf.client.rpc.AsyncCallbackSimple; +import org.ourproject.kune.platf.client.rpc.ContentServiceAsync; +import org.ourproject.kune.platf.client.state.Session; +import org.ourproject.kune.platf.client.state.StateManager; +import org.ourproject.kune.workspace.client.site.Site; + +import com.calclab.suco.client.ioc.Provider; + +public class AddRoomPresenter implements AddRoom { + + private AddRoomView view; + private final Session session; + private final Provider<ContentServiceAsync> contentServiceProvider; + private final StateManager stateManager; + + public AddRoomPresenter(Session session, final Provider<ContentServiceAsync> contentServiceProvider, + StateManager stateManager) { + this.session = session; + this.contentServiceProvider = contentServiceProvider; + this.stateManager = stateManager; + } + + public void addRoom(String roomName) { + Site.showProgressProcessing(); + final String groupShortName = session.getCurrentState().getGroup().getShortName(); + contentServiceProvider.get().addRoom(session.getUserHash(), + session.getContainerState().getRootContainer().getStateToken(), groupShortName + "-" + roomName, + new AsyncCallbackSimple<StateContainerDTO>() { + public void onSuccess(final StateContainerDTO state) { + stateManager.setRetrievedState(state); + Site.hideProgress(); + } + }); + } + + public View getView() { + return view; + } + + public void init(AddRoomView view) { + this.view = view; + } + + public void show() { + view.show(); + } +} Added: trunk/src/main/java/org/ourproject/kune/chat/client/ctx/room/AddRoomView.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/chat/client/ctx/room/AddRoomView.java 2008-11-10 19:00:10 UTC (rev 943) +++ trunk/src/main/java/org/ourproject/kune/chat/client/ctx/room/AddRoomView.java 2008-11-10 20:44:20 UTC (rev 944) @@ -0,0 +1,9 @@ +package org.ourproject.kune.chat.client.ctx.room; + +import org.ourproject.kune.platf.client.View; + +public interface AddRoomView extends View { + + void show(); + +} Deleted: trunk/src/main/java/org/ourproject/kune/chat/client/ctx/room/RoomAdmin.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/chat/client/ctx/room/RoomAdmin.java 2008-11-10 19:00:10 UTC (rev 943) +++ trunk/src/main/java/org/ourproject/kune/chat/client/ctx/room/RoomAdmin.java 2008-11-10 20:44:20 UTC (rev 944) @@ -1,28 +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.chat.client.ctx.room; - -import org.ourproject.kune.platf.client.dto.AccessRightsDTO; -import org.ourproject.kune.platf.client.dto.ContainerDTO; -import org.ourproject.kune.platf.client.dto.StateToken; - -public interface RoomAdmin { - void showRoom(final StateToken token, final ContainerDTO container, final AccessRightsDTO rights); -} Deleted: trunk/src/main/java/org/ourproject/kune/chat/client/ctx/room/RoomAdminPresenter.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/chat/client/ctx/room/RoomAdminPresenter.java 2008-11-10 19:00:10 UTC (rev 943) +++ trunk/src/main/java/org/ourproject/kune/chat/client/ctx/room/RoomAdminPresenter.java 2008-11-10 20:44:20 UTC (rev 944) @@ -1,77 +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.chat.client.ctx.room; - -import org.ourproject.kune.platf.client.dto.AccessRightsDTO; -import org.ourproject.kune.platf.client.dto.ContainerDTO; -import org.ourproject.kune.platf.client.dto.StateToken; -import org.ourproject.kune.platf.client.rpc.ContentServiceAsync; -import org.ourproject.kune.platf.client.services.I18nTranslationService; -import org.ourproject.kune.platf.client.state.Session; -import org.ourproject.kune.platf.client.state.StateManager; -import org.ourproject.kune.workspace.client.ctxnav.ContextNavigator; - -import com.calclab.suco.client.ioc.Provider; - -public class RoomAdminPresenter implements RoomAdmin { - private final ContextNavigator contextNavigator; - - public RoomAdminPresenter(final ContextNavigator contextNavigator, final I18nTranslationService i18n, - final Provider<StateManager> stateManagerProvider, final Session session, - final Provider<ContentServiceAsync> contentServiceProvider) { - this.contextNavigator = contextNavigator; - // final ContextNavigatorImages images = - // ContextNavigatorImages.App.getInstance(); - // contextNavigator.registerType(ChatClientTool.TYPE_CHAT, - // images.page()); - // contextNavigator.registerType(ChatClientTool.TYPE_ROOM, - // images.chatGreen()); - // contextNavigator.canCreate(i18n.t("New chat room"), i18n.t("Add a - // chat room"), new Listener<String>() { - // public void onEvent(final String name) { - // Site.showProgressProcessing(); - // final String groupShortName = - // session.getCurrentState().getGroup().getShortName(); - // final Long containerId = - // session.getCurrentState().getFolder().getId(); - // contentServiceProvider.get().addRoom(session.getUserHash(), - // groupShortName, containerId, - // groupShortName + "-" + name, new AsyncCallbackSimple<StateDTO>() { - // public void onSuccess(final StateDTO state) { - // final StateManager stateManager = stateManagerProvider.get(); - // stateManager.setRetrievedState(state); - // // FIXME: Isn't using cache (same in Add folder) - // stateManager.reloadContextAndTitles(); - // Site.hideProgress(); - // } - // }); - // } - // }); - } - - public void showRoom(final StateToken token, final ContainerDTO container, final AccessRightsDTO rights) { - // contextNavigator.showContainer(token, container, rights); - // final String type = container.getTypeId(); - // if (type.equals(ChatClientTool.TYPE_ROOM)) { - // contextNavigator.setControlsVisible(false); - // } - } - -} Modified: trunk/src/main/java/org/ourproject/kune/docs/client/ctx/DocumentContextPresenter.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/docs/client/ctx/DocumentContextPresenter.java 2008-11-10 19:00:10 UTC (rev 943) +++ trunk/src/main/java/org/ourproject/kune/docs/client/ctx/DocumentContextPresenter.java 2008-11-10 20:44:20 UTC (rev 944) @@ -21,43 +21,34 @@ import org.ourproject.kune.docs.client.DocumentClientTool; import org.ourproject.kune.docs.client.ctx.admin.DocContextEditor; -import org.ourproject.kune.platf.client.dto.StateAbstractDTO; import org.ourproject.kune.platf.client.dto.StateContainerDTO; import org.ourproject.kune.platf.client.dto.StateContentDTO; import org.ourproject.kune.platf.client.state.StateManager; import org.ourproject.kune.workspace.client.ctxnav.ContextNavigator; +import org.ourproject.kune.workspace.client.cxt.FoldableContextPresenter; import com.calclab.suco.client.ioc.Provider; -import com.calclab.suco.client.listener.Listener; -public class DocumentContextPresenter implements DocumentContext { - private final Provider<ContextNavigator> contextNavigatorProvider; +public class DocumentContextPresenter extends FoldableContextPresenter implements DocumentContext { private final Provider<DocContextEditor> adminContextProvider; public DocumentContextPresenter(final StateManager stateManager, - final Provider<ContextNavigator> contextNavigatorProvider, final Provider<DocContextEditor> adminContextProvider) { - this.contextNavigatorProvider = contextNavigatorProvider; + final Provider<ContextNavigator> contextNavigatorProvider, + final Provider<DocContextEditor> adminContextProvider) { + super(DocumentClientTool.NAME, stateManager, contextNavigatorProvider); this.adminContextProvider = adminContextProvider; - stateManager.onStateChanged(new Listener<StateAbstractDTO>() { - public void onEvent(final StateAbstractDTO state) { - if (state instanceof StateContainerDTO) { - StateContainerDTO stateCntCtx = (StateContainerDTO) state; - if (DocumentClientTool.NAME.equals(stateCntCtx.getToolName())) { - setState(stateCntCtx); - contextNavigatorProvider.get().attach(); - } - } else { - contextNavigatorProvider.get().detach(); - adminContextProvider.get().detach(); - contextNavigatorProvider.get().clear(); - adminContextProvider.get().clear(); - } - } - }); } - private void setState(final StateContainerDTO state) { - contextNavigatorProvider.get().setState(state, true); + @Override + protected void detach() { + super.detach(); + adminContextProvider.get().detach(); + adminContextProvider.get().clear(); + } + + @Override + protected void setState(final StateContainerDTO state) { + super.setState(state); if (state instanceof StateContentDTO) { adminContextProvider.get().setState((StateContentDTO) state); } Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/TextUtils.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/client/ui/TextUtils.java 2008-11-10 19:00:10 UTC (rev 943) +++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/TextUtils.java 2008-11-10 20:44:20 UTC (rev 944) @@ -28,6 +28,8 @@ // Original regexp from http://www.regular-expressions.info/email.html public static final String EMAIL_REGEXP = "[-!#$%&\'*+/=?_`{|}~a-z0-9^]+(\\.[-!#$%&\'*+/=?_`{|}~a-z0-9^]+)*@(localhost|([a-z0-9]([-a-z0-9]*[a-z0-9])?\\.)+[a-z0-9]([-a-z0-9]*[a-z0-9]))?"; + public static final String UNIX_NAME = "^[a-z0-9_\\-]+$"; + /* * This method escape only some dangerous html chars */ Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/cnt/AbstractContentPanel.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/workspace/client/cnt/AbstractContentPanel.java 2008-11-10 19:00:10 UTC (rev 943) +++ trunk/src/main/java/org/ourproject/kune/workspace/client/cnt/AbstractContentPanel.java 2008-11-10 20:44:20 UTC (rev 944) @@ -4,7 +4,7 @@ import com.google.gwt.user.client.ui.Widget; -public class AbstractContentPanel { +public abstract class AbstractContentPanel { private final WorkspaceSkeleton ws; private Widget widget; Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/cnt/FoldableContentPanel.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/workspace/client/cnt/FoldableContentPanel.java 2008-11-10 19:00:10 UTC (rev 943) +++ trunk/src/main/java/org/ourproject/kune/workspace/client/cnt/FoldableContentPanel.java 2008-11-10 20:44:20 UTC (rev 944) @@ -10,7 +10,7 @@ import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.Widget; -public class FoldableContentPanel extends AbstractContentPanel { +public abstract class FoldableContentPanel extends AbstractContentPanel { private final I18nTranslationService i18n; Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/cnt/FoldableContentPresenter.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/workspace/client/cnt/FoldableContentPresenter.java 2008-11-10 19:00:10 UTC (rev 943) +++ trunk/src/main/java/org/ourproject/kune/workspace/client/cnt/FoldableContentPresenter.java 2008-11-10 20:44:20 UTC (rev 944) @@ -13,7 +13,7 @@ import com.calclab.suco.client.listener.Listener; -public class FoldableContentPresenter extends AbstractContentPresenter { +public abstract class FoldableContentPresenter extends AbstractContentPresenter { private final String toolName; private final ActionRegistry<StateToken> actionRegistry; Added: trunk/src/main/java/org/ourproject/kune/workspace/client/cxt/FoldableContextPresenter.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/workspace/client/cxt/FoldableContextPresenter.java 2008-11-10 19:00:10 UTC (rev 943) +++ trunk/src/main/java/org/ourproject/kune/workspace/client/cxt/FoldableContextPresenter.java 2008-11-10 20:44:20 UTC (rev 944) @@ -0,0 +1,42 @@ +package org.ourproject.kune.workspace.client.cxt; + +import org.ourproject.kune.platf.client.dto.StateAbstractDTO; +import org.ourproject.kune.platf.client.dto.StateContainerDTO; +import org.ourproject.kune.platf.client.state.StateManager; +import org.ourproject.kune.workspace.client.ctxnav.ContextNavigator; + +import com.calclab.suco.client.ioc.Provider; +import com.calclab.suco.client.listener.Listener; + +public abstract class FoldableContextPresenter { + private final Provider<ContextNavigator> contextNavigatorProvider; + protected final String toolname; + + public FoldableContextPresenter(final String toolname, final StateManager stateManager, + final Provider<ContextNavigator> contextNavigatorProvider) { + this.toolname = toolname; + this.contextNavigatorProvider = contextNavigatorProvider; + stateManager.onStateChanged(new Listener<StateAbstractDTO>() { + public void onEvent(final StateAbstractDTO state) { + if (state instanceof StateContainerDTO) { + StateContainerDTO stateCntCtx = (StateContainerDTO) state; + if (toolname.equals(stateCntCtx.getToolName())) { + setState(stateCntCtx); + contextNavigatorProvider.get().attach(); + } + } else { + detach(); + } + } + }); + } + + protected void detach() { + contextNavigatorProvider.get().detach(); + contextNavigatorProvider.get().clear(); + } + + protected void setState(StateContainerDTO state) { + contextNavigatorProvider.get().setState(state, true); + } +}