kune-commits
Threads by month
- ----- 2026 -----
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
July 2011
- 3 participants
- 42 discussions
29 Jul '11
Author: vjrj_
Date: 2011-07-29 23:04:15 +0200 (Fri, 29 Jul 2011)
New Revision: 1477
Modified:
trunk/src/test/java/cc/kune/core/server/manager/ContainerManagerDefaultTest.java
trunk/src/test/java/cc/kune/core/server/manager/ContentManagerDefaultTest.java
Log:
Test fixed
Modified: trunk/src/test/java/cc/kune/core/server/manager/ContainerManagerDefaultTest.java
===================================================================
--- trunk/src/test/java/cc/kune/core/server/manager/ContainerManagerDefaultTest.java 2011-07-29 20:59:39 UTC (rev 1476)
+++ trunk/src/test/java/cc/kune/core/server/manager/ContainerManagerDefaultTest.java 2011-07-29 21:04:15 UTC (rev 1477)
@@ -8,6 +8,7 @@
import org.junit.Test;
import cc.kune.core.client.errors.AccessViolationException;
+import cc.kune.core.client.errors.MoveOnSameContainerException;
import cc.kune.core.client.errors.NameInUseException;
import cc.kune.core.server.PersistencePreLoadedDataTest;
import cc.kune.docs.shared.DocsConstants;
@@ -65,11 +66,10 @@
containerManager.moveContainer(folderToMove, newParentFolder);
}
- @Test
+ @Test(expected = MoveOnSameContainerException.class)
public void testMoveFolderToSame() {
final Container folderToMove = createContainer(rootFolder);
containerManager.moveContainer(folderToMove, rootFolder);
- // Do nothing (in silence)
}
@Test
Modified: trunk/src/test/java/cc/kune/core/server/manager/ContentManagerDefaultTest.java
===================================================================
--- trunk/src/test/java/cc/kune/core/server/manager/ContentManagerDefaultTest.java 2011-07-29 20:59:39 UTC (rev 1476)
+++ trunk/src/test/java/cc/kune/core/server/manager/ContentManagerDefaultTest.java 2011-07-29 21:04:15 UTC (rev 1477)
@@ -27,6 +27,7 @@
import org.junit.Ignore;
import org.junit.Test;
+import cc.kune.core.client.errors.MoveOnSameContainerException;
import cc.kune.core.client.errors.NameInUseException;
import cc.kune.core.server.PersistencePreLoadedDataTest;
import cc.kune.core.server.manager.impl.SearchResult;
@@ -118,6 +119,12 @@
assertEquals(1, search.getSize());
}
+ @Test(expected = MoveOnSameContainerException.class)
+ public void testMoveFolderToSame() {
+ final Content content = createContent();
+ contentManager.moveContent(content, content.getContainer());
+ }
+
@Ignore
@Test
public void testtMimeSearch() {
1
0
r1476 - in trunk/src/main/java/cc/kune: common/client/tooltip core/client/dnd core/client/errors core/public core/server/content gspace/client/viewers
by Vicente J. Ruiz Jurado 29 Jul '11
by Vicente J. Ruiz Jurado 29 Jul '11
29 Jul '11
Author: vjrj_
Date: 2011-07-29 22:59:39 +0200 (Fri, 29 Jul 2011)
New Revision: 1476
Added:
trunk/src/main/java/cc/kune/core/client/errors/MoveOnSameContainerException.java
Modified:
trunk/src/main/java/cc/kune/common/client/tooltip/Tooltip.java
trunk/src/main/java/cc/kune/core/client/dnd/FolderViewerDropController.java
trunk/src/main/java/cc/kune/core/client/errors/ErrorHandler.java
trunk/src/main/java/cc/kune/core/public/ws.css
trunk/src/main/java/cc/kune/core/server/content/ContainerManagerDefault.java
trunk/src/main/java/cc/kune/core/server/content/ContentManagerDefault.java
trunk/src/main/java/cc/kune/gspace/client/viewers/FolderViewerAsTablePanel.java
trunk/src/main/java/cc/kune/gspace/client/viewers/FolderViewerPresenter.java
Log:
Folder/content move minor changes
Modified: trunk/src/main/java/cc/kune/common/client/tooltip/Tooltip.java
===================================================================
--- trunk/src/main/java/cc/kune/common/client/tooltip/Tooltip.java 2011-07-29 19:44:18 UTC (rev 1475)
+++ trunk/src/main/java/cc/kune/common/client/tooltip/Tooltip.java 2011-07-29 20:59:39 UTC (rev 1476)
@@ -48,6 +48,8 @@
interface TooltipUiBinder extends UiBinder<Widget, Tooltip> {
}
+ static Tooltip current;
+
private static TooltipUiBinder uiBinder = GWT.create(TooltipUiBinder.class);
private static final int WIDTH_NOT_DEFINED = -1;
@@ -146,6 +148,10 @@
public void show() {
if (!Tooltip.this.isShowing() && ofWidget.isAttached() && ofWidget.isVisible()) {
Tooltip.super.show();
+ if (Tooltip.current != null) {
+ Tooltip.current.hide();
+ }
+ Tooltip.current = this;
Tooltip.this.showAt(TooltipPositionCalculator.calculate(Window.getClientWidth(),
Window.getClientHeight(), ofWidget.getAbsoluteLeft(), ofWidget.getAbsoluteTop(),
ofWidget.getOffsetWidth(), ofWidget.getOffsetHeight(), Tooltip.this.getWidth(),
Modified: trunk/src/main/java/cc/kune/core/client/dnd/FolderViewerDropController.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/dnd/FolderViewerDropController.java 2011-07-29 19:44:18 UTC (rev 1475)
+++ trunk/src/main/java/cc/kune/core/client/dnd/FolderViewerDropController.java 2011-07-29 20:59:39 UTC (rev 1476)
@@ -64,6 +64,7 @@
NotifyUser.showProgress(i18n.t("Moving"));
if (target != null) {
final StateToken destToken = (StateToken) target;
+ widget.removeFromParent();
contentService.moveContent(session.getUserHash(), ((FolderItemWidget) widget).getToken(),
destToken, new AsyncCallback<StateContainerDTO>() {
@Override
@@ -75,7 +76,6 @@
@Override
public void onSuccess(final StateContainerDTO result) {
- stateManager.refreshCurrentState();
NotifyUser.hideProgress();
}
});
Modified: trunk/src/main/java/cc/kune/core/client/errors/ErrorHandler.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/errors/ErrorHandler.java 2011-07-29 19:44:18 UTC (rev 1475)
+++ trunk/src/main/java/cc/kune/core/client/errors/ErrorHandler.java 2011-07-29 20:59:39 UTC (rev 1476)
@@ -132,6 +132,10 @@
logException(caught);
eventBus.fireEvent(new UserNotifyEvent(NotifyLevel.error,
i18n.t("This user is already a group member")));
+ } else if (caught instanceof MoveOnSameContainerException) {
+ logException(caught);
+ eventBus.fireEvent(new UserNotifyEvent(NotifyLevel.info,
+ i18n.t("You are trying to move this to the same location")));
} else if (caught instanceof UnderDevelopmentException) {
logException(caught);
eventBus.fireEvent(new UserNotifyEvent(NotifyLevel.info, i18n.t(TextUtils.IN_DEVELOPMENT)));
Added: trunk/src/main/java/cc/kune/core/client/errors/MoveOnSameContainerException.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/errors/MoveOnSameContainerException.java (rev 0)
+++ trunk/src/main/java/cc/kune/core/client/errors/MoveOnSameContainerException.java 2011-07-29 20:59:39 UTC (rev 1476)
@@ -0,0 +1,24 @@
+/*
+ *
+ * Copyright (C) 2007-2011 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 cc.kune.core.client.errors;
+
+public class MoveOnSameContainerException extends DefaultException {
+ private static final long serialVersionUID = -4785135366930710863L;
+}
Modified: trunk/src/main/java/cc/kune/core/public/ws.css
===================================================================
--- trunk/src/main/java/cc/kune/core/public/ws.css 2011-07-29 19:44:18 UTC (rev 1475)
+++ trunk/src/main/java/cc/kune/core/public/ws.css 2011-07-29 20:59:39 UTC (rev 1476)
@@ -1430,5 +1430,5 @@
button.k-drop-allowed-hover,
.k-drop-allowed-hover {
- border: dashed 2px #3a9fd6;
+ border: dashed 2px #3a9fd6 !important;
}
\ No newline at end of file
Modified: trunk/src/main/java/cc/kune/core/server/content/ContainerManagerDefault.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/content/ContainerManagerDefault.java 2011-07-29 19:44:18 UTC (rev 1475)
+++ trunk/src/main/java/cc/kune/core/server/content/ContainerManagerDefault.java 2011-07-29 20:59:39 UTC (rev 1476)
@@ -28,6 +28,7 @@
import cc.kune.core.client.errors.AccessViolationException;
import cc.kune.core.client.errors.DefaultException;
+import cc.kune.core.client.errors.MoveOnSameContainerException;
import cc.kune.core.client.errors.NameInUseException;
import cc.kune.core.server.manager.file.FileUtils;
import cc.kune.core.server.manager.impl.DefaultManager;
@@ -98,11 +99,10 @@
@Override
public void moveContainer(final Container container, final Container newContainer) {
- final String title = container.getName();
if (newContainer.equals(container.getParent())) {
- // Do nothing (trying to move to the same location)
- return;
+ throw new MoveOnSameContainerException();
}
+ final String title = container.getName();
if (findIfExistsTitle(newContainer, title)) {
throw new NameInUseException();
}
Modified: trunk/src/main/java/cc/kune/core/server/content/ContentManagerDefault.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/content/ContentManagerDefault.java 2011-07-29 19:44:18 UTC (rev 1475)
+++ trunk/src/main/java/cc/kune/core/server/content/ContentManagerDefault.java 2011-07-29 20:59:39 UTC (rev 1476)
@@ -35,6 +35,7 @@
import cc.kune.core.client.errors.DefaultException;
import cc.kune.core.client.errors.I18nNotFoundException;
+import cc.kune.core.client.errors.MoveOnSameContainerException;
import cc.kune.core.client.errors.NameInUseException;
import cc.kune.core.client.errors.UserNotFoundException;
import cc.kune.core.server.access.FinderService;
@@ -190,7 +191,11 @@
}
}
+ @Override
public Content moveContent(final Content content, final Container newContainer) {
+ if (newContainer.equals(content.getContainer())) {
+ throw new MoveOnSameContainerException();
+ }
final String title = content.getTitle();
if (findIfExistsTitle(newContainer, title)) {
throw new NameInUseException();
Modified: trunk/src/main/java/cc/kune/gspace/client/viewers/FolderViewerAsTablePanel.java
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/viewers/FolderViewerAsTablePanel.java 2011-07-29 19:44:18 UTC (rev 1475)
+++ trunk/src/main/java/cc/kune/gspace/client/viewers/FolderViewerAsTablePanel.java 2011-07-29 20:59:39 UTC (rev 1476)
@@ -26,7 +26,6 @@
import cc.kune.common.client.actions.ui.descrip.GuiActionDescCollection;
import cc.kune.common.client.actions.ui.descrip.GuiActionDescrip;
import cc.kune.common.client.actions.ui.descrip.MenuDescriptor;
-import cc.kune.common.client.tooltip.Tooltip;
import cc.kune.core.client.dnd.FolderViewerDropController;
import cc.kune.core.client.dnd.KuneDragController;
import cc.kune.core.client.registry.ContentCapabilitiesRegistry;
@@ -145,9 +144,10 @@
flex.setWidget(rowCount + 1, 0, itemWidget);
if (item.isDraggable()) {
dragController.makeDraggable(itemWidget, itemWidget.getTitleWidget());
- Tooltip.to(itemWidget, i18n.t("Drag and drop to move this. Double click to open"));
+ // Tooltip.to(itemWidget,
+ // i18n.t("Drag and drop to move this. Double click to open"));
} else {
- Tooltip.to(itemWidget, i18n.t("Double click to open"));
+ // Tooltip.to(itemWidget, i18n.t("Double click to open"));
}
if (item.isDroppable()) {
final FolderViewerDropController dropController = dropControllerProv.get();
Modified: trunk/src/main/java/cc/kune/gspace/client/viewers/FolderViewerPresenter.java
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/viewers/FolderViewerPresenter.java 2011-07-29 19:44:18 UTC (rev 1475)
+++ trunk/src/main/java/cc/kune/gspace/client/viewers/FolderViewerPresenter.java 2011-07-29 20:59:39 UTC (rev 1476)
@@ -239,6 +239,11 @@
if (pathLength > 0) {
for (int i = pathLength - 1; i >= 0; i--) {
final ButtonDescriptor btn = createPathButton(path[i], pathLength, i);
+ if (i != pathLength - 1) {
+ final FolderViewerDropController dropTarget = dropController.get();
+ dropTarget.setTarget(path[i].getStateToken());
+ btn.setDropTarget(dropTarget);
+ }
actions.add(btn);
}
}
@@ -251,9 +256,6 @@
final ButtonDescriptor btn = new ButtonDescriptor(new GotoTokenAction(
iconsRegistry.getContentTypeIcon(container.getTypeId()), container.getName(),
container.getStateToken(), style, stateManager, getEventBus()));
- final FolderViewerDropController dropTarget = dropController.get();
- dropTarget.setTarget(container.getStateToken());
- btn.setDropTarget(dropTarget);
return btn;
}
1
0
r1475 - in trunk/src/main/java/cc/kune: common/client/tooltip core/client/dnd core/public gspace/client/resources gspace/client/tool/selector gspace/client/viewers
by Vicente J. Ruiz Jurado 29 Jul '11
by Vicente J. Ruiz Jurado 29 Jul '11
29 Jul '11
Author: vjrj_
Date: 2011-07-29 21:44:18 +0200 (Fri, 29 Jul 2011)
New Revision: 1475
Modified:
trunk/src/main/java/cc/kune/common/client/tooltip/Tooltip.java
trunk/src/main/java/cc/kune/core/client/dnd/FolderViewerDropController.java
trunk/src/main/java/cc/kune/core/public/ws.css
trunk/src/main/java/cc/kune/gspace/client/resources/gSpaceArmorTheme.css
trunk/src/main/java/cc/kune/gspace/client/tool/selector/ToolSelectorItemPanel.java
trunk/src/main/java/cc/kune/gspace/client/tool/selector/ToolSelectorPanel.java
trunk/src/main/java/cc/kune/gspace/client/viewers/FolderItemWidget.ui.xml
trunk/src/main/java/cc/kune/gspace/client/viewers/FolderViewerAsTablePanel.java
Log:
Drag&Drop look improved
Modified: trunk/src/main/java/cc/kune/common/client/tooltip/Tooltip.java
===================================================================
--- trunk/src/main/java/cc/kune/common/client/tooltip/Tooltip.java 2011-07-29 18:12:12 UTC (rev 1474)
+++ trunk/src/main/java/cc/kune/common/client/tooltip/Tooltip.java 2011-07-29 19:44:18 UTC (rev 1475)
@@ -144,7 +144,7 @@
@Override
public void show() {
- if (!Tooltip.this.isShowing() && ofWidget.isVisible()) {
+ if (!Tooltip.this.isShowing() && ofWidget.isAttached() && ofWidget.isVisible()) {
Tooltip.super.show();
Tooltip.this.showAt(TooltipPositionCalculator.calculate(Window.getClientWidth(),
Window.getClientHeight(), ofWidget.getAbsoluteLeft(), ofWidget.getAbsoluteTop(),
Modified: trunk/src/main/java/cc/kune/core/client/dnd/FolderViewerDropController.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/dnd/FolderViewerDropController.java 2011-07-29 18:12:12 UTC (rev 1474)
+++ trunk/src/main/java/cc/kune/core/client/dnd/FolderViewerDropController.java 2011-07-29 19:44:18 UTC (rev 1475)
@@ -8,6 +8,7 @@
import cc.kune.core.client.state.StateManager;
import cc.kune.core.shared.domain.utils.StateToken;
import cc.kune.core.shared.dto.StateContainerDTO;
+import cc.kune.core.shared.i18n.I18nTranslationService;
import cc.kune.gspace.client.viewers.FolderItemWidget;
import com.allen_sauer.gwt.dnd.client.DragContext;
@@ -33,6 +34,7 @@
private final KuneDragController dragController;
private SimpleDropController dropController;
private final ErrorHandler erroHandler;
+ private final I18nTranslationService i18n;
private final Session session;
private final StateManager stateManager;
private Object target;
@@ -40,12 +42,13 @@
@Inject
public FolderViewerDropController(final KuneDragController dragController,
final ContentServiceAsync contentService, final Session session, final StateManager stateManager,
- final ErrorHandler erroHandler) {
+ final ErrorHandler erroHandler, final I18nTranslationService i18n) {
this.dragController = dragController;
this.contentService = contentService;
this.session = session;
this.stateManager = stateManager;
this.erroHandler = erroHandler;
+ this.i18n = i18n;
}
@Override
@@ -58,6 +61,7 @@
for (final Widget widget : context.selectedWidgets) {
if (widget instanceof FolderItemWidget) {
getDropTarget().removeStyleName("k-drop-allowed-hover");
+ NotifyUser.showProgress(i18n.t("Moving"));
if (target != null) {
final StateToken destToken = (StateToken) target;
contentService.moveContent(session.getUserHash(), ((FolderItemWidget) widget).getToken(),
@@ -66,15 +70,18 @@
public void onFailure(final Throwable caught) {
erroHandler.process(caught);
stateManager.refreshCurrentState();
+ NotifyUser.hideProgress();
}
@Override
public void onSuccess(final StateContainerDTO result) {
stateManager.refreshCurrentState();
+ NotifyUser.hideProgress();
}
});
} else {
NotifyUser.info(TextUtils.IN_DEVELOPMENT);
+ NotifyUser.hideProgress();
}
}
}
@@ -114,6 +121,9 @@
};
dropTarget.addStyleName("k-drop-allowed");
+ if (dropTarget.isAttached()) {
+ dragController.registerDropController(dropController);
+ }
dropTarget.addAttachHandler(new Handler() {
@Override
public void onAttachOrDetach(final AttachEvent event) {
Modified: trunk/src/main/java/cc/kune/core/public/ws.css
===================================================================
--- trunk/src/main/java/cc/kune/core/public/ws.css 2011-07-29 18:12:12 UTC (rev 1474)
+++ trunk/src/main/java/cc/kune/core/public/ws.css 2011-07-29 19:44:18 UTC (rev 1475)
@@ -1428,6 +1428,7 @@
border-radius: 4px;
}
+button.k-drop-allowed-hover,
.k-drop-allowed-hover {
border: dashed 2px #3a9fd6;
}
\ No newline at end of file
Modified: trunk/src/main/java/cc/kune/gspace/client/resources/gSpaceArmorTheme.css
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/resources/gSpaceArmorTheme.css 2011-07-29 18:12:12 UTC (rev 1474)
+++ trunk/src/main/java/cc/kune/gspace/client/resources/gSpaceArmorTheme.css 2011-07-29 19:44:18 UTC (rev 1475)
@@ -33,11 +33,11 @@
}
-.k-sn-2nd-spanel {
+.k-sn-2nd-panel {
background-color: bc2;
}
-.k-sn-2nd-spanel span {
+.k-sn-2nd-panel span {
color: c2;
}
Modified: trunk/src/main/java/cc/kune/gspace/client/tool/selector/ToolSelectorItemPanel.java
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/tool/selector/ToolSelectorItemPanel.java 2011-07-29 18:12:12 UTC (rev 1474)
+++ trunk/src/main/java/cc/kune/gspace/client/tool/selector/ToolSelectorItemPanel.java 2011-07-29 19:44:18 UTC (rev 1475)
@@ -29,6 +29,7 @@
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.FocusPanel;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.HasText;
@@ -46,6 +47,8 @@
@UiField
HTMLPanel arrow;
@UiField
+ FlowPanel flow;
+ @UiField
Image iconLeft;
@UiField
Image iconRight;
@@ -70,15 +73,15 @@
self.removeStyleDependentName("nofocus");
}
- public Widget getFlow() {
- return self;
- }
-
@Override
public HasClickHandlers getFocus() {
return self;
}
+ public Widget getFocusPanel() {
+ return flow;
+ }
+
@Override
public HasText getLabel() {
return label;
@@ -89,16 +92,6 @@
unfocus();
}
- // public void setTheme(final WsTheme oldTheme, final WsTheme newTheme) {
- // if (oldTheme != null) {
- // final String oldName = oldTheme.getName();
- // hl.removeStyleDependentName(oldName);
- // }
- // final String newName = newTheme.getName();
- // hl.addStyleDependentName(newName);
- // super.setCornerStyleName(hl.getStyleName());
- // }
-
@UiHandler("self")
void onSelfMouseOver(final MouseOverEvent event) {
focus();
Modified: trunk/src/main/java/cc/kune/gspace/client/tool/selector/ToolSelectorPanel.java
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/tool/selector/ToolSelectorPanel.java 2011-07-29 18:12:12 UTC (rev 1474)
+++ trunk/src/main/java/cc/kune/gspace/client/tool/selector/ToolSelectorPanel.java 2011-07-29 19:44:18 UTC (rev 1475)
@@ -49,7 +49,6 @@
public ToolSelectorPanel(final GSpaceArmor wsArmor,
final Provider<FolderViewerDropController> dropControllerProv) {
this.dropControllerProv = dropControllerProv;
-
wsArmor.getEntityToolsCenter().add(uiBinder.createAndBindUi(this));
}
@@ -57,7 +56,9 @@
public void addItem(final ToolSelectorItemView item) {
final Widget widget = item.asWidget();
flow.add(widget);
- dropControllerProv.get().init(((ToolSelectorItemPanel) widget).getParent());
+ // dropControllerProv.get().init((InlineLabel) ((ToolSelectorItemPanel)
+ // widget).getLabel());
+ dropControllerProv.get().init(((ToolSelectorItemPanel) widget).getFocusPanel());
}
@Override
Modified: trunk/src/main/java/cc/kune/gspace/client/viewers/FolderItemWidget.ui.xml
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/viewers/FolderItemWidget.ui.xml 2011-07-29 18:12:12 UTC (rev 1474)
+++ trunk/src/main/java/cc/kune/gspace/client/viewers/FolderItemWidget.ui.xml 2011-07-29 19:44:18 UTC (rev 1475)
@@ -9,6 +9,10 @@
@external .k-folderitem-focus-nofocused;
.k-folderitem-focus {
background-color: none;
+ border: solid 2px transparent;
+ -moz-border-radius: 4px;
+ -webkit-border-radius: 4px;
+ border-radius: 4px;
}
.k-folderitem-focus-focused {
@@ -65,11 +69,11 @@
</ui:style>
<g:FocusPanel ui:field="focusPanel" styleName="{style.k-folderitem-focus}">
<g:FlowPanel styleName="{style.flow}" ui:field="flow">
- <g:Image styleName="{style.icon}" ui:field="icon" />
- <g:InlineLabel styleName="{style.title}" ui:field="title" />
- <g:SimplePanel styleName="{style.menu}" ui:field="menu" />
+ <g:Image styleName="{style.icon}" ui:field="icon"/>
+ <g:InlineLabel styleName="{style.title}" ui:field="title"/>
+ <g:SimplePanel styleName="{style.menu}" ui:field="menu"/>
<g:InlineLabel styleName="{style.modified}"
- ui:field="modified" />
+ ui:field="modified"/>
</g:FlowPanel>
</g:FocusPanel>
</ui:UiBinder>
\ No newline at end of file
Modified: trunk/src/main/java/cc/kune/gspace/client/viewers/FolderViewerAsTablePanel.java
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/viewers/FolderViewerAsTablePanel.java 2011-07-29 18:12:12 UTC (rev 1474)
+++ trunk/src/main/java/cc/kune/gspace/client/viewers/FolderViewerAsTablePanel.java 2011-07-29 19:44:18 UTC (rev 1475)
@@ -26,6 +26,7 @@
import cc.kune.common.client.actions.ui.descrip.GuiActionDescCollection;
import cc.kune.common.client.actions.ui.descrip.GuiActionDescrip;
import cc.kune.common.client.actions.ui.descrip.MenuDescriptor;
+import cc.kune.common.client.tooltip.Tooltip;
import cc.kune.core.client.dnd.FolderViewerDropController;
import cc.kune.core.client.dnd.KuneDragController;
import cc.kune.core.client.registry.ContentCapabilitiesRegistry;
@@ -144,6 +145,9 @@
flex.setWidget(rowCount + 1, 0, itemWidget);
if (item.isDraggable()) {
dragController.makeDraggable(itemWidget, itemWidget.getTitleWidget());
+ Tooltip.to(itemWidget, i18n.t("Drag and drop to move this. Double click to open"));
+ } else {
+ Tooltip.to(itemWidget, i18n.t("Double click to open"));
}
if (item.isDroppable()) {
final FolderViewerDropController dropController = dropControllerProv.get();
1
0
29 Jul '11
Author: vjrj_
Date: 2011-07-29 20:12:12 +0200 (Fri, 29 Jul 2011)
New Revision: 1474
Added:
trunk/src/main/java/cc/kune/core/client/dnd/DropTarget.java
Modified:
trunk/src/main/java/cc/kune/common/client/actions/ui/AbstractGuiItem.java
trunk/src/main/java/cc/kune/common/client/actions/ui/descrip/AbstractGuiActionDescrip.java
trunk/src/main/java/cc/kune/common/client/actions/ui/descrip/GuiActionDescrip.java
trunk/src/main/java/cc/kune/core/client/dnd/FolderViewerDropController.java
trunk/src/main/java/cc/kune/core/server/content/ContainerManagerDefault.java
trunk/src/main/java/cc/kune/domain/Container.java
trunk/src/main/java/cc/kune/gspace/client/tool/selector/ToolSelectorPanel.java
trunk/src/main/java/cc/kune/gspace/client/viewers/ContentViewerPanel.java
trunk/src/main/java/cc/kune/gspace/client/viewers/FolderViewerAsTablePanel.java
trunk/src/main/java/cc/kune/gspace/client/viewers/FolderViewerPresenter.java
trunk/src/test/java/cc/kune/core/server/manager/ContainerManagerDefaultTest.java
trunk/src/test/java/cc/kune/core/server/mapper/MapperTest.java
trunk/src/test/java/cc/kune/gspace/client/viewers/FolderViewerPresenterTest.java
Log:
CLOSED - # 77: D&D from folder to parent
http://kune.ourproject.org/issues/ticket/77
CLOSED - # 71: D-and-D folder into folder fails
http://kune.ourproject.org/issues/ticket/71
Modified: trunk/src/main/java/cc/kune/common/client/actions/ui/AbstractGuiItem.java
===================================================================
--- trunk/src/main/java/cc/kune/common/client/actions/ui/AbstractGuiItem.java 2011-07-29 12:48:57 UTC (rev 1473)
+++ trunk/src/main/java/cc/kune/common/client/actions/ui/AbstractGuiItem.java 2011-07-29 18:12:12 UTC (rev 1474)
@@ -28,6 +28,7 @@
import cc.kune.common.client.actions.ui.descrip.GuiActionDescrip;
import cc.kune.common.client.errors.NotImplementedException;
import cc.kune.common.client.utils.TextUtils;
+import cc.kune.core.client.dnd.DropTarget;
import cc.kune.core.client.resources.IconConstants;
import com.google.gwt.resources.client.ImageResource;
@@ -79,6 +80,7 @@
setEnabled((Boolean) descriptor.getValue(AbstractAction.ENABLED));
setVisible((Boolean) descriptor.getValue(GuiActionDescrip.VISIBLE));
setStyles((String) descriptor.getValue(Action.STYLES));
+ setDropTarget((DropTarget) descriptor.getValue(GuiActionDescrip.DROP_TARGET));
}
@Override
@@ -103,6 +105,8 @@
toogleTooltipVisible();
} else if (event.getPropertyName().equals(Action.STYLES)) {
setStyles((String) newValue);
+ } else if (event.getPropertyName().equals(GuiActionDescrip.DROP_TARGET)) {
+ setDropTarget((DropTarget) newValue);
}
}
};
@@ -114,6 +118,12 @@
// the action, if not we only pass the menuitem
return descriptor.hasTarget() ? descriptor.getTarget()
: descriptor.isChild() ? descriptor.getParent().getTarget() : ActionEvent.NO_TARGET;
+ };
+
+ private void setDropTarget(final DropTarget dropTarget) {
+ if (dropTarget != null) {
+ dropTarget.init(this);
+ }
}
protected abstract void setEnabled(boolean enabled);
@@ -162,11 +172,6 @@
protected abstract void setText(String text);
- protected void toogleTooltipVisible() {
- // do nothing by default
- return;
- }
-
protected abstract void setToolTipText(String text);
private void setVisible(final Boolean visible) {
@@ -179,4 +184,9 @@
public boolean shouldBeAdded() { // NOPMD by vjrj on 18/01/11 0:48
return true;
}
+
+ protected void toogleTooltipVisible() {
+ // do nothing by default
+ return;
+ }
}
Modified: trunk/src/main/java/cc/kune/common/client/actions/ui/descrip/AbstractGuiActionDescrip.java
===================================================================
--- trunk/src/main/java/cc/kune/common/client/actions/ui/descrip/AbstractGuiActionDescrip.java 2011-07-29 12:48:57 UTC (rev 1473)
+++ trunk/src/main/java/cc/kune/common/client/actions/ui/descrip/AbstractGuiActionDescrip.java 2011-07-29 18:12:12 UTC (rev 1474)
@@ -27,6 +27,7 @@
import cc.kune.common.client.actions.ActionEvent;
import cc.kune.common.client.actions.ChangeableObject;
import cc.kune.common.client.actions.KeyStroke;
+import cc.kune.core.client.dnd.DropTarget;
/**
* The Class AbstractUIActionDescriptor.
@@ -164,6 +165,11 @@
}
@Override
+ public void setDropTarget(final DropTarget dropTarget) {
+ putValue(DROP_TARGET, dropTarget);
+ }
+
+ @Override
public void setEnabled(final boolean enabled) {
putValue(Action.ENABLED, enabled);
}
Modified: trunk/src/main/java/cc/kune/common/client/actions/ui/descrip/GuiActionDescrip.java
===================================================================
--- trunk/src/main/java/cc/kune/common/client/actions/ui/descrip/GuiActionDescrip.java 2011-07-29 12:48:57 UTC (rev 1473)
+++ trunk/src/main/java/cc/kune/common/client/actions/ui/descrip/GuiActionDescrip.java 2011-07-29 18:12:12 UTC (rev 1474)
@@ -23,9 +23,12 @@
import cc.kune.common.client.actions.ActionEvent;
import cc.kune.common.client.actions.KeyStroke;
import cc.kune.common.client.actions.PropertyChangeListener;
+import cc.kune.core.client.dnd.DropTarget;
public interface GuiActionDescrip {
+ public static final String DROP_TARGET = "dropTarget";
+
public static final AbstractGuiActionDescrip NO_PARENT = new NoParentGuiActionDescriptor();
public static final int NO_POSITION = -1;
@@ -38,7 +41,6 @@
public static final String TARGET = "target";
public static final String TOOGLE_TOOLTIP_VISIBLE = "toogle-tooltip-visible";
-
public static final String VISIBLE = "visibleprop";
void add(final GuiAddCondition addCondition);
@@ -81,6 +83,8 @@
void removePropertyChangeListener(final PropertyChangeListener listener);
+ void setDropTarget(DropTarget dropTarget);
+
void setEnabled(final boolean enabled);
void setId(final String id);
Added: trunk/src/main/java/cc/kune/core/client/dnd/DropTarget.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/dnd/DropTarget.java (rev 0)
+++ trunk/src/main/java/cc/kune/core/client/dnd/DropTarget.java 2011-07-29 18:12:12 UTC (rev 1474)
@@ -0,0 +1,9 @@
+package cc.kune.core.client.dnd;
+
+import com.google.gwt.user.client.ui.Widget;
+
+public interface DropTarget {
+
+ void init(Widget dropTarget);
+
+}
Modified: trunk/src/main/java/cc/kune/core/client/dnd/FolderViewerDropController.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/dnd/FolderViewerDropController.java 2011-07-29 12:48:57 UTC (rev 1473)
+++ trunk/src/main/java/cc/kune/core/client/dnd/FolderViewerDropController.java 2011-07-29 18:12:12 UTC (rev 1474)
@@ -6,6 +6,7 @@
import cc.kune.core.client.rpcservices.ContentServiceAsync;
import cc.kune.core.client.state.Session;
import cc.kune.core.client.state.StateManager;
+import cc.kune.core.shared.domain.utils.StateToken;
import cc.kune.core.shared.dto.StateContainerDTO;
import cc.kune.gspace.client.viewers.FolderItemWidget;
@@ -18,16 +19,23 @@
import com.google.gwt.user.client.ui.Widget;
import com.google.inject.Inject;
-public class FolderViewerDropController {
+/**
+ * @author vjrj
+ *
+ */
+/**
+ * @author vjrj
+ *
+ */
+public class FolderViewerDropController implements DropTarget {
private final ContentServiceAsync contentService;
private final KuneDragController dragController;
-
private SimpleDropController dropController;
-
private final ErrorHandler erroHandler;
private final Session session;
private final StateManager stateManager;
+ private Object target;
@Inject
public FolderViewerDropController(final KuneDragController dragController,
@@ -38,9 +46,9 @@
this.session = session;
this.stateManager = stateManager;
this.erroHandler = erroHandler;
-
}
+ @Override
public void init(final Widget dropTarget) {
dropController = new SimpleDropController(dropTarget) {
@@ -50,13 +58,10 @@
for (final Widget widget : context.selectedWidgets) {
if (widget instanceof FolderItemWidget) {
getDropTarget().removeStyleName("k-drop-allowed-hover");
- if (getDropTarget() instanceof FolderItemWidget) {
- // NotifyUser.info("" + ((FolderItemWidget)
- // getDropTarget()).getToken().toString() + " receive: "
- // + ((FolderItemWidget) widget).getToken().toString());
+ if (target != null) {
+ final StateToken destToken = (StateToken) target;
contentService.moveContent(session.getUserHash(), ((FolderItemWidget) widget).getToken(),
- ((FolderItemWidget) getDropTarget()).getToken(),
- new AsyncCallback<StateContainerDTO>() {
+ destToken, new AsyncCallback<StateContainerDTO>() {
@Override
public void onFailure(final Throwable caught) {
erroHandler.process(caught);
@@ -121,4 +126,8 @@
});
}
+ public void setTarget(final Object target) {
+ this.target = target;
+ }
+
}
Modified: trunk/src/main/java/cc/kune/core/server/content/ContainerManagerDefault.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/content/ContainerManagerDefault.java 2011-07-29 12:48:57 UTC (rev 1473)
+++ trunk/src/main/java/cc/kune/core/server/content/ContainerManagerDefault.java 2011-07-29 18:12:12 UTC (rev 1474)
@@ -19,9 +19,6 @@
*/
package cc.kune.core.server.content;
-import java.util.ArrayList;
-import java.util.List;
-
import javax.persistence.EntityManager;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
@@ -68,7 +65,6 @@
FilenameUtils.checkBasicFilename(name);
final String newtitle = findInexistentName(parent, name);
final Container child = new Container(newtitle, group, parent.getToolName());
- child.setAbsolutePath(setAbsolutePath(child, parent));
child.setLanguage(language);
child.setTypeId(typeId);
parent.addChild(child);
@@ -81,9 +77,6 @@
final String type) {
final Container container = new Container(name, group, toolName);
container.setTypeId(type);
- final List<Container> absolutePath = new ArrayList<Container>();
- absolutePath.add(container);
- container.setAbsolutePath(absolutePath);
return persist(container);
}
@@ -106,6 +99,10 @@
@Override
public void moveContainer(final Container container, final Container newContainer) {
final String title = container.getName();
+ if (newContainer.equals(container.getParent())) {
+ // Do nothing (trying to move to the same location)
+ return;
+ }
if (findIfExistsTitle(newContainer, title)) {
throw new NameInUseException();
}
@@ -116,8 +113,6 @@
final Container oldContainer = container.getParent();
oldContainer.removeChild(container);
newContainer.addChild(container);
- // AbsolutePath
- container.setAbsolutePath(setAbsolutePath(container, newContainer));
persist(container);
}
@@ -156,18 +151,6 @@
return super.search(query, firstResult, maxResults);
}
- private List<Container> setAbsolutePath(final Container child, final Container parent) {
- final List<Container> parentAbsolutePath = parent.getAbsolutePath();
- final List<Container> childAbsolutePath = new ArrayList<Container>();
- for (final Container parentRef : parentAbsolutePath) {
- childAbsolutePath.add(parentRef);
- }
- // FIXME: use (tested but change this in other time, not in a pre-release)
- // childAbsolutePath.addAll(parentAbsolutePath);
- childAbsolutePath.add(child);
- return childAbsolutePath;
- }
-
@Override
public void setAccessList(final Container container, final AccessLists accessList) {
container.setAccessLists(accessList);
Modified: trunk/src/main/java/cc/kune/domain/Container.java
===================================================================
--- trunk/src/main/java/cc/kune/domain/Container.java 2011-07-29 12:48:57 UTC (rev 1473)
+++ trunk/src/main/java/cc/kune/domain/Container.java 2011-07-29 18:12:12 UTC (rev 1474)
@@ -33,7 +33,6 @@
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
-import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
@@ -62,10 +61,6 @@
@Table(name = "containers")
public class Container implements HasId, HasStateToken {
- @LazyCollection(LazyCollectionOption.FALSE)
- @ManyToMany(cascade = CascadeType.ALL)
- private List<Container> absolutePath;
-
@OneToOne(cascade = CascadeType.ALL)
private AccessLists accessLists;
@@ -129,7 +124,6 @@
this.toolName = toolName;
this.contents = new HashSet<Content>();
this.childs = new HashSet<Container>();
- this.absolutePath = new ArrayList<Container>();
this.createdOn = System.currentTimeMillis();
}
@@ -145,8 +139,16 @@
contents.add(descriptor);
}
+ @Transient
public List<Container> getAbsolutePath() {
- return absolutePath;
+ ArrayList<Container> path;
+ if (isRoot()) {
+ path = new ArrayList<Container>();
+ } else {
+ path = new ArrayList<Container>((getParent().getAbsolutePath()));
+ }
+ path.add(this);
+ return path;
}
@Transient
@@ -248,10 +250,6 @@
contents.remove(content);
}
- public void setAbsolutePath(final List<Container> absolutePath) {
- this.absolutePath = absolutePath;
- }
-
public void setAccessLists(final AccessLists accessLists) {
this.accessLists = accessLists;
}
Modified: trunk/src/main/java/cc/kune/gspace/client/tool/selector/ToolSelectorPanel.java
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/tool/selector/ToolSelectorPanel.java 2011-07-29 12:48:57 UTC (rev 1473)
+++ trunk/src/main/java/cc/kune/gspace/client/tool/selector/ToolSelectorPanel.java 2011-07-29 18:12:12 UTC (rev 1474)
@@ -57,7 +57,7 @@
public void addItem(final ToolSelectorItemView item) {
final Widget widget = item.asWidget();
flow.add(widget);
- dropControllerProv.get().init(((ToolSelectorItemPanel) widget).getFlow());
+ dropControllerProv.get().init(((ToolSelectorItemPanel) widget).getParent());
}
@Override
Modified: trunk/src/main/java/cc/kune/gspace/client/viewers/ContentViewerPanel.java
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/viewers/ContentViewerPanel.java 2011-07-29 12:48:57 UTC (rev 1473)
+++ trunk/src/main/java/cc/kune/gspace/client/viewers/ContentViewerPanel.java 2011-07-29 18:12:12 UTC (rev 1474)
@@ -162,7 +162,7 @@
channel = webClient.getChannel();
profiles = webClient.getProfiles();
idGenerator = ClientIdGenerator.create();
- loading.addClassName("kune-Margin-40-tb");
+ // loading.addClassName("kune-Margin-40-tb");
}
}
Modified: trunk/src/main/java/cc/kune/gspace/client/viewers/FolderViewerAsTablePanel.java
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/viewers/FolderViewerAsTablePanel.java 2011-07-29 12:48:57 UTC (rev 1473)
+++ trunk/src/main/java/cc/kune/gspace/client/viewers/FolderViewerAsTablePanel.java 2011-07-29 18:12:12 UTC (rev 1474)
@@ -146,7 +146,9 @@
dragController.makeDraggable(itemWidget, itemWidget.getTitleWidget());
}
if (item.isDroppable()) {
- dropControllerProv.get().init(itemWidget);
+ final FolderViewerDropController dropController = dropControllerProv.get();
+ dropController.init(itemWidget);
+ dropController.setTarget(item.getStateToken());
}
}
Modified: trunk/src/main/java/cc/kune/gspace/client/viewers/FolderViewerPresenter.java
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/viewers/FolderViewerPresenter.java 2011-07-29 12:48:57 UTC (rev 1473)
+++ trunk/src/main/java/cc/kune/gspace/client/viewers/FolderViewerPresenter.java 2011-07-29 18:12:12 UTC (rev 1474)
@@ -27,6 +27,7 @@
import cc.kune.common.client.ui.EditEvent.EditHandler;
import cc.kune.common.client.ui.HasEditHandler;
import cc.kune.core.client.actions.ActionRegistryByType;
+import cc.kune.core.client.dnd.FolderViewerDropController;
import cc.kune.core.client.registry.ContentCapabilitiesRegistry;
import cc.kune.core.client.registry.IconsRegistry;
import cc.kune.core.client.services.FileDownloadUtils;
@@ -110,6 +111,7 @@
private final ContentCapabilitiesRegistry capabilitiesRegistry;
private final Provider<FileDownloadUtils> downloadUtilsProvider;
+ private final Provider<FolderViewerDropController> dropController;
private HandlerRegistration editHandler;
private final I18nTranslationService i18n;
private final IconsRegistry iconsRegistry;
@@ -123,7 +125,8 @@
final FolderViewerProxy proxy, final Session session, final StateManager stateManager,
final I18nTranslationService i18n, final ActionRegistryByType actionsRegistry,
final Provider<FileDownloadUtils> downloadUtilsProvider,
- final Provider<RenameAction> renameAction, final ContentCapabilitiesRegistry capabilitiesRegistry) {
+ final Provider<RenameAction> renameAction, final ContentCapabilitiesRegistry capabilitiesRegistry,
+ final Provider<FolderViewerDropController> dropController) {
super(eventBus, view, proxy);
this.session = session;
this.stateManager = stateManager;
@@ -131,6 +134,7 @@
this.actionsRegistry = actionsRegistry;
this.downloadUtilsProvider = downloadUtilsProvider;
this.capabilitiesRegistry = capabilitiesRegistry;
+ this.dropController = dropController;
iconsRegistry = capabilitiesRegistry.getIconsRegistry();
useGenericImageIcon = false;
this.renameAction = renameAction;
@@ -247,6 +251,9 @@
final ButtonDescriptor btn = new ButtonDescriptor(new GotoTokenAction(
iconsRegistry.getContentTypeIcon(container.getTypeId()), container.getName(),
container.getStateToken(), style, stateManager, getEventBus()));
+ final FolderViewerDropController dropTarget = dropController.get();
+ dropTarget.setTarget(container.getStateToken());
+ btn.setDropTarget(dropTarget);
return btn;
}
Modified: trunk/src/test/java/cc/kune/core/server/manager/ContainerManagerDefaultTest.java
===================================================================
--- trunk/src/test/java/cc/kune/core/server/manager/ContainerManagerDefaultTest.java 2011-07-29 12:48:57 UTC (rev 1473)
+++ trunk/src/test/java/cc/kune/core/server/manager/ContainerManagerDefaultTest.java 2011-07-29 18:12:12 UTC (rev 1474)
@@ -24,9 +24,13 @@
}
private Container createContainer(final Container parent) {
- return containerManager.createFolder(user.getUserGroup(), parent, "Some title", english, TYPE_FOLDER);
+ return createContainer(parent, "Some title");
}
+ private Container createContainer(final Container parent, final String title) {
+ return containerManager.createFolder(user.getUserGroup(), parent, title, english, TYPE_FOLDER);
+ }
+
@Test
public void testCreateFolder() {
final Container newFolder = createContainer(rootFolder);
@@ -61,6 +65,56 @@
containerManager.moveContainer(folderToMove, newParentFolder);
}
+ @Test
+ public void testMoveFolderToSame() {
+ final Container folderToMove = createContainer(rootFolder);
+ containerManager.moveContainer(folderToMove, rootFolder);
+ // Do nothing (in silence)
+ }
+
+ @Test
+ public void testMoveFolderUp() {
+ final Container parentFolder = createContainer(rootFolder);
+ final Container folderToMove = createContainer(parentFolder, "Other title");
+ assertEquals(0, folderToMove.getChilds().size());
+ assertEquals(1, parentFolder.getChilds().size());
+ containerManager.moveContainer(folderToMove, rootFolder);
+ assertEquals(rootFolder, folderToMove.getParent());
+ assertEquals(0, parentFolder.getChilds().size());
+ assertEquals(2, rootFolder.getChilds().size());
+ assertEquals(2, folderToMove.getAbsolutePath().size());
+ assertEquals(rootFolder, folderToMove.getAbsolutePath().get(0));
+ assertEquals(folderToMove, folderToMove.getAbsolutePath().get(1));
+ }
+
+ @Test
+ public void testMoveMiddleFolder() {
+ final Container parentFolder = createContainer(rootFolder);
+ final Container middleFolder = createContainer(parentFolder, "Middle");
+ final Container childFolder = createContainer(middleFolder, "Child");
+ assertEquals(0, childFolder.getChilds().size());
+ assertEquals(1, parentFolder.getChilds().size());
+ assertEquals(1, middleFolder.getChilds().size());
+ assertEquals(4, childFolder.getAbsolutePath().size());
+ assertEquals(rootFolder, childFolder.getAbsolutePath().get(0));
+ assertEquals(parentFolder, childFolder.getAbsolutePath().get(1));
+ assertEquals(middleFolder, childFolder.getAbsolutePath().get(2));
+ assertEquals(childFolder, childFolder.getAbsolutePath().get(3));
+ containerManager.moveContainer(middleFolder, rootFolder);
+ assertEquals(rootFolder, middleFolder.getParent());
+ assertEquals(0, parentFolder.getChilds().size());
+ assertEquals(2, rootFolder.getChilds().size());
+ assertEquals(3, childFolder.getAbsolutePath().size());
+ assertEquals(rootFolder, childFolder.getAbsolutePath().get(0));
+ assertEquals(middleFolder, childFolder.getAbsolutePath().get(1));
+ assertEquals(childFolder, childFolder.getAbsolutePath().get(2));
+ assertEquals(1, rootFolder.getAbsolutePath().size());
+ assertEquals(rootFolder, rootFolder.getAbsolutePath().get(0));
+ assertEquals(2, parentFolder.getAbsolutePath().size());
+ assertEquals(rootFolder, parentFolder.getAbsolutePath().get(0));
+ assertEquals(parentFolder, parentFolder.getAbsolutePath().get(1));
+ }
+
@Test(expected = AccessViolationException.class)
public void testMoveRootFolderFails() {
containerManager.moveContainer(rootFolder, rootFolder);
Modified: trunk/src/test/java/cc/kune/core/server/mapper/MapperTest.java
===================================================================
--- trunk/src/test/java/cc/kune/core/server/mapper/MapperTest.java 2011-07-29 12:48:57 UTC (rev 1473)
+++ trunk/src/test/java/cc/kune/core/server/mapper/MapperTest.java 2011-07-29 18:12:12 UTC (rev 1474)
@@ -233,7 +233,6 @@
container.addChild(containerChild);
final List<Container> absolutePathChild = new ArrayList<Container>();
absolutePathChild.add(container);
- containerChild.setAbsolutePath(absolutePathChild);
final ContainerDTO dto = mapper.map(container, ContainerDTO.class);
assertEquals(3, dto.getChilds().size());
Modified: trunk/src/test/java/cc/kune/gspace/client/viewers/FolderViewerPresenterTest.java
===================================================================
--- trunk/src/test/java/cc/kune/gspace/client/viewers/FolderViewerPresenterTest.java 2011-07-29 12:48:57 UTC (rev 1473)
+++ trunk/src/test/java/cc/kune/gspace/client/viewers/FolderViewerPresenterTest.java 2011-07-29 18:12:12 UTC (rev 1474)
@@ -38,7 +38,7 @@
@Before
public void before() {
presenter = new FolderViewerPresenter(null, null, null, null, null, null, null, null, null,
- Mockito.mock(ContentCapabilitiesRegistry.class));
+ Mockito.mock(ContentCapabilitiesRegistry.class), null);
}
@Test
1
0
r1473 - in trunk/src: main/java/cc/kune/core/server/content main/java/cc/kune/domain main/java/cc/kune/gspace/client main/java/cc/kune/gspace/client/resources main/webapp/others test/java/cc/kune/core/server/manager
by Vicente J. Ruiz Jurado 29 Jul '11
by Vicente J. Ruiz Jurado 29 Jul '11
29 Jul '11
Author: vjrj_
Date: 2011-07-29 14:48:57 +0200 (Fri, 29 Jul 2011)
New Revision: 1473
Added:
trunk/src/test/java/cc/kune/core/server/manager/ContainerManagerDefaultTest.java
Modified:
trunk/src/main/java/cc/kune/core/server/content/ContainerManagerDefault.java
trunk/src/main/java/cc/kune/domain/Container.java
trunk/src/main/java/cc/kune/gspace/client/GSpaceArmorImpl.java
trunk/src/main/java/cc/kune/gspace/client/GSpaceArmorImpl.ui.xml
trunk/src/main/java/cc/kune/gspace/client/resources/gSpaceArmor.css
trunk/src/main/webapp/others/kune-client-actions.xml
Log:
CLOSED - # 71: D-and-D folder into folder fails
http://kune.ourproject.org/issues/ticket/71
CLOSED - # 76: RootPanel setSize for drag and d. arise height problems in chrommium
http://kune.ourproject.org/issues/ticket/76
Modified: trunk/src/main/java/cc/kune/core/server/content/ContainerManagerDefault.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/content/ContainerManagerDefault.java 2011-07-29 01:24:35 UTC (rev 1472)
+++ trunk/src/main/java/cc/kune/core/server/content/ContainerManagerDefault.java 2011-07-29 12:48:57 UTC (rev 1473)
@@ -29,9 +29,9 @@
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.search.Query;
+import cc.kune.core.client.errors.AccessViolationException;
import cc.kune.core.client.errors.DefaultException;
import cc.kune.core.client.errors.NameInUseException;
-import cc.kune.core.client.errors.UnderDevelopmentException;
import cc.kune.core.server.manager.file.FileUtils;
import cc.kune.core.server.manager.impl.DefaultManager;
import cc.kune.core.server.manager.impl.SearchResult;
@@ -67,18 +67,9 @@
final I18nLanguage language, final String typeId) {
FilenameUtils.checkBasicFilename(name);
final String newtitle = findInexistentName(parent, name);
- final List<Container> parentAbsolutePath = parent.getAbsolutePath();
- final List<Container> childAbsolutePath = new ArrayList<Container>();
-
- for (final Container parentRef : parentAbsolutePath) {
- childAbsolutePath.add(parentRef);
- }
- // FIXME: use
- // childAbsolutePath.addAll(parentAbsolutePath);
final Container child = new Container(newtitle, group, parent.getToolName());
- childAbsolutePath.add(child);
+ child.setAbsolutePath(setAbsolutePath(child, parent));
child.setLanguage(language);
- child.setAbsolutePath(childAbsolutePath);
child.setTypeId(typeId);
parent.addChild(child);
persist(child);
@@ -114,7 +105,20 @@
@Override
public void moveContainer(final Container container, final Container newContainer) {
- throw new UnderDevelopmentException();
+ final String title = container.getName();
+ if (findIfExistsTitle(newContainer, title)) {
+ throw new NameInUseException();
+ }
+ if (container.isRoot()) {
+ // Cannot move root container
+ throw new AccessViolationException();
+ }
+ final Container oldContainer = container.getParent();
+ oldContainer.removeChild(container);
+ newContainer.addChild(container);
+ // AbsolutePath
+ container.setAbsolutePath(setAbsolutePath(container, newContainer));
+ persist(container);
}
@Override
@@ -152,6 +156,18 @@
return super.search(query, firstResult, maxResults);
}
+ private List<Container> setAbsolutePath(final Container child, final Container parent) {
+ final List<Container> parentAbsolutePath = parent.getAbsolutePath();
+ final List<Container> childAbsolutePath = new ArrayList<Container>();
+ for (final Container parentRef : parentAbsolutePath) {
+ childAbsolutePath.add(parentRef);
+ }
+ // FIXME: use (tested but change this in other time, not in a pre-release)
+ // childAbsolutePath.addAll(parentAbsolutePath);
+ childAbsolutePath.add(child);
+ return childAbsolutePath;
+ }
+
@Override
public void setAccessList(final Container container, final AccessLists accessList) {
container.setAccessLists(accessList);
Modified: trunk/src/main/java/cc/kune/domain/Container.java
===================================================================
--- trunk/src/main/java/cc/kune/domain/Container.java 2011-07-29 01:24:35 UTC (rev 1472)
+++ trunk/src/main/java/cc/kune/domain/Container.java 2011-07-29 12:48:57 UTC (rev 1473)
@@ -238,6 +238,11 @@
return parent == null;
}
+ public void removeChild(final Container child) {
+ child.setParent(null);
+ childs.remove(child);
+ }
+
public void removeContent(final Content content) {
contents.size();
contents.remove(content);
Modified: trunk/src/main/java/cc/kune/gspace/client/GSpaceArmorImpl.java
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/GSpaceArmorImpl.java 2011-07-29 01:24:35 UTC (rev 1472)
+++ trunk/src/main/java/cc/kune/gspace/client/GSpaceArmorImpl.java 2011-07-29 12:48:57 UTC (rev 1473)
@@ -41,7 +41,6 @@
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.SplitLayoutPanel;
import com.google.gwt.user.client.ui.TabLayoutPanel;
-import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.google.inject.Inject;
import com.google.inject.Provider;
@@ -70,7 +69,7 @@
@UiField
FlowPanel entityHeader;
@UiField
- VerticalPanel entityToolsCenter;
+ FlowPanel entityToolsCenter;
@UiField
FlowPanel entityToolsContainer;
@UiField
Modified: trunk/src/main/java/cc/kune/gspace/client/GSpaceArmorImpl.ui.xml
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/GSpaceArmorImpl.ui.xml 2011-07-29 01:24:35 UTC (rev 1472)
+++ trunk/src/main/java/cc/kune/gspace/client/GSpaceArmorImpl.ui.xml 2011-07-29 12:48:57 UTC (rev 1473)
@@ -93,9 +93,9 @@
<g:FlowPanel ui:field="entityToolsContainer">
<g:FlowPanel width="100%" ui:field="entityToolsNorth"
styleName="{res.style.entityToolsNorth}"></g:FlowPanel>
- <g:VerticalPanel width="100%"
+ <g:FlowPanel width="100%"
ui:field="entityToolsCenter" styleName="{res.style.entityToolsCenter}">
- </g:VerticalPanel>
+ </g:FlowPanel>
</g:FlowPanel>
</g:center>
<g:south size="98">
Modified: trunk/src/main/java/cc/kune/gspace/client/resources/gSpaceArmor.css
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/resources/gSpaceArmor.css 2011-07-29 01:24:35 UTC (rev 1472)
+++ trunk/src/main/java/cc/kune/gspace/client/resources/gSpaceArmor.css 2011-07-29 12:48:57 UTC (rev 1473)
@@ -209,7 +209,8 @@
.entityToolsCenter { /* margin: 10px; */
overflow: visible !important;
- margin-top: 10px;
+ padding-top: 10px;
+ clear: both;
}
.entityToolsCenter span {
Modified: trunk/src/main/webapp/others/kune-client-actions.xml
===================================================================
--- trunk/src/main/webapp/others/kune-client-actions.xml 2011-07-29 01:24:35 UTC (rev 1472)
+++ trunk/src/main/webapp/others/kune-client-actions.xml 2011-07-29 12:48:57 UTC (rev 1473)
@@ -193,6 +193,18 @@
<iconCss></iconCss>
</extension>
+ <extension>
+ <name>troco</name>
+ <installerUrl>http://troco.ourproject.org/gadget/troco-extension.xml
+ </installerUrl>
+ <gadgetUrl>
+ http://troco.ourproject.org/gadget/org.ourproject.troco.client.TrocoWaveGad…
+ </gadgetUrl>
+ <iconUrl>http://troco.ourproject.org/gadget/images/icon.png
+ </iconUrl>
+ <iconCss></iconCss>
+ </extension>
+
</waveExtensions>
<!-- Where and how to use the above extensions ================ -->
@@ -655,7 +667,8 @@
<description>Make a vector image with others in real-time
</description>
<new-content-title>New Vector Image</new-content-title>
- <new-content-textintro>With this gadget you can make a vector image with others in real-time</new-content-textintro>
+ <new-content-textintro>With this gadget you can make a vector
+ image with others in real-time</new-content-textintro>
<enabled>true</enabled>
<typeIds>
<typeId origTypeId="docs.folder" destTypeId="docs.doc"/>
@@ -672,6 +685,33 @@
<participants>ask</participants>
</guiActionDescriptor>
+ <guiActionDescriptor>
+ <type>wave-gadget</type>
+ <extensionName>troco</extensionName>
+ <name>New Barter</name>
+ <path>New Gadget»Others</path>
+ <description>Propose a barter deal to others
+ </description>
+ <new-content-title>New Barter</new-content-title>
+ <new-content-textintro>With this gadget you can propose barters to
+ others. Fill up with something you want to give or you something you are looking for, and share with your groups or with the general public. Also you can write more details instead of this text. </new-content-textintro>
+ <enabled>true</enabled>
+ <typeIds>
+ <typeId origTypeId="docs.folder" destTypeId="docs.doc"/>
+ <typeId origTypeId="docs.root" destTypeId="docs.doc"/>
+ <typeId origTypeId="blogs.blog" destTypeId="blogs.post"/>
+ </typeIds>
+ <rol>
+ <!-- Administrator, Editor, Viewer -->
+ <rolRequired>Editor</rolRequired>
+ <authNeed>true</authNeed>
+ </rol>
+ <!-- only for new waves: anyone, onlymembers, onlyadmins, ask (not
+ used yet) -->
+ <participants>ask</participants>
+ </guiActionDescriptor>
+
+
</guiActionDescriptors>
</kuneClientActions>
Added: trunk/src/test/java/cc/kune/core/server/manager/ContainerManagerDefaultTest.java
===================================================================
--- trunk/src/test/java/cc/kune/core/server/manager/ContainerManagerDefaultTest.java (rev 0)
+++ trunk/src/test/java/cc/kune/core/server/manager/ContainerManagerDefaultTest.java 2011-07-29 12:48:57 UTC (rev 1473)
@@ -0,0 +1,68 @@
+package cc.kune.core.server.manager;
+
+import static cc.kune.docs.shared.DocsConstants.TYPE_FOLDER;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import cc.kune.core.client.errors.AccessViolationException;
+import cc.kune.core.client.errors.NameInUseException;
+import cc.kune.core.server.PersistencePreLoadedDataTest;
+import cc.kune.docs.shared.DocsConstants;
+import cc.kune.domain.Container;
+
+public class ContainerManagerDefaultTest extends PersistencePreLoadedDataTest {
+
+ private Container rootFolder;
+
+ @Before
+ public void before() {
+ rootFolder = containerManager.createRootFolder(user.getUserGroup(), DocsConstants.NAME,
+ DocsConstants.ROOT_NAME, TYPE_FOLDER);
+ }
+
+ private Container createContainer(final Container parent) {
+ return containerManager.createFolder(user.getUserGroup(), parent, "Some title", english, TYPE_FOLDER);
+ }
+
+ @Test
+ public void testCreateFolder() {
+ final Container newFolder = createContainer(rootFolder);
+ assertNotNull(newFolder.getParent());
+ assertEquals(1, rootFolder.getChilds().size());
+ assertEquals(0, newFolder.getChilds().size());
+ assertEquals(1, rootFolder.getAbsolutePath().size());
+ assertEquals(2, newFolder.getAbsolutePath().size());
+ }
+
+ @Test
+ public void testMoveFolder() {
+ final Container folderToMove = createContainer(rootFolder);
+ final Container newParentFolder = createContainer(rootFolder);
+ assertEquals(0, newParentFolder.getChilds().size());
+ containerManager.moveContainer(folderToMove, newParentFolder);
+ assertEquals(newParentFolder, folderToMove.getParent());
+ assertEquals(1, newParentFolder.getChilds().size());
+ assertEquals(1, rootFolder.getChilds().size());
+ assertEquals(3, folderToMove.getAbsolutePath().size());
+ assertEquals(rootFolder, folderToMove.getAbsolutePath().get(0));
+ assertEquals(newParentFolder, folderToMove.getAbsolutePath().get(1));
+ assertEquals(folderToMove, folderToMove.getAbsolutePath().get(2));
+ }
+
+ @Test(expected = NameInUseException.class)
+ public void testMoveFolderNameExists() {
+ final Container folderToMove = createContainer(rootFolder);
+ final Container newParentFolder = createContainer(rootFolder);
+ // Create a folder with the same name
+ createContainer(newParentFolder);
+ containerManager.moveContainer(folderToMove, newParentFolder);
+ }
+
+ @Test(expected = AccessViolationException.class)
+ public void testMoveRootFolderFails() {
+ containerManager.moveContainer(rootFolder, rootFolder);
+ }
+}
1
0
r1472 - in trunk: script src/main/java/cc/kune/core/client/dnd src/main/java/cc/kune/core/public src/main/java/cc/kune/gspace/client
by Vicente J. Ruiz Jurado 29 Jul '11
by Vicente J. Ruiz Jurado 29 Jul '11
29 Jul '11
Author: vjrj_
Date: 2011-07-29 03:24:35 +0200 (Fri, 29 Jul 2011)
New Revision: 1472
Modified:
trunk/script/css-update.sh
trunk/src/main/java/cc/kune/core/client/dnd/KuneDragController.java
trunk/src/main/java/cc/kune/core/public/ws.css
trunk/src/main/java/cc/kune/core/public/ws.html
trunk/src/main/java/cc/kune/gspace/client/GSpaceArmor.java
trunk/src/main/java/cc/kune/gspace/client/GSpaceArmorImpl.java
trunk/src/main/java/cc/kune/gspace/client/GSpaceArmorImpl.ui.xml
Log:
CLOSED - # 76: RootPanel setSize for drag and d. arise height problems in chrommium
http://kune.ourproject.org/issues/ticket/76
Modified: trunk/script/css-update.sh
===================================================================
--- trunk/script/css-update.sh 2011-07-28 23:36:39 UTC (rev 1471)
+++ trunk/script/css-update.sh 2011-07-29 01:24:35 UTC (rev 1472)
@@ -9,7 +9,7 @@
#rsync -aC $APPPUB/css/ $WEBAPP/css
#rsync -aC $APPPUB/images/ $WEBAPP/images
-VERSION=0.0.8
+VERSION=0.1.0-SNAPSHOT
cp src/main/java/cc/kune/chat/public/kune-chat.css target/kune-$VERSION/ws/
cp src/main/java/cc/kune/chat/public/kune-hablar.css target/kune-$VERSION/ws/
Modified: trunk/src/main/java/cc/kune/core/client/dnd/KuneDragController.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/dnd/KuneDragController.java 2011-07-28 23:36:39 UTC (rev 1471)
+++ trunk/src/main/java/cc/kune/core/client/dnd/KuneDragController.java 2011-07-29 01:24:35 UTC (rev 1472)
@@ -1,5 +1,7 @@
package cc.kune.core.client.dnd;
+import cc.kune.gspace.client.GSpaceArmor;
+
import com.allen_sauer.gwt.dnd.client.PickupDragController;
import com.google.gwt.core.client.Scheduler;
import com.google.gwt.core.client.Scheduler.ScheduledCommand;
@@ -7,11 +9,17 @@
import com.google.gwt.event.logical.shared.ResizeHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.RootPanel;
+import com.google.gwt.user.client.ui.Widget;
+import com.google.inject.Inject;
public class KuneDragController extends PickupDragController {
- public KuneDragController() {
+ private final Widget mainPanel;
+
+ @Inject
+ public KuneDragController(final GSpaceArmor armor) {
super(RootPanel.get(), false);
+ mainPanel = (Widget) armor.getMainpanel();
setBehaviorDragProxy(true);
setBehaviorMultipleSelection(false);
setBehaviorScrollIntoView(false);
@@ -20,18 +28,11 @@
@Override
public void onResize(final ResizeEvent event) {
- final int width = event.getWidth();
- final int height = event.getHeight();
- setRootPanelSize(width, height);
+ setRootPanelSize();
}
});
- Scheduler.get().scheduleDeferred(new ScheduledCommand() {
- @Override
- public void execute() {
- setRootPanelSize(Window.getClientWidth(), Window.getClientHeight());
- }
- });
+ setRootPanelSize();
}
@Override
@@ -40,8 +41,14 @@
clearSelection();
}
- private void setRootPanelSize(final int width, final int height) {
- RootPanel.get().setPixelSize(width, height);
+ private void setRootPanelSize() {
+ Scheduler.get().scheduleDeferred(new ScheduledCommand() {
+ @Override
+ public void execute() {
+ // - 100 because of problems in chrommium (issue #76), not needed in ff
+ RootPanel.get().setPixelSize(mainPanel.getOffsetWidth(), mainPanel.getOffsetHeight() - 100);
+ }
+ });
}
}
Modified: trunk/src/main/java/cc/kune/core/public/ws.css
===================================================================
--- trunk/src/main/java/cc/kune/core/public/ws.css 2011-07-28 23:36:39 UTC (rev 1471)
+++ trunk/src/main/java/cc/kune/core/public/ws.css 2011-07-29 01:24:35 UTC (rev 1472)
@@ -1,4 +1,6 @@
-CHARSET "UTF-8 "; body {
+CHARSET "UTF-8 ";
+
+body {
background-color: transparent;
color: black;
font-family: 'Ubuntu', Arial;
Modified: trunk/src/main/java/cc/kune/core/public/ws.html
===================================================================
--- trunk/src/main/java/cc/kune/core/public/ws.html 2011-07-28 23:36:39 UTC (rev 1471)
+++ trunk/src/main/java/cc/kune/core/public/ws.html 2011-07-29 01:24:35 UTC (rev 1472)
@@ -62,6 +62,7 @@
<script type="text/javascript" src="http://wave.google.com/gadgets/js/core:rpc.js?c=1"></script>
<style type="text/css">
+
body {
background-color: white;
color: black;
Modified: trunk/src/main/java/cc/kune/gspace/client/GSpaceArmor.java
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/GSpaceArmor.java 2011-07-28 23:36:39 UTC (rev 1471)
+++ trunk/src/main/java/cc/kune/gspace/client/GSpaceArmor.java 2011-07-29 01:24:35 UTC (rev 1472)
@@ -22,6 +22,7 @@
import cc.kune.common.client.actions.ui.IsActionExtensible;
import com.google.gwt.user.client.ui.InsertPanel.ForIsWidget;
+import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.SimplePanel;
public interface GSpaceArmor {
@@ -52,6 +53,8 @@
IsActionExtensible getHeaderToolbar();
+ IsWidget getMainpanel();
+
SimplePanel getPublicSpace();
ForIsWidget getSitebar();
Modified: trunk/src/main/java/cc/kune/gspace/client/GSpaceArmorImpl.java
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/GSpaceArmorImpl.java 2011-07-28 23:36:39 UTC (rev 1471)
+++ trunk/src/main/java/cc/kune/gspace/client/GSpaceArmorImpl.java 2011-07-29 01:24:35 UTC (rev 1472)
@@ -35,6 +35,7 @@
import com.google.gwt.user.client.ui.DockLayoutPanel;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.InsertPanel.ForIsWidget;
+import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.ScrollPanel;
import com.google.gwt.user.client.ui.SimplePanel;
@@ -75,7 +76,7 @@
@UiField
FlowPanel entityToolsNorth;
@UiField
- VerticalPanel entityToolsSouth;
+ FlowPanel entityToolsSouth;
private final ActionFlowPanel footerToolbar;
@UiField
SplitLayoutPanel groupSpace;
@@ -194,6 +195,11 @@
}
@Override
+ public IsWidget getMainpanel() {
+ return mainpanel;
+ }
+
+ @Override
public SimplePanel getPublicSpace() {
return publicSpace;
}
Modified: trunk/src/main/java/cc/kune/gspace/client/GSpaceArmorImpl.ui.xml
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/GSpaceArmorImpl.ui.xml 2011-07-28 23:36:39 UTC (rev 1471)
+++ trunk/src/main/java/cc/kune/gspace/client/GSpaceArmorImpl.ui.xml 2011-07-29 01:24:35 UTC (rev 1472)
@@ -99,8 +99,7 @@
</g:FlowPanel>
</g:center>
<g:south size="98">
- <g:VerticalPanel width="100%"
- styleName="{res.style.entityToolsSouth}" ui:field="entityToolsSouth"></g:VerticalPanel>
+ <g:FlowPanel styleName="{res.style.entityToolsSouth}" ui:field="entityToolsSouth" width="100%" />
</g:south>
</g:DockLayoutPanel>
</g:west>
1
0
r1471 - in trunk: img/icons src/main/java/cc/kune/core/client/services src/main/java/cc/kune/core/public/images src/main/java/cc/kune/wave/client
by Vicente J. Ruiz Jurado 28 Jul '11
by Vicente J. Ruiz Jurado 28 Jul '11
28 Jul '11
Author: vjrj_
Date: 2011-07-29 01:36:39 +0200 (Fri, 29 Jul 2011)
New Revision: 1471
Added:
trunk/img/icons/world-90.png
trunk/src/main/java/cc/kune/core/public/images/world-90.gif
Modified:
trunk/img/icons/from-private-to-public.svg
trunk/src/main/java/cc/kune/core/client/services/FileDownloadUtils.java
trunk/src/main/java/cc/kune/wave/client/KuneWaveProfileManager.java
Log:
CLOSED - # 72: Make a @Domain avatar (for everybody)
http://kune.ourproject.org/issues/ticket/72
Modified: trunk/img/icons/from-private-to-public.svg
===================================================================
--- trunk/img/icons/from-private-to-public.svg 2011-07-28 22:46:26 UTC (rev 1470)
+++ trunk/img/icons/from-private-to-public.svg 2011-07-28 23:36:39 UTC (rev 1471)
@@ -14,7 +14,7 @@
height="297mm"
id="svg3010"
version="1.1"
- inkscape:version="0.48.0 r9654"
+ inkscape:version="0.48.1 r9760"
sodipodi:docname="from-private-to-public.svg">
<defs
id="defs3012" />
@@ -26,13 +26,13 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
- inkscape:cx="-59.935638"
- inkscape:cy="1024"
+ inkscape:cx="297.16839"
+ inkscape:cy="1014"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
- inkscape:window-width="1280"
- inkscape:window-height="975"
+ inkscape:window-width="1080"
+ inkscape:window-height="1824"
inkscape:window-x="0"
inkscape:window-y="21"
inkscape:window-maximized="1"
@@ -43,7 +43,11 @@
inkscape:object-nodes="true">
<inkscape:grid
type="xygrid"
- id="grid3037" />
+ id="grid3037"
+ empspacing="5"
+ visible="true"
+ enabled="true"
+ snapvisiblegridlinesonly="true" />
</sodipodi:namedview>
<metadata
id="metadata3015">
@@ -61,6 +65,16 @@
inkscape:label="Capa 1"
inkscape:groupmode="layer"
id="layer1">
+ <rect
+ style="opacity:0.82999997999999997;color:#000000;fill:#ffffff;fill-opacity:0.94901961000000001;fill-rule:nonzero;stroke:none;stroke-width:1.40678155000000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="rect6727"
+ width="90"
+ height="90"
+ x="301.92883"
+ y="67.511871"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/world-90.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
<path
sodipodi:type="arc"
style="color:#000000;fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:#b3b3b3;stroke-width:1.48864591000000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
@@ -627,5 +641,65 @@
inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/group-def-new.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
+ <g
+ id="g6729"
+ transform="translate(-4.999997,-4.9999999)"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/world-90.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <path
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/from-private-to-public.png"
+ sodipodi:type="arc"
+ style="color:#000000;fill:#aaeeff;fill-opacity:1;fill-rule:nonzero;stroke:#b3b3b3;stroke-width:1.48864591;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="path4967-4"
+ sodipodi:cx="90"
+ sodipodi:cy="32.362183"
+ sodipodi:rx="20"
+ sodipodi:ry="10"
+ d="m 110,32.362183 c 0,5.522847 -8.95431,10 -20,10 -11.045695,0 -20,-4.477153 -20,-10 0,-5.522848 8.954305,-10 20,-10 11.04569,0 20,4.477152 20,10 z"
+ transform="matrix(1.9,0,0,3.8,180.92883,-5.4644227)" />
+ <path
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/from-private-to-public.png"
+ style="color:#000000;fill:#2ca05a;fill-opacity:1;fill-rule:nonzero;stroke:#2ca05a;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 343.41091,82.102257 c -4.61208,1.27568 -8.4152,4.3488 -12.51252,6.67072 -2.35308,1.74788 -5.12984,6.52288 -1.96136,8.60572 2.50816,0.42204 4.52272,-1.71204 6.9918,-1.86684 2.88372,-0.66468 5.82796,-1.19016 8.56184,-2.36416 4.67024,-1.47172 4.67024,-1.47172 5.1476,-3.19456 0.2268,-2.594 -1.61708,-4.99872 -3.35792,-6.7716 -0.7942,-0.65116 -1.8022,-1.26156 -2.86944,-1.07928 z"
+ id="path4969-0"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccc" />
+ <path
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/from-private-to-public.png"
+ style="color:#000000;fill:#2ca05a;fill-opacity:1;fill-rule:nonzero;stroke:#2ca05a;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 379.92883,107.51186 c -6.54148,3.33576 -14.24416,6.695 -17.08312,13.33832 -0.87308,2.04304 0.36,4.4522 0.66656,6.63188 1.24588,2.32204 -1.79852,4.3692 -0.89984,6.6998 1.0754,2.41996 4.1484,2.05532 6.18628,1.27852 2.07688,-0.71376 -0.86608,-2.75712 0,0 0.94212,2.20364 8.67396,2.87608 11.00512,1.87524 2.24192,-0.82204 3.76764,-1.20964 4.83784,-3.08096 3.5092,-7.13912 5.23236,-15.22316 4.6808,-23.17324 -0.172,-2.14232 -0.83076,-4.21536 -1.6044,-6.19228 -0.8002,-2.60864 -3.50284,0.028 -4.56584,1.10028 -0.97392,0.68904 -2.05424,1.25484 -3.2234,1.52244 z"
+ id="path4983-6"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cacccccccccc" />
+ <path
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/from-private-to-public.png"
+ inkscape:connector-curvature="0"
+ id="path4985-4"
+ d="m 328.42251,109.20506 c -3.85116,1.46336 -8.01156,2.4666 -11.52748,4.61236 -2.9146,2.45496 -2.5518,6.93884 -1.0408,10.06404 1.85428,4 3.32528,8.1856 5.54108,12.01032 2.14308,2.82516 -0.1448,1.59612 2.45892,3.98968 0.73584,0.87624 5.32,5.30628 8,4 1.33596,-0.65116 1.00188,-2.62 0.8862,-4.3696 0.84188,-3.62872 -1.33312,-7.09848 -1.15972,-10.75332 -0.0936,-4.58884 0.80728,-9.12276 1.354,-13.6626 0.312,-2.51708 -1.10816,-7.20092 -4.5122,-5.89088 z"
+ style="color:#000000;fill:#2ca05a;fill-opacity:1;fill-rule:nonzero;stroke:#2ca05a;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ sodipodi:nodetypes="cccccacccc" />
+ <path
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/src/main/java/cc/kune/wspace/client/resources/publicSpaceEnabled.png"
+ transform="matrix(1.9,0,0,3.8,180.92883,-5.4644227)"
+ d="m 110,32.362183 c 0,5.522847 -8.95431,10 -20,10 -11.045695,0 -20,-4.477153 -20,-10 0,-5.522848 8.954305,-10 20,-10 11.04569,0 20,4.477152 20,10 z"
+ sodipodi:ry="10"
+ sodipodi:rx="20"
+ sodipodi:cy="32.362183"
+ sodipodi:cx="90"
+ id="path4987-7"
+ style="color:#000000;fill:none;stroke:#002255;stroke-width:1.48864591;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ sodipodi:type="arc" />
+ </g>
</g>
</svg>
Added: trunk/img/icons/world-90.png
===================================================================
(Binary files differ)
Property changes on: trunk/img/icons/world-90.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Modified: trunk/src/main/java/cc/kune/core/client/services/FileDownloadUtils.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/services/FileDownloadUtils.java 2011-07-28 22:46:26 UTC (rev 1470)
+++ trunk/src/main/java/cc/kune/core/client/services/FileDownloadUtils.java 2011-07-28 23:36:39 UTC (rev 1471)
@@ -39,6 +39,7 @@
protected static final String GROUP_NO_AVATAR_IMAGE = "images/group-def-icon.png";
private static final String LOGODOWNLOADSERVLET = "servlets/EntityLogoDownloadManager";
protected static final String PERSON_NO_AVATAR_IMAGE = "images/unknown.jpg";
+ public static final String WORLD_AVATAR_IMAGE = "images/world-90.gif";
private final ImageUtils imageUtils;
private final Session session;
Added: trunk/src/main/java/cc/kune/core/public/images/world-90.gif
===================================================================
(Binary files differ)
Property changes on: trunk/src/main/java/cc/kune/core/public/images/world-90.gif
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Modified: trunk/src/main/java/cc/kune/wave/client/KuneWaveProfileManager.java
===================================================================
--- trunk/src/main/java/cc/kune/wave/client/KuneWaveProfileManager.java 2011-07-28 22:46:26 UTC (rev 1470)
+++ trunk/src/main/java/cc/kune/wave/client/KuneWaveProfileManager.java 2011-07-28 23:36:39 UTC (rev 1471)
@@ -38,6 +38,7 @@
ProfileManager {
private final FileDownloadUtils downloadUtils;
+ private String localDomain;
@Inject
public KuneWaveProfileManager(final FileDownloadUtils downloadUtils) {
@@ -45,10 +46,14 @@
}
private void checkAvatar(final ProfileImpl profile) {
+ if (localDomain == null) {
+ localDomain = "@" + Session.get().getDomain();
+ }
final String address = profile.getAddress();
- if (address.contains(Session.get().getDomain())) {
- profile.update(profile.getFirstName(), profile.getFullName(),
- downloadUtils.getUserAvatar(address.split("@")[0]));
+ if (address.equals(localDomain) || address.equals("@")) {
+ updateProfileAvatar(profile, FileDownloadUtils.WORLD_AVATAR_IMAGE);
+ } else if (address.contains(Session.get().getDomain())) {
+ updateProfileAvatar(profile, downloadUtils.getUserAvatar(address.split("@")[0]));
}
}
@@ -64,4 +69,8 @@
return profile;
}
+ private void updateProfileAvatar(final ProfileImpl profile, final String avatar) {
+ profile.update(profile.getFirstName(), profile.getFullName(), avatar);
+ }
+
}
\ No newline at end of file
1
0
Author: vjrj_
Date: 2011-07-29 00:46:26 +0200 (Fri, 29 Jul 2011)
New Revision: 1470
Added:
trunk/src/main/java/cc/kune/core/client/errors/UnderDevelopmentException.java
Modified:
trunk/pom.xml
trunk/src/main/java/cc/kune/core/client/dnd/FolderViewerDropController.java
trunk/src/main/java/cc/kune/core/client/errors/ErrorHandler.java
trunk/src/main/java/cc/kune/core/client/sn/actions/JoinGroupAction.java
trunk/src/main/java/cc/kune/core/client/sn/actions/RemoveMemberAction.java
trunk/src/main/java/cc/kune/core/client/sn/actions/UnJoinFromCurrentGroupAction.java
trunk/src/main/java/cc/kune/core/client/sn/actions/UnJoinFromThisGroupAction.java
trunk/src/main/java/cc/kune/core/client/sn/actions/UserSNVisibilityAction.java
trunk/src/main/java/cc/kune/core/client/state/StateManager.java
trunk/src/main/java/cc/kune/core/client/state/StateManagerDefault.java
trunk/src/main/java/cc/kune/core/server/content/ContainerManager.java
trunk/src/main/java/cc/kune/core/server/content/ContainerManagerDefault.java
trunk/src/main/java/cc/kune/core/server/rpc/ContentRPC.java
trunk/src/main/java/cc/kune/gspace/client/actions/DelContentMenuItem.java
trunk/src/main/java/cc/kune/gspace/client/actions/ParticipateInContentBtn.java
trunk/src/main/java/cc/kune/gspace/client/actions/RefreshContentMenuItem.java
trunk/src/main/java/cc/kune/gspace/client/licensewizard/LicenseChangeAction.java
trunk/src/main/java/cc/kune/gspace/client/options/tools/EntityOptToolsPresenter.java
trunk/src/main/java/cc/kune/wave/server/KuneWaveManagerDefault.java
trunk/src/main/java/com/google/wave/splash/web/template/Templates.java
trunk/src/main/java/org/ourproject/kune/workspace/client/OldAbstractFoldableContentActions.java
trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java
trunk/src/main/webapp/WEB-INF/web.xml
trunk/src/test/java/cc/kune/core/client/state/StateManagerDefaultTest.java
trunk/src/test/java/cc/kune/wave/server/KuneWaveManagerDefaultTest.java
Log:
NEW - # 71: D-and-D folder into folder fails
http://kune.ourproject.org/issues/ticket/71
CLOSED - # 73: (Edit) button in my Group don't open Wiab editor
http://kune.ourproject.org/issues/ticket/73
NEW - # 75: Remove memory leaks in server memory usage
http://kune.ourproject.org/issues/ticket/75
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2011-07-28 16:01:40 UTC (rev 1469)
+++ trunk/pom.xml 2011-07-28 22:46:26 UTC (rev 1470)
@@ -778,7 +778,7 @@
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
- <version>1.1.1</version>
+ <version>1.2</version>
<executions>
<execution>
<phase>exec</phase>
Modified: trunk/src/main/java/cc/kune/core/client/dnd/FolderViewerDropController.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/dnd/FolderViewerDropController.java 2011-07-28 16:01:40 UTC (rev 1469)
+++ trunk/src/main/java/cc/kune/core/client/dnd/FolderViewerDropController.java 2011-07-28 22:46:26 UTC (rev 1470)
@@ -60,12 +60,12 @@
@Override
public void onFailure(final Throwable caught) {
erroHandler.process(caught);
- stateManager.reload();
+ stateManager.refreshCurrentState();
}
@Override
public void onSuccess(final StateContainerDTO result) {
- stateManager.reload();
+ stateManager.refreshCurrentState();
}
});
} else {
Modified: trunk/src/main/java/cc/kune/core/client/errors/ErrorHandler.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/errors/ErrorHandler.java 2011-07-28 16:01:40 UTC (rev 1469)
+++ trunk/src/main/java/cc/kune/core/client/errors/ErrorHandler.java 2011-07-28 22:46:26 UTC (rev 1470)
@@ -25,6 +25,7 @@
import cc.kune.common.client.log.Log;
import cc.kune.common.client.notify.NotifyLevel;
import cc.kune.common.client.notify.NotifyUser;
+import cc.kune.common.client.utils.TextUtils;
import cc.kune.core.client.notify.msgs.UserNotifyEvent;
import cc.kune.core.client.notify.spiner.ProgressHideEvent;
import cc.kune.core.client.state.Session;
@@ -131,6 +132,9 @@
logException(caught);
eventBus.fireEvent(new UserNotifyEvent(NotifyLevel.error,
i18n.t("This user is already a group member")));
+ } else if (caught instanceof UnderDevelopmentException) {
+ logException(caught);
+ eventBus.fireEvent(new UserNotifyEvent(NotifyLevel.info, i18n.t(TextUtils.IN_DEVELOPMENT)));
} else {
logException(caught, true);
eventBus.fireEvent(new UserNotifyEvent(NotifyLevel.error,
Added: trunk/src/main/java/cc/kune/core/client/errors/UnderDevelopmentException.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/errors/UnderDevelopmentException.java (rev 0)
+++ trunk/src/main/java/cc/kune/core/client/errors/UnderDevelopmentException.java 2011-07-28 22:46:26 UTC (rev 1470)
@@ -0,0 +1,24 @@
+/*
+ *
+ * Copyright (C) 2007-2011 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 cc.kune.core.client.errors;
+
+public class UnderDevelopmentException extends DefaultException {
+ private static final long serialVersionUID = 7207715062129253927L;
+}
Modified: trunk/src/main/java/cc/kune/core/client/sn/actions/JoinGroupAction.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/sn/actions/JoinGroupAction.java 2011-07-28 16:01:40 UTC (rev 1469)
+++ trunk/src/main/java/cc/kune/core/client/sn/actions/JoinGroupAction.java 2011-07-28 22:46:26 UTC (rev 1470)
@@ -60,7 +60,7 @@
switch ((result)) {
case accepted:
NotifyUser.info(i18n.t("You are now member of this group"));
- stateManager.refreshCurrentGroupState();
+ stateManager.refreshCurrentStateWithoutCache();
break;
case denied:
NotifyUser.important(i18n.t("Sorry this is a closed group"));
Modified: trunk/src/main/java/cc/kune/core/client/sn/actions/RemoveMemberAction.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/sn/actions/RemoveMemberAction.java 2011-07-28 16:01:40 UTC (rev 1469)
+++ trunk/src/main/java/cc/kune/core/client/sn/actions/RemoveMemberAction.java 2011-07-28 22:46:26 UTC (rev 1470)
@@ -62,7 +62,7 @@
public void onSuccess(final SocialNetworkDataDTO result) {
NotifyUser.hideProgress();
NotifyUser.info(i18n.t("Member removed"));
- stateManager.refreshCurrentGroupState();
+ stateManager.refreshCurrentStateWithoutCache();
}
});
}
Modified: trunk/src/main/java/cc/kune/core/client/sn/actions/UnJoinFromCurrentGroupAction.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/sn/actions/UnJoinFromCurrentGroupAction.java 2011-07-28 16:01:40 UTC (rev 1469)
+++ trunk/src/main/java/cc/kune/core/client/sn/actions/UnJoinFromCurrentGroupAction.java 2011-07-28 22:46:26 UTC (rev 1470)
@@ -63,7 +63,7 @@
public void onSuccess(final Void result) {
NotifyUser.hideProgress();
NotifyUser.info(i18n.t("Removed as member"));
- stateManager.refreshCurrentGroupState();
+ stateManager.refreshCurrentStateWithoutCache();
}
});
}
Modified: trunk/src/main/java/cc/kune/core/client/sn/actions/UnJoinFromThisGroupAction.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/sn/actions/UnJoinFromThisGroupAction.java 2011-07-28 16:01:40 UTC (rev 1469)
+++ trunk/src/main/java/cc/kune/core/client/sn/actions/UnJoinFromThisGroupAction.java 2011-07-28 22:46:26 UTC (rev 1470)
@@ -73,7 +73,7 @@
public void onSuccess(final Void result) {
NotifyUser.hideProgress();
NotifyUser.info(i18n.t("Removed as member"));
- stateManager.refreshCurrentGroupState();
+ stateManager.refreshCurrentStateWithoutCache();
}
});
}
Modified: trunk/src/main/java/cc/kune/core/client/sn/actions/UserSNVisibilityAction.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/sn/actions/UserSNVisibilityAction.java 2011-07-28 16:01:40 UTC (rev 1469)
+++ trunk/src/main/java/cc/kune/core/client/sn/actions/UserSNVisibilityAction.java 2011-07-28 22:46:26 UTC (rev 1470)
@@ -57,7 +57,7 @@
// NotifyUser.info(i18n.t("Visibility of your network changed to "
// + visibility.toString()));
NotifyUser.info(i18n.t("Visibility of your network changed"));
- stateManager.refreshCurrentGroupState();
+ stateManager.refreshCurrentStateWithoutCache();
}
});
Modified: trunk/src/main/java/cc/kune/core/client/state/StateManager.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/state/StateManager.java 2011-07-28 16:01:40 UTC (rev 1469)
+++ trunk/src/main/java/cc/kune/core/client/state/StateManager.java 2011-07-28 22:46:26 UTC (rev 1470)
@@ -68,9 +68,9 @@
void redirectOrRestorePreviousToken();
- void refreshCurrentGroupState();
+ void refreshCurrentStateWithoutCache();
- void reload();
+ void refreshCurrentState();
void removeBeforeStateChangeListener(BeforeActionListener listener);
Modified: trunk/src/main/java/cc/kune/core/client/state/StateManagerDefault.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/state/StateManagerDefault.java 2011-07-28 16:01:40 UTC (rev 1469)
+++ trunk/src/main/java/cc/kune/core/client/state/StateManagerDefault.java 2011-07-28 22:46:26 UTC (rev 1470)
@@ -90,7 +90,7 @@
session.onUserSignOut(false, new UserSignOutEvent.UserSignOutHandler() {
@Override
public void onUserSignOut(final UserSignOutEvent event) {
- refreshCurrentGroupState();
+ refreshCurrentStateWithoutCache();
}
});
processCurrentHistoryToken();
@@ -333,11 +333,21 @@
/**
* <p>
+ * Reload current state (using client cache if available)
+ * </p>
+ */
+ @Override
+ public void refreshCurrentState() {
+ processHistoryToken(history.getToken());
+ }
+
+ /**
+ * <p>
* Reload current state (not using client cache)
* </p>
*/
@Override
- public void refreshCurrentGroupState() {
+ public void refreshCurrentStateWithoutCache() {
final StateToken currentStateToken = session.getCurrentStateToken();
if (currentStateToken == null) {
processCurrentHistoryToken();
@@ -347,17 +357,7 @@
}
}
- /**
- * <p>
- * Reload current state (using client cache if available)
- * </p>
- */
@Override
- public void reload() {
- processHistoryToken(history.getToken());
- }
-
- @Override
public void removeBeforeStateChangeListener(final BeforeActionListener listener) {
beforeStateChangeCollection.remove(listener);
}
@@ -378,7 +378,7 @@
public void resumeTokenChange() {
if (resumedHistoryToken != null) {
// Is this reload redundant?
- reload();
+ refreshCurrentState();
gotoHistoryToken(resumedHistoryToken);
resumedHistoryToken = null;
}
Modified: trunk/src/main/java/cc/kune/core/server/content/ContainerManager.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/content/ContainerManager.java 2011-07-28 16:01:40 UTC (rev 1469)
+++ trunk/src/main/java/cc/kune/core/server/content/ContainerManager.java 2011-07-28 22:46:26 UTC (rev 1470)
@@ -19,7 +19,6 @@
*/
package cc.kune.core.server.content;
-
import cc.kune.core.client.errors.DefaultException;
import cc.kune.core.server.manager.Manager;
import cc.kune.core.server.manager.impl.SearchResult;
@@ -30,19 +29,22 @@
public interface ContainerManager extends Manager<Container, Long> {
- Container createFolder(Group group, Container parent, String name, I18nLanguage language, String typeId);
+ Container createFolder(Group group, Container parent, String name, I18nLanguage language, String typeId);
- Container createRootFolder(Group group, String toolName, String name, String type);
+ Container createRootFolder(Group group, String toolName, String name, String type);
- Container find(Long id);
+ @Override
+ Container find(Long id);
- boolean findIfExistsTitle(Container container, String title);
+ boolean findIfExistsTitle(Container container, String title);
- Container renameFolder(Group group, Container container, String newName) throws DefaultException;
+ void moveContainer(Container container, Container newContainer);
- SearchResult<Container> search(String search);
+ Container renameFolder(Group group, Container container, String newName) throws DefaultException;
- SearchResult<Container> search(String search, Integer firstResult, Integer maxResults);
+ SearchResult<Container> search(String search);
- void setAccessList(Container container, AccessLists accessList);
+ SearchResult<Container> search(String search, Integer firstResult, Integer maxResults);
+
+ void setAccessList(Container container, AccessLists accessList);
}
Modified: trunk/src/main/java/cc/kune/core/server/content/ContainerManagerDefault.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/content/ContainerManagerDefault.java 2011-07-28 16:01:40 UTC (rev 1469)
+++ trunk/src/main/java/cc/kune/core/server/content/ContainerManagerDefault.java 2011-07-28 22:46:26 UTC (rev 1470)
@@ -31,6 +31,7 @@
import cc.kune.core.client.errors.DefaultException;
import cc.kune.core.client.errors.NameInUseException;
+import cc.kune.core.client.errors.UnderDevelopmentException;
import cc.kune.core.server.manager.file.FileUtils;
import cc.kune.core.server.manager.impl.DefaultManager;
import cc.kune.core.server.manager.impl.SearchResult;
@@ -50,103 +51,110 @@
@Singleton
public class ContainerManagerDefault extends DefaultManager<Container, Long> implements ContainerManager {
- private final ContainerFinder containerFinder;
- private final ContentFinder contentFinder;
+ private final ContainerFinder containerFinder;
+ private final ContentFinder contentFinder;
- @Inject
- public ContainerManagerDefault(final ContentFinder contentFinder, final ContainerFinder containerFinder,
- final Provider<EntityManager> provider) {
- super(provider, Container.class);
- this.contentFinder = contentFinder;
- this.containerFinder = containerFinder;
- }
+ @Inject
+ public ContainerManagerDefault(final ContentFinder contentFinder,
+ final ContainerFinder containerFinder, final Provider<EntityManager> provider) {
+ super(provider, Container.class);
+ this.contentFinder = contentFinder;
+ this.containerFinder = containerFinder;
+ }
- @Override
- public Container createFolder(final Group group, final Container parent, final String name,
- final I18nLanguage language, final String typeId) {
- FilenameUtils.checkBasicFilename(name);
- final String newtitle = findInexistentName(parent, name);
- final List<Container> parentAbsolutePath = parent.getAbsolutePath();
- final List<Container> childAbsolutePath = new ArrayList<Container>();
+ @Override
+ public Container createFolder(final Group group, final Container parent, final String name,
+ final I18nLanguage language, final String typeId) {
+ FilenameUtils.checkBasicFilename(name);
+ final String newtitle = findInexistentName(parent, name);
+ final List<Container> parentAbsolutePath = parent.getAbsolutePath();
+ final List<Container> childAbsolutePath = new ArrayList<Container>();
- for (final Container parentRef : parentAbsolutePath) {
- childAbsolutePath.add(parentRef);
- }
- // FIXME: use
- // childAbsolutePath.addAll(parentAbsolutePath);
- final Container child = new Container(newtitle, group, parent.getToolName());
- childAbsolutePath.add(child);
- child.setLanguage(language);
- child.setAbsolutePath(childAbsolutePath);
- child.setTypeId(typeId);
- parent.addChild(child);
- persist(child);
- return child;
+ for (final Container parentRef : parentAbsolutePath) {
+ childAbsolutePath.add(parentRef);
}
+ // FIXME: use
+ // childAbsolutePath.addAll(parentAbsolutePath);
+ final Container child = new Container(newtitle, group, parent.getToolName());
+ childAbsolutePath.add(child);
+ child.setLanguage(language);
+ child.setAbsolutePath(childAbsolutePath);
+ child.setTypeId(typeId);
+ parent.addChild(child);
+ persist(child);
+ return child;
+ }
- @Override
- public Container createRootFolder(final Group group, final String toolName, final String name, final String type) {
- final Container container = new Container(name, group, toolName);
- container.setTypeId(type);
- final List<Container> absolutePath = new ArrayList<Container>();
- absolutePath.add(container);
- container.setAbsolutePath(absolutePath);
- return persist(container);
- }
+ @Override
+ public Container createRootFolder(final Group group, final String toolName, final String name,
+ final String type) {
+ final Container container = new Container(name, group, toolName);
+ container.setTypeId(type);
+ final List<Container> absolutePath = new ArrayList<Container>();
+ absolutePath.add(container);
+ container.setAbsolutePath(absolutePath);
+ return persist(container);
+ }
- /** Duplicate code in ContentMD **/
- @Override
- public boolean findIfExistsTitle(final Container container, final String title) {
- return (contentFinder.findIfExistsTitle(container, title) > 0)
- || (containerFinder.findIfExistsTitle(container, title) > 0);
- }
+ /** Duplicate code in ContentMD **/
+ @Override
+ public boolean findIfExistsTitle(final Container container, final String title) {
+ return (contentFinder.findIfExistsTitle(container, title) > 0)
+ || (containerFinder.findIfExistsTitle(container, title) > 0);
+ }
- /** Duplicate code in ContentMD **/
- private String findInexistentName(final Container container, final String title) {
- String initialTitle = String.valueOf(title);
- while (findIfExistsTitle(container, initialTitle)) {
- initialTitle = FileUtils.getNextSequentialFileName(initialTitle);
- }
- return initialTitle;
+ /** Duplicate code in ContentMD **/
+ private String findInexistentName(final Container container, final String title) {
+ String initialTitle = String.valueOf(title);
+ while (findIfExistsTitle(container, initialTitle)) {
+ initialTitle = FileUtils.getNextSequentialFileName(initialTitle);
}
+ return initialTitle;
+ }
- @Override
- public Container renameFolder(final Group group, final Container container, final String newName)
- throws DefaultException {
- FilenameUtils.checkBasicFilename(newName);
- final String newNameWithoutNT = FilenameUtils.chomp(newName);
- if (container.isRoot()) {
- throw new DefaultException("Root folder cannot be renamed");
- }
- if (findIfExistsTitle(container.getParent(), newNameWithoutNT)) {
- throw new NameInUseException();
- }
- container.setName(newNameWithoutNT);
- persist(container);
- return container;
- }
+ @Override
+ public void moveContainer(final Container container, final Container newContainer) {
+ throw new UnderDevelopmentException();
+ }
- @Override
- public SearchResult<Container> search(final String search) {
- return this.search(search, null, null);
+ @Override
+ public Container renameFolder(final Group group, final Container container, final String newName)
+ throws DefaultException {
+ FilenameUtils.checkBasicFilename(newName);
+ final String newNameWithoutNT = FilenameUtils.chomp(newName);
+ if (container.isRoot()) {
+ throw new DefaultException("Root folder cannot be renamed");
}
-
- @Override
- public SearchResult<Container> search(final String search, final Integer firstResult, final Integer maxResults) {
- final MultiFieldQueryParser parser = new MultiFieldQueryParser(new String[] { "name" }, new StandardAnalyzer());
- Query query;
- try {
- query = parser.parse(search);
- } catch (final ParseException e) {
- throw new ServerManagerException("Error parsing search");
- }
- return super.search(query, firstResult, maxResults);
+ if (findIfExistsTitle(container.getParent(), newNameWithoutNT)) {
+ throw new NameInUseException();
}
+ container.setName(newNameWithoutNT);
+ persist(container);
+ return container;
+ }
- @Override
- public void setAccessList(final Container container, final AccessLists accessList) {
- container.setAccessLists(accessList);
- persist(container);
+ @Override
+ public SearchResult<Container> search(final String search) {
+ return this.search(search, null, null);
+ }
+
+ @Override
+ public SearchResult<Container> search(final String search, final Integer firstResult,
+ final Integer maxResults) {
+ final MultiFieldQueryParser parser = new MultiFieldQueryParser(new String[] { "name" },
+ new StandardAnalyzer());
+ Query query;
+ try {
+ query = parser.parse(search);
+ } catch (final ParseException e) {
+ throw new ServerManagerException("Error parsing search");
}
+ return super.search(query, firstResult, maxResults);
+ }
+ @Override
+ public void setAccessList(final Container container, final AccessLists accessList) {
+ container.setAccessLists(accessList);
+ persist(container);
+ }
}
Modified: trunk/src/main/java/cc/kune/core/server/rpc/ContentRPC.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/rpc/ContentRPC.java 2011-07-28 16:01:40 UTC (rev 1469)
+++ trunk/src/main/java/cc/kune/core/server/rpc/ContentRPC.java 2011-07-28 22:46:26 UTC (rev 1470)
@@ -26,6 +26,7 @@
import cc.kune.chat.server.ChatManager;
import cc.kune.core.client.errors.AccessViolationException;
import cc.kune.core.client.errors.ContentNotFoundException;
+import cc.kune.core.client.errors.ContentNotPermittedException;
import cc.kune.core.client.errors.DefaultException;
import cc.kune.core.client.errors.NoDefaultContentException;
import cc.kune.core.client.errors.ToolNotFoundException;
@@ -318,17 +319,30 @@
@Authenticated
@Authorizated(actionLevel = ActionLevel.container, accessRolRequired = AccessRol.Editor, mustCheckMembership = false)
@Transactional
- public StateContainerDTO moveContent(final String userHash, final StateToken contentToken,
+ public StateContainerDTO moveContent(final String userHash, final StateToken movedToken,
final StateToken newContainerToken) throws DefaultException {
final User user = getCurrentUser();
try {
- final Content content = accessService.accessToContent(
- ContentUtils.parseId(contentToken.getDocument()), user, AccessRol.Editor);
- final Container newContainer = accessService.accessToContainer(
- ContentUtils.parseId(newContainerToken.getFolder()), user, AccessRol.Editor);
- final Container oldContainer = content.getContainer();
- contentManager.moveContent(content, newContainer);
- return getState(user, oldContainer);
+ if (movedToken.isComplete()) {
+ final Content content = accessService.accessToContent(
+ ContentUtils.parseId(movedToken.getDocument()), user, AccessRol.Editor);
+ final Container newContainer = accessService.accessToContainer(
+ ContentUtils.parseId(newContainerToken.getFolder()), user, AccessRol.Editor);
+ final Container oldContainer = content.getContainer();
+ contentManager.moveContent(content, newContainer);
+ return getState(user, oldContainer);
+ } else if (movedToken.hasGroupToolAndFolder()) {
+ // Folder to folder
+ final Container container = accessService.accessToContainer(
+ ContentUtils.parseId(movedToken.getFolder()), user, AccessRol.Editor);
+ final Container newContainer = accessService.accessToContainer(
+ ContentUtils.parseId(newContainerToken.getFolder()), user, AccessRol.Editor);
+ final Container oldParent = container.getParent();
+ containerManager.moveContainer(container, newContainer);
+ return getState(user, oldParent);
+ } else {
+ throw new ContentNotPermittedException();
+ }
} catch (final NoResultException e) {
throw new AccessViolationException();
}
Modified: trunk/src/main/java/cc/kune/gspace/client/actions/DelContentMenuItem.java
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/actions/DelContentMenuItem.java 2011-07-28 16:01:40 UTC (rev 1469)
+++ trunk/src/main/java/cc/kune/gspace/client/actions/DelContentMenuItem.java 2011-07-28 22:46:26 UTC (rev 1470)
@@ -81,7 +81,7 @@
// session.setCurrentState(state);
final StateToken parent = token.copy().clearDocument();
if (session.getCurrentStateToken().equals(parent)) {
- stateManager.refreshCurrentGroupState();
+ stateManager.refreshCurrentStateWithoutCache();
// Warning: the previous action
// is asynchronous (it gets a
// content)
Modified: trunk/src/main/java/cc/kune/gspace/client/actions/ParticipateInContentBtn.java
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/actions/ParticipateInContentBtn.java 2011-07-28 16:01:40 UTC (rev 1469)
+++ trunk/src/main/java/cc/kune/gspace/client/actions/ParticipateInContentBtn.java 2011-07-28 22:46:26 UTC (rev 1470)
@@ -62,7 +62,9 @@
@Override
public void onSuccess(final Void arg) {
NotifyUser.hideProgress();
- stateManager.gotoStateToken(session.getCurrentStateToken());
+ stateManager.refreshCurrentStateWithoutCache();
+ // issue #73
+ // stateManager.gotoStateToken(session.getCurrentStateToken());
}
});
}
Modified: trunk/src/main/java/cc/kune/gspace/client/actions/RefreshContentMenuItem.java
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/actions/RefreshContentMenuItem.java 2011-07-28 16:01:40 UTC (rev 1469)
+++ trunk/src/main/java/cc/kune/gspace/client/actions/RefreshContentMenuItem.java 2011-07-28 22:46:26 UTC (rev 1470)
@@ -41,7 +41,7 @@
@Override
public void actionPerformed(final ActionEvent event) {
- stateManager.refreshCurrentGroupState();
+ stateManager.refreshCurrentStateWithoutCache();
}
}
Modified: trunk/src/main/java/cc/kune/gspace/client/licensewizard/LicenseChangeAction.java
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/licensewizard/LicenseChangeAction.java 2011-07-28 16:01:40 UTC (rev 1469)
+++ trunk/src/main/java/cc/kune/gspace/client/licensewizard/LicenseChangeAction.java 2011-07-28 22:46:26 UTC (rev 1470)
@@ -66,7 +66,7 @@
@Override
public void onSuccess(final Void result) {
- stateManager.reload();
+ stateManager.refreshCurrentState();
callback.onSuccess();
LicenseChangedEvent.fire(eventBus);
}
Modified: trunk/src/main/java/cc/kune/gspace/client/options/tools/EntityOptToolsPresenter.java
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/options/tools/EntityOptToolsPresenter.java 2011-07-28 16:01:40 UTC (rev 1469)
+++ trunk/src/main/java/cc/kune/gspace/client/options/tools/EntityOptToolsPresenter.java 2011-07-28 22:46:26 UTC (rev 1470)
@@ -139,7 +139,7 @@
@Override
public void onSuccess(final Void result) {
- stateManager.reload();
+ stateManager.refreshCurrentState();
// view.unmask();
}
});
Modified: trunk/src/main/java/cc/kune/wave/server/KuneWaveManagerDefault.java
===================================================================
--- trunk/src/main/java/cc/kune/wave/server/KuneWaveManagerDefault.java 2011-07-28 16:01:40 UTC (rev 1469)
+++ trunk/src/main/java/cc/kune/wave/server/KuneWaveManagerDefault.java 2011-07-28 22:46:26 UTC (rev 1470)
@@ -187,12 +187,19 @@
@Override
public void addParticipant(final WaveRef waveName, final String author, final String userWhoAdds,
- final String participant) {
+ final String newLocalParticipant) {
final Wavelet wavelet = fetchWave(waveName, author);
+ final String newPartWithDomain = participantUtils.of(newLocalParticipant).toString();
+ for (final String current : wavelet.getParticipants()) {
+ if (current.equals(newPartWithDomain)) {
+ // Current user is a participant already (issue #73)
+ return;
+ }
+ }
final String whoAdd = wavelet.getParticipants().contains(participantUtils.of(userWhoAdds)) ? userWhoAdds
: author;
final OperationQueue opQueue = new OperationQueue();
- opQueue.addParticipantToWavelet(wavelet, participantUtils.of(participant).toString());
+ opQueue.addParticipantToWavelet(wavelet, newPartWithDomain);
doOperation(whoAdd, opQueue, "add participant");
}
@@ -390,7 +397,8 @@
@Override
public String render(final Wavelet wavelet) {
final ClientAction clientPage = waveRenderer.render(wavelet, 0);
- return clientPage.getHtml();
+ final String html = clientPage.getHtml();
+ return html;
}
@Override
Modified: trunk/src/main/java/com/google/wave/splash/web/template/Templates.java
===================================================================
--- trunk/src/main/java/com/google/wave/splash/web/template/Templates.java 2011-07-28 16:01:40 UTC (rev 1469)
+++ trunk/src/main/java/com/google/wave/splash/web/template/Templates.java 2011-07-28 22:46:26 UTC (rev 1470)
@@ -60,7 +60,7 @@
private final Markup markup;
- private final boolean productionMode = false;
+ private final boolean productionMode = true;
/**
* file name of template -> compiled template lazy cache.
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/OldAbstractFoldableContentActions.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/OldAbstractFoldableContentActions.java 2011-07-28 16:01:40 UTC (rev 1469)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/OldAbstractFoldableContentActions.java 2011-07-28 22:46:26 UTC (rev 1470)
@@ -415,7 +415,7 @@
AccessRolDTO.Editor, CONTENT_TOPBAR, new Listener<StateToken>() {
@Override
public void onEvent(final StateToken stateToken) {
- stateManager.reload();
+ stateManager.refreshCurrentState();
contextNavigator.selectItem(stateToken);
}
});
@@ -433,7 +433,7 @@
AccessRolDTO.Editor, CONTEXT_TOPBAR, new Listener<StateToken>() {
@Override
public void onEvent(final StateToken stateToken) {
- stateManager.reload();
+ stateManager.refreshCurrentState();
contextNavigator.selectItem(stateToken);
}
});
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 2011-07-28 16:01:40 UTC (rev 1469)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java 2011-07-28 22:46:26 UTC (rev 1470)
@@ -98,7 +98,7 @@
@Override
public void onEvent(final StateToken currentUploadStateToken) {
if (currentUploadStateToken.hasSameContainer(session.getCurrentStateToken())) {
- stateManager.reload();
+ stateManager.refreshCurrentState();
}
}
});
Modified: trunk/src/main/webapp/WEB-INF/web.xml
===================================================================
--- trunk/src/main/webapp/WEB-INF/web.xml 2011-07-28 16:01:40 UTC (rev 1469)
+++ trunk/src/main/webapp/WEB-INF/web.xml 2011-07-28 22:46:26 UTC (rev 1470)
@@ -5,12 +5,12 @@
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
- <!-- NOTE: if you modify this, cp for rapid testing: cp src/main/webapp/WEB-INF/web.xml
+ <!-- NOTE: if you modify this, cp for rapid testing: cp src/main/webapp/WEB-INF/web.xml
target/kune-PUT_HERE_VERSION/WEB-INF/web.xml -->
<!-- TODO: Add <servlet> tags for each servlet here. -->
<!-- TODO: Add <servlet-mapping> tags for each <servlet> here. -->
- <!-- TODO: Optionally add a <welcome-file-list> tag to display a welcome
+ <!-- TODO: Optionally add a <welcome-file-list> tag to display a welcome
file. -->
<display-name>ws</display-name>
<description>kune workspace</description>
@@ -69,12 +69,12 @@
</context-param>
<context-param>
<param-name>rails.root</param-name>
- <param-value>/WEB-INF/publicspace/
+ <param-value>/WEB-INF/publicspace/
</param-value>
</context-param>
<context-param>
<param-name>files.prefix</param-name>
- <param-value>/WEB-INF/publicspace/public
+ <param-value>/WEB-INF/publicspace/public
</param-value>
</context-param>
<context-param>
@@ -89,6 +89,7 @@
<param-name>public.root</param-name>
<param-value>/public/</param-value>
</context-param>
+ <!-- Disabled while not used
<filter>
<filter-name>RackFilter</filter-name>
<filter-class>org.jruby.rack.RackFilter</filter-class>
@@ -100,6 +101,7 @@
<listener>
<listener-class>org.jruby.rack.rails.RailsServletContextListener</listener-class>
</listener>
+ -->
<!-- Emite xmpp proxy ======================================================================================= -->
<!-- <servlet> -->
<!-- <servlet-name>HttpBind</servlet-name> -->
Modified: trunk/src/test/java/cc/kune/core/client/state/StateManagerDefaultTest.java
===================================================================
--- trunk/src/test/java/cc/kune/core/client/state/StateManagerDefaultTest.java 2011-07-28 16:01:40 UTC (rev 1469)
+++ trunk/src/test/java/cc/kune/core/client/state/StateManagerDefaultTest.java 2011-07-28 22:46:26 UTC (rev 1470)
@@ -202,7 +202,7 @@
// When a user enter reload state, also if the application is starting
// (and the user was logged)
Mockito.when(history.getToken()).thenReturn("");
- stateManager.reload();
+ stateManager.refreshCurrentState();
verifyGetServerContent();
}
Modified: trunk/src/test/java/cc/kune/wave/server/KuneWaveManagerDefaultTest.java
===================================================================
--- trunk/src/test/java/cc/kune/wave/server/KuneWaveManagerDefaultTest.java 2011-07-28 16:01:40 UTC (rev 1469)
+++ trunk/src/test/java/cc/kune/wave/server/KuneWaveManagerDefaultTest.java 2011-07-28 22:46:26 UTC (rev 1470)
@@ -71,6 +71,22 @@
}
@Test
+ public void addParticipantTwice() throws IOException {
+ doLogin();
+ final WaveRef waveletName = createTestWave();
+ assertNotNull(waveletName);
+ manager.addParticipant(waveletName, getSiteAdminShortName(), getSiteAdminShortName(),
+ NEW_PARTICIPANT);
+ manager.addParticipant(waveletName, getSiteAdminShortName(), getSiteAdminShortName(),
+ NEW_PARTICIPANT);
+ final Wavelet fetchWavelet = manager.fetchWave(waveletName, getSiteAdminShortName());
+ assertNotNull(fetchWavelet);
+ assertEquals(2, fetchWavelet.getParticipants().size());
+ manager.isParticipant(fetchWavelet, NEW_PARTICIPANT);
+ manager.isParticipant(fetchWavelet, "newparti");
+ }
+
+ @Test
public void authorAddParticipant() throws DefaultException, IOException {
final String whoAdds = getSiteAdminShortName();
addParticipant(whoAdds);
1
0
Author: vjrj_
Date: 2011-07-28 18:01:40 +0200 (Thu, 28 Jul 2011)
New Revision: 1469
Modified:
trunk/src/main/java/cc/kune/wave/client/KuneStagesProvider.java
Log:
CLOSED - # 74: New StateProvider seems that broke read/unread of blips
http://kune.ourproject.org/issues/ticket/74
Modified: trunk/src/main/java/cc/kune/wave/client/KuneStagesProvider.java
===================================================================
--- trunk/src/main/java/cc/kune/wave/client/KuneStagesProvider.java 2011-07-28 14:07:43 UTC (rev 1468)
+++ trunk/src/main/java/cc/kune/wave/client/KuneStagesProvider.java 2011-07-28 16:01:40 UTC (rev 1469)
@@ -36,7 +36,6 @@
import org.waveprotocol.wave.client.wavepanel.view.dom.ModelAsViewProvider;
import org.waveprotocol.wave.client.wavepanel.view.dom.full.BlipQueueRenderer;
import org.waveprotocol.wave.client.wavepanel.view.dom.full.DomRenderer;
-import org.waveprotocol.wave.client.wavepanel.view.dom.full.WavePanelResourceLoader;
import org.waveprotocol.wave.model.conversation.Conversation;
import org.waveprotocol.wave.model.conversation.ConversationBlip;
import org.waveprotocol.wave.model.conversation.ConversationView;
@@ -150,11 +149,12 @@
createViewFactories(), showParticipantsPanel);
}
- @Override
- protected void installFeatures() {
- WavePanelResourceLoader.loadCss();
- // KuneWavePanelResourceLoader.loadCss();
- }
+ // Warning: this run into issue #73
+ // @Override
+ // protected void installFeatures() {
+ // WavePanelResourceLoader.loadCss();
+ // // KuneWavePanelResourceLoader.loadCss();
+ // }
});
}
1
0
Author: vjrj_
Date: 2011-07-28 16:07:43 +0200 (Thu, 28 Jul 2011)
New Revision: 1468
Added:
trunk/src/main/java/cc/kune/wave/client/KuneConversation.css
trunk/src/main/java/cc/kune/wave/client/KuneFullDomRenderer.java
trunk/src/main/java/cc/kune/wave/client/KuneFullDomWaveRendererImpl.java
trunk/src/main/java/cc/kune/wave/client/KuneStagesProvider.java
trunk/src/main/java/cc/kune/wave/client/KuneWaveResources.java
trunk/src/main/java/cc/kune/wave/client/toolbar_empty.png
trunk/src/main/java/org/waveprotocol/wave/
trunk/src/main/java/org/waveprotocol/wave/client/
trunk/src/main/java/org/waveprotocol/wave/client/wavepanel/
trunk/src/main/java/org/waveprotocol/wave/client/wavepanel/view/
trunk/src/main/java/org/waveprotocol/wave/client/wavepanel/view/dom/
trunk/src/main/java/org/waveprotocol/wave/client/wavepanel/view/dom/full/
trunk/src/main/java/org/waveprotocol/wave/client/wavepanel/view/dom/full/KuneWavePanelResourceLoader.java
Modified:
trunk/script/kune client -no-server.launch
trunk/src/main/java/cc/kune/Kune.gwt.xml
trunk/src/main/java/cc/kune/barters/server/BarterServerTool.java
trunk/src/main/java/cc/kune/core/client/dnd/KuneDragController.java
trunk/src/main/java/cc/kune/gspace/client/GSpaceArmor.java
trunk/src/main/java/cc/kune/gspace/client/GSpaceArmorImpl.java
trunk/src/main/java/cc/kune/gspace/client/GSpaceArmorImpl.ui.xml
trunk/src/main/java/cc/kune/gspace/client/resources/GSpaceArmorResources.java
trunk/src/main/java/cc/kune/gspace/client/resources/gSpaceArmor.css
trunk/src/main/java/cc/kune/gspace/client/viewers/AbstractFolderViewerPanel.java
trunk/src/main/java/cc/kune/gspace/client/viewers/ContentViewerPanel.java
trunk/src/main/java/cc/kune/gspace/client/viewers/ContentViewerPanel.ui.xml
trunk/src/main/java/cc/kune/gspace/client/viewers/FolderViewerAsTablePanel.java
trunk/src/main/java/cc/kune/wave/client/WebClient.java
trunk/src/main/resources/wave-server.properties
Log:
CLOSED - # 69: Toolbar scroll also in Wave Panel
http://kune.ourproject.org/issues/ticket/69
Modified: trunk/script/kune client -no-server.launch
===================================================================
--- trunk/script/kune client -no-server.launch 2011-07-27 14:27:34 UTC (rev 1467)
+++ trunk/script/kune client -no-server.launch 2011-07-28 14:07:43 UTC (rev 1468)
@@ -20,7 +20,7 @@
</listAttribute>
<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="com.google.gwt.eclipse.core.moduleClasspathProvider"/>
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.google.gwt.dev.DevMode"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-war /home/vjrj/proyectos/dev/kune/trunk/target/kune-0.0.8 -startupUrl /ws/?locale=en&log_level=INFO -noserver -remoteUI "${gwt_remote_ui_server_port}:${unique_id}" -logLevel INFO -codeServerPort 9997 cc.kune.Kune"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-war /home/vjrj/proyectos/dev/kune/trunk/target/kune-0.1.0-SNAPSHOT -startupUrl /ws/?locale=en&log_level=INFO -noserver -remoteUI "${gwt_remote_ui_server_port}:${unique_id}" -logLevel INFO -codeServerPort 9997 cc.kune.Kune"/>
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="kune"/>
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xmx512m"/>
</launchConfiguration>
Modified: trunk/src/main/java/cc/kune/Kune.gwt.xml
===================================================================
--- trunk/src/main/java/cc/kune/Kune.gwt.xml 2011-07-27 14:27:34 UTC (rev 1467)
+++ trunk/src/main/java/cc/kune/Kune.gwt.xml 2011-07-28 14:07:43 UTC (rev 1468)
@@ -1,36 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 2.0.1//EN" "http://google-web-toolkit.googlecode.com/svn/tags/2.0.1/distro-source/core/…">
<module rename-to="ws">
- <inherits name="com.google.gwt.user.User" />
- <inherits name='com.google.gwt.logging.Logging' />
- <inherits name="cc.kune.core.KuneCore" />
- <inherits name="cc.kune.wave.KuneWave" />
- <inherits name="cc.kune.barters.KuneBarters" />
- <inherits name="cc.kune.blogs.KuneBlogs" />
- <inherits name="cc.kune.chat.KuneChat" />
- <inherits name="cc.kune.docs.KuneDocs" />
- <inherits name="cc.kune.wiki.KuneWiki" />
- <inherits name="cc.kune.meets.KuneMeets" />
- <inherits name="cc.kune.pspace.PSpace" />
- <inherits name="com.calclab.suco.Suco" />
+ <inherits name="com.google.gwt.user.User"/>
+ <inherits name='com.google.gwt.logging.Logging'/>
+ <inherits name="cc.kune.core.KuneCore"/>
+ <inherits name="cc.kune.wave.KuneWave"/>
+ <inherits name="cc.kune.barters.KuneBarters"/>
+ <inherits name="cc.kune.blogs.KuneBlogs"/>
+ <inherits name="cc.kune.chat.KuneChat"/>
+ <inherits name="cc.kune.docs.KuneDocs"/>
+ <inherits name="cc.kune.wiki.KuneWiki"/>
+ <inherits name="cc.kune.meets.KuneMeets"/>
+ <inherits name="cc.kune.pspace.PSpace"/>
+ <inherits name="com.calclab.suco.Suco"/>
<inherits name="org.adamtacy.GWTEffects"></inherits>
<inherits name='com.allen_sauer.gwt.dnd.gwt-dnd'/>
<source path='client'
- excludes="**/*Test.java,**/*Tests.java,**/*MockProvider.java" />
+ excludes="**/*Test.java,**/*Tests.java,**/*MockProvider.java"/>
<!-- <source path='shared'/> -->
<!-- <public path="public"/> -->
<!-- Logging Configuration -->
- <set-property name="gwt.logging.enabled" value="TRUE" />
- <set-property name="gwt.logging.logLevel" value="INFO" />
- <set-property name="gwt.logging.consoleHandler" value="ENABLED" />
+ <set-property name="gwt.logging.enabled" value="TRUE"/>
+ <set-property name="gwt.logging.logLevel" value="INFO"/>
+ <set-property name="gwt.logging.consoleHandler" value="ENABLED"/>
<set-property name="gwt.logging.developmentModeHandler"
- value="ENABLED" />
- <set-property name="gwt.logging.firebugHandler" value="ENABLED" />
- <set-property name="gwt.logging.hasWidgetsHandler" value="DISABLED" />
- <set-property name="gwt.logging.popupHandler" value="DISABLED" />
- <set-property name="gwt.logging.systemHandler" value="ENABLED" />
+ value="ENABLED"/>
+ <set-property name="gwt.logging.firebugHandler" value="ENABLED"/>
+ <set-property name="gwt.logging.hasWidgetsHandler" value="DISABLED"/>
+ <set-property name="gwt.logging.popupHandler" value="DISABLED"/>
+ <set-property name="gwt.logging.systemHandler" value="ENABLED"/>
<set-property name="gwt.logging.simpleRemoteHandler"
- value="DISABLED" />
+ value="DISABLED"/>
<!-- Uncomment if you are enabling server side deobfuscation of StackTraces
<set-property name="compiler.emulatedStack" value="true" /> <set-configuration-property
name="compiler.emulatedStack.recordLineNumbers" value="true" /> <set-configuration-property
@@ -38,25 +38,28 @@
<!-- NOTE: this only compiles for chromium/safari ============= -->
<!--http://code.google.com/p/google-web-toolkit/issues/detail?id=42 -->
<!-- <set-property name="user.agent" value="gecko1_8" /> -->
- <set-property name="user.agent" value="safari,gecko1_8,ie6" />
+ <set-property name="user.agent" value="safari,gecko1_8,ie6"/>
<!-- gwt-platform ============================================= -->
- <inherits name='com.gwtplatform.mvp.Mvp' />
+ <inherits name='com.gwtplatform.mvp.Mvp'/>
<define-configuration-property name="gin.ginjector"
- is-multi-valued="false" />
+ is-multi-valued="false"/>
<set-configuration-property name="gin.ginjector"
- value="cc.kune.client.KuneGinjector" />
+ value="cc.kune.client.KuneGinjector"/>
<!-- Debugging ================================================ -->
<!-- for add ensureDebugIds (debugId in UIBinder), remove/comment in production
see UIObject.ensureDebugId()) -->
- <inherits name="com.google.gwt.user.Debug" />
+ <inherits name="com.google.gwt.user.Debug"/>
+ <!-- For make CSS obfuscation more pretty -->
+ <set-configuration-property name="CssResource.style"
+ value="pretty"/>
<!-- Hardcoded locale (to override emite italian support) ===== -->
- <extend-property name="locale" values="en" />
- <set-property name="locale" value="en" />
+ <extend-property name="locale" values="en"/>
+ <set-property name="locale" value="en"/>
<!-- Hardcoded log level ====================================== -->
<!-- Turn off logging in wave -->
- <set-property name="loglevel" value="none" />
+ <set-property name="loglevel" value="none"/>
<!-- <set-property name="loglevel" value="debug" /> -->
<!-- Entrypoint =============================================== -->
- <entry-point class="cc.kune.client.KuneEntryPoint" />
+ <entry-point class="cc.kune.client.KuneEntryPoint"/>
<!-- <entry-point class="cc.kune.common.client.SampleEntryPoint" /> -->
</module>
Modified: trunk/src/main/java/cc/kune/barters/server/BarterServerTool.java
===================================================================
--- trunk/src/main/java/cc/kune/barters/server/BarterServerTool.java 2011-07-27 14:27:34 UTC (rev 1467)
+++ trunk/src/main/java/cc/kune/barters/server/BarterServerTool.java 2011-07-28 14:07:43 UTC (rev 1468)
@@ -51,7 +51,7 @@
public class BarterServerTool implements ServerWaveTool {
- private static final String BARTER_GADGET = "http://op-org.appspot.com/troco_wave_gadget/org.ourproject.troco.client.Tro…";
+ private static final String BARTER_GADGET = "http://troco.ourproject.org/gadget/org.ourproject.troco.client.TrocoWaveGad…";
private final ToolConfigurationManager configurationManager;
private final ContainerManager containerManager;
private final ContentManager contentManager;
Modified: trunk/src/main/java/cc/kune/core/client/dnd/KuneDragController.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/dnd/KuneDragController.java 2011-07-27 14:27:34 UTC (rev 1467)
+++ trunk/src/main/java/cc/kune/core/client/dnd/KuneDragController.java 2011-07-28 14:07:43 UTC (rev 1468)
@@ -14,6 +14,7 @@
super(RootPanel.get(), false);
setBehaviorDragProxy(true);
setBehaviorMultipleSelection(false);
+ setBehaviorScrollIntoView(false);
setBehaviorDragStartSensitivity(5);
Window.addResizeHandler(new ResizeHandler() {
Modified: trunk/src/main/java/cc/kune/gspace/client/GSpaceArmor.java
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/GSpaceArmor.java 2011-07-27 14:27:34 UTC (rev 1467)
+++ trunk/src/main/java/cc/kune/gspace/client/GSpaceArmor.java 2011-07-28 14:07:43 UTC (rev 1468)
@@ -28,6 +28,8 @@
void clearBackImage();
+ void enableCenterScroll(boolean enable);
+
ForIsWidget getDocContainer();
ForIsWidget getDocFooter();
Modified: trunk/src/main/java/cc/kune/gspace/client/GSpaceArmorImpl.java
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/GSpaceArmorImpl.java 2011-07-27 14:27:34 UTC (rev 1467)
+++ trunk/src/main/java/cc/kune/gspace/client/GSpaceArmorImpl.java 2011-07-28 14:07:43 UTC (rev 1468)
@@ -25,6 +25,7 @@
import cc.kune.common.client.actions.ui.IsActionExtensible;
import com.google.gwt.core.client.GWT;
+import com.google.gwt.dom.client.Style.Overflow;
import com.google.gwt.dom.client.Style.Position;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
@@ -35,6 +36,7 @@
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.InsertPanel.ForIsWidget;
import com.google.gwt.user.client.ui.RootPanel;
+import com.google.gwt.user.client.ui.ScrollPanel;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.SplitLayoutPanel;
import com.google.gwt.user.client.ui.TabLayoutPanel;
@@ -51,8 +53,10 @@
private static WsArmorImplUiBinder uiBinder = GWT.create(WsArmorImplUiBinder.class);
@UiField
- VerticalPanel docContainer;
+ ScrollPanel centerScroll;
@UiField
+ FlowPanel docContainer;
+ @UiField
DockLayoutPanel docContainerParent;
@UiField
FlowPanel docFooter;
@@ -112,6 +116,7 @@
entityToolsNorth.getElement().getStyle().setPosition(Position.RELATIVE);
// entityToolsSouth.setVisible(false);
mainpanel.getWidgetContainerElement(tabs).addClassName("k-spaces");
+ enableCenterScroll(true);
}
@Override
@@ -120,6 +125,20 @@
}
@Override
+ public void enableCenterScroll(final boolean enable) {
+ if (enable) {
+ centerScroll.setAlwaysShowScrollBars(false);
+ DOM.setStyleAttribute(centerScroll.getElement(), "position", "absolute");
+ DOM.setStyleAttribute((Element) centerScroll.getElement().getFirstChildElement(), "position",
+ "relative");
+ } else {
+ centerScroll.getElement().getStyle().setOverflow(Overflow.HIDDEN);
+ DOM.setStyleAttribute(centerScroll.getElement(), "position", "");
+ DOM.setStyleAttribute((Element) centerScroll.getElement().getFirstChildElement(), "position", "");
+ }
+ }
+
+ @Override
public ForIsWidget getDocContainer() {
return docContainer;
}
Modified: trunk/src/main/java/cc/kune/gspace/client/GSpaceArmorImpl.ui.xml
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/GSpaceArmorImpl.ui.xml 2011-07-27 14:27:34 UTC (rev 1467)
+++ trunk/src/main/java/cc/kune/gspace/client/GSpaceArmorImpl.ui.xml 2011-07-28 14:07:43 UTC (rev 1468)
@@ -65,9 +65,8 @@
<g:SimplePanel />
</g:east>
<g:center>
- <g:ScrollPanel styleName="{res.style.docEditor}">
- <g:VerticalPanel width="100%"
- height="100%" ui:field="docContainer"></g:VerticalPanel>
+ <g:ScrollPanel ui:field="centerScroll" styleName="{res.style.docEditor}">
+ <g:FlowPanel width="auto" height="auto" styleName="{res.style.docEditorContainer}" ui:field="docContainer" />
</g:ScrollPanel>
</g:center>
<g:south size="33.0">
Modified: trunk/src/main/java/cc/kune/gspace/client/resources/GSpaceArmorResources.java
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/resources/GSpaceArmorResources.java 2011-07-27 14:27:34 UTC (rev 1467)
+++ trunk/src/main/java/cc/kune/gspace/client/resources/GSpaceArmorResources.java 2011-07-28 14:07:43 UTC (rev 1468)
@@ -28,6 +28,8 @@
String docEditor();
+ String docEditorContainer();
+
String docEditorMargin();
String docFooter();
Modified: trunk/src/main/java/cc/kune/gspace/client/resources/gSpaceArmor.css
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/resources/gSpaceArmor.css 2011-07-27 14:27:34 UTC (rev 1467)
+++ trunk/src/main/java/cc/kune/gspace/client/resources/gSpaceArmor.css 2011-07-28 14:07:43 UTC (rev 1468)
@@ -7,7 +7,7 @@
.mainPanel {
border-top: 2px solid white;
-/* border-bottom: 7px solid transparent;
+ /* border-bottom: 7px solid transparent;
border-right: 17px solid transparent;
border-left: 17px solid transparent; */
}
@@ -18,6 +18,7 @@
}
.k-space {
+
}
.floatRight {
@@ -37,6 +38,7 @@
.entityCentralContainer {
}
+
.entityHeader {
-webkit-border-top-right-radius: 7px;
-moz-border-radius-topright: 7px;
@@ -137,12 +139,36 @@
-webkit-border-top-right-radius: 7px;
-moz-border-radius-topright: 7px;
border-top-right-radius: 7px;
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ right: 0;
}
+.docEditorContainer {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ -webkit-border-top-left-radius: 7px;
+ -moz-border-radius-topleft: 7px;
+ border-top-left-radius: 7px;
+ -webkit-border-top-right-radius: 7px;
+ -moz-border-radius-topright: 7px;
+ border-top-right-radius: 7px;
+}
+
+/* Fix wave scroll problem
.docEditor div {
overflow-y: visible;
}
+div.docEditor div {
+ position: static;
+}
+*/
.docFooter {
border-left: 1px solid #959595;
border-right: 1px solid #959595;
Modified: trunk/src/main/java/cc/kune/gspace/client/viewers/AbstractFolderViewerPanel.java
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/viewers/AbstractFolderViewerPanel.java 2011-07-27 14:27:34 UTC (rev 1467)
+++ trunk/src/main/java/cc/kune/gspace/client/viewers/AbstractFolderViewerPanel.java 2011-07-28 14:07:43 UTC (rev 1468)
@@ -75,6 +75,7 @@
public void attach() {
final ForIsWidget docContainer = gsArmor.getDocContainer();
docContainer.add(widget);
+ gsArmor.enableCenterScroll(true);
}
@Override
Modified: trunk/src/main/java/cc/kune/gspace/client/viewers/ContentViewerPanel.java
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/viewers/ContentViewerPanel.java 2011-07-27 14:27:34 UTC (rev 1467)
+++ trunk/src/main/java/cc/kune/gspace/client/viewers/ContentViewerPanel.java 2011-07-28 14:07:43 UTC (rev 1468)
@@ -22,7 +22,6 @@
import org.waveprotocol.box.webclient.client.ClientIdGenerator;
import org.waveprotocol.box.webclient.client.RemoteViewServiceMultiplexer;
import org.waveprotocol.box.webclient.client.SimpleWaveStore;
-import org.waveprotocol.box.webclient.client.StagesProvider;
import org.waveprotocol.box.webclient.search.WaveStore;
import org.waveprotocol.wave.client.account.ProfileManager;
import org.waveprotocol.wave.client.widget.common.ImplPanel;
@@ -40,6 +39,7 @@
import cc.kune.core.shared.i18n.I18nTranslationService;
import cc.kune.gspace.client.GSpaceArmor;
import cc.kune.gspace.client.viewers.ContentViewerPresenter.ContentViewerView;
+import cc.kune.wave.client.KuneStagesProvider;
import cc.kune.wave.client.WaveClientClearEvent;
import cc.kune.wave.client.WaveClientManager;
import cc.kune.wave.client.WebClient;
@@ -56,18 +56,17 @@
import com.google.gwt.user.client.ui.DeckPanel;
import com.google.gwt.user.client.ui.InlineHTML;
import com.google.gwt.user.client.ui.InsertPanel.ForIsWidget;
-import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.google.inject.Inject;
import com.gwtplatform.mvp.client.ViewImpl;
public class ContentViewerPanel extends ViewImpl implements ContentViewerView {
- interface DocsViewerPanelUiBinder extends UiBinder<Widget, ContentViewerPanel> {
+ interface ContentViewerPanelUiBinder extends UiBinder<Widget, ContentViewerPanel> {
}
private static final RemoteViewServiceMultiplexer NO_CHANNEL = null;
- private static DocsViewerPanelUiBinder uiBinder = GWT.create(DocsViewerPanelUiBinder.class);
+ private static ContentViewerPanelUiBinder uiBinder = GWT.create(ContentViewerPanelUiBinder.class);
private final ContentCapabilitiesRegistry capabilitiesRegistry;
private RemoteViewServiceMultiplexer channel;
@@ -81,12 +80,12 @@
InlineHTML onlyViewPanel;
private ProfileManager profiles;
/** The wave panel, if a wave is open. */
- private StagesProvider wave;
+ private KuneStagesProvider wave;
private final WaveClientManager waveClient;
private ImplPanel waveHolder;
@UiField
- VerticalPanel waveHolderParent;
+ ImplPanel waveHolderParent;
private final WaveStore waveStore = new SimpleWaveStore();
@@ -176,6 +175,7 @@
@Override
public void setContent(final StateContentDTO state) {
final boolean editable = state.getContentRights().isEditable();
+ gsArmor.enableCenterScroll(true);
setTitle(state, editable);
onlyViewPanel.setHTML(SafeHtmlUtils.fromTrustedString(state.getContent()));
deck.showWidget(1);
@@ -183,6 +183,7 @@
@Override
public void setEditableContent(final StateContentDTO state) {
+ gsArmor.enableCenterScroll(false);
setTitle(state, true);
setEditableWaveContent(state.getWaveRef(), false);
deck.showWidget(0);
@@ -211,8 +212,9 @@
// UIObject.setVisible(waveFrame.getElement(), true);
waveHolder.getElement().appendChild(loading);
final Element holder = waveHolder.getElement().appendChild(Document.get().createDivElement());
- final StagesProvider wave = new StagesProvider(holder, waveHolder, waveRef, channel, idGenerator,
- profiles, waveStore, isNewWave, org.waveprotocol.box.webclient.client.Session.get().getDomain());
+ final KuneStagesProvider wave = new KuneStagesProvider(holder, waveHolder, waveRef, channel,
+ idGenerator, profiles, waveStore, isNewWave,
+ org.waveprotocol.box.webclient.client.Session.get().getDomain(), true);
this.wave = wave;
wave.load(new Command() {
@Override
Modified: trunk/src/main/java/cc/kune/gspace/client/viewers/ContentViewerPanel.ui.xml
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/viewers/ContentViewerPanel.ui.xml 2011-07-27 14:27:34 UTC (rev 1467)
+++ trunk/src/main/java/cc/kune/gspace/client/viewers/ContentViewerPanel.ui.xml 2011-07-28 14:07:43 UTC (rev 1468)
@@ -25,14 +25,12 @@
}
</ui:style>
- <g:HTMLPanel>
- <g:DeckPanel ui:field="deck" addStyleNames="k-doc-content-deck">
- <!-- <w:ImplPanel ui:field="waveHolder" addStyleNames="{style.waveHolder}"
- /> -->
- <g:VerticalPanel ui:field="waveHolderParent" />
- <g:FlowPanel ui:field="onlyViewParent" height="auto" width="auto" addStyleNames="{style.onlyparent}">
- <g:InlineHTML ui:field="onlyViewPanel" styleName="{style.viewonly}" />
- </g:FlowPanel>
- </g:DeckPanel>
- </g:HTMLPanel>
+ <g:DeckPanel ui:field="deck"
+ addStyleNames="{style.waveHolder} k-doc-content-deck">
+ <w:ImplPanel ui:field="waveHolderParent" addStyleNames="{style.waveHolder}"/>
+ <!-- <g:VerticalPanel ui:field="waveHolderParent" /> -->
+ <g:FlowPanel ui:field="onlyViewParent" height="auto" width="auto" addStyleNames="{style.onlyparent}">
+ <g:InlineHTML ui:field="onlyViewPanel" styleName="{style.viewonly}"/>
+ </g:FlowPanel>
+ </g:DeckPanel>
</ui:UiBinder>
\ No newline at end of file
Modified: trunk/src/main/java/cc/kune/gspace/client/viewers/FolderViewerAsTablePanel.java
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/viewers/FolderViewerAsTablePanel.java 2011-07-27 14:27:34 UTC (rev 1467)
+++ trunk/src/main/java/cc/kune/gspace/client/viewers/FolderViewerAsTablePanel.java 2011-07-28 14:07:43 UTC (rev 1468)
@@ -112,30 +112,30 @@
// menu.hide();
}
});
+ final MenuDescriptor menu = new MenuDescriptor(i18n.t("Actions"));
+ menu.withIcon(res.arrowdown()).withStyles("k-def-docbtn, k-btn, k-button");
+ menu.setStandalone(false);
+ toolbar.add(menu);
+ final GuiActionDescCollection actions = item.getActionCollection();
+ toolbar.setVisible(actions.size() > 0);
+ itemWidget.setMenuVisible(false);
+
itemWidget.getRowMouse().addMouseOverHandler(new MouseOverHandler() {
- MenuDescriptor menu;
+ boolean initialized = false;
- private MenuDescriptor createMenu(final FolderItemDescriptor item,
- final FolderItemWidget itemWidget, final ActionSimplePanel toolbar) {
- MenuDescriptor menu;
- menu = new MenuDescriptor(i18n.t("Actions"));
- menu.withIcon(res.arrowdown()).withStyles("k-def-docbtn, k-btn, k-button");
- menu.setStandalone(false);
- itemWidget.setMenuVisible(false);
- toolbar.add(menu);
- final GuiActionDescCollection actions = item.getActionCollection();
- toolbar.setVisible(actions.size() > 0);
+ private void init(final FolderItemDescriptor item, final FolderItemWidget itemWidget,
+ final ActionSimplePanel toolbar) {
for (final GuiActionDescrip menuItem : actions) {
menuItem.setParent(menu);
toolbar.add(menuItem);
}
- return menu;
}
@Override
public void onMouseOver(final MouseOverEvent event) {
- if (menu == null) {
- menu = createMenu(item, itemWidget, toolbar);
+ if (!initialized) {
+ init(item, itemWidget, toolbar);
+ initialized = true;
}
// menu.setVisible(true);
itemWidget.setMenuVisible(true);
Added: trunk/src/main/java/cc/kune/wave/client/KuneConversation.css
===================================================================
--- trunk/src/main/java/cc/kune/wave/client/KuneConversation.css (rev 0)
+++ trunk/src/main/java/cc/kune/wave/client/KuneConversation.css 2011-07-28 14:07:43 UTC (rev 1468)
@@ -0,0 +1,30 @@
+/*
+ * CSS for conversations.
+ *
+ * Author: reuben(a)google.com (Reuben Kan)
+ */
+.fixedSelf {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ z-index: 0;
+}
+
+@sprite .toolbar {
+ gwt-image: 'emptyToolbar';
+}
+
+.fixedThread { /*
+ * Allow scrolling. Also, keep the scrollbar there permanently, so that content does not get
+ * horizontally resized by the addition and removal of a scrollbar.
+ */
+ overflow-y: scroll;
+ /* position: absolute; */ /* position: relative; */
+ /* top: 24px; */
+ top: 0;
+ /* left: 0; */ /* right: 0; */ /* bottom: 0; */
+ /* Layout under siblings (participant panel etc). */
+ z-index: -1;
+}
\ No newline at end of file
Added: trunk/src/main/java/cc/kune/wave/client/KuneFullDomRenderer.java
===================================================================
--- trunk/src/main/java/cc/kune/wave/client/KuneFullDomRenderer.java (rev 0)
+++ trunk/src/main/java/cc/kune/wave/client/KuneFullDomRenderer.java 2011-07-28 14:07:43 UTC (rev 1468)
@@ -0,0 +1,253 @@
+// @formatter:off
+/**
+ * Copyright 2010 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package cc.kune.wave.client;
+
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+import org.waveprotocol.wave.client.account.Profile;
+import org.waveprotocol.wave.client.account.ProfileManager;
+import org.waveprotocol.wave.client.common.safehtml.EscapeUtils;
+import org.waveprotocol.wave.client.common.safehtml.SafeHtmlBuilder;
+import org.waveprotocol.wave.client.render.RenderingRules;
+import org.waveprotocol.wave.client.state.ThreadReadStateMonitor;
+import org.waveprotocol.wave.client.uibuilder.HtmlClosure;
+import org.waveprotocol.wave.client.uibuilder.HtmlClosureCollection;
+import org.waveprotocol.wave.client.uibuilder.UiBuilder;
+import org.waveprotocol.wave.client.wavepanel.render.ShallowBlipRenderer;
+import org.waveprotocol.wave.client.wavepanel.view.ViewIdMapper;
+import org.waveprotocol.wave.client.wavepanel.view.dom.full.AnchorViewBuilder;
+import org.waveprotocol.wave.client.wavepanel.view.dom.full.BlipMetaViewBuilder;
+import org.waveprotocol.wave.client.wavepanel.view.dom.full.BlipViewBuilder;
+import org.waveprotocol.wave.client.wavepanel.view.dom.full.ContinuationIndicatorViewBuilder;
+import org.waveprotocol.wave.client.wavepanel.view.dom.full.InlineThreadViewBuilder;
+import org.waveprotocol.wave.client.wavepanel.view.dom.full.ParticipantAvatarViewBuilder;
+import org.waveprotocol.wave.client.wavepanel.view.dom.full.ParticipantsViewBuilder;
+import org.waveprotocol.wave.client.wavepanel.view.dom.full.ReplyBoxViewBuilder;
+import org.waveprotocol.wave.client.wavepanel.view.dom.full.RootThreadViewBuilder;
+import org.waveprotocol.wave.client.wavepanel.view.dom.full.ViewFactory;
+import org.waveprotocol.wave.model.conversation.Conversation;
+import org.waveprotocol.wave.model.conversation.ConversationBlip;
+import org.waveprotocol.wave.model.conversation.ConversationThread;
+import org.waveprotocol.wave.model.conversation.ConversationView;
+import org.waveprotocol.wave.model.util.CollectionUtils;
+import org.waveprotocol.wave.model.util.IdentityMap;
+import org.waveprotocol.wave.model.util.IdentityMap.ProcV;
+import org.waveprotocol.wave.model.util.IdentityMap.Reduce;
+import org.waveprotocol.wave.model.util.StringMap;
+import org.waveprotocol.wave.model.wave.ParticipantId;
+
+
+/**
+ * Renders conversational objects with UiBuilders.
+ *
+ */
+public final class KuneFullDomRenderer implements RenderingRules<UiBuilder> {
+
+ public interface DocRefRenderer {
+ DocRefRenderer EMPTY = new DocRefRenderer() {
+ @Override
+ public UiBuilder render(final ConversationBlip blip,
+ final IdentityMap<ConversationThread, UiBuilder> replies) {
+ return UiBuilder.Constant.of(EscapeUtils.fromSafeConstant("<div></div>"));
+ }
+ };
+
+ UiBuilder render(ConversationBlip blip,
+ IdentityMap<ConversationThread, UiBuilder> replies);
+ }
+
+ public interface ParticipantsRenderer {
+ ParticipantsRenderer EMPTY = new ParticipantsRenderer() {
+ @Override
+ public UiBuilder render(final Conversation c) {
+ return UiBuilder.Constant.of(EscapeUtils.fromSafeConstant("<div></div>"));
+ }
+ };
+
+ UiBuilder render(Conversation c);
+ }
+
+ private final ShallowBlipRenderer blipPopulator;
+ private final DocRefRenderer docRenderer;
+ private final ProfileManager profileManager;
+ private final ThreadReadStateMonitor readMonitor;
+ private final ViewFactory viewFactory;
+ private final ViewIdMapper viewIdMapper;
+ private final boolean showParticipantsPanel;
+
+ public KuneFullDomRenderer(final ShallowBlipRenderer blipPopulator, final DocRefRenderer docRenderer,
+ final ProfileManager profileManager, final ViewIdMapper viewIdMapper, final ViewFactory viewFactory,
+ final ThreadReadStateMonitor readMonitor, boolean showParticipantsPanel) {
+ this.blipPopulator = blipPopulator;
+ this.docRenderer = docRenderer;
+ this.profileManager = profileManager;
+ this.viewIdMapper = viewIdMapper;
+ this.viewFactory = viewFactory;
+ this.readMonitor = readMonitor;
+ this.showParticipantsPanel = showParticipantsPanel;
+ }
+
+ public UiBuilder getFirstConversation(final IdentityMap<Conversation, UiBuilder> conversations) {
+ return conversations.reduce(null, new Reduce<Conversation, UiBuilder, UiBuilder>() {
+ @Override
+ public UiBuilder apply(final UiBuilder soFar, final Conversation key, final UiBuilder item) {
+ // Pick the first rendering (any will do).
+ return soFar == null ? item : soFar;
+ }
+ });
+ }
+
+ @Override
+ public UiBuilder render(final Conversation conversation, final ParticipantId participant) {
+ final Profile profile = profileManager.getProfile(participant);
+ final String id = viewIdMapper.participantOf(conversation, participant);
+ // Use ParticipantAvatarViewBuilder for avatars.
+ // Kune patch
+ // final ParticipantNameViewBuilder participantUi = ParticipantNameViewBuilder.create(id);
+ final ParticipantAvatarViewBuilder participantUi = ParticipantAvatarViewBuilder.create(id);
+ participantUi.setAvatar(profile.getImageUrl());
+ participantUi.setName(profile.getFullName());
+ return participantUi;
+ }
+
+ @Override
+ public UiBuilder render(final Conversation conversation, final StringMap<UiBuilder> participantUis) {
+ final HtmlClosureCollection participantsUi = new HtmlClosureCollection();
+ for (final ParticipantId participant : conversation.getParticipantIds()) {
+ participantsUi.add(participantUis.get(participant.getAddress()));
+ }
+ final String id = viewIdMapper.participantsOf(conversation);
+ // Kune patch (but not used)
+ return showParticipantsPanel? ParticipantsViewBuilder.create(id, participantsUi): new UiBuilder() {
+ @Override
+ public void outputHtml(SafeHtmlBuilder arg0) {
+ // Don't show nothing
+ }};
+ }
+
+ @Override
+ public UiBuilder render(final Conversation conversation, final UiBuilder participantsUi, final UiBuilder threadUi) {
+ final String id = viewIdMapper.conversationOf(conversation);
+ final boolean isTop = !conversation.hasAnchor();
+ return isTop ? viewFactory.createTopConversationView(id, threadUi, participantsUi)
+ : viewFactory.createInlineConversationView(id, threadUi, participantsUi);
+ }
+
+ /**
+ */
+ @Override
+ public UiBuilder render(
+ final ConversationBlip blip, final IdentityMap<ConversationThread, UiBuilder> replies) {
+ return docRenderer.render(blip, replies);
+ }
+
+ @Override
+ public UiBuilder render(final ConversationBlip blip, final UiBuilder document,
+ final IdentityMap<ConversationThread, UiBuilder> anchorUis,
+ final IdentityMap<Conversation, UiBuilder> nestedConversations) {
+ final UiBuilder threadsUi = new UiBuilder() {
+ @Override
+ public void outputHtml(final SafeHtmlBuilder out) {
+ for (final ConversationThread thread : blip.getReplyThreads()) {
+ anchorUis.get(thread).outputHtml(out);
+ }
+ }
+ };
+
+ final UiBuilder convsUi = new UiBuilder() {
+ @Override
+ public void outputHtml(final SafeHtmlBuilder out) {
+ // Order by conversation id. Ideally, the sort key would be creation
+ // time, but that is not exposed in the conversation API.
+ final List<Conversation> ordered = CollectionUtils.newArrayList();
+ nestedConversations.each(new ProcV<Conversation, UiBuilder>() {
+ @Override
+ public void apply(final Conversation conv, final UiBuilder ui) {
+ ordered.add(conv);
+ }
+ });
+ Collections.sort(ordered, new Comparator<Conversation>() {
+ @Override
+ public int compare(final Conversation o1, final Conversation o2) {
+ return o1.getId().compareTo(o2.getId());
+ }
+ });
+ final List<UiBuilder> orderedUis = CollectionUtils.newArrayList();
+ for (final Conversation conv : ordered) {
+ nestedConversations.get(conv).outputHtml(out);
+ }
+ }
+ };
+
+ final BlipMetaViewBuilder metaUi = BlipMetaViewBuilder.create(viewIdMapper.metaOf(blip), document);
+ blipPopulator.render(blip, metaUi);
+
+ return BlipViewBuilder.create(viewIdMapper.blipOf(blip), metaUi, threadsUi, convsUi);
+ }
+
+ @Override
+ public UiBuilder render(final ConversationThread thread,
+ final IdentityMap<ConversationBlip, UiBuilder> blipUis) {
+ final HtmlClosure blipsUi = new HtmlClosure() {
+ @Override
+ public void outputHtml(final SafeHtmlBuilder out) {
+ for (final ConversationBlip blip : thread.getBlips()) {
+ final UiBuilder blipUi = blipUis.get(blip);
+ // Not all blips are rendered.
+ if (blipUi != null) {
+ blipUi.outputHtml(out);
+ }
+ }
+ }
+ };
+ final String threadId = viewIdMapper.threadOf(thread);
+ final String replyIndicatorId = viewIdMapper.replyIndicatorOf(thread);
+ UiBuilder builder = null;
+ if (thread.getConversation().getRootThread() == thread) {
+ final ReplyBoxViewBuilder replyBoxBuilder =
+ ReplyBoxViewBuilder.create(replyIndicatorId);
+ builder = RootThreadViewBuilder.create(threadId, blipsUi, replyBoxBuilder);
+ } else {
+ final ContinuationIndicatorViewBuilder indicatorBuilder = ContinuationIndicatorViewBuilder.create(
+ replyIndicatorId);
+ final InlineThreadViewBuilder inlineBuilder =
+ InlineThreadViewBuilder.create(threadId, blipsUi, indicatorBuilder);
+ final int read = readMonitor.getReadCount(thread);
+ final int unread = readMonitor.getUnreadCount(thread);
+ inlineBuilder.setTotalBlipCount(read + unread);
+ inlineBuilder.setUnreadBlipCount(unread);
+ builder = inlineBuilder;
+ }
+ return builder;
+ }
+
+ @Override
+ public UiBuilder render(final ConversationThread thread, final UiBuilder threadR) {
+ final String id = EscapeUtils.htmlEscape(viewIdMapper.defaultAnchorOf(thread));
+ return AnchorViewBuilder.create(id, threadR);
+ }
+
+ @Override
+ public UiBuilder render(final ConversationView wave,
+ final IdentityMap<Conversation, UiBuilder> conversations) {
+ // return the first conversation in the view.
+ // TODO(hearnden): select the 'best' conversation.
+ return conversations.isEmpty() ? null : getFirstConversation(conversations);
+ }
+}
Added: trunk/src/main/java/cc/kune/wave/client/KuneFullDomWaveRendererImpl.java
===================================================================
--- trunk/src/main/java/cc/kune/wave/client/KuneFullDomWaveRendererImpl.java (rev 0)
+++ trunk/src/main/java/cc/kune/wave/client/KuneFullDomWaveRendererImpl.java 2011-07-28 14:07:43 UTC (rev 1468)
@@ -0,0 +1,118 @@
+// @formatter:off
+/**
+ * Copyright 2010 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package cc.kune.wave.client;
+
+import org.waveprotocol.wave.client.account.ProfileManager;
+import org.waveprotocol.wave.client.common.safehtml.SafeHtmlBuilder;
+import org.waveprotocol.wave.client.render.ReductionBasedRenderer;
+import org.waveprotocol.wave.client.render.RenderingRules;
+import org.waveprotocol.wave.client.render.WaveRenderer;
+import org.waveprotocol.wave.client.state.ThreadReadStateMonitor;
+import org.waveprotocol.wave.client.uibuilder.UiBuilder;
+import org.waveprotocol.wave.client.wavepanel.render.ShallowBlipRenderer;
+import org.waveprotocol.wave.client.wavepanel.view.ViewIdMapper;
+import org.waveprotocol.wave.client.wavepanel.view.dom.full.BlipQueueRenderer;
+import org.waveprotocol.wave.client.wavepanel.view.dom.full.DomRenderer;
+import org.waveprotocol.wave.client.wavepanel.view.dom.full.ViewFactory;
+import org.waveprotocol.wave.model.conversation.Conversation;
+import org.waveprotocol.wave.model.conversation.ConversationBlip;
+import org.waveprotocol.wave.model.conversation.ConversationThread;
+import org.waveprotocol.wave.model.conversation.ConversationView;
+import org.waveprotocol.wave.model.util.IdentityMap;
+import org.waveprotocol.wave.model.wave.ParticipantId;
+
+import com.google.gwt.dom.client.Element;
+
+/**
+ * Renders waves into HTML DOM, given a renderer that renders waves as HTML
+ * closures.
+ *
+ */
+public final class KuneFullDomWaveRendererImpl implements DomRenderer {
+
+ public static DomRenderer create(final ConversationView wave, final ProfileManager profileManager,
+ final ShallowBlipRenderer shallowRenderer, final ViewIdMapper idMapper, final BlipQueueRenderer pager,
+ final ThreadReadStateMonitor readMonitor, final ViewFactory views, final boolean showParticipantsPanel) {
+ // Kune patch
+ final KuneFullDomRenderer.DocRefRenderer docRenderer = new KuneFullDomRenderer.DocRefRenderer() {
+
+ @Override
+ public UiBuilder render(
+ final ConversationBlip blip, final IdentityMap<ConversationThread, UiBuilder> replies) {
+ // Documents are rendered blank, and filled in later when they get paged
+ // in.
+ pager.add(blip);
+ return KuneFullDomRenderer.DocRefRenderer.EMPTY.render(blip, replies);
+ }
+ };
+ // Kune patch
+ final RenderingRules<UiBuilder> rules = new KuneFullDomRenderer(
+ shallowRenderer, docRenderer, profileManager, idMapper, views, readMonitor, showParticipantsPanel);
+ return new KuneFullDomWaveRendererImpl(ReductionBasedRenderer.of(rules, wave));
+ }
+
+ private final WaveRenderer<UiBuilder> driver;
+
+ private KuneFullDomWaveRendererImpl(final WaveRenderer<UiBuilder> driver) {
+ this.driver = driver;
+ }
+
+ //
+ // Temporary invokers. Anti-parser API will remove these methods.
+ //
+
+ /** Turns a UiBuilder rendering into a DOM element. */
+ private Element parseHtml(final UiBuilder ui) {
+ if (ui == null) {
+ return null;
+ }
+ final SafeHtmlBuilder html = new SafeHtmlBuilder();
+ ui.outputHtml(html);
+ final Element div = com.google.gwt.dom.client.Document.get().createDivElement();
+ div.setInnerHTML(html.toSafeHtml().asString());
+ final Element ret = div.getFirstChildElement();
+ // Detach, in order that this element looks free-floating (required by some
+ // preconditions).
+ ret.removeFromParent();
+ return ret;
+ }
+
+ @Override
+ public Element render(final Conversation conversation) {
+ return parseHtml(driver.render(conversation));
+ }
+
+ @Override
+ public Element render(final Conversation conversation, final ParticipantId participant) {
+ return parseHtml(driver.render(conversation, participant));
+ }
+
+ @Override
+ public Element render(final ConversationBlip blip) {
+ return parseHtml(driver.render(blip));
+ }
+
+ @Override
+ public Element render(final ConversationThread thread) {
+ return parseHtml(driver.render(thread));
+ }
+
+ @Override
+ public Element render(final ConversationView wave) {
+ return parseHtml(driver.render(wave));
+ }
+}
Added: trunk/src/main/java/cc/kune/wave/client/KuneStagesProvider.java
===================================================================
--- trunk/src/main/java/cc/kune/wave/client/KuneStagesProvider.java (rev 0)
+++ trunk/src/main/java/cc/kune/wave/client/KuneStagesProvider.java 2011-07-28 14:07:43 UTC (rev 1468)
@@ -0,0 +1,253 @@
+// @formatter:off
+/**
+ * Copyright 2010 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+
+package cc.kune.wave.client;
+
+import org.waveprotocol.box.webclient.client.RemoteViewServiceMultiplexer;
+import org.waveprotocol.box.webclient.client.StageTwoProvider;
+import org.waveprotocol.box.webclient.search.WaveContext;
+import org.waveprotocol.box.webclient.search.WaveStore;
+import org.waveprotocol.wave.client.StageOne;
+import org.waveprotocol.wave.client.StageThree;
+import org.waveprotocol.wave.client.StageTwo;
+import org.waveprotocol.wave.client.StageZero;
+import org.waveprotocol.wave.client.Stages;
+import org.waveprotocol.wave.client.account.ProfileManager;
+import org.waveprotocol.wave.client.common.util.AsyncHolder;
+import org.waveprotocol.wave.client.common.util.AsyncHolder.Accessor;
+import org.waveprotocol.wave.client.common.util.LogicalPanel;
+import org.waveprotocol.wave.client.wavepanel.view.BlipView;
+import org.waveprotocol.wave.client.wavepanel.view.dom.ModelAsViewProvider;
+import org.waveprotocol.wave.client.wavepanel.view.dom.full.BlipQueueRenderer;
+import org.waveprotocol.wave.client.wavepanel.view.dom.full.DomRenderer;
+import org.waveprotocol.wave.client.wavepanel.view.dom.full.WavePanelResourceLoader;
+import org.waveprotocol.wave.model.conversation.Conversation;
+import org.waveprotocol.wave.model.conversation.ConversationBlip;
+import org.waveprotocol.wave.model.conversation.ConversationView;
+import org.waveprotocol.wave.model.id.IdGenerator;
+import org.waveprotocol.wave.model.id.ModernIdSerialiser;
+import org.waveprotocol.wave.model.waveref.WaveRef;
+
+import com.google.gwt.dom.client.Element;
+
+/**
+ * Stages for loading the undercurrent Wave Panel
+ *
+ * @author zdwang(a)google.com (David Wang)
+ */
+public class KuneStagesProvider extends Stages {
+
+ private final static AsyncHolder<Object> HALT = new AsyncHolder<Object>() {
+ @Override
+ public void call(final Accessor<Object> accessor) {
+ // Never ready, so never notify the accessor.
+ }
+ };
+
+ private final RemoteViewServiceMultiplexer channel;
+ private boolean closed;
+ private final IdGenerator idGenerator;
+ private final boolean isNewWave;
+ private final String localDomain;
+ private StageOne one;
+ private final ProfileManager profiles;
+ private final LogicalPanel rootPanel;
+
+ private final boolean showParticipantsPanel;
+ private StageThree three;
+ private StageTwo two;
+ private WaveContext wave;
+ private final Element wavePanelElement;
+ private final WaveRef waveRef;
+ private final WaveStore waveStore;
+
+ /**
+ * @param wavePanelElement The dom element to become the wave panel
+ * @param rootPanel A panel that this an ancestor of wavePanelElement. This is
+ * used for adopting to the GWT widget tree.
+ * @param waveRef the id of the wave to open. If null, it means, create a new
+ * wave.
+ * @param channel communication channel.
+ * @param isNewWave true if the wave is a new client-created wave
+ * @param idGenerator
+ */
+ public KuneStagesProvider(final Element wavePanelElement, final LogicalPanel rootPanel, final WaveRef waveRef,
+ final RemoteViewServiceMultiplexer channel, final IdGenerator idGenerator, final ProfileManager profiles,
+ final WaveStore store, final boolean isNewWave, final String localDomain, final boolean showParticipantsPanel) {
+ this.wavePanelElement = wavePanelElement;
+ this.rootPanel = rootPanel;
+ this.waveRef = waveRef;
+ this.channel = channel;
+ this.idGenerator = idGenerator;
+ this.profiles = profiles;
+ this.waveStore = store;
+ this.isNewWave = isNewWave;
+ this.localDomain = localDomain;
+ this.showParticipantsPanel = showParticipantsPanel;
+ }
+
+ @Override
+ protected AsyncHolder<StageOne> createStageOneLoader(final StageZero zero) {
+ return haltIfClosed(new StageOne.DefaultProvider(zero) {
+ @Override
+ protected LogicalPanel createWaveContainer() {
+ return rootPanel;
+ }
+
+ @Override
+ protected Element createWaveHolder() {
+ return wavePanelElement;
+ }
+ });
+ }
+
+ @Override
+ protected AsyncHolder<StageThree> createStageThreeLoader(final StageTwo two) {
+ return haltIfClosed(new StageThree.DefaultProvider(this.two = two) {
+ @Override
+ protected void create(final Accessor<StageThree> whenReady) {
+ // Prepend an init wave flow onto the stage continuation.
+ super.create(new Accessor<StageThree>() {
+ @Override
+ public void use(final StageThree x) {
+ onStageThreeLoaded(x, whenReady);
+ }
+ });
+ }
+
+ @Override
+ protected String getLocalDomain() {
+ return localDomain;
+ }
+ });
+ }
+
+ @Override
+ // Kune patch
+ protected AsyncHolder<StageTwo> createStageTwoLoader(final StageOne one) {
+ return haltIfClosed(new StageTwoProvider(
+ this.one = one, waveRef.getWaveId(), channel, isNewWave, idGenerator, profiles) {
+ @Override
+ protected DomRenderer createRenderer() {
+ return KuneFullDomWaveRendererImpl.create(getConversations(), getProfileManager(),
+ getBlipDetailer(), getViewIdMapper(), getBlipQueue(), getThreadReadStateMonitor(),
+ createViewFactories(), showParticipantsPanel);
+ }
+
+ @Override
+ protected void installFeatures() {
+ WavePanelResourceLoader.loadCss();
+ // KuneWavePanelResourceLoader.loadCss();
+ }
+ });
+ }
+
+ @Override
+ protected AsyncHolder<StageZero> createStageZeroLoader() {
+ return haltIfClosed(super.createStageZeroLoader());
+ }
+
+ public void destroy() {
+ if (wave != null) {
+ waveStore.remove(wave);
+ wave = null;
+ }
+ if (three != null) {
+ three.getEditActions().stopEditing();
+ three = null;
+ }
+ if (two != null) {
+ two.getConnector().close();
+ two = null;
+ }
+ if (one != null) {
+ one.getWavePanel().destroy();
+ one = null;
+ }
+ closed = true;
+ }
+
+ /**
+ * @return a halting provider if this stage is closed. Otherwise, returns the
+ * given provider.
+ */
+ @SuppressWarnings("unchecked") // HALT is safe as a holder for any type
+ private <T> AsyncHolder<T> haltIfClosed(final AsyncHolder<T> provider) {
+ return closed ? (AsyncHolder<T>) HALT : provider;
+ }
+
+ private void handleExistingWave(final StageThree three) {
+ // If there's blip reference then focus on that blip.
+ final String documentId = waveRef.getDocumentId();
+ if (documentId != null) {
+ final ModelAsViewProvider views = two.getModelAsViewProvider();
+ final BlipQueueRenderer blipQueue = two.getBlipQueue();
+ final ConversationView wave = two.getConversations();
+ blipQueue.flush();
+ // Find conversation
+ Conversation conversation;
+ if (waveRef.hasWaveletId()) {
+ final String id = ModernIdSerialiser.INSTANCE.serialiseWaveletId(waveRef.getWaveletId());
+ conversation = wave.getConversation(id);
+ } else {
+ // Unspecified wavelet means root.
+ conversation = wave.getRoot();
+ }
+ if (conversation != null) {
+ // Find selected blip.
+ final ConversationBlip blip = wave.getRoot().getBlip(documentId);
+ if (blip != null) {
+ final BlipView blipUi = views.getBlipView(blip);
+ if (blipUi != null) {
+ two.getStageOne().getFocusFrame().focus(blipUi);
+ }
+ }
+ }
+ }
+ }
+
+ private void initNewWave(final StageThree three) {
+ // Do the new-wave flow.
+ final ModelAsViewProvider views = two.getModelAsViewProvider();
+ final BlipQueueRenderer blipQueue = two.getBlipQueue();
+ final ConversationView wave = two.getConversations();
+
+ // Force rendering to finish.
+ blipQueue.flush();
+ final BlipView blipUi = views.getBlipView(wave.getRoot().getRootThread().getFirstBlip());
+ three.getEditActions().startEditing(blipUi);
+ }
+
+ private void onStageThreeLoaded(final StageThree x, final Accessor<StageThree> whenReady) {
+ if (closed) {
+ // Stop the loading process.
+ return;
+ }
+ three = x;
+ if (isNewWave) {
+ initNewWave(x);
+ } else {
+ handleExistingWave(x);
+ }
+ wave = new WaveContext(
+ two.getWave(), two.getConversations(), two.getSupplement(), two.getReadMonitor());
+ waveStore.add(wave);
+ whenReady.use(x);
+ }
+}
Added: trunk/src/main/java/cc/kune/wave/client/KuneWaveResources.java
===================================================================
--- trunk/src/main/java/cc/kune/wave/client/KuneWaveResources.java (rev 0)
+++ trunk/src/main/java/cc/kune/wave/client/KuneWaveResources.java 2011-07-28 14:07:43 UTC (rev 1468)
@@ -0,0 +1,22 @@
+package cc.kune.wave.client;
+
+import org.waveprotocol.wave.client.wavepanel.view.dom.full.TopConversationViewBuilder;
+
+import com.google.gwt.resources.client.ClientBundle;
+import com.google.gwt.resources.client.ImageResource;
+import com.google.gwt.resources.client.ImageResource.ImageOptions;
+import com.google.gwt.resources.client.ImageResource.RepeatStyle;
+
+public class KuneWaveResources {
+ // Not used now
+ public interface Conversation extends ClientBundle {
+ // Note: the CSS file contains a gwt-image reference, so must be defined
+ // after the referenced images in this interface.
+ @Source("KuneConversation.css")
+ TopConversationViewBuilder.Css css();
+
+ @ImageOptions(repeatStyle = RepeatStyle.Horizontal)
+ @Source("toolbar_empty.png")
+ ImageResource emptyToolbar();
+ }
+}
Modified: trunk/src/main/java/cc/kune/wave/client/WebClient.java
===================================================================
--- trunk/src/main/java/cc/kune/wave/client/WebClient.java 2011-07-27 14:27:34 UTC (rev 1467)
+++ trunk/src/main/java/cc/kune/wave/client/WebClient.java 2011-07-28 14:07:43 UTC (rev 1468)
@@ -222,7 +222,7 @@
DebugMessagePanel logPanel;
/** The wave panel, if a wave is open. */
- private StagesProvider wave;
+ private KuneStagesProvider wave;
private final WaveStore waveStore = new SimpleWaveStore();
@@ -373,8 +373,8 @@
UIObject.setVisible(waveFrame.getElement(), true);
waveHolder.getElement().appendChild(loading);
final Element holder = waveHolder.getElement().appendChild(Document.get().createDivElement());
- final StagesProvider wave = new StagesProvider(
- holder, waveHolder, waveRef, channel, idGenerator, profiles, waveStore, isNewWave, Session.get().getDomain());
+ final KuneStagesProvider wave = new KuneStagesProvider(
+ holder, waveHolder, waveRef, channel, idGenerator, profiles, waveStore, isNewWave, Session.get().getDomain(), true);
this.wave = wave;
wave.load(new Command() {
@Override
Added: trunk/src/main/java/cc/kune/wave/client/toolbar_empty.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/main/java/cc/kune/wave/client/toolbar_empty.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/main/java/org/waveprotocol/wave/client/wavepanel/view/dom/full/KuneWavePanelResourceLoader.java
===================================================================
--- trunk/src/main/java/org/waveprotocol/wave/client/wavepanel/view/dom/full/KuneWavePanelResourceLoader.java (rev 0)
+++ trunk/src/main/java/org/waveprotocol/wave/client/wavepanel/view/dom/full/KuneWavePanelResourceLoader.java 2011-07-28 14:07:43 UTC (rev 1468)
@@ -0,0 +1,104 @@
+// @formatter:off
+/**
+ * Copyright 2010 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.waveprotocol.wave.client.wavepanel.view.dom.full;
+
+import org.waveprotocol.wave.client.editor.EditorImpl;
+
+import cc.kune.wave.client.KuneWaveResources;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.dom.client.StyleInjector;
+
+/**
+ * This class is responsible for loading all the Css resources needed by the
+ * wave panel.
+ *
+ */
+public final class KuneWavePanelResourceLoader {
+
+ private final static BlipViewBuilder.Resources blip = GWT.create(BlipViewBuilder.Resources.class);
+ private final static CollapsibleBuilder.Resources collapsible =
+ GWT.create(CollapsibleBuilder.Resources.class);
+ // Kune patch (but not used yet)
+ private final static KuneWaveResources.Conversation conversation =
+ GWT.create(KuneWaveResources.Conversation.class);
+ private final static ContinuationIndicatorViewBuilder.Resources inlineContinuation =
+ GWT.create(ContinuationIndicatorViewBuilder.Resources.class);
+ private final static ParticipantsViewBuilder.Resources participants =
+ GWT.create(ParticipantsViewBuilder.Resources.class);
+ private final static ReplyBoxViewBuilder.Resources replyBox =
+ GWT.create(ReplyBoxViewBuilder.Resources.class);
+ private final static RootThreadViewBuilder.Resources rootThread =
+ GWT.create(RootThreadViewBuilder.Resources.class);
+
+ static {
+ // Inject all CSS synchronously. CSS must be injected synchronously, so that
+ // any layout queries, that may happen to occur in the same event cycle,
+ // operate on the correct state (GWT's default injection mode is
+ // asynchronous). CSS is injected together in one bundle to minimize layout
+ // invalidation, and to leave open the possibility of merging stylesheets
+ // together for efficiency.
+ final boolean isSynchronous = true;
+ StyleInjector.inject(blip.css().getText(), isSynchronous);
+ StyleInjector.inject(collapsible.css().getText(), isSynchronous);
+ StyleInjector.inject(rootThread.css().getText(), isSynchronous);
+ StyleInjector.inject(replyBox.css().getText(), isSynchronous);
+ StyleInjector.inject(inlineContinuation.css().getText(), isSynchronous);
+ StyleInjector.inject(conversation.css().getText(), isSynchronous);
+ StyleInjector.inject(participants.css().getText(), isSynchronous);
+ }
+
+ public static BlipViewBuilder.Resources getBlip() {
+ return blip;
+ }
+
+ public static CollapsibleBuilder.Resources getCollapsible() {
+ return collapsible;
+ }
+
+ public static ContinuationIndicatorViewBuilder.Resources getContinuationIndicator() {
+ return inlineContinuation;
+ }
+
+ public static KuneWaveResources.Conversation getConversation() {
+ return conversation;
+ }
+
+ public static ParticipantsViewBuilder.Resources getParticipants() {
+ return participants;
+ }
+
+ public static ReplyBoxViewBuilder.Resources getReplyBox() {
+ return replyBox;
+ }
+
+ public static RootThreadViewBuilder.Resources getRootThread() {
+ return rootThread;
+ }
+
+ /**
+ * Loads all the CSS required by the wave panel.
+ */
+ public static void loadCss() {
+ // Static initializer loads all the wave panel views.
+ // Need a few more:
+ EditorImpl.init();
+ }
+
+ private KuneWavePanelResourceLoader() {
+ }
+}
Modified: trunk/src/main/resources/wave-server.properties
===================================================================
--- trunk/src/main/resources/wave-server.properties 2011-07-27 14:27:34 UTC (rev 1467)
+++ trunk/src/main/resources/wave-server.properties 2011-07-28 14:07:43 UTC (rev 1468)
@@ -8,7 +8,7 @@
# Each address is a comma separated host:port pair.
http_frontend_public_address = localhost:8888
http_frontend_addresses = ${http_frontend_public_address}
-resource_bases = target/kune-0.0.8/,src/main/webapp/
+resource_bases = target/kune-0.1.0-SNAPSHOT/,src/main/webapp/
### Server-specific variables
###
1
0