[kune-commits] r895 - in trunk: img/icons src/main/java/org/ourproject/kune/chat/client src/main/java/org/ourproject/kune/platf/client/actions src/main/java/org/ourproject/kune/platf/client/app src/main/java/org/ourproject/kune/platf/client/dto src/main/java/org/ourproject/kune/platf/client/rpc src/main/java/org/ourproject/kune/platf/client/services src/main/java/org/ourproject/kune/platf/client/state src/main/java/org/ourproject/kune/platf/client/tool src/main/java/org/ourproject/kune/platf/client/ui/upload src/main/java/org/ourproject/kune/platf/public/images src/main/java/org/ourproject/kune/platf/server/domain src/main/java/org/ourproject/kune/platf/server/manager src/main/java/org/ourproject/kune/platf/server/manager/impl src/main/java/org/ourproject/kune/platf/server/rpc src/main/java/org/ourproject/kune/workspace/client/entitylogo src/main/java/org/ourproject/kune/workspace/client/skel src/test/java/org/ourproject/kune/platf/client/actions src/test/java/org/ourproject/kune/platf/client/state src/test/java/org/ourproject/kune/platf/client/ui/dialogs/upload

vjrj vjrj at ourproject.org
Mon Sep 29 10:55:06 CEST 2008


Author: vjrj
Date: 2008-09-29 10:55:01 +0200 (Mon, 29 Sep 2008)
New Revision: 895

Added:
   trunk/img/icons/content_edit.png
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/upload/FileUploader.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/upload/FileUploaderDialog.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/upload/FileUploaderPresenter.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/upload/FileUploaderView.java
   trunk/src/main/java/org/ourproject/kune/platf/public/images/content_edit.png
Modified:
   trunk/src/main/java/org/ourproject/kune/chat/client/ChatClientActions.java
   trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionRegistry.java
   trunk/src/main/java/org/ourproject/kune/platf/client/app/ApplicationDefault.java
   trunk/src/main/java/org/ourproject/kune/platf/client/dto/GroupDTO.java
   trunk/src/main/java/org/ourproject/kune/platf/client/rpc/GroupService.java
   trunk/src/main/java/org/ourproject/kune/platf/client/rpc/GroupServiceAsync.java
   trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java
   trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneWorkspaceModule.java
   trunk/src/main/java/org/ourproject/kune/platf/client/state/StateManager.java
   trunk/src/main/java/org/ourproject/kune/platf/client/state/StateManagerDefault.java
   trunk/src/main/java/org/ourproject/kune/platf/client/tool/ToolSelectorPresenter.java
   trunk/src/main/java/org/ourproject/kune/platf/server/domain/Group.java
   trunk/src/main/java/org/ourproject/kune/platf/server/manager/GroupManager.java
   trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManager.java
   trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/GroupManagerDefault.java
   trunk/src/main/java/org/ourproject/kune/platf/server/rpc/GroupRPC.java
   trunk/src/main/java/org/ourproject/kune/workspace/client/entitylogo/EntityLogo.java
   trunk/src/main/java/org/ourproject/kune/workspace/client/entitylogo/EntityLogoPanel.java
   trunk/src/main/java/org/ourproject/kune/workspace/client/entitylogo/EntityLogoPresenter.java
   trunk/src/main/java/org/ourproject/kune/workspace/client/entitylogo/EntityLogoView.java
   trunk/src/main/java/org/ourproject/kune/workspace/client/skel/WorkspaceSkeleton.java
   trunk/src/test/java/org/ourproject/kune/platf/client/actions/ActionRegistryTest.java
   trunk/src/test/java/org/ourproject/kune/platf/client/state/StateManagerTest.java
   trunk/src/test/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderPresenterTest.java
Log:
ya estamos con errores en el svn y si la abuela fuma

Added: trunk/img/icons/content_edit.png
===================================================================
(Binary files differ)


Property changes on: trunk/img/icons/content_edit.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Modified: trunk/src/main/java/org/ourproject/kune/chat/client/ChatClientActions.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/chat/client/ChatClientActions.java	2008-09-29 08:54:12 UTC (rev 894)
+++ trunk/src/main/java/org/ourproject/kune/chat/client/ChatClientActions.java	2008-09-29 08:55:01 UTC (rev 895)
@@ -16,7 +16,6 @@
 
 public class ChatClientActions {
 
-    private final I18nUITranslationService i18n;
     private final Session session;
     private final Provider<ChatClientTool> chatClientToolProvider;
     private final ContentActionRegistry contentActionRegistry;
@@ -24,7 +23,6 @@
     public ChatClientActions(final I18nUITranslationService i18n, final Session session,
 	    final ContentActionRegistry contentActionRegistry, final ContextActionRegistry contextActionRegistry,
 	    final Provider<ChatClientTool> chatClientToolProvider) {
-	this.i18n = i18n;
 	this.session = session;
 	this.contentActionRegistry = contentActionRegistry;
 	this.chatClientToolProvider = chatClientToolProvider;
@@ -42,13 +40,13 @@
 		});
 	// chatAbout.setTextDescription(i18n.t("Chat about"));
 	chatAbout.setIconUrl("images/emite-room.png");
-	chatAbout.setToolTip("Chat online about this");
+	chatAbout.setToolTip("Chat and comment this");
 	chatAbout.setLeftSeparator(ActionButtonSeparator.fill);
 
-	contentActionRegistry.addAction(DocumentClientTool.TYPE_DOCUMENT, chatAbout);
-	contentActionRegistry.addAction(DocumentClientTool.TYPE_GALLERY, chatAbout);
-	contentActionRegistry.addAction(DocumentClientTool.TYPE_WIKIPAGE, chatAbout);
-	contentActionRegistry.addAction(DocumentClientTool.TYPE_POST, chatAbout);
-	contentActionRegistry.addAction(DocumentClientTool.TYPE_UPLOADEDFILE, chatAbout);
+	contentActionRegistry.addAction(chatAbout, DocumentClientTool.TYPE_DOCUMENT);
+	contentActionRegistry.addAction(chatAbout, DocumentClientTool.TYPE_GALLERY);
+	contentActionRegistry.addAction(chatAbout, DocumentClientTool.TYPE_WIKIPAGE);
+	contentActionRegistry.addAction(chatAbout, DocumentClientTool.TYPE_POST);
+	contentActionRegistry.addAction(chatAbout, DocumentClientTool.TYPE_UPLOADEDFILE);
     }
 }

Modified: 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-29 08:54:12 UTC (rev 894)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionRegistry.java	2008-09-29 08:55:01 UTC (rev 895)
@@ -12,9 +12,11 @@
 	actions = new HashMap<String, ActionCollection<T>>();
     }
 
-    public void addAction(final String contentTypeId, final ActionDescriptor<T> action) {
-	final ActionCollection<T> actionColl = getActions(contentTypeId);
-	actionColl.add(action);
+    public void addAction(final ActionDescriptor<T> action, final String... contentTypeIds) {
+	for (final String contentTypeId : contentTypeIds) {
+	    final ActionCollection<T> actionColl = getActions(contentTypeId);
+	    actionColl.add(action);
+	}
     }
 
     public boolean checkEnabling(final ActionDescriptor<T> action, final T T) {

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/app/ApplicationDefault.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/app/ApplicationDefault.java	2008-09-29 08:54:12 UTC (rev 894)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/app/ApplicationDefault.java	2008-09-29 08:55:01 UTC (rev 895)
@@ -49,10 +49,10 @@
 	this.onApplicationStop = new Event0("onApplicationStop");
 	Window.addWindowCloseListener(new WindowCloseListener() {
 	    public void onWindowClosed() {
-		stop();
 	    }
 
 	    public String onWindowClosing() {
+		stop();
 		return null;
 	    }
 	});

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/dto/GroupDTO.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/dto/GroupDTO.java	2008-09-29 08:54:12 UTC (rev 894)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/dto/GroupDTO.java	2008-09-29 08:55:01 UTC (rev 895)
@@ -30,6 +30,7 @@
     private String publicDesc;
     private GroupType type;
     private ContentSimpleDTO defaultContent;
+    private ContentSimpleDTO groupLogo;
     private LicenseDTO defaultLicense;
     private String workspaceTheme;
     private String tags;
@@ -102,6 +103,10 @@
 	return defaultLicense;
     }
 
+    public ContentSimpleDTO getGroupLogo() {
+	return groupLogo;
+    }
+
     public Long getId() {
 	return id;
     }
@@ -150,6 +155,10 @@
 	this.defaultLicense = defaultLicense;
     }
 
+    public void setGroupLogo(final ContentSimpleDTO groupLogo) {
+	this.groupLogo = groupLogo;
+    }
+
     public void setId(final Long id) {
 	this.id = id;
     }

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/rpc/GroupService.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/rpc/GroupService.java	2008-09-29 08:54:12 UTC (rev 894)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/rpc/GroupService.java	2008-09-29 08:55:01 UTC (rev 895)
@@ -32,4 +32,6 @@
 
     StateToken createNewGroup(String userHash, GroupDTO group) throws DefaultException;
 
+    GroupDTO setGroupLogo(String userHash, StateToken token);
+
 }

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/rpc/GroupServiceAsync.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/rpc/GroupServiceAsync.java	2008-09-29 08:54:12 UTC (rev 894)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/rpc/GroupServiceAsync.java	2008-09-29 08:55:01 UTC (rev 895)
@@ -31,4 +31,6 @@
 
     void createNewGroup(String userHash, GroupDTO group, AsyncCallback<StateToken> callback);
 
+    void setGroupLogo(String userHash, StateToken token, AsyncCallback<GroupDTO> asyncCallback);
+
 }

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-29 08:54:12 UTC (rev 894)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java	2008-09-29 08:55:01 UTC (rev 895)
@@ -32,9 +32,10 @@
 import org.ourproject.kune.platf.client.state.StateManagerDefault;
 import org.ourproject.kune.platf.client.tool.ToolSelector;
 import org.ourproject.kune.platf.client.tool.ToolSelectorPresenter;
-import org.ourproject.kune.platf.client.ui.dialogs.upload.FileUploader;
-import org.ourproject.kune.platf.client.ui.dialogs.upload.FileUploaderDialog;
-import org.ourproject.kune.platf.client.ui.dialogs.upload.FileUploaderPresenter;
+import org.ourproject.kune.platf.client.ui.download.FileDownloadUtils;
+import org.ourproject.kune.platf.client.ui.upload.FileUploader;
+import org.ourproject.kune.platf.client.ui.upload.FileUploaderDialog;
+import org.ourproject.kune.platf.client.ui.upload.FileUploaderPresenter;
 import org.ourproject.kune.workspace.client.ctxnav.ContextNavigator;
 import org.ourproject.kune.workspace.client.ctxnav.ContextNavigatorPanel;
 import org.ourproject.kune.workspace.client.ctxnav.ContextNavigatorPresenter;
@@ -356,6 +357,12 @@
 	    }
 	});
 
+	register(Singleton.class, new Factory<FileDownloadUtils>(FileDownloadUtils.class) {
+	    public FileDownloadUtils create() {
+		return new FileDownloadUtils($(Session.class));
+	    }
+	});
+
 	// Register of tokens like "signin", "newgroup", "translate" etcetera
 	$(StateManager.class).addSiteToken(SiteToken.signin.toString(), new Listener<StateToken>() {
 	    public void onEvent(final StateToken previousStateToken) {

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneWorkspaceModule.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneWorkspaceModule.java	2008-09-29 08:54:12 UTC (rev 894)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneWorkspaceModule.java	2008-09-29 08:55:01 UTC (rev 895)
@@ -8,6 +8,7 @@
 import org.ourproject.kune.platf.client.state.Session;
 import org.ourproject.kune.platf.client.state.StateManager;
 import org.ourproject.kune.platf.client.ui.QuickTipsHelper;
+import org.ourproject.kune.platf.client.ui.download.FileDownloadUtils;
 import org.ourproject.kune.platf.client.ui.rate.RateIt;
 import org.ourproject.kune.platf.client.ui.rate.RateItPanel;
 import org.ourproject.kune.platf.client.ui.rate.RateItPresenter;
@@ -209,9 +210,9 @@
 	register(ApplicationComponentGroup.class, new Factory<EntityLogo>(EntityLogo.class) {
 	    public EntityLogo create() {
 		final EntityLogoPresenter presenter = new EntityLogoPresenter($(StateManager.class),
-			$(WsThemePresenter.class));
+			$(WsThemePresenter.class), $(Session.class));
 		final EntityLogoPanel panel = new EntityLogoPanel($(I18nUITranslationService.class),
-			$(WorkspaceSkeleton.class));
+			$(WorkspaceSkeleton.class), $$(FileDownloadUtils.class));
 		presenter.init(panel);
 		return presenter;
 	    }

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/state/StateManager.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/state/StateManager.java	2008-09-29 08:54:12 UTC (rev 894)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/state/StateManager.java	2008-09-29 08:55:01 UTC (rev 895)
@@ -20,6 +20,7 @@
 
 package org.ourproject.kune.platf.client.state;
 
+import org.ourproject.kune.platf.client.dto.GroupDTO;
 import org.ourproject.kune.platf.client.dto.SocialNetworkResultDTO;
 import org.ourproject.kune.platf.client.dto.StateDTO;
 import org.ourproject.kune.platf.client.dto.StateToken;
@@ -38,7 +39,7 @@
 
     void gotoToken(String token);
 
-    void onGroupChanged(Listener2<String, String> listener);
+    void onGroupChanged(Listener2<GroupDTO, GroupDTO> listener);
 
     void onSocialNetworkChanged(Listener<StateDTO> listener);
 

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/state/StateManagerDefault.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/state/StateManagerDefault.java	2008-09-29 08:54:12 UTC (rev 894)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/state/StateManagerDefault.java	2008-09-29 08:55:01 UTC (rev 895)
@@ -23,6 +23,7 @@
 import java.util.HashMap;
 
 import org.ourproject.kune.platf.client.app.HistoryWrapper;
+import org.ourproject.kune.platf.client.dto.GroupDTO;
 import org.ourproject.kune.platf.client.dto.ParticipationDataDTO;
 import org.ourproject.kune.platf.client.dto.SocialNetworkDTO;
 import org.ourproject.kune.platf.client.dto.SocialNetworkResultDTO;
@@ -48,7 +49,7 @@
     private final Event<StateDTO> onStateChanged;
     private final Event<StateDTO> onSocialNetworkChanged;
     private final Event2<String, String> onToolChanged;
-    private final Event2<String, String> onGroupChanged;
+    private final Event2<GroupDTO, GroupDTO> onGroupChanged;
 
     public StateManagerDefault(final ContentProvider contentProvider, final Session session,
 	    final HistoryWrapper history) {
@@ -57,7 +58,7 @@
 	this.history = history;
 	this.oldState = null;
 	this.onStateChanged = new Event<StateDTO>("onStateChanged");
-	this.onGroupChanged = new Event2<String, String>("onGroupChanged");
+	this.onGroupChanged = new Event2<GroupDTO, GroupDTO>("onGroupChanged");
 	this.onToolChanged = new Event2<String, String>("onToolChanged");
 	this.onSocialNetworkChanged = new Event<StateDTO>("onSocialNetworkChanged");
 	session.onUserSignIn(new Listener<UserInfoDTO>() {
@@ -92,7 +93,7 @@
 	gotoToken(new StateToken(token));
     }
 
-    public void onGroupChanged(final Listener2<String, String> listener) {
+    public void onGroupChanged(final Listener2<GroupDTO, GroupDTO> listener) {
 	onGroupChanged.add(listener);
     }
 
@@ -159,12 +160,12 @@
     }
 
     private void checkGroupAndToolChange(final StateDTO oldState, final StateDTO newState) {
-	final String oldGroupName = oldState != null ? oldState.getGroup().getShortName() : null;
-	final String newGroupName = newState.getGroup().getShortName();
+	final GroupDTO oldGroup = oldState != null ? oldState.getGroup() : null;
+	final GroupDTO newGroup = newState.getGroup();
 	final String oldToolName = oldState != null ? oldState.getToolName() : null;
 	final String newToolName = newState.getToolName();
-	if (oldState == null || !oldGroupName.equals(newGroupName)) {
-	    onGroupChanged.fire(oldGroupName, newGroupName);
+	if (oldState == null || !oldGroup.equals(newGroup)) {
+	    onGroupChanged.fire(oldGroup, newGroup);
 	}
 	if (oldState == null || !oldToolName.equals(newToolName)) {
 	    onToolChanged.fire(oldToolName, newToolName);

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/tool/ToolSelectorPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/tool/ToolSelectorPresenter.java	2008-09-29 08:54:12 UTC (rev 894)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/tool/ToolSelectorPresenter.java	2008-09-29 08:55:01 UTC (rev 895)
@@ -2,6 +2,7 @@
 
 import java.util.HashMap;
 
+import org.ourproject.kune.platf.client.dto.GroupDTO;
 import org.ourproject.kune.platf.client.state.StateManager;
 import org.ourproject.kune.workspace.client.themes.WsThemePresenter;
 
@@ -13,9 +14,9 @@
 
     public ToolSelectorPresenter(final StateManager stateManager, final WsThemePresenter wsThemePresenter) {
 	tools = new HashMap<String, ToolSelectorItem>();
-	stateManager.onGroupChanged(new Listener2<String, String>() {
-	    public void onEvent(final String oldGroupName, final String newGroupName) {
-		onGroupChanged(newGroupName);
+	stateManager.onGroupChanged(new Listener2<GroupDTO, GroupDTO>() {
+	    public void onEvent(final GroupDTO oldGroup, final GroupDTO newGroup) {
+		onGroupChanged(newGroup.getShortName());
 	    }
 	});
 	stateManager.onToolChanged(new Listener2<String, String>() {

Added: trunk/src/main/java/org/ourproject/kune/platf/client/ui/upload/FileUploader.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/upload/FileUploader.java	2008-09-29 08:54:12 UTC (rev 894)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/upload/FileUploader.java	2008-09-29 08:55:01 UTC (rev 895)
@@ -0,0 +1,19 @@
+package org.ourproject.kune.platf.client.ui.upload;
+
+public interface FileUploader {
+
+    public static final String USERHASH = "userhash";
+    public static final String CURRENT_STATE_TOKEN = "currentStateToken";
+    public static final String FILENAME = "filename";
+
+    boolean hasUploadingFiles();
+
+    void hide();
+
+    void resetPermittedExtensions();
+
+    void setPermittedExtensions(String extensions);
+
+    void show();
+
+}

Added: trunk/src/main/java/org/ourproject/kune/platf/client/ui/upload/FileUploaderDialog.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/upload/FileUploaderDialog.java	2008-09-29 08:54:12 UTC (rev 894)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/upload/FileUploaderDialog.java	2008-09-29 08:55:01 UTC (rev 895)
@@ -0,0 +1,179 @@
+package org.ourproject.kune.platf.client.ui.upload;
+
+import org.ourproject.kune.platf.client.ui.KuneStringUtils;
+import org.ourproject.kune.workspace.client.i18n.I18nUITranslationService;
+import org.ourproject.kune.workspace.client.site.Site;
+import org.ourproject.kune.workspace.client.skel.WorkspaceSkeleton;
+
+import com.allen_sauer.gwt.log.client.Log;
+import com.google.gwt.core.client.JavaScriptObject;
+import com.google.gwt.user.client.Command;
+import com.google.gwt.user.client.DeferredCommand;
+import com.gwtext.client.core.EventObject;
+import com.gwtext.client.core.UrlParam;
+import com.gwtext.client.widgets.Button;
+import com.gwtext.client.widgets.ToolbarButton;
+import com.gwtext.client.widgets.Window;
+import com.gwtext.client.widgets.event.ButtonListenerAdapter;
+import com.gwtextux.client.widgets.upload.UploadDialog;
+import com.gwtextux.client.widgets.upload.UploadDialogListenerAdapter;
+
+public class FileUploaderDialog implements FileUploaderView {
+
+    protected static final String SITE_FILE_UPLOADER = "k-site-file-uploader";
+
+    private static final String URL = "/kune/servlets/FileUploadManager";
+
+    private UploadDialog dialog;
+    private ToolbarButton traybarButton;
+    private final I18nUITranslationService i18n;
+    private final WorkspaceSkeleton ws;
+    private final FileUploaderPresenter presenter;
+
+    public FileUploaderDialog(final FileUploaderPresenter presenter, final I18nUITranslationService i18n,
+	    final WorkspaceSkeleton ws) {
+	this.presenter = presenter;
+	this.i18n = i18n;
+	this.ws = ws;
+	createDialog(false);
+    }
+
+    public void destroy() {
+	if (hasUploadingFiles()) {
+	    dialog.stopUpload();
+	    Site.important(i18n.t("Upload canceled after sign out"));
+	}
+	if (dialog != null) {
+	    dialog.destroy();
+	    dialog = null;
+	}
+	if (traybarButton != null) {
+	    traybarButton.destroy();
+	    traybarButton = null;
+	}
+    }
+
+    public boolean hasUploadingFiles() {
+	return dialog.hasUnuploadedFiles();
+    }
+
+    public void hide() {
+	dialog.hide();
+    }
+
+    public void resetPermittedExtensions() {
+	final String[] extensions = {};
+	setPermittedExtensions(extensions);
+    }
+
+    public void setPermittedExtensions(final String extensions) {
+	final Object[] objs = KuneStringUtils.splitTags(extensions).toArray();
+	final String[] exts = new String[objs.length];
+	for (int i = 0; i < objs.length; i++) {
+	    exts[i] = (String) objs[i];
+	}
+	setPermittedExtensions(exts);
+    }
+
+    public void setUploadParams(final String userhash, final String currentStateToken) {
+	// Warning take into account param[size]
+	final UrlParam param[] = new UrlParam[2];
+	param[0] = new UrlParam(FileUploader.USERHASH, userhash);
+	param[1] = new UrlParam(FileUploader.CURRENT_STATE_TOKEN, currentStateToken);
+	dialog.setBaseParams(param);
+    }
+
+    public void show() {
+	if (traybarButton == null) {
+	    traybarButton = new ToolbarButton();
+	    traybarButton.setTooltip(i18n.t("Show/hide uploader window"));
+	    traybarButton.setIcon("images/nav/upload.png");
+	    traybarButton.addListener(new ButtonListenerAdapter() {
+		@Override
+		public void onClick(final Button button, final EventObject e) {
+		    if (dialog.isVisible()) {
+			dialog.hide();
+		    } else {
+			dialog.show();
+		    }
+		}
+	    });
+	    ws.getSiteTraybar().addButton(traybarButton);
+	}
+	if (dialog == null) {
+	    createDialog(true);
+	} else {
+	    dialog.show();
+	}
+    }
+
+    private void createDialog(final boolean show) {
+	dialog = new UploadDialog(i18n.t("File uploader"), false, true);
+	dialog.setId(SITE_FILE_UPLOADER);
+	dialog.setAllowCloseOnUpload(true);
+	dialog.setResetOnHide(false);
+	dialog.setClosable(true);
+	dialog.setCloseAction(Window.HIDE);
+	dialog.setMinimizable(true);
+	dialog.setUploadAutostart(false);
+
+	dialog.addListener(new UploadDialogListenerAdapter() {
+	    @Override
+	    public boolean onBeforeAdd(final UploadDialog source, final String filename) {
+		boolean mustAdd = presenter.checkFolderChange();
+		if (!mustAdd) {
+		    Site.important(i18n.t("Wait until current uploads finish to upload files in other location"));
+		}
+		return mustAdd;
+	    }
+
+	    @Override
+	    public void onMinimize(final Window source) {
+		dialog.hide();
+	    }
+
+	    @Override
+	    public void onUploadComplete(final UploadDialog source) {
+		if (!dialog.isVisible()) {
+		    Site.info(i18n.t("Upload completed"));
+		    traybarButton.destroy();
+		    traybarButton = null;
+		}
+		presenter.onUploadComplete();
+	    }
+
+	    @Override
+	    public void onUploadError(final UploadDialog source, final String filename, final JavaScriptObject data) {
+		showError();
+	    }
+
+	    @Override
+	    public void onUploadFailed(final UploadDialog source, final String filename) {
+		showError();
+	    }
+
+	    private void showError() {
+		if (!dialog.isVisible()) {
+		    Site.veryImportant(i18n.t("Error uploading"));
+		}
+	    }
+
+	});
+	dialog.setUrl(URL);
+	if (show) {
+	    dialog.show();
+	}
+    }
+
+    private void setPermittedExtensions(final String[] extensions) {
+	DeferredCommand.addCommand(new Command() {
+	    public void execute() {
+		if (dialog == null) {
+		    createDialog(false);
+		}
+		Log.info("PermittedExtensions: " + extensions.toString() + " length: " + extensions.length);
+		dialog.setPermittedExtensions(extensions);
+	    }
+	});
+    }
+}

Added: trunk/src/main/java/org/ourproject/kune/platf/client/ui/upload/FileUploaderPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/upload/FileUploaderPresenter.java	2008-09-29 08:54:12 UTC (rev 894)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/upload/FileUploaderPresenter.java	2008-09-29 08:55:01 UTC (rev 895)
@@ -0,0 +1,75 @@
+package org.ourproject.kune.platf.client.ui.upload;
+
+import org.ourproject.kune.platf.client.dto.StateToken;
+import org.ourproject.kune.platf.client.state.Session;
+import org.ourproject.kune.workspace.client.ctxnav.ContextNavigator;
+
+import com.calclab.suco.client.ioc.Provider;
+import com.calclab.suco.client.listener.Listener0;
+
+public class FileUploaderPresenter implements FileUploader {
+
+    private FileUploaderView view;
+    private final Session session;
+    private StateToken currentUploadStateToken;
+    private final Provider<ContextNavigator> navProvider;
+
+    public FileUploaderPresenter(final Session session, final Provider<ContextNavigator> navProvider) {
+	this.session = session;
+	this.navProvider = navProvider;
+    }
+
+    public boolean checkFolderChange() {
+	final StateToken currentFolderStateToken = session.getCurrentStateToken().clone().clearDocument();
+	if (sameContainer()) {
+	    view.setUploadParams(session.getUserHash(), currentFolderStateToken.toString());
+	    return true;
+	}
+	if (view.hasUploadingFiles()) {
+	    return false;
+	} else {
+	    currentUploadStateToken = currentFolderStateToken;
+	    view.setUploadParams(session.getUserHash(), currentFolderStateToken.toString());
+	    return true;
+	}
+    }
+
+    public boolean hasUploadingFiles() {
+	return view.hasUploadingFiles();
+    }
+
+    public void hide() {
+	view.hide();
+    }
+
+    public void init(final FileUploaderView view) {
+	this.view = view;
+	session.onUserSignOut(new Listener0() {
+	    public void onEvent() {
+		view.destroy();
+	    }
+	});
+    }
+
+    public void onUploadComplete() {
+	navProvider.get().refresh(currentUploadStateToken);
+    }
+
+    public void resetPermittedExtensions() {
+	view.resetPermittedExtensions();
+    }
+
+    public void setPermittedExtensions(final String extensions) {
+	view.setPermittedExtensions(extensions);
+    }
+
+    public void show() {
+	view.show();
+    }
+
+    private boolean sameContainer() {
+	final StateToken currentStateToken = session.getCurrentStateToken();
+	currentUploadStateToken = currentUploadStateToken == null ? currentStateToken : currentUploadStateToken;
+	return currentUploadStateToken.equals(currentStateToken);
+    }
+}

Added: trunk/src/main/java/org/ourproject/kune/platf/client/ui/upload/FileUploaderView.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/upload/FileUploaderView.java	2008-09-29 08:54:12 UTC (rev 894)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/upload/FileUploaderView.java	2008-09-29 08:55:01 UTC (rev 895)
@@ -0,0 +1,19 @@
+package org.ourproject.kune.platf.client.ui.upload;
+
+public interface FileUploaderView {
+
+    void destroy();
+
+    boolean hasUploadingFiles();
+
+    void hide();
+
+    void resetPermittedExtensions();
+
+    void setPermittedExtensions(String extensions);
+
+    void setUploadParams(String userhash, String currentUploadStateToken);
+
+    void show();
+
+}

Added: trunk/src/main/java/org/ourproject/kune/platf/public/images/content_edit.png
===================================================================
(Binary files differ)


Property changes on: trunk/src/main/java/org/ourproject/kune/platf/public/images/content_edit.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Modified: trunk/src/main/java/org/ourproject/kune/platf/server/domain/Group.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/domain/Group.java	2008-09-29 08:54:12 UTC (rev 894)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/domain/Group.java	2008-09-29 08:55:01 UTC (rev 895)
@@ -56,6 +56,14 @@
     // Never expect or return null
     public static Group NO_GROUP = null;
 
+    @Enumerated(EnumType.STRING)
+    @Column(nullable = false)
+    AdmissionType admissionType;
+
+    @Enumerated(EnumType.STRING)
+    @Column(nullable = false)
+    GroupType type;
+
     @Id
     @DocumentId
     @GeneratedValue
@@ -76,17 +84,12 @@
     @Length(max = 255, message = "Public desc max 255 chars of lenght")
     private String publicDesc;
 
-    @Enumerated(EnumType.STRING)
-    @Column(nullable = false)
-    AdmissionType admissionType;
-
-    @Enumerated(EnumType.STRING)
-    @Column(nullable = false)
-    GroupType type;
-
     @OneToOne
     private Content defaultContent;
 
+    @OneToOne
+    private Content groupLogo;
+
     @OneToOne(cascade = CascadeType.ALL)
     private SocialNetwork socialNetwork;
 
@@ -99,175 +102,183 @@
     private String workspaceTheme;
 
     public Group() {
-        this(null, null, null, null);
+	this(null, null, null, null);
     }
 
     public Group(final String shortName, final String longName) {
-        this(shortName, longName, null, GroupType.PROJECT);
+	this(shortName, longName, null, GroupType.PROJECT);
     }
 
     public Group(final String shortName, final String longName, final License defaultLicense, final GroupType type) {
-        this.shortName = shortName;
-        this.longName = longName;
-        this.toolsConfig = new HashMap<String, ToolConfiguration>();
-        this.socialNetwork = new SocialNetwork();
-        this.defaultLicense = defaultLicense;
-        this.type = type;
-        this.admissionType = AdmissionType.Moderated;
+	this.shortName = shortName;
+	this.longName = longName;
+	this.toolsConfig = new HashMap<String, ToolConfiguration>();
+	this.socialNetwork = new SocialNetwork();
+	this.defaultLicense = defaultLicense;
+	this.type = type;
+	this.admissionType = AdmissionType.Moderated;
     }
 
-    @Finder(query = "FROM Group")
-    public List<Group> getAll() {
-        return null;
+    @Override
+    public boolean equals(final Object obj) {
+	if (this == obj) {
+	    return true;
+	}
+	if (obj == null) {
+	    return false;
+	}
+	if (getClass() != obj.getClass()) {
+	    return false;
+	}
+	final Group other = (Group) obj;
+	if (shortName == null) {
+	    if (other.shortName != null) {
+		return false;
+	    }
+	} else if (!shortName.equals(other.shortName)) {
+	    return false;
+	}
+	return true;
     }
 
-    @Finder(query = "FROM Group g WHERE g.shortName = :shortName")
-    public Group findByShortName(@Named("shortName")
-    final String shortName) {
-        return null;
+    public boolean existToolConfig(final String toolName) {
+	return toolsConfig.get(toolName) != null;
     }
 
     @Finder(query = "FROM Group g WHERE g.id IN (SELECT g.id FROM g.socialNetwork.accessLists.admins.list adm WHERE adm.id = :groupid)")
     public List<Group> findAdminInGroups(@Named("groupid")
     final Long groupId) {
-        return null;
+	return null;
     }
 
+    @Finder(query = "FROM Group g WHERE g.shortName = :shortName")
+    public Group findByShortName(@Named("shortName")
+    final String shortName) {
+	return null;
+    }
+
     @Finder(query = "FROM Group g WHERE g.id IN (SELECT g.id FROM g.socialNetwork.accessLists.editors.list AS ed WHERE ed.id = :groupid)")
     public List<Group> findCollabInGroups(@Named("groupid")
     final Long groupId) {
-        return null;
+	return null;
     }
 
-    public String getShortName() {
-        return shortName;
+    public AdmissionType getAdmissionType() {
+	return admissionType;
     }
 
-    public void setShortName(final String shortName) {
-        this.shortName = shortName;
+    @Finder(query = "FROM Group")
+    public List<Group> getAll() {
+	return null;
     }
 
-    public AdmissionType getAdmissionType() {
-        return admissionType;
+    public Content getDefaultContent() {
+	return defaultContent;
     }
 
-    public void setAdmissionType(final AdmissionType admissionType) {
-        this.admissionType = admissionType;
+    public License getDefaultLicense() {
+	return defaultLicense;
     }
 
-    public Long getId() {
-        return id;
+    public Content getGroupLogo() {
+	return groupLogo;
     }
 
-    public void setId(final Long id) {
-        this.id = id;
+    public Long getId() {
+	return id;
     }
 
     public String getLongName() {
-        return longName;
+	return longName;
     }
 
-    public void setLongName(final String longName) {
-        this.longName = longName;
+    public String getPublicDesc() {
+	return publicDesc;
     }
 
-    public Content getDefaultContent() {
-        return defaultContent;
+    public Container getRoot(final String toolName) {
+	return toolsConfig.get(toolName).getRoot();
     }
 
-    public void setDefaultContent(final Content defaultContent) {
-        this.defaultContent = defaultContent;
+    public String getShortName() {
+	return shortName;
     }
 
     public SocialNetwork getSocialNetwork() {
-        return socialNetwork;
+	return socialNetwork;
     }
 
-    public void setSocialNetwork(final SocialNetwork socialNetwork) {
-        this.socialNetwork = socialNetwork;
+    public ToolConfiguration getToolConfiguration(final String name) {
+	return toolsConfig.get(name);
     }
 
-    public Container getRoot(final String toolName) {
-        return toolsConfig.get(toolName).getRoot();
+    public Map<String, ToolConfiguration> getToolsConfig() {
+	return toolsConfig;
     }
 
-    public boolean existToolConfig(final String toolName) {
-        return toolsConfig.get(toolName) != null;
+    public GroupType getType() {
+	return type;
     }
 
-    public Map<String, ToolConfiguration> getToolsConfig() {
-        return toolsConfig;
+    public String getWorkspaceTheme() {
+	return workspaceTheme;
     }
 
-    public ToolConfiguration getToolConfiguration(final String name) {
-        return toolsConfig.get(name);
+    @Override
+    public int hashCode() {
+	final int prime = 31;
+	int result = 1;
+	result = prime * result + (shortName == null ? 0 : shortName.hashCode());
+	return result;
     }
 
-    public ToolConfiguration setToolConfig(final String name, final ToolConfiguration config) {
-        toolsConfig.put(name, config);
-        return config;
+    public void setAdmissionType(final AdmissionType admissionType) {
+	this.admissionType = admissionType;
     }
 
-    public String getPublicDesc() {
-        return publicDesc;
+    public void setDefaultContent(final Content defaultContent) {
+	this.defaultContent = defaultContent;
     }
 
-    public void setPublicDesc(final String publicDesc) {
-        this.publicDesc = publicDesc;
+    public void setDefaultLicense(final License defaultLicense) {
+	this.defaultLicense = defaultLicense;
     }
 
-    public License getDefaultLicense() {
-        return defaultLicense;
+    public void setGroupLogo(final Content groupLogo) {
+	this.groupLogo = groupLogo;
     }
 
-    public void setDefaultLicense(final License defaultLicense) {
-        this.defaultLicense = defaultLicense;
+    public void setId(final Long id) {
+	this.id = id;
     }
 
-    public GroupType getType() {
-        return type;
+    public void setLongName(final String longName) {
+	this.longName = longName;
     }
 
-    public void setType(final GroupType type) {
-        this.type = type;
+    public void setPublicDesc(final String publicDesc) {
+	this.publicDesc = publicDesc;
     }
 
-    @Override
-    public int hashCode() {
-        final int prime = 31;
-        int result = 1;
-        result = prime * result + (shortName == null ? 0 : shortName.hashCode());
-        return result;
+    public void setShortName(final String shortName) {
+	this.shortName = shortName;
     }
 
-    @Override
-    public boolean equals(final Object obj) {
-        if (this == obj) {
-            return true;
-        }
-        if (obj == null) {
-            return false;
-        }
-        if (getClass() != obj.getClass()) {
-            return false;
-        }
-        final Group other = (Group) obj;
-        if (shortName == null) {
-            if (other.shortName != null) {
-                return false;
-            }
-        } else if (!shortName.equals(other.shortName)) {
-            return false;
-        }
-        return true;
+    public void setSocialNetwork(final SocialNetwork socialNetwork) {
+	this.socialNetwork = socialNetwork;
     }
 
-    public String getWorkspaceTheme() {
-        return workspaceTheme;
+    public ToolConfiguration setToolConfig(final String name, final ToolConfiguration config) {
+	toolsConfig.put(name, config);
+	return config;
     }
 
+    public void setType(final GroupType type) {
+	this.type = type;
+    }
+
     public void setWorkspaceTheme(final String workspaceTheme) {
-        this.workspaceTheme = workspaceTheme;
+	this.workspaceTheme = workspaceTheme;
     }
 
 }
\ No newline at end of file

Modified: trunk/src/main/java/org/ourproject/kune/platf/server/manager/GroupManager.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/manager/GroupManager.java	2008-09-29 08:54:12 UTC (rev 894)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/manager/GroupManager.java	2008-09-29 08:55:01 UTC (rev 895)
@@ -63,4 +63,6 @@
 
     void setDefaultContent(String groupShortName, Content content);
 
+    void setGroupLogo(Group group, Content content);
+
 }

Modified: trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManager.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManager.java	2008-09-29 08:54:12 UTC (rev 894)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManager.java	2008-09-29 08:55:01 UTC (rev 895)
@@ -23,7 +23,7 @@
 import org.ourproject.kune.docs.server.DocumentServerTool;
 import org.ourproject.kune.platf.client.dto.StateToken;
 import org.ourproject.kune.platf.client.services.I18nTranslationService;
-import org.ourproject.kune.platf.client.ui.dialogs.upload.FileUploader;
+import org.ourproject.kune.platf.client.ui.upload.FileUploader;
 import org.ourproject.kune.platf.server.UserSession;
 import org.ourproject.kune.platf.server.access.AccessRol;
 import org.ourproject.kune.platf.server.access.AccessService;

Modified: trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/GroupManagerDefault.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/GroupManagerDefault.java	2008-09-29 08:54:12 UTC (rev 894)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/GroupManagerDefault.java	2008-09-29 08:55:01 UTC (rev 895)
@@ -32,6 +32,7 @@
 import org.apache.lucene.search.Query;
 import org.ourproject.kune.platf.client.dto.GroupType;
 import org.ourproject.kune.platf.client.errors.AccessViolationException;
+import org.ourproject.kune.platf.client.errors.DefaultException;
 import org.ourproject.kune.platf.client.errors.EmailAddressInUseException;
 import org.ourproject.kune.platf.client.errors.GroupNameInUseException;
 import org.ourproject.kune.platf.client.errors.UserMustBeLoggedException;
@@ -176,6 +177,14 @@
 	group.setDefaultContent(content);
     }
 
+    public void setGroupLogo(final Group group, final Content content) {
+	if (content.getMimeType().getType().equals("image")) {
+	    group.setGroupLogo(content);
+	} else {
+	    new DefaultException("Trying to set not a image as group logo");
+	}
+    }
+
     private void initGroup(final User user, final Group group) throws GroupNameInUseException {
 	try {
 	    persist(group);

Modified: trunk/src/main/java/org/ourproject/kune/platf/server/rpc/GroupRPC.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/rpc/GroupRPC.java	2008-09-29 08:54:12 UTC (rev 894)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/rpc/GroupRPC.java	2008-09-29 08:55:01 UTC (rev 895)
@@ -32,6 +32,8 @@
 import org.ourproject.kune.platf.server.auth.Authenticated;
 import org.ourproject.kune.platf.server.auth.Authorizated;
 import org.ourproject.kune.platf.server.content.ContentManager;
+import org.ourproject.kune.platf.server.content.ContentUtils;
+import org.ourproject.kune.platf.server.domain.Content;
 import org.ourproject.kune.platf.server.domain.Group;
 import org.ourproject.kune.platf.server.domain.User;
 import org.ourproject.kune.platf.server.manager.GroupManager;
@@ -62,7 +64,7 @@
 
     @Authenticated
     @Authorizated(actionLevel = ActionLevel.group, accessRolRequired = AccessRol.Administrator)
-    @Transactional(type = TransactionType.READ_WRITE, rollbackOn = DefaultException.class)
+    @Transactional(type = TransactionType.READ_WRITE)
     public void changeGroupWsTheme(final String userHash, final StateToken groupToken, final String theme)
 	    throws DefaultException {
 	final UserSession userSession = getUserSession();
@@ -85,6 +87,16 @@
 	return newGroup.getDefaultContent().getStateToken();
     }
 
+    @Authenticated
+    @Authorizated(actionLevel = ActionLevel.group, accessRolRequired = AccessRol.Administrator)
+    @Transactional(type = TransactionType.READ_WRITE)
+    public GroupDTO setGroupLogo(final String userHash, final StateToken token) {
+	final Group group = groupManager.findByShortName(token.getGroup());
+	final Content content = contentManager.find(ContentUtils.parseId(token.getDocument()));
+	groupManager.setGroupLogo(group, content);
+	return mapper.map(group, GroupDTO.class);
+    }
+
     private UserSession getUserSession() {
 	return userSessionProvider.get();
     }

Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/entitylogo/EntityLogo.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/entitylogo/EntityLogo.java	2008-09-29 08:54:12 UTC (rev 894)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/entitylogo/EntityLogo.java	2008-09-29 08:55:01 UTC (rev 895)
@@ -1,6 +1,7 @@
 package org.ourproject.kune.workspace.client.entitylogo;
 
-
 public interface EntityLogo {
 
+    void refreshGroupLogo();
+
 }
\ No newline at end of file

Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/entitylogo/EntityLogoPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/entitylogo/EntityLogoPanel.java	2008-09-29 08:54:12 UTC (rev 894)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/entitylogo/EntityLogoPanel.java	2008-09-29 08:55:01 UTC (rev 895)
@@ -20,11 +20,16 @@
 
 package org.ourproject.kune.workspace.client.entitylogo;
 
+import org.ourproject.kune.platf.client.dto.StateToken;
 import org.ourproject.kune.platf.client.services.I18nTranslationService;
+import org.ourproject.kune.platf.client.ui.dialogs.InfoDialog;
+import org.ourproject.kune.platf.client.ui.download.FileDownloadUtils;
 import org.ourproject.kune.workspace.client.skel.WorkspaceSkeleton;
 import org.ourproject.kune.workspace.client.themes.WsTheme;
 
+import com.calclab.suco.client.ioc.Provider;
 import com.google.gwt.user.client.DOM;
+import com.google.gwt.user.client.ui.ClickListener;
 import com.google.gwt.user.client.ui.HTML;
 import com.google.gwt.user.client.ui.HorizontalPanel;
 import com.google.gwt.user.client.ui.Hyperlink;
@@ -32,6 +37,7 @@
 import com.google.gwt.user.client.ui.Label;
 import com.google.gwt.user.client.ui.SimplePanel;
 import com.google.gwt.user.client.ui.VerticalPanel;
+import com.google.gwt.user.client.ui.Widget;
 
 public class EntityLogoPanel extends SimplePanel implements EntityLogoView {
     class EntityTextLogo extends VerticalPanel {
@@ -58,8 +64,17 @@
 	    putYourLogoHP.add(defTextPutYourLogoHL);
 
 	    // Set properties
-	    // TODO: Put your logo here functionality
 	    defTextPutYourLogoHL.setText(i18n.t("Put Your Logo Here"));
+	    defTextPutYourLogoHL.addClickListener(new ClickListener() {
+		public void onClick(final Widget sender) {
+		    final InfoDialog infoDialog = new InfoDialog(
+			    "Configure your group logo",
+			    "Howto configure your group logo",
+			    "For configure your group's logo just add an image to your group contents and select it as your group's logo (see menu 'File'). Whe are working into a more direct way to do that.",
+			    i18n.t("Ok"), false, false, 300, 200);
+		    infoDialog.show();
+		}
+	    });
 	    expandCell.setWidth("100%");
 	    putYourLogoHP.setCellWidth(expandCell, "100%");
 	    // TODO: link to configure the logo
@@ -83,17 +98,33 @@
 
     }
 
+    private static final int LOGO_ICON_DEFAULT_WIDTH = 468;
+    private static final int LOGO_ICON_DEFAULT_HEIGHT = 60;
+
     private EntityTextLogo entityTextLogo;
     private final I18nTranslationService i18n;
+    private final Provider<FileDownloadUtils> dowloadProvider;
 
-    public EntityLogoPanel(final I18nTranslationService i18n, final WorkspaceSkeleton ws) {
+    public EntityLogoPanel(final I18nTranslationService i18n, final WorkspaceSkeleton ws,
+	    final Provider<FileDownloadUtils> dowloadProvider) {
 	this.i18n = i18n;
+	this.dowloadProvider = dowloadProvider;
 	ws.addToEntityMainHeader(this);
     }
 
-    public void setLogo(final Image image) {
+    public void setLogo(final StateToken stateToken, final boolean clipped) {
 	clear();
-	add(image);
+	final String imageUrl = dowloadProvider.get().getImageUrl(stateToken);
+	Image logo;
+	if (clipped) {
+	    logo = new Image(imageUrl, 0, 0, LOGO_ICON_DEFAULT_WIDTH, LOGO_ICON_DEFAULT_HEIGHT);
+	} else {
+
+	    logo = new Image(imageUrl);
+	    logo.setWidth("" + LOGO_ICON_DEFAULT_WIDTH);
+	    logo.setHeight("" + LOGO_ICON_DEFAULT_HEIGHT);
+	}
+	add(logo);
     }
 
     public void setLogo(final String groupName) {

Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/entitylogo/EntityLogoPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/entitylogo/EntityLogoPresenter.java	2008-09-29 08:54:12 UTC (rev 894)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/entitylogo/EntityLogoPresenter.java	2008-09-29 08:55:01 UTC (rev 895)
@@ -1,7 +1,9 @@
 package org.ourproject.kune.workspace.client.entitylogo;
 
+import org.ourproject.kune.platf.client.dto.ContentSimpleDTO;
 import org.ourproject.kune.platf.client.dto.GroupDTO;
 import org.ourproject.kune.platf.client.dto.StateDTO;
+import org.ourproject.kune.platf.client.state.Session;
 import org.ourproject.kune.platf.client.state.StateManager;
 import org.ourproject.kune.workspace.client.themes.WsTheme;
 import org.ourproject.kune.workspace.client.themes.WsThemePresenter;
@@ -11,14 +13,18 @@
 
 public class EntityLogoPresenter implements EntityLogo {
     private EntityLogoView view;
+    private final Session session;
 
-    public EntityLogoPresenter(final StateManager stateManager, final WsThemePresenter theme) {
+    public EntityLogoPresenter(final StateManager stateManager, final WsThemePresenter theme, final Session session) {
+	this.session = session;
+	stateManager.onGroupChanged(new Listener2<GroupDTO, GroupDTO>() {
+	    public void onEvent(final GroupDTO oldGroup, final GroupDTO newGroup) {
+		setGroupLogo(newGroup);
+	    }
+	});
 	stateManager.onStateChanged(new Listener<StateDTO>() {
 	    public void onEvent(final StateDTO state) {
-		final GroupDTO group = state.getGroup();
 		final boolean isAdmin = state.getGroupRights().isAdministrable();
-
-		view.setLogo(group.getLongName());
 		view.setPutYourLogoVisible(isAdmin);
 	    }
 	});
@@ -31,7 +37,19 @@
 
     public void init(final EntityLogoView view) {
 	this.view = view;
+    }
 
+    public void refreshGroupLogo() {
+	setGroupLogo(session.getCurrentState().getGroup());
     }
 
+    private void setGroupLogo(final GroupDTO group) {
+	final ContentSimpleDTO groupLogo = group.getGroupLogo();
+	if (groupLogo != null) {
+	    view.setLogo(groupLogo.getStateToken(), true);
+	} else {
+	    view.setLogo(group.getLongName());
+	}
+    }
+
 }

Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/entitylogo/EntityLogoView.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/entitylogo/EntityLogoView.java	2008-09-29 08:54:12 UTC (rev 894)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/entitylogo/EntityLogoView.java	2008-09-29 08:55:01 UTC (rev 895)
@@ -1,17 +1,15 @@
 package org.ourproject.kune.workspace.client.entitylogo;
 
+import org.ourproject.kune.platf.client.dto.StateToken;
 import org.ourproject.kune.workspace.client.themes.WsTheme;
 
-import com.google.gwt.user.client.ui.Image;
-
 public interface EntityLogoView {
 
-    // FIXME: Don' use Image
-    public abstract void setLogo(final Image image);
+    void setLogo(StateToken stateToken, boolean clipped);
 
-    public abstract void setLogo(final String groupName);
+    void setLogo(final String groupName);
 
-    public abstract void setPutYourLogoVisible(final boolean visible);
+    void setPutYourLogoVisible(final boolean visible);
 
-    public abstract void setTheme(final WsTheme oldTheme, WsTheme newTheme);
+    void setTheme(final WsTheme oldTheme, WsTheme newTheme);
 }

Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/skel/WorkspaceSkeleton.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/skel/WorkspaceSkeleton.java	2008-09-29 08:54:12 UTC (rev 894)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/skel/WorkspaceSkeleton.java	2008-09-29 08:55:01 UTC (rev 895)
@@ -5,7 +5,6 @@
 
 import com.calclab.suco.client.listener.Listener0;
 import com.google.gwt.user.client.Command;
-import com.google.gwt.user.client.DOM;
 import com.google.gwt.user.client.DeferredCommand;
 import com.google.gwt.user.client.ui.RootPanel;
 import com.google.gwt.user.client.ui.Widget;
@@ -83,16 +82,6 @@
 	extRootBody.mask(message, "x-mask-loading");
     }
 
-    public void openUrl(final String url) {
-	// final Frame urlFrame = new Frame(url);
-	// final Window window = new Window();
-	// window.add(urlFrame);
-	// window.show();
-	// window.close();
-	// Window.open(url, "", "_blank");
-	DOM.setElementAttribute(RootPanel.get("__download").getElement(), "src", url);
-    }
-
     public void promptMessage(final String title, final String message, final Listener0 onEnter) {
 	MessageBox.prompt(title, message, new MessageBox.PromptCallback() {
 	    public void execute(final String btnID, final String text) {

Modified: trunk/src/test/java/org/ourproject/kune/platf/client/actions/ActionRegistryTest.java
===================================================================
--- trunk/src/test/java/org/ourproject/kune/platf/client/actions/ActionRegistryTest.java	2008-09-29 08:54:12 UTC (rev 894)
+++ trunk/src/test/java/org/ourproject/kune/platf/client/actions/ActionRegistryTest.java	2008-09-29 08:55:01 UTC (rev 895)
@@ -78,7 +78,7 @@
 		return false;
 	    }
 	});
-	registry.addAction(DEF_CONTENT_TYPE_ID, adminAction);
+	registry.addAction(adminAction, DEF_CONTENT_TYPE_ID);
 	assertTrue(!registry.checkEnabling(adminAction, new StateToken()));
     }
 
@@ -89,14 +89,14 @@
 		return true;
 	    }
 	});
-	registry.addAction(DEF_CONTENT_TYPE_ID, adminAction);
+	registry.addAction(adminAction, DEF_CONTENT_TYPE_ID);
 	assertTrue(registry.checkEnabling(adminAction, new StateToken()));
     }
 
     private void addDefActions() {
-	registry.addAction(DEF_CONTENT_TYPE_ID, adminAction);
-	registry.addAction(DEF_CONTENT_TYPE_ID, editorAction);
-	registry.addAction(DEF_CONTENT_TYPE_ID, viewerAction);
+	registry.addAction(adminAction, DEF_CONTENT_TYPE_ID);
+	registry.addAction(editorAction, DEF_CONTENT_TYPE_ID);
+	registry.addAction(viewerAction, DEF_CONTENT_TYPE_ID);
     }
 
     private void checkActionLists(final int expectedActions, final AccessRightsDTO accessRightsDTO,

Modified: trunk/src/test/java/org/ourproject/kune/platf/client/state/StateManagerTest.java
===================================================================
--- trunk/src/test/java/org/ourproject/kune/platf/client/state/StateManagerTest.java	2008-09-29 08:54:12 UTC (rev 894)
+++ trunk/src/test/java/org/ourproject/kune/platf/client/state/StateManagerTest.java	2008-09-29 08:55:01 UTC (rev 895)
@@ -4,6 +4,7 @@
 import org.junit.Test;
 import org.mockito.Mockito;
 import org.ourproject.kune.platf.client.app.HistoryWrapper;
+import org.ourproject.kune.platf.client.dto.GroupDTO;
 import org.ourproject.kune.platf.client.dto.StateDTO;
 import org.ourproject.kune.platf.client.dto.StateToken;
 import org.ourproject.kune.workspace.client.site.SiteToken;
@@ -23,7 +24,7 @@
     @SuppressWarnings("unchecked")
     @Test
     public void changeStateWithDifferentGroupsMustFireListener() {
-	final Listener2<String, String> groupListener = Mockito.mock(Listener2.class);
+	final Listener2<GroupDTO, GroupDTO> groupListener = Mockito.mock(Listener2.class);
 	stateManager.onGroupChanged(groupListener);
 	stateManager.onHistoryChanged("group1.tool1");
 	stateManager.onHistoryChanged("group2.tool1");

Modified: trunk/src/test/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderPresenterTest.java
===================================================================
--- trunk/src/test/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderPresenterTest.java	2008-09-29 08:54:12 UTC (rev 894)
+++ trunk/src/test/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderPresenterTest.java	2008-09-29 08:55:01 UTC (rev 895)
@@ -8,6 +8,8 @@
 import org.mockito.Mockito;
 import org.ourproject.kune.platf.client.dto.StateToken;
 import org.ourproject.kune.platf.client.state.Session;
+import org.ourproject.kune.platf.client.ui.upload.FileUploaderPresenter;
+import org.ourproject.kune.platf.client.ui.upload.FileUploaderView;
 
 public class FileUploaderPresenterTest {
 




More information about the kune-commits mailing list