r1334 - in trunk/src: main/java/cc/kune/blogs/client/actions main/java/cc/kune/common/client/actions/ui/descrip main/java/cc/kune/common/client/notify main/java/cc/kune/common/client/ui main/java/cc/kune/common/client/ui/dialogs main/java/cc/kune/common/public main/java/cc/kune/core/client main/java/cc/kune/core/client/groups/newgroup main/java/cc/kune/core/client/notify/msgs main/java/cc/kune/core/client/rpcservices main/java/cc/kune/core/client/sitebar main/java/cc/kune/core/client/sn/actio
Author: vjrj_ Date: 2011-05-03 10:22:21 +0200 (Tue, 03 May 2011) New Revision: 1334 Added: trunk/src/main/java/cc/kune/blogs/client/actions/AbstractOptionsMenu.java trunk/src/main/java/cc/kune/blogs/client/actions/ContentViewerOptionsMenu.java trunk/src/main/java/cc/kune/core/client/sitebar/ErrorsDialog.java trunk/src/main/java/cc/kune/core/client/sitebar/ErrorsDialog.ui.xml trunk/src/main/java/cc/kune/core/client/sn/actions/conditions/IsNotParticipantOfCurrentStateCondition.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/msgs/client/resources/UserMessageImagesUtil.java Removed: trunk/src/main/java/cc/kune/gspace/client/actions/RefreshContentBtn.java trunk/src/test/java/org/ourproject/kune/platf/integration/ trunk/src/test/java/org/ourproject/kune/platf/server/ trunk/src/test/java/org/ourproject/kune/rack/filters/ trunk/src/test/java/org/ourproject/kune/testhelper/ Modified: trunk/src/main/java/cc/kune/blogs/client/actions/BlogsClientActions.java trunk/src/main/java/cc/kune/blogs/client/actions/GoParentBlogBtn.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/common/client/notify/NotifyLevel.java trunk/src/main/java/cc/kune/common/client/notify/NotifyUser.java trunk/src/main/java/cc/kune/common/client/ui/AbstractAtBorderPopupPanel.java trunk/src/main/java/cc/kune/common/client/ui/IconLabel.java trunk/src/main/java/cc/kune/common/client/ui/dialogs/BasicTopDialog.java trunk/src/main/java/cc/kune/common/public/kune-common.css trunk/src/main/java/cc/kune/core/client/CoreGinModule.java trunk/src/main/java/cc/kune/core/client/groups/newgroup/NewGroupPanel.java trunk/src/main/java/cc/kune/core/client/notify/msgs/UserNotifierPresenter.java trunk/src/main/java/cc/kune/core/client/rpcservices/ContentService.java trunk/src/main/java/cc/kune/core/client/rpcservices/ContentServiceAsync.java trunk/src/main/java/cc/kune/core/client/sitebar/AboutKuneDialog.java trunk/src/main/java/cc/kune/core/client/sitebar/AboutKuneDialog.ui.xml trunk/src/main/java/cc/kune/core/client/sitebar/SitebarActionsPanel.java trunk/src/main/java/cc/kune/core/client/sitebar/SitebarActionsPresenter.java trunk/src/main/java/cc/kune/core/server/content/ContentManager.java trunk/src/main/java/cc/kune/core/server/content/ContentManagerDefault.java trunk/src/main/java/cc/kune/core/server/rpc/ContentRPC.java trunk/src/main/java/cc/kune/core/server/state/StateContent.java trunk/src/main/java/cc/kune/core/server/state/StateServiceDefault.java trunk/src/main/java/cc/kune/core/shared/dto/StateContentDTO.java trunk/src/main/java/cc/kune/docs/client/actions/DocsClientActions.java trunk/src/main/java/cc/kune/gspace/client/GSpaceGinModule.java trunk/src/main/java/cc/kune/gspace/client/actions/GoParentContainerBtn.java trunk/src/main/java/cc/kune/gspace/client/options/license/EntityOptionsDefLicensePanel.java trunk/src/main/java/cc/kune/gspace/client/options/logo/EntityOptionsLogoPanel.java trunk/src/main/java/cc/kune/gspace/client/viewers/DocViewerPanel.java trunk/src/main/java/cc/kune/gspace/client/viewers/DocViewerPanel.ui.xml trunk/src/main/java/cc/kune/gspace/client/viewers/DocViewerPresenter.java trunk/src/main/java/cc/kune/msgs/client/UserMessage.java trunk/src/main/java/cc/kune/wave/client/WebClient.java trunk/src/main/java/cc/kune/wave/server/KuneWaveManager.java trunk/src/main/java/cc/kune/wave/server/KuneWaveManagerDefault.java trunk/src/test/java/cc/kune/wave/server/KuneWaveManagerDefaultTest.java Log: More actions, error dialog, participate action (work in progress) Added: trunk/src/main/java/cc/kune/blogs/client/actions/AbstractOptionsMenu.java =================================================================== --- trunk/src/main/java/cc/kune/blogs/client/actions/AbstractOptionsMenu.java (rev 0) +++ trunk/src/main/java/cc/kune/blogs/client/actions/AbstractOptionsMenu.java 2011-05-03 08:22:21 UTC (rev 1334) @@ -0,0 +1,13 @@ +package cc.kune.blogs.client.actions; + +import cc.kune.common.client.actions.ui.descrip.MenuDescriptor; +import cc.kune.core.client.resources.CoreResources; + +public abstract class AbstractOptionsMenu extends MenuDescriptor { + + public AbstractOptionsMenu(final CoreResources res) { + super(); + this.withIcon(res.arrowDownBlack()).withStyles("k-fr"); + } + +} Modified: trunk/src/main/java/cc/kune/blogs/client/actions/BlogsClientActions.java =================================================================== --- trunk/src/main/java/cc/kune/blogs/client/actions/BlogsClientActions.java 2011-04-29 14:42:12 UTC (rev 1333) +++ trunk/src/main/java/cc/kune/blogs/client/actions/BlogsClientActions.java 2011-05-03 08:22:21 UTC (rev 1334) @@ -30,7 +30,8 @@ import cc.kune.core.client.state.StateManager; import cc.kune.gspace.client.actions.AbstractFoldableToolActions; import cc.kune.gspace.client.actions.ActionGroups; -import cc.kune.gspace.client.actions.RefreshContentBtn; +import cc.kune.gspace.client.actions.ParticipateInContentBtn; +import cc.kune.gspace.client.actions.RefreshContentMenuItem; import cc.kune.gspace.client.actions.SetAsHomePageMenuItem; import com.google.inject.Inject; @@ -38,34 +39,36 @@ public class BlogsClientActions extends AbstractFoldableToolActions { - final String[] all = { TYPE_ROOT, TYPE_BLOG, TYPE_POST, TYPE_UPLOADEDFILE }; - final String[] containers = { TYPE_ROOT, TYPE_BLOG }; - final String[] containersNoRoot = { TYPE_BLOG }; - final String[] contents = { TYPE_POST, TYPE_UPLOADEDFILE }; - final String[] contentsModerated = { TYPE_POST, TYPE_UPLOADEDFILE }; + final String[] all = { TYPE_ROOT, TYPE_BLOG, TYPE_POST, TYPE_UPLOADEDFILE }; + final String[] containers = { TYPE_ROOT, TYPE_BLOG }; + final String[] containersNoRoot = { TYPE_BLOG }; + final String[] contents = { TYPE_POST, TYPE_UPLOADEDFILE }; + final String[] contentsModerated = { TYPE_POST, TYPE_UPLOADEDFILE }; - @Inject - public BlogsClientActions(final I18nUITranslationService i18n, final Session session, - final StateManager stateManager, final ActionRegistryByType registry, final CoreResources res, - final Provider<GoParentBlogBtn> folderGoUp, final Provider<NewPostBtn> newDocBtn, - final Provider<NewBlogBtn> newFolderBtn, final Provider<OpenBlogMenuItem> openContentMenuItem, - final Provider<DelPostMenuItem> delContentMenuItem, final Provider<RefreshContentBtn> refresh, - final Provider<DelBlogMenuItem> delFolderMenuItem, - final Provider<SetAsHomePageMenuItem> setAsHomePage) { - super(session, stateManager, i18n, registry); - actionsRegistry.addAction(ActionGroups.VIEW, folderGoUp, contents); - actionsRegistry.addAction(ActionGroups.VIEW, folderGoUp, containersNoRoot); - actionsRegistry.addAction(ActionGroups.VIEW, newDocBtn, containersNoRoot); - actionsRegistry.addAction(ActionGroups.VIEW, newFolderBtn, TYPE_ROOT); - actionsRegistry.addAction(ActionGroups.VIEW, refresh, all); - actionsRegistry.addAction(ActionGroups.MENUITEM, openContentMenuItem, contents); - actionsRegistry.addAction(ActionGroups.MENUITEM, openContentMenuItem, containersNoRoot); - actionsRegistry.addAction(ActionGroups.MENUITEM, delContentMenuItem, contents); - actionsRegistry.addAction(ActionGroups.MENUITEM, delFolderMenuItem, containersNoRoot); - actionsRegistry.addAction(ActionGroups.MENUITEM, delFolderMenuItem, contents); - } + @Inject + public BlogsClientActions(final I18nUITranslationService i18n, final Session session, + final StateManager stateManager, final ActionRegistryByType registry, final CoreResources res, + final Provider<GoParentBlogBtn> folderGoUp, final Provider<NewPostBtn> newDocBtn, + final Provider<NewBlogBtn> newFolderBtn, final Provider<OpenBlogMenuItem> openContentMenuItem, + final Provider<DelPostMenuItem> delContentMenuItem, final Provider<RefreshContentMenuItem> refresh, + final Provider<ContentViewerOptionsMenu> optionsMenuContent, + final Provider<ParticipateInContentBtn> participateBtn, final Provider<DelBlogMenuItem> delFolderMenuItem, + final Provider<SetAsHomePageMenuItem> setAsHomePage) { + super(session, stateManager, i18n, registry); + actionsRegistry.addAction(ActionGroups.VIEW, folderGoUp, contents); + actionsRegistry.addAction(ActionGroups.VIEW, folderGoUp, containersNoRoot); + actionsRegistry.addAction(ActionGroups.VIEW, optionsMenuContent, all); + actionsRegistry.addAction(ActionGroups.VIEW, participateBtn, contents); + actionsRegistry.addAction(ActionGroups.VIEW, refresh, all); + actionsRegistry.addAction(ActionGroups.VIEW, newDocBtn, containersNoRoot); + actionsRegistry.addAction(ActionGroups.VIEW, newFolderBtn, TYPE_ROOT); + actionsRegistry.addAction(ActionGroups.MENUITEM, openContentMenuItem, contents); + actionsRegistry.addAction(ActionGroups.MENUITEM, openContentMenuItem, containersNoRoot); + actionsRegistry.addAction(ActionGroups.MENUITEM, delContentMenuItem, contents); + actionsRegistry.addAction(ActionGroups.MENUITEM, delFolderMenuItem, containersNoRoot); + } - @Override - protected void createPostSessionInitActions() { - } + @Override + protected void createPostSessionInitActions() { + } } Added: trunk/src/main/java/cc/kune/blogs/client/actions/ContentViewerOptionsMenu.java =================================================================== --- trunk/src/main/java/cc/kune/blogs/client/actions/ContentViewerOptionsMenu.java (rev 0) +++ trunk/src/main/java/cc/kune/blogs/client/actions/ContentViewerOptionsMenu.java 2011-05-03 08:22:21 UTC (rev 1334) @@ -0,0 +1,16 @@ +package cc.kune.blogs.client.actions; + +import cc.kune.common.client.actions.ui.descrip.MenuDescriptor; +import cc.kune.core.client.resources.CoreResources; + +import com.google.inject.Inject; + +public class ContentViewerOptionsMenu extends MenuDescriptor { + + @Inject + public ContentViewerOptionsMenu(final CoreResources res) { + super(); + this.withIcon(res.arrowdownsitebar()).withStyles("k-def-docbtn, k-fr, k-noborder, k-nobackcolor"); + } + +} Modified: trunk/src/main/java/cc/kune/blogs/client/actions/GoParentBlogBtn.java =================================================================== --- trunk/src/main/java/cc/kune/blogs/client/actions/GoParentBlogBtn.java 2011-04-29 14:42:12 UTC (rev 1333) +++ trunk/src/main/java/cc/kune/blogs/client/actions/GoParentBlogBtn.java 2011-05-03 08:22:21 UTC (rev 1334) @@ -9,7 +9,8 @@ public class GoParentBlogBtn extends GoParentContainerBtn { @Inject - public GoParentBlogBtn(final I18nTranslationService i18n, final GoParentContainerAction action, final CoreResources res) { + public GoParentBlogBtn(final I18nTranslationService i18n, final GoParentContainerAction action, + final CoreResources res) { super(i18n, action, res); } 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-04-29 14:42:12 UTC (rev 1333) +++ trunk/src/main/java/cc/kune/common/client/actions/ui/descrip/AbstractGuiActionDescrip.java 2011-05-03 08:22:21 UTC (rev 1334) @@ -239,6 +239,12 @@ } @Override + public GuiActionDescrip withId(final String id) { + setId(id); + return this; + } + + @Override public GuiActionDescrip withParent(final GuiActionDescrip parent) { setParent(parent); return this; 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-04-29 14:42:12 UTC (rev 1333) +++ trunk/src/main/java/cc/kune/common/client/actions/ui/descrip/GuiActionDescrip.java 2011-05-03 08:22:21 UTC (rev 1334) @@ -80,6 +80,8 @@ GuiActionDescrip withIconCls(String icon); + GuiActionDescrip withId(String id); + GuiActionDescrip withParent(GuiActionDescrip parent); GuiActionDescrip withShortcut(KeyStroke keystroke); Modified: trunk/src/main/java/cc/kune/common/client/notify/NotifyLevel.java =================================================================== --- trunk/src/main/java/cc/kune/common/client/notify/NotifyLevel.java 2011-04-29 14:42:12 UTC (rev 1333) +++ trunk/src/main/java/cc/kune/common/client/notify/NotifyLevel.java 2011-05-03 08:22:21 UTC (rev 1334) @@ -20,5 +20,5 @@ package cc.kune.common.client.notify; public enum NotifyLevel { - info, important, veryImportant, error + error, important, info, log, veryImportant } Modified: trunk/src/main/java/cc/kune/common/client/notify/NotifyUser.java =================================================================== --- trunk/src/main/java/cc/kune/common/client/notify/NotifyUser.java 2011-04-29 14:42:12 UTC (rev 1333) +++ trunk/src/main/java/cc/kune/common/client/notify/NotifyUser.java 2011-05-03 08:22:21 UTC (rev 1334) @@ -88,6 +88,10 @@ } + public static void logError(final String message) { + eventBus.fireEvent(new UserNotifyEvent(NotifyLevel.log, message)); + } + public static void showAlertMessage(final String title, final String message) { showAlertMessage(title, message, onOk); } Modified: trunk/src/main/java/cc/kune/common/client/ui/AbstractAtBorderPopupPanel.java =================================================================== --- trunk/src/main/java/cc/kune/common/client/ui/AbstractAtBorderPopupPanel.java 2011-04-29 14:42:12 UTC (rev 1333) +++ trunk/src/main/java/cc/kune/common/client/ui/AbstractAtBorderPopupPanel.java 2011-05-03 08:22:21 UTC (rev 1334) @@ -27,8 +27,10 @@ public abstract class AbstractAtBorderPopupPanel extends PopupPanel { + private String height; private boolean showCentered = true; protected UIObject showNearObject; + private String width; public AbstractAtBorderPopupPanel() { super(false, false); @@ -44,15 +46,21 @@ init(); } + private String calculatePercent(final int currentSize, final String percent) { + return String.valueOf(currentSize * Integer.valueOf(percent.replace("%", "")) / 100) + "px"; + } + public void defaultStyle() { addStyleName("k-opacity90"); addStyleName("k-box-10shadow"); } private void init() { + setSizes(); Window.addResizeHandler(new ResizeHandler() { @Override public void onResize(final ResizeEvent event) { + setSizeWithListener(event.getWidth(), event.getHeight()); if (isShowing()) { if (showCentered) { setCenterPositionImpl(); @@ -70,6 +78,46 @@ protected abstract void setCenterPositionImpl(); + @Override + public void setHeight(final String height) { + this.height = height; + setSizes(); + } + + @Override + public void setSize(final String width, final String height) { + this.width = width; + this.height = height; + setSizes(); + } + + private void setSizes() { + setSizeWithListener(Window.getClientWidth(), Window.getClientHeight()); + } + + private void setSizeWithListener(final int windowWidth, final int windowHeight) { + if (width != null) { + if (width.contains("%")) { + calculatePercent(windowWidth, width); + } else { + super.setWidth(width); + } + } + if (height != null) { + if (height.contains("%")) { + calculatePercent(windowHeight, height); + } else { + super.setHeight(height); + } + } + } + + @Override + public void setWidth(final String width) { + this.width = width; + setSizes(); + } + public void showCentered() { showCentered = true; setCenterPositionImpl(); Modified: trunk/src/main/java/cc/kune/common/client/ui/IconLabel.java =================================================================== --- trunk/src/main/java/cc/kune/common/client/ui/IconLabel.java 2011-04-29 14:42:12 UTC (rev 1333) +++ trunk/src/main/java/cc/kune/common/client/ui/IconLabel.java 2011-05-03 08:22:21 UTC (rev 1334) @@ -40,129 +40,131 @@ public class IconLabel extends Composite implements HasWidgets, HasDirectionalText { - interface IconTitleUiBinder extends UiBinder<Widget, IconLabel> { - } + interface IconTitleUiBinder extends UiBinder<Widget, IconLabel> { + } - private static IconTitleUiBinder uiBinder = GWT.create(IconTitleUiBinder.class); + private static IconTitleUiBinder uiBinder = GWT.create(IconTitleUiBinder.class); - @UiField - FlowPanel flow; - @UiField - Image iconLeft; - @UiField - Image iconRight; - @UiField - InlineLabel label; - @UiField - FocusPanel self; + @UiField + FlowPanel flow; + @UiField + Image iconLeft; + @UiField + Image iconRight; + @UiField + InlineLabel label; + @UiField + FocusPanel self; - public IconLabel() { - this(""); - } + public IconLabel() { + this(""); + } - public IconLabel(final ImageResource imgRes, final String text) { - this(text); - if (imgRes != null) { - iconLeft.setResource(imgRes); + public IconLabel(final ImageResource imgRes, final String text) { + this(text); + if (imgRes != null) { + iconLeft.setResource(imgRes); + } } - } - public IconLabel(final String text) { - initWidget(uiBinder.createAndBindUi(this)); - label.setText(text); - label.addStyleName("k-space-nowrap"); - label.addStyleName("k-iconlabel-text"); - } + public IconLabel(final String text) { + initWidget(uiBinder.createAndBindUi(this)); + label.setText(text); + label.addStyleName("k-space-nowrap"); + label.addStyleName("k-iconlabel-text"); + } - @Override - public void add(final Widget w) { - flow.add(w); - } + @Override + public void add(final Widget w) { + flow.add(w); + } - @Override - public void addStyleName(final String style) { - flow.addStyleName(style); - } + @Override + public void addStyleName(final String style) { + flow.addStyleName(style); + } - public void addTextStyleName(final String style) { - label.addStyleName(style); - } + public void addTextStyleName(final String style) { + label.addStyleName(style); + } - @Override - public void clear() { - flow.clear(); - } + @Override + public void clear() { + flow.clear(); + } - public HasClickHandlers getFocus() { - return self; - } + public HasClickHandlers getFocus() { + return self; + } - @Override - public String getText() { - return label.getText(); - } + @Override + public String getText() { + return label.getText(); + } - @Override - public Direction getTextDirection() { - return label.getTextDirection(); - } + @Override + public Direction getTextDirection() { + return label.getTextDirection(); + } - @Override - public Iterator<Widget> iterator() { - return flow.iterator(); - } + @Override + public Iterator<Widget> iterator() { + return flow.iterator(); + } - @Override - public boolean remove(final Widget w) { - return flow.remove(w); - } + @Override + public boolean remove(final Widget w) { + return flow.remove(w); + } - public void setLabelText(final String text) { - label.setText(text); - } + public void setLabelText(final String text) { + label.setText(text); + } - public void setLeftIcon(final String imgCss) { - iconLeft.setUrl("images/clear.gif"); - iconLeft.setStyleName(imgCss); - iconLeft.addStyleName("k-iconlabel-left"); - iconLeft.addStyleName("oc-ico-pad"); - } + public void setLeftIcon(final String imgCss) { + iconLeft.setUrl("images/clear.gif"); + iconLeft.setStyleName(imgCss); + iconLeft.addStyleName("k-iconlabel-left"); + iconLeft.addStyleName("oc-ico-pad"); + } - public void setLeftIconResource(final ImageResource res) { - iconLeft.setResource(res); - iconLeft.addStyleName("k-iconlabel-left"); - } + public void setLeftIconResource(final ImageResource res) { + iconLeft.setResource(res); + iconLeft.addStyleName("k-iconlabel-left"); + } - public void setRightIcon(final String imgCss) { - iconRight.setUrl("images/clear.gif"); - iconRight.setStyleName(imgCss); - iconRight.addStyleName("oc-ico-pad"); - iconRight.addStyleName("k-iconlabel-right"); - } + public void setRightIcon(final String imgCss) { + iconRight.setUrl("images/clear.gif"); + iconRight.setStyleName(imgCss); + iconRight.addStyleName("oc-ico-pad"); + iconRight.addStyleName("k-iconlabel-right"); + } - public void setRightIconResource(final ImageResource res) { - iconRight.setResource(res); - iconRight.addStyleName("k-iconlabel-right"); - } + public void setRightIconResource(final ImageResource res) { + iconRight.setResource(res); + iconRight.addStyleName("k-iconlabel-right"); + } - @Override - public void setStyleName(final String style) { - flow.setStyleName(style); - } + @Override + public void setStyleName(final String style) { + flow.setStyleName(style); + } - @Override - public void setText(final String text) { - label.setText(text); - } + @Override + public void setText(final String text) { + label.setText(text); + } - @Override - public void setText(final String text, final Direction dir) { - label.setText(text, dir); - } + @Override + public void setText(final String text, final Direction dir) { + label.setText(text, dir); + } - public void setTooltip(final String text) { - Tooltip.to(label, text); - // Tooltip.to(iconRight, text); - // Tooltip.to(iconLeft, text); - } + public void setTooltip(final String text) { + Tooltip.to(label, text); + } + + public void setWordWrap(final boolean wordWrap) { + label.setWordWrap(wordWrap); + } } Modified: trunk/src/main/java/cc/kune/common/client/ui/dialogs/BasicTopDialog.java =================================================================== --- trunk/src/main/java/cc/kune/common/client/ui/dialogs/BasicTopDialog.java 2011-04-29 14:42:12 UTC (rev 1333) +++ trunk/src/main/java/cc/kune/common/client/ui/dialogs/BasicTopDialog.java 2011-05-03 08:22:21 UTC (rev 1334) @@ -28,135 +28,134 @@ public class BasicTopDialog extends BasicDialog { - public static class Builder { - private final boolean autohide; - private boolean autoscroll = false; - private final String dialogId; - private String firstButtonId; - private String firstButtonTitle; - private String height = "70%"; - private String icon; - private final boolean modal; - private String sndButtonId; - private String sndButtonTitle; - private int tabIndexStart = 0; - private String title; - private String width = "400px"; + public static class Builder { + private final boolean autohide; + private boolean autoscroll = false; + private final String dialogId; + private String firstButtonId; + private String firstButtonTitle; + private String height = "70%"; + private String icon; + private final boolean modal; + private String sndButtonId; + private String sndButtonTitle; + private int tabIndexStart = 0; + private String title; + private String width = "400px"; - public Builder(final String dialogId, final boolean autohide, final boolean modal) { - // Required params - this.autohide = autohide; - this.modal = modal; - this.dialogId = dialogId; - } + public Builder(final String dialogId, final boolean autohide, final boolean modal) { + // Required params + this.autohide = autohide; + this.modal = modal; + this.dialogId = dialogId; + } - public Builder autoscroll(final boolean autoscroll) { - // Not used for now - this.autoscroll = autoscroll; - return this; - } + public Builder autoscroll(final boolean autoscroll) { + // Not used for now + this.autoscroll = autoscroll; + return this; + } - public BasicTopDialog build() { - return new BasicTopDialog(this); - } + public BasicTopDialog build() { + return new BasicTopDialog(this); + } - public Builder firstButtonId(final String firstButtonId) { - this.firstButtonId = firstButtonId; - return this; - } + public Builder firstButtonId(final String firstButtonId) { + this.firstButtonId = firstButtonId; + return this; + } - public Builder firstButtonTitle(final String firstButtonTitle) { - this.firstButtonTitle = firstButtonTitle; - return this; - } + public Builder firstButtonTitle(final String firstButtonTitle) { + this.firstButtonTitle = firstButtonTitle; + return this; + } - public Builder height(final int height) { - this.height = String.valueOf(height); - return this; - } + public Builder height(final int height) { + this.height = String.valueOf(height); + return this; + } - public Builder height(final String height) { - this.height = height; - return this; - } + public Builder height(final String height) { + this.height = height; + return this; + } - public Builder icon(final String icon) { - this.icon = icon; - return this; - } + public Builder icon(final String icon) { + this.icon = icon; + return this; + } - public Builder sndButtonId(final String sndButtonId) { - this.sndButtonId = sndButtonId; - return this; - } + public Builder sndButtonId(final String sndButtonId) { + this.sndButtonId = sndButtonId; + return this; + } - public Builder sndButtonTitle(final String sndButtonTitle) { - this.sndButtonTitle = sndButtonTitle; - return this; - } + public Builder sndButtonTitle(final String sndButtonTitle) { + this.sndButtonTitle = sndButtonTitle; + return this; + } - public Builder tabIndexStart(final int tabIndexStart) { - this.tabIndexStart = tabIndexStart; - return this; - } + public Builder tabIndexStart(final int tabIndexStart) { + this.tabIndexStart = tabIndexStart; + return this; + } - public Builder title(final String title) { - this.title = title; - return this; - } + public Builder title(final String title) { + this.title = title; + return this; + } - public Builder width(final int width) { - this.width = String.valueOf(width); - return this; - } + public Builder width(final int width) { + this.width = String.valueOf(width); + return this; + } - public Builder width(final String width) { - this.width = width; - return this; + public Builder width(final String width) { + this.width = width; + return this; + } + } - } + private final PopupTopPanel popup; - private final PopupTopPanel popup; + private BasicTopDialog(final Builder builder) { + popup = new PopupTopPanel(builder.autohide, builder.modal); + popup.add(this); + popup.ensureDebugId(builder.dialogId); + super.getTitleText().setText(builder.title); + if (TextUtils.notEmpty(builder.icon)) { + super.setTitleIcon(builder.icon); + } + super.setFirstBtnText(builder.firstButtonTitle); + super.setFirstBtnId(builder.firstButtonId); + super.setFirstBtnTabIndex(builder.tabIndexStart); + super.setSecondBtnText(builder.sndButtonTitle); + super.setSecondBtnId(builder.sndButtonId); + super.setSecondBtnTabIndex(builder.tabIndexStart + 1); + super.getTitleText().setText(builder.title); + popup.setWidth(builder.width); + popup.setHeight(builder.height); + } - private BasicTopDialog(final Builder builder) { - popup = new PopupTopPanel(builder.autohide, builder.modal); - popup.add(this); - popup.ensureDebugId(builder.dialogId); - super.getTitleText().setText(builder.title); - if (TextUtils.notEmpty(builder.icon)) { - super.setTitleIcon(builder.icon); + public HasCloseHandlers<PopupPanel> getClose() { + return popup; } - super.setFirstBtnText(builder.firstButtonTitle); - super.setFirstBtnId(builder.firstButtonId); - super.setFirstBtnTabIndex(builder.tabIndexStart); - super.setSecondBtnText(builder.sndButtonTitle); - super.setSecondBtnId(builder.sndButtonId); - super.setSecondBtnTabIndex(builder.tabIndexStart + 1); - super.getTitleText().setText(builder.title); - super.setSize(builder.width, builder.height); - } - public HasCloseHandlers<PopupPanel> getClose() { - return popup; - } + public void hide() { + popup.hide(); + } - public void hide() { - popup.hide(); + @Override + public void setFirstBtnTitle(final String title) { + super.setFirstBtnTitle(title); + } - } + public void showCentered() { + popup.showCentered(); + } - @Override - public void setFirstBtnTitle(final String title) { - super.setFirstBtnTitle(title); - - } - - public void showCentered() { - popup.showCentered(); - } - - public void showRelativeTo(final UIObject object) { - popup.showRelativeTo(object); - } + public void showRelativeTo(final UIObject object) { + popup.showRelativeTo(object); + } } Modified: trunk/src/main/java/cc/kune/common/public/kune-common.css =================================================================== --- trunk/src/main/java/cc/kune/common/public/kune-common.css 2011-04-29 14:42:12 UTC (rev 1333) +++ trunk/src/main/java/cc/kune/common/public/kune-common.css 2011-05-03 08:22:21 UTC (rev 1334) @@ -144,11 +144,11 @@ .k-dialog-innerp { background-color: #FFFFFF; border: solid 1px #F2F2F2; - margin: 34px 16px 20px 16px; + margin: 0px 4px 10px; } .k-dialog-btn-area { - padding: 0 15px 15px 15px; + padding: 0 5px 5px 5px; margin-bottom: 30px; } Modified: trunk/src/main/java/cc/kune/core/client/CoreGinModule.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/CoreGinModule.java 2011-04-29 14:42:12 UTC (rev 1333) +++ trunk/src/main/java/cc/kune/core/client/CoreGinModule.java 2011-05-03 08:22:21 UTC (rev 1334) @@ -59,6 +59,7 @@ import cc.kune.core.client.notify.spiner.SpinerPresenter; import cc.kune.core.client.notify.spiner.SpinerViewImpl; import cc.kune.core.client.registry.ContentCapabilitiesRegistry; +import cc.kune.core.client.sitebar.ErrorsDialog; import cc.kune.core.client.sitebar.SiteUserOptions; import cc.kune.core.client.sitebar.SiteUserOptionsPresenter; import cc.kune.core.client.sitebar.SitebarActions; @@ -207,6 +208,8 @@ s(SitebarNewGroupLink.class); s(SitebarSignInLink.class); s(SitebarSignOutLink.class); + + s(ErrorsDialog.class); } } Modified: trunk/src/main/java/cc/kune/core/client/groups/newgroup/NewGroupPanel.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/groups/newgroup/NewGroupPanel.java 2011-04-29 14:42:12 UTC (rev 1333) +++ trunk/src/main/java/cc/kune/core/client/groups/newgroup/NewGroupPanel.java 2011-05-03 08:22:21 UTC (rev 1334) @@ -89,7 +89,6 @@ dialog = builder.build(); this.i18n = i18n; this.mask = mask; - // Field.setMsgTarget("side"); form = createNewGroupInitialDataForm(); messageErrorBar = new MessageToolbar(img, ERROR_MSG_BAR); Modified: trunk/src/main/java/cc/kune/core/client/notify/msgs/UserNotifierPresenter.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/notify/msgs/UserNotifierPresenter.java 2011-04-29 14:42:12 UTC (rev 1333) +++ trunk/src/main/java/cc/kune/core/client/notify/msgs/UserNotifierPresenter.java 2011-05-03 08:22:21 UTC (rev 1334) @@ -19,6 +19,7 @@ */ package cc.kune.core.client.notify.msgs; +import cc.kune.common.client.notify.NotifyLevel; import cc.kune.core.client.notify.msgs.UserNotifierPresenter.UserNotifierProxy; import cc.kune.core.client.notify.msgs.UserNotifierPresenter.UserNotifierView; @@ -46,8 +47,10 @@ } @ProxyEvent - public void onUserNotify(UserNotifyEvent event) { - getView().notify(event); + public void onUserNotify(final UserNotifyEvent event) { + if (event.getLevel() != NotifyLevel.log) { + getView().notify(event); + } } @Override Modified: trunk/src/main/java/cc/kune/core/client/rpcservices/ContentService.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/rpcservices/ContentService.java 2011-04-29 14:42:12 UTC (rev 1333) +++ trunk/src/main/java/cc/kune/core/client/rpcservices/ContentService.java 2011-05-03 08:22:21 UTC (rev 1334) @@ -51,6 +51,8 @@ StateContainerDTO addFolder(String hash, StateToken parentToken, String typeId, String title) throws DefaultException; + void addParticipant(String userHash, StateToken token, String participant) throws DefaultException; + StateContainerDTO addRoom(String user, StateToken parentToken, String name) throws DefaultException; StateContentDTO delContent(String userHash, StateToken token) throws DefaultException; Modified: trunk/src/main/java/cc/kune/core/client/rpcservices/ContentServiceAsync.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/rpcservices/ContentServiceAsync.java 2011-04-29 14:42:12 UTC (rev 1333) +++ trunk/src/main/java/cc/kune/core/client/rpcservices/ContentServiceAsync.java 2011-05-03 08:22:21 UTC (rev 1334) @@ -21,6 +21,7 @@ import java.util.Date; +import cc.kune.core.client.errors.DefaultException; import cc.kune.core.shared.domain.ContentStatus; import cc.kune.core.shared.domain.RateResult; import cc.kune.core.shared.domain.TagCloudResult; @@ -49,6 +50,9 @@ void addFolder(String hash, StateToken parentToken, String title, String typeId, AsyncCallback<StateContainerDTO> callback); + void addParticipant(String userHash, StateToken token, String authorShortName, AsyncCallback<Void> asyncCallback) + throws DefaultException; + void addRoom(String user, StateToken parentToken, String name, AsyncCallback<StateContainerDTO> callback); void delContent(String userHash, StateToken token, AsyncCallback<StateContentDTO> asyncCallback); Modified: trunk/src/main/java/cc/kune/core/client/sitebar/AboutKuneDialog.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/sitebar/AboutKuneDialog.java 2011-04-29 14:42:12 UTC (rev 1333) +++ trunk/src/main/java/cc/kune/core/client/sitebar/AboutKuneDialog.java 2011-05-03 08:22:21 UTC (rev 1334) @@ -20,8 +20,6 @@ public static final String ABOUT_KUNE_BTN_ID = "kune-about-button-diag"; public static final String ABOUT_KUNE_ID = "kune-about-diag"; private static final Binder BINDER = GWT.create(Binder.class); - - public static final String SITE_OPTIONS_MENU = "kune-sop-om"; private final BasicTopDialog dialog; @UiField FlowPanel flow; @@ -31,7 +29,7 @@ @Inject public AboutKuneDialog(final I18nTranslationService i18n) { dialog = new BasicTopDialog.Builder(ABOUT_KUNE_ID, true, true).title(i18n.t("About Kune")).autoscroll(false).firstButtonTitle( - i18n.t("Ok")).firstButtonId(ABOUT_KUNE_BTN_ID).tabIndexStart(1).build(); + i18n.t("Ok")).firstButtonId(ABOUT_KUNE_BTN_ID).tabIndexStart(1).height("70%").build(); dialog.getInnerPanel().add(BINDER.createAndBindUi(this)); dialog.getFirstBtn().addClickHandler(new ClickHandler() { @Override Modified: trunk/src/main/java/cc/kune/core/client/sitebar/AboutKuneDialog.ui.xml =================================================================== --- trunk/src/main/java/cc/kune/core/client/sitebar/AboutKuneDialog.ui.xml 2011-04-29 14:42:12 UTC (rev 1333) +++ trunk/src/main/java/cc/kune/core/client/sitebar/AboutKuneDialog.ui.xml 2011-05-03 08:22:21 UTC (rev 1334) @@ -4,15 +4,12 @@ xmlns:g='urn:import:com.google.gwt.user.client.ui'> <ui:style> .panel { - width: 400px; - height: 400px; } .frame { border: 0px; margin: 0px; width: 100%; - height: 400px; background-color: #F2F2F2; } </ui:style> Added: trunk/src/main/java/cc/kune/core/client/sitebar/ErrorsDialog.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/sitebar/ErrorsDialog.java (rev 0) +++ trunk/src/main/java/cc/kune/core/client/sitebar/ErrorsDialog.java 2011-05-03 08:22:21 UTC (rev 1334) @@ -0,0 +1,64 @@ +package cc.kune.core.client.sitebar; + +import cc.kune.common.client.notify.NotifyLevel; +import cc.kune.common.client.ui.IconLabel; +import cc.kune.common.client.ui.dialogs.BasicTopDialog; +import cc.kune.core.client.notify.msgs.UserNotifyEvent; +import cc.kune.core.shared.i18n.I18nTranslationService; +import cc.kune.msgs.client.resources.UserMessageImagesUtil; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.event.dom.client.ClickHandler; +import com.google.gwt.event.shared.EventBus; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.ui.InlineLabel; +import com.google.gwt.user.client.ui.VerticalPanel; +import com.google.gwt.user.client.ui.Widget; +import com.google.inject.Inject; + +public class ErrorsDialog { + + interface Binder extends UiBinder<Widget, ErrorsDialog> { + } + private static final Binder BINDER = GWT.create(Binder.class); + public static final String ERROR_LOGGER_BUTTON_ID = "kune-error-button-diag"; + public static final String ERROR_LOGGER_ID = "kune-error-diag"; + + private final BasicTopDialog dialog; + @UiField + VerticalPanel panel; + + @Inject + public ErrorsDialog(final I18nTranslationService i18n, final EventBus eventBus) { + dialog = new BasicTopDialog.Builder(ERROR_LOGGER_ID, true, true).title(i18n.t("Errors info")).autoscroll(true).firstButtonTitle( + i18n.t("Ok")).firstButtonId(ERROR_LOGGER_BUTTON_ID).tabIndexStart(1).height("300px").build(); + dialog.getTitleText().setText(i18n.t("Info about errors")); + final InlineLabel subTitle = new InlineLabel(i18n.t("Please copy/paste this info to report problems")); + dialog.getInnerPanel().add(subTitle); + dialog.getInnerPanel().add(BINDER.createAndBindUi(this)); + dialog.getFirstBtn().addClickHandler(new ClickHandler() { + @Override + public void onClick(final ClickEvent event) { + dialog.hide(); + } + }); + eventBus.addHandler(UserNotifyEvent.getType(), new UserNotifyEvent.UserNotifyHandler() { + @Override + public void onUserNotify(final UserNotifyEvent event) { + final NotifyLevel level = event.getLevel(); + final IconLabel iconMessage = new IconLabel(); + iconMessage.setLeftIconResource(UserMessageImagesUtil.getIcon(level)); + iconMessage.setText(event.getMessage()); + iconMessage.setWordWrap(true); + panel.insert(iconMessage, 0); + } + }); + } + + public void showCentered() { + dialog.showCentered(); + } + +} Added: trunk/src/main/java/cc/kune/core/client/sitebar/ErrorsDialog.ui.xml =================================================================== --- trunk/src/main/java/cc/kune/core/client/sitebar/ErrorsDialog.ui.xml (rev 0) +++ trunk/src/main/java/cc/kune/core/client/sitebar/ErrorsDialog.ui.xml 2011-05-03 08:22:21 UTC (rev 1334) @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> +<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder' + xmlns:g='urn:import:com.google.gwt.user.client.ui'> + <ui:style> + .panel { + background-color: #F2F2F2; + } + </ui:style> +<g:ScrollPanel> + <g:VerticalPanel styleName="{style.panel}" ui:field="panel"> + </g:VerticalPanel> +</g:ScrollPanel> +</ui:UiBinder> Modified: trunk/src/main/java/cc/kune/core/client/sitebar/SitebarActionsPanel.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/sitebar/SitebarActionsPanel.java 2011-04-29 14:42:12 UTC (rev 1333) +++ trunk/src/main/java/cc/kune/core/client/sitebar/SitebarActionsPanel.java 2011-05-03 08:22:21 UTC (rev 1334) @@ -33,16 +33,18 @@ public class SitebarActionsPanel extends ViewImpl implements SitebarActionsView { private final Provider<AboutKuneDialog> aboutPanel; + private final ErrorsDialog errorPanel; private final ActionSimplePanel toolbarLeft; private final ActionSimplePanel toolbarRight; @Inject public SitebarActionsPanel(final GSpaceArmor armor, final ActionSimplePanel toolbarRight, final ActionSimplePanel toolbarLeft, final I18nTranslationService i18n, - final Provider<AboutKuneDialog> aboutPanel) { + final Provider<AboutKuneDialog> aboutPanel, final ErrorsDialog errorPanel) { this.toolbarRight = toolbarRight; this.toolbarLeft = toolbarLeft; this.aboutPanel = aboutPanel; + this.errorPanel = errorPanel; toolbarRight.addStyleName("k-sitebar"); toolbarRight.addStyleName("k-floatright"); toolbarLeft.addStyleName("k-sitebar"); @@ -71,4 +73,9 @@ aboutPanel.get().showCentered(); } + @Override + public void showErrorDialog() { + errorPanel.showCentered(); + } + } Modified: trunk/src/main/java/cc/kune/core/client/sitebar/SitebarActionsPresenter.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/sitebar/SitebarActionsPresenter.java 2011-04-29 14:42:12 UTC (rev 1333) +++ trunk/src/main/java/cc/kune/core/client/sitebar/SitebarActionsPresenter.java 2011-05-03 08:22:21 UTC (rev 1334) @@ -54,6 +54,7 @@ @ProxyCodeSplit public interface SitebarActionsProxy extends Proxy<SitebarActionsPresenter> { } + public interface SitebarActionsView extends View { IsActionExtensible getLeftBar(); @@ -61,11 +62,14 @@ IsActionExtensible getRightBar(); void showAboutDialog(); + + void showErrorDialog(); } + public static final ToolbarDescriptor LEFT_TOOLBAR = new ToolbarDescriptor(); - public static final ToolbarDescriptor LEFT_TOOLBAR = new ToolbarDescriptor(); public static final MenuDescriptor OPTIONS_MENU = new MenuDescriptor(); public static final ToolbarDescriptor RIGHT_TOOLBAR = new ToolbarDescriptor(); + public static final String SITE_OPTIONS_MENU = "kune-sop-om"; private final I18nTranslationService i18n; private final IconResources icons; @@ -105,6 +109,7 @@ } private void init() { + OPTIONS_MENU.withId(SITE_OPTIONS_MENU); getView().getLeftBar().add(LEFT_TOOLBAR); getView().getRightBar().add(RIGHT_TOOLBAR); } @@ -131,8 +136,13 @@ bugsAction.putValue(Action.SMALL_ICON, icons.bug()); final MenuItemDescriptor reportBugs = new MenuItemDescriptor(OPTIONS_MENU, bugsAction); - // final KeyStroke shortcut = Shortcut.getShortcut(true, true, false, - // false, Character.valueOf('K')); + final AbstractExtendedAction errorAction = new AbstractExtendedAction() { + @Override + public void actionPerformed(final ActionEvent event) { + getView().showErrorDialog(); + } + }; + final AbstractExtendedAction aboutAction = new AbstractExtendedAction() { @Override public void actionPerformed(final ActionEvent event) { @@ -146,7 +156,6 @@ KuneWindowUtils.open("http://incubator.apache.org/wave/"); } }; - final MenuItemDescriptor gotoKuneDevSite = new MenuItemDescriptor(OPTIONS_MENU, new AbstractAction() { @Override public void actionPerformed(final ActionEvent event) { @@ -160,6 +169,8 @@ wavePowered.putValue(Action.SMALL_ICON, res.waveIcon()); aboutAction.putValue(Action.NAME, i18n.t("About kune")); aboutAction.putValue(Action.SMALL_ICON, res.info()); + errorAction.putValue(Action.NAME, i18n.t("Errors info")); + errorAction.putValue(Action.SMALL_ICON, res.important()); // aboutAction.setShortcut(shortcut); // shortcutReg.put(shortcut, aboutAction); @@ -171,10 +182,10 @@ right.add(OPTIONS_MENU); right.add(gotoKuneDevSite); right.add(reportBugs); + right.add(new MenuItemDescriptor(OPTIONS_MENU, errorAction)); right.add(new MenuItemDescriptor(OPTIONS_MENU, aboutAction)); right.add(menuSeparator); right.add(new MenuItemDescriptor(OPTIONS_MENU, wavePowered)); - } @Override Added: trunk/src/main/java/cc/kune/core/client/sn/actions/conditions/IsNotParticipantOfCurrentStateCondition.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/sn/actions/conditions/IsNotParticipantOfCurrentStateCondition.java (rev 0) +++ trunk/src/main/java/cc/kune/core/client/sn/actions/conditions/IsNotParticipantOfCurrentStateCondition.java 2011-05-03 08:22:21 UTC (rev 1334) @@ -0,0 +1,26 @@ +package cc.kune.core.client.sn.actions.conditions; + +import cc.kune.common.client.actions.ui.descrip.GuiActionDescrip; +import cc.kune.common.client.actions.ui.descrip.GuiAddCondition; +import cc.kune.core.client.state.Session; +import cc.kune.core.shared.dto.StateContentDTO; + +import com.google.inject.Inject; +import com.google.inject.Singleton; + +@Singleton +public class IsNotParticipantOfCurrentStateCondition implements GuiAddCondition { + + private final Session session; + + @Inject + public IsNotParticipantOfCurrentStateCondition(final Session session) { + this.session = session; + } + + @Override + public boolean mustBeAdded(final GuiActionDescrip descr) { + final StateContentDTO currentState = session.getContentState(); + return !currentState.isParticipant(); + } +} Modified: trunk/src/main/java/cc/kune/core/server/content/ContentManager.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/content/ContentManager.java 2011-04-29 14:42:12 UTC (rev 1333) +++ trunk/src/main/java/cc/kune/core/server/content/ContentManager.java 2011-05-03 08:22:21 UTC (rev 1334) @@ -45,6 +45,8 @@ void addAuthor(User user, Long contentId, String authorShortName) throws DefaultException; + void addParticipant(User user, Long contentId, String participant); + Content createContent(String title, String body, User author, Container container, String typeId); boolean findIfExistsTitle(Container container, String title); Modified: trunk/src/main/java/cc/kune/core/server/content/ContentManagerDefault.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/content/ContentManagerDefault.java 2011-04-29 14:42:12 UTC (rev 1333) +++ trunk/src/main/java/cc/kune/core/server/content/ContentManagerDefault.java 2011-05-03 08:22:21 UTC (rev 1334) @@ -65,255 +65,256 @@ @Singleton public class ContentManagerDefault extends DefaultManager<Content, Long> implements ContentManager { - private final ContainerFinder containerFinder; - private final ContentFinder contentFinder; - private final FinderService finder; - private final KuneWaveManager kuneWaveManager; - private final I18nLanguageFinder languageFinder; - private final ParticipantUtils participantUtils; - private final TagUserContentManager tagManager; - private final UserFinder userFinder; + private final ContainerFinder containerFinder; + private final ContentFinder contentFinder; + private final FinderService finder; + private final KuneWaveManager kuneWaveManager; + private final I18nLanguageFinder languageFinder; + private final ParticipantUtils participantUtils; + private final TagUserContentManager tagManager; + private final UserFinder userFinder; - @Inject - public ContentManagerDefault(final ContentFinder contentFinder, final ContainerFinder containerFinder, - final Provider<EntityManager> provider, final FinderService finder, final UserFinder userFinder, - final I18nLanguageFinder languageFinder, final TagUserContentManager tagManager, - final KuneWaveManager kuneWaveManager, final ParticipantUtils participantUtils) { - super(provider, Content.class); - this.contentFinder = contentFinder; - this.containerFinder = containerFinder; - this.finder = finder; - this.userFinder = userFinder; - this.languageFinder = languageFinder; - this.tagManager = tagManager; - this.kuneWaveManager = kuneWaveManager; - this.participantUtils = participantUtils; - } + @Inject + public ContentManagerDefault(final ContentFinder contentFinder, final ContainerFinder containerFinder, + final Provider<EntityManager> provider, final FinderService finder, final UserFinder userFinder, + final I18nLanguageFinder languageFinder, final TagUserContentManager tagManager, + final KuneWaveManager kuneWaveManager, final ParticipantUtils participantUtils) { + super(provider, Content.class); + this.contentFinder = contentFinder; + this.containerFinder = containerFinder; + this.finder = finder; + this.userFinder = userFinder; + this.languageFinder = languageFinder; + this.tagManager = tagManager; + this.kuneWaveManager = kuneWaveManager; + this.participantUtils = participantUtils; + } - @Override - public void addAuthor(final User user, final Long contentId, final String authorShortName) - throws DefaultException { - final Content content = finder.getContent(contentId); - final User author = userFinder.getByShortName(authorShortName); - if (author == null) { - throw new UserNotFoundException(); + @Override + public void addAuthor(final User user, final Long contentId, final String authorShortName) throws DefaultException { + final Content content = finder.getContent(contentId); + final User author = userFinder.getByShortName(authorShortName); + if (author == null) { + throw new UserNotFoundException(); + } + content.addAuthor(author); } - content.addAuthor(author); - } - @Override - public Content createContent(final String title, final String body, final User author, - final Container container, final String typeId) { - String contentBody; - FilenameUtils.checkBasicFilename(title); - final String newtitle = findInexistentTitle(container, title); - final Content newContent = new Content(); - newContent.addAuthor(author); - newContent.setLanguage(author.getLanguage()); - newContent.setTypeId(typeId); - container.addContent(newContent); - newContent.setContainer(container); - final Revision revision = new Revision(newContent); - revision.setTitle(newtitle); - // Duplicate in StateServiceDefault - if (newContent.isWave()) { - final WaveRef waveRef = kuneWaveManager.createWave(title, body, - participantUtils.of(author.getShortName())); - contentBody = JavaWaverefEncoder.encodeToUriPathSegment(waveRef); - } else { - contentBody = body; + @Override + public void addParticipant(final User user, final Long contentId, final String participant) { + final Content content = finder.getContent(contentId); + if (content.isWave()) { + kuneWaveManager.addParticipant(getWaveRef(content), content.getAuthors().get(0).getShortName(), + user.getShortName(), participant); + } } - revision.setBody(contentBody); - newContent.addRevision(revision); - return persist(newContent); - } - private MultiFieldQueryParser createMultiFieldParser() { - final MultiFieldQueryParser parser = new MultiFieldQueryParser(DEF_GLOBAL_SEARCH_FIELDS, - new StandardAnalyzer()); - return parser; - } + @Override + public Content createContent(final String title, final String body, final User author, final Container container, + final String typeId) { + String contentBody; + FilenameUtils.checkBasicFilename(title); + final String newtitle = findInexistentTitle(container, title); + final Content newContent = new Content(); + newContent.addAuthor(author); + newContent.setLanguage(author.getLanguage()); + newContent.setTypeId(typeId); + container.addContent(newContent); + newContent.setContainer(container); + final Revision revision = new Revision(newContent); + revision.setTitle(newtitle); + // Duplicate in StateServiceDefault + if (newContent.isWave()) { + final WaveRef waveRef = kuneWaveManager.createWave(title, body, participantUtils.of(author.getShortName())); + contentBody = JavaWaverefEncoder.encodeToUriPathSegment(waveRef); + } else { + contentBody = body; + } + revision.setBody(contentBody); + newContent.addRevision(revision); + return persist(newContent); + } - @Override - public boolean findIfExistsTitle(final Container container, final String title) { - return (contentFinder.findIfExistsTitle(container, title) > 0) - || (containerFinder.findIfExistsTitle(container, title) > 0); - } + private MultiFieldQueryParser createMultiFieldParser() { + final MultiFieldQueryParser parser = new MultiFieldQueryParser(DEF_GLOBAL_SEARCH_FIELDS, new StandardAnalyzer()); + return parser; + } - private String findInexistentTitle(final Container container, final String title) { - String initialTitle = String.valueOf(title); - while (findIfExistsTitle(container, initialTitle)) { - initialTitle = FileUtils.getNextSequentialFileName(initialTitle); + @Override + public boolean findIfExistsTitle(final Container container, final String title) { + return (contentFinder.findIfExistsTitle(container, title) > 0) + || (containerFinder.findIfExistsTitle(container, title) > 0); } - return initialTitle; - } - @Override - public Double getRateAvg(final Content content) { - return finder.getRateAvg(content); - } + private String findInexistentTitle(final Container container, final String title) { + String initialTitle = String.valueOf(title); + while (findIfExistsTitle(container, initialTitle)) { + initialTitle = FileUtils.getNextSequentialFileName(initialTitle); + } + return initialTitle; + } - @Override - public Long getRateByUsers(final Content content) { - return finder.getRateByUsers(content); - } + @Override + public Double getRateAvg(final Content content) { + return finder.getRateAvg(content); + } - @Override - public Double getRateContent(final User rater, final Content content) { - final Rate rate = finder.getRate(rater, content); - if (rate != null) { - return rate.getValue(); - } else { - return null; + @Override + public Long getRateByUsers(final Content content) { + return finder.getRateByUsers(content); } - } - @Override - public RateResult rateContent(final User rater, final Long contentId, final Double value) - throws DefaultException { - final Content content = finder.getContent(contentId); - final Rate oldRate = finder.getRate(rater, content); - if (oldRate == null) { - final Rate rate = new Rate(rater, content, value); - super.persist(rate, Rate.class); - } else { - oldRate.setValue(value); - super.persist(oldRate, Rate.class); + @Override + public Double getRateContent(final User rater, final Content content) { + final Rate rate = finder.getRate(rater, content); + if (rate != null) { + return rate.getValue(); + } else { + return null; + } } - final Double rateAvg = getRateAvg(content); - final Long rateByUsers = getRateByUsers(content); - return new RateResult(rateAvg != null ? rateAvg : 0D, rateByUsers != null ? rateByUsers.intValue() - : 0, value); - } - @Override - public void removeAuthor(final User user, final Long contentId, final String authorShortName) - throws DefaultException { - final Content content = finder.getContent(contentId); - final User author = userFinder.getByShortName(authorShortName); - if (author == null) { - throw new UserNotFoundException(); + private WaveRef getWaveRef(final Content content) { + try { + return JavaWaverefEncoder.decodeWaveRefFromPath(String.valueOf(content.getLastRevision().getBody())); + } catch (final InvalidWaveRefException e) { + throw new DefaultException("Error getting the wave"); + } } - content.removeAuthor(author); - } - @Override - public Content renameContent(final User user, final Long contentId, final String newTitle) - throws DefaultException { - final String newTitleWithoutNL = FilenameUtils.chomp(newTitle); - FilenameUtils.checkBasicFilename(newTitleWithoutNL); - final Content content = finder.getContent(contentId); - if (findIfExistsTitle(content.getContainer(), newTitleWithoutNL)) { - throw new NameInUseException(); + @Override + public RateResult rateContent(final User rater, final Long contentId, final Double value) throws DefaultException { + final Content content = finder.getContent(contentId); + final Rate oldRate = finder.getRate(rater, content); + if (oldRate == null) { + final Rate rate = new Rate(rater, content, value); + super.persist(rate, Rate.class); + } else { + oldRate.setValue(value); + super.persist(oldRate, Rate.class); + } + final Double rateAvg = getRateAvg(content); + final Long rateByUsers = getRateByUsers(content); + return new RateResult(rateAvg != null ? rateAvg : 0D, rateByUsers != null ? rateByUsers.intValue() : 0, value); } - content.getLastRevision().setTitle(newTitleWithoutNL); - if (content.isWave()) { - final String author = content.getAuthors().get(0).getShortName(); - try { - kuneWaveManager.setTitle( - JavaWaverefEncoder.decodeWaveRefFromPath(String.valueOf(content.getLastRevision().getBody())), - newTitle, author); - } catch (final InvalidWaveRefException e) { - throw new DefaultException("Error setting the wave title"); - } + + @Override + public void removeAuthor(final User user, final Long contentId, final String authorShortName) + throws DefaultException { + final Content content = finder.getContent(contentId); + final User author = userFinder.getByShortName(authorShortName); + if (author == null) { + throw new UserNotFoundException(); + } + content.removeAuthor(author); } - return content; - } - @Override - public Content save(final User editor, final Content content) { - return persist(content); - } + @Override + public Content renameContent(final User user, final Long contentId, final String newTitle) throws DefaultException { + final String newTitleWithoutNL = FilenameUtils.chomp(newTitle); + FilenameUtils.checkBasicFilename(newTitleWithoutNL); + final Content content = finder.getContent(contentId); + if (findIfExistsTitle(content.getContainer(), newTitleWithoutNL)) { + throw new NameInUseException(); + } + content.getLastRevision().setTitle(newTitleWithoutNL); + if (content.isWave()) { + final String author = content.getAuthors().get(0).getShortName(); + kuneWaveManager.setTitle(getWaveRef(content), newTitle, author); + } + return content; + } - @Override - public Content save(final User editor, final Content content, final String body) { - final Revision revision = new Revision(content); - revision.setEditor(editor); - revision.setTitle(content.getTitle()); - revision.setBody(body); - content.addRevision(revision); - return persist(content); - } + @Override + public Content save(final User editor, final Content content) { + return persist(content); + } - @Override - public SearchResult<Content> search(final String search) { - return this.search(search, null, null); - } + @Override + public Content save(final User editor, final Content content, final String body) { + final Revision revision = new Revision(content); + revision.setEditor(editor); + revision.setTitle(content.getTitle()); + revision.setBody(body); + content.addRevision(revision); + return persist(content); + } - @Override - public SearchResult<Content> search(final String search, final Integer firstResult, - final Integer maxResults) { - final MultiFieldQueryParser parser = createMultiFieldParser(); - Query query; - try { - query = parser.parse(search); - } catch (final ParseException e) { - throw new ServerManagerException("Error parsing search"); + @Override + public SearchResult<Content> search(final String search) { + return this.search(search, null, null); } - return super.search(query, firstResult, maxResults); - } - @Override - public SearchResult<Content> searchMime(final String search, final Integer firstResult, - final Integer maxResults, final String groupShortName, final String mimetype) { - final List<Content> list = contentFinder.findMime(groupShortName, "%" + search + "%", mimetype, - firstResult, maxResults); - final Long count = contentFinder.findMimeCount(groupShortName, "%" + search + "%", mimetype); - return new SearchResult<Content>(count.intValue(), list); - } + @Override + public SearchResult<Content> search(final String search, final Integer firstResult, final Integer maxResults) { + final MultiFieldQueryParser parser = createMultiFieldParser(); + 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 SearchResult<?> searchMime(final String search, final Integer firstResult, - final Integer maxResults, final String groupShortName, final String mimetype, - final String mimetype2) { - final List<Content> list = contentFinder.find2Mime(groupShortName, "%" + search + "%", mimetype, - mimetype2, firstResult, maxResults); - final Long count = contentFinder.find2MimeCount(groupShortName, "%" + search + "%", mimetype, - mimetype2); - return new SearchResult<Content>(count.intValue(), list); - } + @Override + public SearchResult<Content> searchMime(final String search, final Integer firstResult, final Integer maxResults, + final String groupShortName, final String mimetype) { + final List<Content> list = contentFinder.findMime(groupShortName, "%" + search + "%", mimetype, firstResult, + maxResults); + final Long count = contentFinder.findMimeCount(groupShortName, "%" + search + "%", mimetype); + return new SearchResult<Content>(count.intValue(), list); + } - @Override - public I18nLanguage setLanguage(final User user, final Long contentId, final String languageCode) - throws DefaultException { - final Content content = finder.getContent(contentId); - final I18nLanguage language = languageFinder.findByCode(languageCode); - if (language == null) { - throw new I18nNotFoundException(); + @Override + public SearchResult<?> searchMime(final String search, final Integer firstResult, final Integer maxResults, + final String groupShortName, final String mimetype, final String mimetype2) { + final List<Content> list = contentFinder.find2Mime(groupShortName, "%" + search + "%", mimetype, mimetype2, + firstResult, maxResults); + final Long count = contentFinder.find2MimeCount(groupShortName, "%" + search + "%", mimetype, mimetype2); + return new SearchResult<Content>(count.intValue(), list); } - content.setLanguage(language); - return language; - } - @Override - public void setPublishedOn(final User user, final Long contentId, final Date publishedOn) - throws DefaultException { - final Content content = finder.getContent(contentId); - content.setPublishedOn(publishedOn); - } + @Override + public I18nLanguage setLanguage(final User user, final Long contentId, final String languageCode) + throws DefaultException { + final Content content = finder.getContent(contentId); + final I18nLanguage language = languageFinder.findByCode(languageCode); + if (language == null) { + throw new I18nNotFoundException(); + } + content.setLanguage(language); + return language; + } - @Override - public Content setStatus(final Long contentId, final ContentStatus status) { - final Content content = finder.getContent(contentId); - content.setStatus(status); - switch (status) { - case publishedOnline: - content.setPublishedOn(new Date()); - content.setDeletedOn(null); - break; - case inTheDustbin: - content.setDeletedOn(new Date()); - content.setPublishedOn(null); - break; - default: - break; + @Override + public void setPublishedOn(final User user, final Long contentId, final Date publishedOn) throws DefaultException { + final Content content = finder.getContent(contentId); + content.setPublishedOn(publishedOn); } - return content; - } - @Override - public void setTags(final User user, final Long contentId, final String tags) throws DefaultException { - final Content content = finder.getContent(contentId); - tagManager.setTags(user, content, tags); - } + @Override + public Content setStatus(final Long contentId, final ContentStatus status) { + final Content content = finder.getContent(contentId); + content.setStatus(status); + switch (status) { + case publishedOnline: + content.setPublishedOn(new Date()); + content.setDeletedOn(null); + break; + case inTheDustbin: + content.setDeletedOn(new Date()); + content.setPublishedOn(null); + break; + default: + break; + } + return content; + } + + @Override + public void setTags(final User user, final Long contentId, final String tags) throws DefaultException { + final Content content = finder.getContent(contentId); + tagManager.setTags(user, content, tags); + } } Modified: trunk/src/main/java/cc/kune/core/server/rpc/ContentRPC.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/rpc/ContentRPC.java 2011-04-29 14:42:12 UTC (rev 1333) +++ trunk/src/main/java/cc/kune/core/server/rpc/ContentRPC.java 2011-05-03 08:22:21 UTC (rev 1334) @@ -169,6 +169,17 @@ @Override @Authenticated + @Authorizated(accessRolRequired = AccessRol.Editor, mustCheckMembership = false) + @Transactional + public void addParticipant(final String userHash, final StateToken token, final String participant) + throws DefaultException { + final Long contentId = ContentUtils.parseId(token.getDocument()); + final User user = getCurrentUser(); + contentManager.addParticipant(user, contentId, participant); + } + + @Override + @Authenticated @Authorizated(actionLevel = ActionLevel.container, accessRolRequired = AccessRol.Editor) @Transactional public StateContainerDTO addRoom(final String userHash, final StateToken parentToken, final String roomName) Modified: trunk/src/main/java/cc/kune/core/server/state/StateContent.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/state/StateContent.java 2011-04-29 14:42:12 UTC (rev 1333) +++ trunk/src/main/java/cc/kune/core/server/state/StateContent.java 2011-05-03 08:22:21 UTC (rev 1334) @@ -28,137 +28,144 @@ import cc.kune.domain.User; public class StateContent extends StateContainer { + private List<User> authors; + private String content; + private AccessRights contentRights; + private Double currentUserRate; + private String documentId; + private boolean isParticipant; + private boolean isWave; + private BasicMimeType mimeType; + private Date publishedOn; + private Double rate; + private Integer rateByUsers; + private ContentStatus status; + private String tags; + private int version; + private String waveRef; - private List<User> authors; - private String content; - private AccessRights contentRights; - private Double currentUserRate; - private String documentId; - private boolean isWave; - private BasicMimeType mimeType; - private Date publishedOn; - private Double rate; - private Integer rateByUsers; - private ContentStatus status; - private String tags; - private int version; - private String waveRef; + public StateContent() { + } - public StateContent() { - } + public List<User> getAuthors() { + return authors; + } - public List<User> getAuthors() { - return authors; - } + public String getContent() { + return content; + } - public String getContent() { - return content; - } + public AccessRights getContentRights() { + return contentRights; + } - public AccessRights getContentRights() { - return contentRights; - } + public Double getCurrentUserRate() { + return currentUserRate; + } - public Double getCurrentUserRate() { - return currentUserRate; - } + public String getDocumentId() { + return documentId; + } - public String getDocumentId() { - return documentId; - } + public BasicMimeType getMimeType() { + return mimeType; + } - public BasicMimeType getMimeType() { - return mimeType; - } + public Date getPublishedOn() { + return publishedOn; + } - public Date getPublishedOn() { - return publishedOn; - } + public Double getRate() { + return rate; + } - public Double getRate() { - return rate; - } + public Integer getRateByUsers() { + return rateByUsers; + } - public Integer getRateByUsers() { - return rateByUsers; - } + public ContentStatus getStatus() { + return status; + } - public ContentStatus getStatus() { - return status; - } + public String getTags() { + return tags; + } - public String getTags() { - return tags; - } + public int getVersion() { + return version; + } - public int getVersion() { - return version; - } + public String getWaveRef() { + return waveRef; + } - public String getWaveRef() { - return waveRef; - } + public boolean isParticipant() { + return isParticipant; + } - public boolean isWave() { - return waveRef != null; - } + public boolean isWave() { + return waveRef != null; + } - public void setAuthors(final List<User> authors) { - this.authors = authors; - } + public void setAuthors(final List<User> authors) { + this.authors = authors; + } - public void setContent(final String content) { - this.content = content; - } + public void setContent(final String content) { + this.content = content; + } - public void setContentRights(final AccessRights contentRights) { - this.contentRights = contentRights; - } + public void setContentRights(final AccessRights contentRights) { + this.contentRights = contentRights; + } - public void setCurrentUserRate(final Double currentUserRate) { - this.currentUserRate = currentUserRate; - } + public void setCurrentUserRate(final Double currentUserRate) { + this.currentUserRate = currentUserRate; + } - public void setDocumentId(final String documentId) { - this.documentId = documentId; - } + public void setDocumentId(final String documentId) { + this.documentId = documentId; + } - public void setMimeType(final BasicMimeType mimeType) { - this.mimeType = mimeType; - } + void setIsParticipant(final boolean isParticipant) { + this.isParticipant = isParticipant; + } - public void setPublishedOn(final Date publishedOn) { - this.publishedOn = publishedOn; - } + public void setMimeType(final BasicMimeType mimeType) { + this.mimeType = mimeType; + } - public void setRate(final Double rate) { - this.rate = rate; - } + public void setPublishedOn(final Date publishedOn) { + this.publishedOn = publishedOn; + } - public void setRateByUsers(final Integer rateByUsers) { - this.rateByUsers = rateByUsers; - } + public void setRate(final Double rate) { + this.rate = rate; + } - public void setStatus(final ContentStatus status) { - this.status = status; - } + public void setRateByUsers(final Integer rateByUsers) { + this.rateByUsers = rateByUsers; + } - public void setTags(final String tags) { - this.tags = tags; - } + public void setStatus(final ContentStatus status) { + this.status = status; + } - public void setVersion(final int version) { - this.version = version; - } + public void setTags(final String tags) { + this.tags = tags; + } - public void setWaveRef(final String waveRef) { - this.waveRef = waveRef; - } + public void setVersion(final int version) { + this.version = version; + } - @Override - public String toString() { - return "State[" + getStateToken() + "/" + getTypeId() + (mimeType != null ? "-" + mimeType : "") - + "]"; - } + public void setWaveRef(final String waveRef) { + this.waveRef = waveRef; + } + @Override + public String toString() { + return "State[" + getStateToken() + "/" + getTypeId() + (mimeType != null ? "-" + mimeType : "") + "]"; + } + } Modified: trunk/src/main/java/cc/kune/core/server/state/StateServiceDefault.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/state/StateServiceDefault.java 2011-04-29 14:42:12 UTC (rev 1333) +++ trunk/src/main/java/cc/kune/core/server/state/StateServiceDefault.java 2011-05-03 08:22:21 UTC (rev 1334) @@ -44,123 +44,123 @@ @Singleton public class StateServiceDefault implements StateService { - private final ContentManager contentManager; - private final GroupManager groupManager; - private final I18nTranslationService i18n; - private final KuneWaveManager kuneWaveManager; - private final AccessRightsService rightsService; - private final SocialNetworkManager socialNetworkManager; - private final TagUserContentManager tagManager; + private final ContentManager contentManager; + private final GroupManager groupManager; + private final I18nTranslationService i18n; + private final KuneWaveManager kuneWaveManager; + private final AccessRightsService rightsService; + private final SocialNetworkManager socialNetworkManager; + private final TagUserContentManager tagManager; - @Inject - public StateServiceDefault(final GroupManager groupManager, - final SocialNetworkManager socialNetworkManager, final ContentManager contentManager, - final TagUserContentManager tagManager, final AccessRightsService rightsService, - final I18nTranslationService i18n, final KuneWaveManager kuneWaveManager) { - this.groupManager = groupManager; - this.socialNetworkManager = socialNetworkManager; - this.contentManager = contentManager; - this.tagManager = tagManager; - this.rightsService = rightsService; - this.i18n = i18n; - this.kuneWaveManager = kuneWaveManager; - } + @Inject + public StateServiceDefault(final GroupManager groupManager, final SocialNetworkManager socialNetworkManager, + final ContentManager contentManager, final TagUserContentManager tagManager, + final AccessRightsService rightsService, final I18nTranslationService i18n, + final KuneWaveManager kuneWaveManager) { + this.groupManager = groupManager; + this.socialNetworkManager = socialNetworkManager; + this.contentManager = contentManager; + this.tagManager = tagManager; + this.rightsService = rightsService; + this.i18n = i18n; + this.kuneWaveManager = kuneWaveManager; + } - private Container calculateRootContainer(final Container container) { - return container.isRoot() ? container : container.getAbsolutePath().get(0); - } + private Container calculateRootContainer(final Container container) { + return container.isRoot() ? container : container.getAbsolutePath().get(0); + } - @Override - public StateContainer create(final User userLogged, final Container container) { - final StateContainer state = new StateContainer(); - state.setTitle(container.getName()); - state.setTypeId(container.getTypeId()); - state.setLanguage(container.getLanguage()); - state.setStateToken(container.getStateToken()); - state.setRootContainer(calculateRootContainer(container)); - state.setLicense(container.getOwner().getDefaultLicense()); - state.setAccessLists(container.getAccessLists()); - final Group group = container.getOwner(); - setCommon(state, userLogged, group, container); - return state; - } + @Override + public StateContainer create(final User userLogged, final Container container) { + final StateContainer state = new StateContainer(); + state.setTitle(container.getName()); + state.setTypeId(container.getTypeId()); + state.setLanguage(container.getLanguage()); + state.setStateToken(container.getStateToken()); + state.setRootContainer(calculateRootContainer(container)); + state.setLicense(container.getOwner().getDefaultLicense()); + state.setAccessLists(container.getAccessLists()); + final Group group = container.getOwner(); + setCommon(state, userLogged, group, container); + return state; + } - @Override - public StateContent create(final User userLogged, final Content content) { - final StateContent state = new StateContent(); - final String typeId = content.getTypeId(); - state.setTypeId(typeId); - state.setMimeType(content.getMimeType()); - state.setDocumentId(content.getId().toString()); - state.setLanguage(content.getLanguage()); - state.setPublishedOn(content.getPublishedOn()); - state.setAuthors(content.getAuthors()); - state.setTags(tagManager.getTagsAsString(userLogged, content)); - state.setStatus(content.getStatus()); - state.setStateToken(content.getStateToken()); - final Revision revision = content.getLastRevision(); - state.setVersion(content.getVersion()); - final char[] text = revision.getBody(); - final String textBody = text == null ? null : new String(text); - if (content.isWave()) { - state.setWaveRef(textBody); - try { - final Wavelet wavelet = kuneWaveManager.fetchWavelet( - JavaWaverefEncoder.decodeWaveRefFromPath(textBody), - content.getAuthors().get(0).getShortName()); - state.setContent(wavelet.getRootBlip().getContent()); - state.setTitle(wavelet.getTitle()); - } catch (final InvalidWaveRefException e) { - throw new DefaultException("Error retriving Wave"); - } - } else { - state.setContent(textBody); - state.setTitle(revision.getTitle()); + @Override + public StateContent create(final User userLogged, final Content content) { + final StateContent state = new StateContent(); + final String typeId = content.getTypeId(); + state.setTypeId(typeId); + state.setMimeType(content.getMimeType()); + state.setDocumentId(content.getId().toString()); + state.setLanguage(content.getLanguage()); + state.setPublishedOn(content.getPublishedOn()); + state.setAuthors(content.getAuthors()); + state.setTags(tagManager.getTagsAsString(userLogged, content)); + state.setStatus(content.getStatus()); + state.setStateToken(content.getStateToken()); + final Revision revision = content.getLastRevision(); + state.setVersion(content.getVersion()); + final char[] text = revision.getBody(); + final String textBody = text == null ? null : new String(text); + if (content.isWave()) { + state.setWaveRef(textBody); + try { + final Wavelet wavelet = kuneWaveManager.fetchWavelet( + JavaWaverefEncoder.decodeWaveRefFromPath(textBody), content.getAuthors().get(0).getShortName()); + state.setContent(wavelet.getRootBlip().getContent()); + state.setTitle(wavelet.getTitle()); + state.setIsParticipant(kuneWaveManager.isParticipant(wavelet, userLogged.getShortName())); + } catch (final InvalidWaveRefException e) { + throw new DefaultException("Error retriving Wave"); + } + } else { + state.setContent(textBody); + state.setTitle(revision.getTitle()); + } + final Container container = content.getContainer(); + state.setRootContainer(calculateRootContainer(container)); + final License license = content.getLicense(); + final Group group = container.getOwner(); + state.setLicense(license == null ? group.getDefaultLicense() : license); + state.setContentRights(rightsService.get(userLogged, content.getAccessLists())); + state.setAccessLists(content.getAccessLists()); + setCommon(state, userLogged, group, container); + if (userLogged != User.UNKNOWN_USER) { + state.setCurrentUserRate(contentManager.getRateContent(userLogged, content)); + } + // FIXME: user RateResult + final Double rateAvg = contentManager.getRateAvg(content); + state.setRate(rateAvg != null ? rateAvg : 0D); + final Long rateByUsers = contentManager.getRateByUsers(content); + state.setRateByUsers(rateByUsers != null ? rateByUsers.intValue() : 0); + return state; } - final Container container = content.getContainer(); - state.setRootContainer(calculateRootContainer(container)); - final License license = content.getLicense(); - final Group group = container.getOwner(); - state.setLicense(license == null ? group.getDefaultLicense() : license); - state.setContentRights(rightsService.get(userLogged, content.getAccessLists())); - state.setAccessLists(content.getAccessLists()); - setCommon(state, userLogged, group, container); - if (userLogged != User.UNKNOWN_USER) { - state.setCurrentUserRate(contentManager.getRateContent(userLogged, content)); + + @Override + public StateNoContent createNoHome(final User userLogged, final String groupShortName) { + final Group group = groupManager.findByShortName(groupShortName); + assert (group.isPersonal()); + final StateNoContent state = new StateNoContent(); + state.setGroup(group); + state.setEnabledTools(groupManager.findEnabledTools(group.getId())); + setSocialNetwork(state, userLogged, group); + state.setStateToken(group.getStateToken()); + state.setTitle("<h2>" + i18n.t("This user does not have a homepage") + "</h2>"); + return state; } - // FIXME: user RateResult - final Double rateAvg = contentManager.getRateAvg(content); - state.setRate(rateAvg != null ? rateAvg : 0D); - final Long rateByUsers = contentManager.getRateByUsers(content); - state.setRateByUsers(rateByUsers != null ? rateByUsers.intValue() : 0); - return state; - } - @Override - public StateNoContent createNoHome(final User userLogged, final String groupShortName) { - final Group group = groupManager.findByShortName(groupShortName); - assert (group.isPersonal()); - final StateNoContent state = new StateNoContent(); - state.setGroup(group); - state.setEnabledTools(groupManager.findEnabledTools(group.getId())); - setSocialNetwork(state, userLogged, group); - state.setStateToken(group.getStateToken()); - state.setTitle("<h2>" + i18n.t("This user does not have a homepage") + "</h2>"); - return state; - } + private void setCommon(final StateContainer state, final User userLogged, final Group group, + final Container container) { + state.setToolName(container.getToolName()); + state.setGroup(group); + state.setContainer(container); + state.setContainerRights(rightsService.get(userLogged, container.getAccessLists())); + state.setEnabledTools(groupManager.findEnabledTools(group.getId())); + state.setTagCloudResult(tagManager.getTagCloudResultByGroup(group)); + setSocialNetwork(state, userLogged, group); + } - private void setCommon(final StateContainer state, final User userLogged, final Group group, - final Container container) { - state.setToolName(container.getToolName()); - state.setGroup(group); - state.setContainer(container); - state.setContainerRights(rightsService.get(userLogged, container.getAccessLists())); - state.setEnabledTools(groupManager.findEnabledTools(group.getId())); - state.setTagCloudResult(tagManager.getTagCloudResultByGroup(group)); - setSocialNetwork(state, userLogged, group); - } - - private void setSocialNetwork(final StateAbstract state, final User userLogged, final Group group) { - state.setSocialNetworkData(socialNetworkManager.getSocialNetworkData(userLogged, group)); - } + private void setSocialNetwork(final StateAbstract state, final User userLogged, final Group group) { + state.setSocialNetworkData(socialNetworkManager.getSocialNetworkData(userLogged, group)); + } } Modified: trunk/src/main/java/cc/kune/core/shared/dto/StateContentDTO.java =================================================================== --- trunk/src/main/java/cc/kune/core/shared/dto/StateContentDTO.java 2011-04-29 14:42:12 UTC (rev 1333) +++ trunk/src/main/java/cc/kune/core/shared/dto/StateContentDTO.java 2011-05-03 08:22:21 UTC (rev 1334) @@ -35,6 +35,7 @@ private AccessRights contentRights; private Double currentUserRate; private String documentId; + private boolean isParticipant; private BasicMimeTypeDTO mimeType; private Date publishedOn; private Double rate; @@ -99,6 +100,10 @@ return waveRef; } + public boolean isParticipant() { + return isParticipant; + } + public void setAuthors(final List<UserSimpleDTO> authors) { this.authors = authors; } @@ -119,6 +124,10 @@ this.documentId = documentId; } + void setIsParticipant(final boolean isParticipant) { + this.isParticipant = isParticipant; + } + public void setMimeType(final BasicMimeTypeDTO mimeType) { this.mimeType = mimeType; } Modified: trunk/src/main/java/cc/kune/docs/client/actions/DocsClientActions.java =================================================================== --- trunk/src/main/java/cc/kune/docs/client/actions/DocsClientActions.java 2011-04-29 14:42:12 UTC (rev 1333) +++ trunk/src/main/java/cc/kune/docs/client/actions/DocsClientActions.java 2011-05-03 08:22:21 UTC (rev 1334) @@ -23,6 +23,7 @@ import static cc.kune.docs.shared.DocsConstants.TYPE_FOLDER; import static cc.kune.docs.shared.DocsConstants.TYPE_ROOT; import static cc.kune.docs.shared.DocsConstants.TYPE_UPLOADEDFILE; +import cc.kune.blogs.client.actions.ContentViewerOptionsMenu; import cc.kune.core.client.actions.ActionRegistryByType; import cc.kune.core.client.i18n.I18nUITranslationService; import cc.kune.core.client.resources.CoreResources; @@ -30,7 +31,8 @@ import cc.kune.core.client.state.StateManager; import cc.kune.gspace.client.actions.AbstractFoldableToolActions; import cc.kune.gspace.client.actions.ActionGroups; -import cc.kune.gspace.client.actions.RefreshContentBtn; +import cc.kune.gspace.client.actions.ParticipateInContentBtn; +import cc.kune.gspace.client.actions.RefreshContentMenuItem; import cc.kune.gspace.client.actions.SetAsHomePageMenuItem; import com.google.inject.Inject; @@ -38,34 +40,39 @@ public class DocsClientActions extends AbstractFoldableToolActions { - final String[] all = { TYPE_ROOT, TYPE_FOLDER, TYPE_DOCUMENT, TYPE_UPLOADEDFILE }; - final String[] containers = { TYPE_ROOT, TYPE_FOLDER }; - final String[] containersNoRoot = { TYPE_FOLDER }; - final String[] contents = { TYPE_DOCUMENT, TYPE_UPLOADEDFILE }; - final String[] contentsModerated = { TYPE_DOCUMENT, TYPE_UPLOADEDFILE }; + final String[] all = { TYPE_ROOT, TYPE_FOLDER, TYPE_DOCUMENT, TYPE_UPLOADEDFILE }; + final String[] containers = { TYPE_ROOT, TYPE_FOLDER }; + final String[] containersNoRoot = { TYPE_FOLDER }; + final String[] contents = { TYPE_DOCUMENT, TYPE_UPLOADEDFILE }; + final String[] contentsModerated = { TYPE_DOCUMENT, TYPE_UPLOADEDFILE }; - @Inject - public DocsClientActions(final I18nUITranslationService i18n, final Session session, - final StateManager stateManager, final ActionRegistryByType registry, final CoreResources res, - final Provider<GoParentFolderBtn> folderGoUp, final Provider<NewDocBtn> newDocBtn, - final Provider<NewFolderBtn> newFolderBtn, final Provider<OpenDocMenuItem> openContentMenuItem, - final Provider<DelDocMenuItem> delContentMenuItem, - final Provider<DelFolderMenuItem> delFolderMenuItem, final Provider<RefreshContentBtn> refresh, - final Provider<SetAsHomePageMenuItem> setAsHomePage) { - super(session, stateManager, i18n, registry); - actionsRegistry.addAction(ActionGroups.VIEW, folderGoUp, contents); - actionsRegistry.addAction(ActionGroups.VIEW, folderGoUp, containersNoRoot); - actionsRegistry.addAction(ActionGroups.VIEW, newDocBtn, containers); - actionsRegistry.addAction(ActionGroups.VIEW, newFolderBtn, containers); - actionsRegistry.addAction(ActionGroups.VIEW, refresh, all); - actionsRegistry.addAction(ActionGroups.MENUITEM, openContentMenuItem, contents); - actionsRegistry.addAction(ActionGroups.MENUITEM, openContentMenuItem, containersNoRoot); - actionsRegistry.addAction(ActionGroups.MENUITEM, delContentMenuItem, contents); - actionsRegistry.addAction(ActionGroups.MENUITEM, delFolderMenuItem, containersNoRoot); - actionsRegistry.addAction(ActionGroups.MENUITEM, setAsHomePage, contents); - } + @Inject + public DocsClientActions(final I18nUITranslationService i18n, final Session session, + final StateManager stateManager, final ActionRegistryByType registry, final CoreResources res, + final Provider<GoParentFolderBtn> folderGoUp, final Provider<NewDocBtn> newDocBtn, + final Provider<NewFolderBtn> newFolderBtn, final Provider<OpenDocMenuItem> openContentMenuItem, + final Provider<DelDocMenuItem> delContentMenuItem, + final Provider<ContentViewerOptionsMenu> optionsMenuContent, + final Provider<ParticipateInContentBtn> participateBtn, + final Provider<DelFolderMenuItem> delFolderMenuItem, final Provider<RefreshContentMenuItem> refresh, + final Provider<SetAsHomePageMenuItem> setAsHomePage) { + super(session, stateManager, i18n, registry); + actionsRegistry.addAction(ActionGroups.VIEW, optionsMenuContent, all); + actionsRegistry.addAction(ActionGroups.VIEW, refresh, all); + actionsRegistry.addAction(ActionGroups.VIEW, folderGoUp, contents); + actionsRegistry.addAction(ActionGroups.VIEW, folderGoUp, containersNoRoot); + actionsRegistry.addAction(ActionGroups.VIEW, newDocBtn, containers); + actionsRegistry.addAction(ActionGroups.VIEW, participateBtn, + contents); + actionsRegistry.addAction(ActionGroups.VIEW, newFolderBtn, containers); + actionsRegistry.addAction(ActionGroups.MENUITEM, openContentMenuItem, contents); + actionsRegistry.addAction(ActionGroups.MENUITEM, openContentMenuItem, containersNoRoot); + actionsRegistry.addAction(ActionGroups.MENUITEM, delContentMenuItem, contents); + actionsRegistry.addAction(ActionGroups.MENUITEM, delFolderMenuItem, containersNoRoot); + actionsRegistry.addAction(ActionGroups.MENUITEM, setAsHomePage, contents); + } - @Override - protected void createPostSessionInitActions() { - } + @Override + protected void createPostSessionInitActions() { + } } Modified: trunk/src/main/java/cc/kune/gspace/client/GSpaceGinModule.java =================================================================== --- trunk/src/main/java/cc/kune/gspace/client/GSpaceGinModule.java 2011-04-29 14:42:12 UTC (rev 1333) +++ trunk/src/main/java/cc/kune/gspace/client/GSpaceGinModule.java 2011-05-03 08:22:21 UTC (rev 1334) @@ -19,6 +19,7 @@ */ package cc.kune.gspace.client; +import cc.kune.blogs.client.actions.ContentViewerOptionsMenu; import cc.kune.client.ExtendedGinModule; import cc.kune.gspace.client.actions.RenameAction; import cc.kune.gspace.client.options.GroupOptions; @@ -81,56 +82,58 @@ public class GSpaceGinModule extends ExtendedGinModule { - /* - * (non-Javadoc) - * - * @see com.google.gwt.inject.client.AbstractGinModule#configure() - */ - @Override - protected void configure() { - bindPresenter(EntityLicensePresenter.class, EntityLicensePresenter.EntityLicenseView.class, - EntityLicensePanel.class, EntityLicensePresenter.EntityLicenseProxy.class); - bindPresenter(TagsSummaryPresenter.class, TagsSummaryPresenter.TagsSummaryView.class, - TagsSummaryPanel.class, TagsSummaryPresenter.TagsSummaryProxy.class); - bind(GSpaceArmorImpl.class).in(Singleton.class); - bind(GSpaceArmor.class).to(GSpaceArmorImpl.class).in(Singleton.class); - bind(GSpaceParts.class).asEagerSingleton(); - bindPresenter(ToolSelectorPresenter.class, ToolSelectorPresenter.ToolSelectorView.class, - ToolSelectorPanel.class, ToolSelectorPresenter.ToolSelectorProxy.class); - bind(ToolSelector.class).to(ToolSelectorPresenter.class).in(Singleton.class); - bindPresenter(DocViewerPresenter.class, DocViewerPresenter.DocViewerView.class, - DocViewerPanel.class, DocViewerPresenter.DocViewerProxy.class); - bindPresenter(FolderViewerPresenter.class, FolderViewerPresenter.FolderViewerView.class, - FolderViewerAsTablePanel.class, FolderViewerPresenter.FolderViewerProxy.class); + /* + * (non-Javadoc) + * + * @see com.google.gwt.inject.client.AbstractGinModule#configure() + */ + @Override + protected void configure() { + bindPresenter(EntityLicensePresenter.class, EntityLicensePresenter.EntityLicenseView.class, + EntityLicensePanel.class, EntityLicensePresenter.EntityLicenseProxy.class); + bindPresenter(TagsSummaryPresenter.class, TagsSummaryPresenter.TagsSummaryView.class, TagsSummaryPanel.class, + TagsSummaryPresenter.TagsSummaryProxy.class); + bind(GSpaceArmorImpl.class).in(Singleton.class); + bind(GSpaceArmor.class).to(GSpaceArmorImpl.class).in(Singleton.class); + bind(GSpaceParts.class).asEagerSingleton(); + bindPresenter(ToolSelectorPresenter.class, ToolSelectorPresenter.ToolSelectorView.class, + ToolSelectorPanel.class, ToolSelectorPresenter.ToolSelectorProxy.class); + bind(ToolSelector.class).to(ToolSelectorPresenter.class).in(Singleton.class); + bindPresenter(DocViewerPresenter.class, DocViewerPresenter.DocViewerView.class, DocViewerPanel.class, + DocViewerPresenter.DocViewerProxy.class); + bindPresenter(FolderViewerPresenter.class, FolderViewerPresenter.FolderViewerView.class, + FolderViewerAsTablePanel.class, FolderViewerPresenter.FolderViewerProxy.class); - s(GroupOptions.class, GroupOptionsPresenter.class); - s(GroupOptionsView.class, GroupOptionsPanel.class); - s(UserOptions.class, UserOptionsPresenter.class); - s(UserOptionsView.class, UserOptionsPanel.class); + s(GroupOptions.class, GroupOptionsPresenter.class); + s(GroupOptionsView.class, GroupOptionsPanel.class); + s(UserOptions.class, UserOptionsPresenter.class); + s(UserOptionsView.class, UserOptionsPanel.class); - s(UserOptionsCollection.class); - s(GroupOptionsCollection.class); + s(UserOptionsCollection.class); + s(GroupOptionsCollection.class); - s(GroupOptionsDefLicense.class, GroupOptionsDefLicensePresenter.class); - s(GroupOptionsDefLicenseView.class, GroupOptionsDefLicensePanel.class); - s(GroupOptionsPublicSpaceConf.class, GroupOptionsPublicSpaceConfPresenter.class); - s(GroupOptionsPublicSpaceConfView.class, GroupOptionsPublicSpaceConfPanel.class); - s(GroupOptionsLogo.class, GroupOptionsLogoPresenter.class); - s(GroupOptionsLogoView.class, GroupOptionsLogoPanel.class); - s(GroupOptionsToolsConf.class, GroupOptionsToolsConfPresenter.class); - s(GroupOptionsToolsConfView.class, GroupOptionsToolsConfPanel.class); + s(GroupOptionsDefLicense.class, GroupOptionsDefLicensePresenter.class); + s(GroupOptionsDefLicenseView.class, GroupOptionsDefLicensePanel.class); + s(GroupOptionsPublicSpaceConf.class, GroupOptionsPublicSpaceConfPresenter.class); + s(GroupOptionsPublicSpaceConfView.class, GroupOptionsPublicSpaceConfPanel.class); + s(GroupOptionsLogo.class, GroupOptionsLogoPresenter.class); + s(GroupOptionsLogoView.class, GroupOptionsLogoPanel.class); + s(GroupOptionsToolsConf.class, GroupOptionsToolsConfPresenter.class); + s(GroupOptionsToolsConfView.class, GroupOptionsToolsConfPanel.class); - s(UserOptionsDefLicense.class, UserOptionsDefLicensePresenter.class); - s(UserOptionsDefLicenseView.class, UserOptionsDefLicensePanel.class); - s(UserOptionsPublicSpaceConf.class, UserOptionsPublicSpaceConfPresenter.class); - s(UserOptionsPublicSpaceConfView.class, UserOptionsPublicSpaceConfPanel.class); - s(UserOptionsLogo.class, UserOptionsLogoPresenter.class); - s(UserOptionsLogoView.class, UserOptionsLogoPanel.class); - s(UserOptionsToolsConf.class, UserOptionsToolsConfPresenter.class); - s(UserOptionsToolsConfView.class, UserOptionsToolsConfPanel.class); + s(UserOptionsDefLicense.class, UserOptionsDefLicensePresenter.class); + s(UserOptionsDefLicenseView.class, UserOptionsDefLicensePanel.class); + s(UserOptionsPublicSpaceConf.class, UserOptionsPublicSpaceConfPresenter.class); + s(UserOptionsPublicSpaceConfView.class, UserOptionsPublicSpaceConfPanel.class); + s(UserOptionsLogo.class, UserOptionsLogoPresenter.class); + s(UserOptionsLogoView.class, UserOptionsLogoPanel.class); + s(UserOptionsToolsConf.class, UserOptionsToolsConfPresenter.class); + s(UserOptionsToolsConfView.class, UserOptionsToolsConfPanel.class); - s(GSpaceBackManager.class, GSpaceBackManagerImpl.class); + s(GSpaceBackManager.class, GSpaceBackManagerImpl.class); - s(RenameAction.class); - } + // Actions + s(ContentViewerOptionsMenu.class); + s(RenameAction.class); + } } \ No newline at end of file Modified: trunk/src/main/java/cc/kune/gspace/client/actions/GoParentContainerBtn.java =================================================================== --- trunk/src/main/java/cc/kune/gspace/client/actions/GoParentContainerBtn.java 2011-04-29 14:42:12 UTC (rev 1333) +++ trunk/src/main/java/cc/kune/gspace/client/actions/GoParentContainerBtn.java 2011-05-03 08:22:21 UTC (rev 1334) @@ -46,9 +46,10 @@ } - public GoParentContainerBtn(final I18nTranslationService i18n, final GoParentContainerAction action, final CoreResources res) { + public GoParentContainerBtn(final I18nTranslationService i18n, final GoParentContainerAction action, + final CoreResources res) { super(action); - this.withToolTip(i18n.t("Go up: Open the container folder")).withIcon(res.folderGoUp()); + this.withToolTip(i18n.t("Go up: Open the container folder")).withIcon(res.folderGoUp()).withStyles("k-fl"); } } Added: trunk/src/main/java/cc/kune/gspace/client/actions/ParticipateInContentBtn.java =================================================================== --- trunk/src/main/java/cc/kune/gspace/client/actions/ParticipateInContentBtn.java (rev 0) +++ trunk/src/main/java/cc/kune/gspace/client/actions/ParticipateInContentBtn.java 2011-05-03 08:22:21 UTC (rev 1334) @@ -0,0 +1,64 @@ +package cc.kune.gspace.client.actions; + +import cc.kune.common.client.actions.ActionEvent; +import cc.kune.common.client.actions.ui.descrip.ButtonDescriptor; +import cc.kune.common.client.notify.NotifyUser; +import cc.kune.core.client.actions.RolAction; +import cc.kune.core.client.resources.CoreResources; +import cc.kune.core.client.rpcservices.AsyncCallbackSimple; +import cc.kune.core.client.rpcservices.ContentServiceAsync; +import cc.kune.core.client.sn.actions.conditions.IsCurrentStateEditableCondition; +import cc.kune.core.client.sn.actions.conditions.IsLoggedCondition; +import cc.kune.core.client.sn.actions.conditions.IsNotParticipantOfCurrentStateCondition; +import cc.kune.core.client.state.Session; +import cc.kune.core.client.state.StateManager; +import cc.kune.core.shared.dto.AccessRolDTO; +import cc.kune.core.shared.dto.HasContent; +import cc.kune.core.shared.i18n.I18nTranslationService; + +import com.google.inject.Inject; +import com.google.inject.Provider; + +public class ParticipateInContentBtn extends ButtonDescriptor { + + public static class ParticipateInContentAction extends RolAction { + + private final Provider<ContentServiceAsync> contentService; + private final Session session; + private final StateManager stateManager; + + @Inject + public ParticipateInContentAction(final Session session, final StateManager stateManager, + final I18nTranslationService i18n, final Provider<ContentServiceAsync> contentService) { + super(AccessRolDTO.Editor, true); + this.session = session; + this.stateManager = stateManager; + this.contentService = contentService; + } + + @Override + public void actionPerformed(final ActionEvent event) { + NotifyUser.showProgressProcessing(); + stateManager.gotoStateToken(((HasContent) session.getCurrentState()).getContainer().getStateToken()); + contentService.get().addParticipant(session.getUserHash(), session.getCurrentStateToken(), + session.getCurrentUser().getShortName(), new AsyncCallbackSimple<Void>() { + @Override + public void onSuccess(final Void arg) { + NotifyUser.hideProgress(); + } + }); + } + } + + @Inject + public ParticipateInContentBtn(final I18nTranslationService i18n, final ParticipateInContentAction action, + final IsLoggedCondition isLogged, final IsCurrentStateEditableCondition isEditable, + final IsNotParticipantOfCurrentStateCondition isNotParticipant, final CoreResources res) { + super(action); + this.withText(i18n.t("Participate")).withToolTip("Participate in the edition of this page").withIcon( + res.contentEdit()).withStyles("k-def-docbtn, k-fl"); + super.add(isLogged); + super.add(isEditable); + super.add(isNotParticipant); + } +} Deleted: trunk/src/main/java/cc/kune/gspace/client/actions/RefreshContentBtn.java =================================================================== --- trunk/src/main/java/cc/kune/gspace/client/actions/RefreshContentBtn.java 2011-04-29 14:42:12 UTC (rev 1333) +++ trunk/src/main/java/cc/kune/gspace/client/actions/RefreshContentBtn.java 2011-05-03 08:22:21 UTC (rev 1334) @@ -1,37 +0,0 @@ -package cc.kune.gspace.client.actions; - -import cc.kune.common.client.actions.AbstractExtendedAction; -import cc.kune.common.client.actions.ActionEvent; -import cc.kune.common.client.actions.ui.descrip.ButtonDescriptor; -import cc.kune.core.client.resources.nav.NavResources; -import cc.kune.core.client.state.StateManager; -import cc.kune.core.shared.i18n.I18nTranslationService; - -import com.google.inject.Inject; - -public class RefreshContentBtn extends ButtonDescriptor { - - public static class GoParentContainerAction extends AbstractExtendedAction { - - private final StateManager stateManager; - - @Inject - public GoParentContainerAction(final StateManager stateManager) { - this.stateManager = stateManager; - } - - @Override - public void actionPerformed(final ActionEvent event) { - stateManager.refreshCurrentGroupState(); - } - - } - - @Inject - public RefreshContentBtn(final I18nTranslationService i18n, final GoParentContainerAction action, - final NavResources res) { - super(action); - this.withToolTip(i18n.t("Reload current page")).withIcon(res.refresh()); - } - -} Copied: trunk/src/main/java/cc/kune/gspace/client/actions/RefreshContentMenuItem.java (from rev 1333, trunk/src/main/java/cc/kune/gspace/client/actions/RefreshContentBtn.java) =================================================================== --- trunk/src/main/java/cc/kune/gspace/client/actions/RefreshContentMenuItem.java (rev 0) +++ trunk/src/main/java/cc/kune/gspace/client/actions/RefreshContentMenuItem.java 2011-05-03 08:22:21 UTC (rev 1334) @@ -0,0 +1,38 @@ +package cc.kune.gspace.client.actions; + +import cc.kune.blogs.client.actions.ContentViewerOptionsMenu; +import cc.kune.common.client.actions.AbstractExtendedAction; +import cc.kune.common.client.actions.ActionEvent; +import cc.kune.common.client.actions.ui.descrip.MenuItemDescriptor; +import cc.kune.core.client.resources.nav.NavResources; +import cc.kune.core.client.state.StateManager; +import cc.kune.core.shared.i18n.I18nTranslationService; + +import com.google.inject.Inject; + +public class RefreshContentMenuItem extends MenuItemDescriptor { + + public static class GoParentContainerAction extends AbstractExtendedAction { + + private final StateManager stateManager; + + @Inject + public GoParentContainerAction(final StateManager stateManager) { + this.stateManager = stateManager; + } + + @Override + public void actionPerformed(final ActionEvent event) { + stateManager.refreshCurrentGroupState(); + } + + } + + @Inject + public RefreshContentMenuItem(final I18nTranslationService i18n, final GoParentContainerAction action, + final ContentViewerOptionsMenu optionsMenu, final NavResources res) { + super(action); + this.withText(i18n.t("Reload current page")).withIcon(res.refresh()).withParent(optionsMenu); + } + +} Property changes on: trunk/src/main/java/cc/kune/gspace/client/actions/RefreshContentMenuItem.java ___________________________________________________________________ Name: svn:mime-type + text/plain Modified: trunk/src/main/java/cc/kune/gspace/client/options/license/EntityOptionsDefLicensePanel.java =================================================================== --- trunk/src/main/java/cc/kune/gspace/client/options/license/EntityOptionsDefLicensePanel.java 2011-04-29 14:42:12 UTC (rev 1333) +++ trunk/src/main/java/cc/kune/gspace/client/options/license/EntityOptionsDefLicensePanel.java 2011-05-03 08:22:21 UTC (rev 1334) @@ -37,48 +37,49 @@ public class EntityOptionsDefLicensePanel extends Composite implements EntityOptionsDefLicenseView { - private final Button change; - private final Image licenseImage; - private final IconLabel tabTitle; + private final Button change; + private final Image licenseImage; + private final IconLabel tabTitle; - public EntityOptionsDefLicensePanel(final I18nTranslationService i18n, final CoreResources res) { - tabTitle = new IconLabel(res.copyleft(), i18n.t("License")); - final VerticalPanel vp = new VerticalPanel(); - final Label intro = new Label(); - intro.setText(i18n.t("This is the default license for all the contents of this group (you can also select another different license per content):")); - vp.add(intro); - licenseImage = new Image(); - vp.add(licenseImage); - licenseImage.addStyleName("kune-pointer"); - change = new Button(i18n.t("Change")); - initWidget(vp); - super.setHeight(String.valueOf(EntityOptionsView.HEIGHT)); - super.setWidth(String.valueOf(EntityOptionsView.WIDTH)); - } + public EntityOptionsDefLicensePanel(final I18nTranslationService i18n, final CoreResources res) { + tabTitle = new IconLabel(res.copyleft(), i18n.t("License")); + final VerticalPanel vp = new VerticalPanel(); + final Label intro = new Label(); + intro.setWordWrap(true); + intro.setText(i18n.t("This is the default license for all the contents of this group (you can also select another different license per content):")); + vp.add(intro); + licenseImage = new Image(); + vp.add(licenseImage); + licenseImage.addStyleName("kune-pointer"); + change = new Button(i18n.t("Change")); + initWidget(vp); + super.setHeight(String.valueOf(EntityOptionsView.HEIGHT)); + super.setWidth(String.valueOf(EntityOptionsView.WIDTH)); + } - @Override - public HasClickHandlers getChange() { - return change; - } + @Override + public HasClickHandlers getChange() { + return change; + } - @Override - public HasClickHandlers getLicenseImage() { - return licenseImage; - } + @Override + public HasClickHandlers getLicenseImage() { + return licenseImage; + } - @Override - public IsWidget getTabTitle() { - return tabTitle; - } + @Override + public IsWidget getTabTitle() { + return tabTitle; + } - @Override - public void openWindow(final String url) { - KuneWindowUtils.open(url); - } + @Override + public void openWindow(final String url) { + KuneWindowUtils.open(url); + } - @Override - public void setLicense(final LicenseDTO defaultLicense) { - licenseImage.setUrl(defaultLicense.getImageUrl()); - Tooltip.to(licenseImage, defaultLicense.getLongName()); - } + @Override + public void setLicense(final LicenseDTO defaultLicense) { + licenseImage.setUrl(defaultLicense.getImageUrl()); + Tooltip.to(licenseImage, defaultLicense.getLongName()); + } } Modified: trunk/src/main/java/cc/kune/gspace/client/options/logo/EntityOptionsLogoPanel.java =================================================================== --- trunk/src/main/java/cc/kune/gspace/client/options/logo/EntityOptionsLogoPanel.java 2011-04-29 14:42:12 UTC (rev 1333) +++ trunk/src/main/java/cc/kune/gspace/client/options/logo/EntityOptionsLogoPanel.java 2011-05-03 08:22:21 UTC (rev 1334) @@ -46,172 +46,173 @@ public class EntityOptionsLogoPanel extends Composite implements EntityOptionsLogoView { - public static final String ICON_UPLD_SERVLET = "servlets/EntityLogoUploadManager"; - private final Label dialogInfoLabel; - private final FileUpload fileUpload = new FileUpload(); - private final FormPanel form = new FormPanel(); - private final I18nTranslationService i18n; - private OnAcceptCallback onAccept; - private final IconLabel tabTitle; - private final Hidden tokenField; - private final Hidden userhashField; + public static final String ICON_UPLD_SERVLET = "servlets/EntityLogoUploadManager"; + private final Label dialogInfoLabel; + private final FileUpload fileUpload = new FileUpload(); + private final FormPanel form = new FormPanel(); + private final I18nTranslationService i18n; + private OnAcceptCallback onAccept; + private final IconLabel tabTitle; + private final Hidden tokenField; + private final Hidden userhashField; - // private final TextField file; + // private final TextField file; - public EntityOptionsLogoPanel(final EventBus eventBus, final I18nTranslationService i18n, - final String panelId, final String buttonId, final String inputId, final NavResources res) { - super(); - this.i18n = i18n; - tabTitle = new IconLabel(res.picture(), ""); - // super.setButtonAlign(HorizontalAlignment.LEFT); - // super.setFrame(true); - // super.setAutoScroll(false); - // super.setBorder(false); - // super.setFileUpload(true); - // super.setWidth(400); - // super.setIconCls("k-picture-icon"); - // super.setMethod(Method.POST); - // super.setUrl(ICON_UPLD_SERVLET); - // super.setWaitMsgTarget(true); - // super.setHideLabels(true); - // super.setPadding(10); - // super.addFormListener(new FormListener() { - // @Override - // public boolean doBeforeAction(final Form form) { - // return true; - // } - // - // @Override - // public void onActionComplete(final Form form, final int httpStatus, - // final String responseText) { - // presenter.onSubmitComplete(httpStatus, responseText); - // } - // - // @Override - // public void onActionFailed(final Form form, final int httpStatus, - // final String responseText) { - // presenter.onSubmitFailed(httpStatus, responseText); - // } - // }); - // super.add(dialogInfoLabel); - // file = new TextField("File", inputId); - // final EventCallback keyListener = new EventCallback() { - // @Override - // public void execute(final EventObject e) { - // // setEnableFileField(); - // } - // }; - // file.addKeyPressListener(keyListener); - // file.setId(inputId); - // file.setInputType("file"); - // super.add(file); - // final FieldListenerAdapter changeListener = new - // FieldListenerAdapter() { - // @Override - // public void onChange(final Field field, final Object newVal, final - // Object oldVal) { - // NotifyUser.info("change"); - // // setEnableFileField(); - // } - // }; - // // Don't works: - // file.addListener(changeListener); - // setId(panelId); - // - // sendButton.setId(buttonId); - // super.addButton(sendButton); + public EntityOptionsLogoPanel(final EventBus eventBus, final I18nTranslationService i18n, final String panelId, + final String buttonId, final String inputId, final NavResources res) { + super(); + this.i18n = i18n; + tabTitle = new IconLabel(res.picture(), ""); + // super.setButtonAlign(HorizontalAlignment.LEFT); + // super.setFrame(true); + // super.setAutoScroll(false); + // super.setBorder(false); + // super.setFileUpload(true); + // super.setWidth(400); + // super.setIconCls("k-picture-icon"); + // super.setMethod(Method.POST); + // super.setUrl(ICON_UPLD_SERVLET); + // super.setWaitMsgTarget(true); + // super.setHideLabels(true); + // super.setPadding(10); + // super.addFormListener(new FormListener() { + // @Override + // public boolean doBeforeAction(final Form form) { + // return true; + // } + // + // @Override + // public void onActionComplete(final Form form, final int httpStatus, + // final String responseText) { + // presenter.onSubmitComplete(httpStatus, responseText); + // } + // + // @Override + // public void onActionFailed(final Form form, final int httpStatus, + // final String responseText) { + // presenter.onSubmitFailed(httpStatus, responseText); + // } + // }); + // super.add(dialogInfoLabel); + // file = new TextField("File", inputId); + // final EventCallback keyListener = new EventCallback() { + // @Override + // public void execute(final EventObject e) { + // // setEnableFileField(); + // } + // }; + // file.addKeyPressListener(keyListener); + // file.setId(inputId); + // file.setInputType("file"); + // super.add(file); + // final FieldListenerAdapter changeListener = new + // FieldListenerAdapter() { + // @Override + // public void onChange(final Field field, final Object newVal, final + // Object oldVal) { + // NotifyUser.info("change"); + // // setEnableFileField(); + // } + // }; + // // Don't works: + // file.addListener(changeListener); + // setId(panelId); + // + // sendButton.setId(buttonId); + // super.addButton(sendButton); - dialogInfoLabel = new Label(); + dialogInfoLabel = new Label(); + dialogInfoLabel.setWordWrap(true); - form.setEncoding(FormPanel.ENCODING_MULTIPART); - form.setMethod(FormPanel.METHOD_POST); - form.setAction(GWT.getModuleBaseURL() + ICON_UPLD_SERVLET); + form.setEncoding(FormPanel.ENCODING_MULTIPART); + form.setMethod(FormPanel.METHOD_POST); + form.setAction(GWT.getModuleBaseURL() + ICON_UPLD_SERVLET); - userhashField = new Hidden(FileConstants.HASH, FileConstants.HASH); - tokenField = new Hidden(FileConstants.TOKEN, FileConstants.TOKEN); + userhashField = new Hidden(FileConstants.HASH, FileConstants.HASH); + tokenField = new Hidden(FileConstants.TOKEN, FileConstants.TOKEN); - final VerticalPanel holder = new VerticalPanel(); + final VerticalPanel holder = new VerticalPanel(); - fileUpload.setName("upload"); - holder.add(dialogInfoLabel); - holder.add(fileUpload); - holder.add(userhashField); - holder.add(tokenField); - holder.add(new Button(i18n.t("Send"), new ClickHandler() { - @Override - public void onClick(final ClickEvent event) { - Log.info("You selected: " + fileUpload.getFilename(), null); - form.submit(); - } - })); + fileUpload.setName("upload"); + holder.add(dialogInfoLabel); + holder.add(fileUpload); + holder.add(userhashField); + holder.add(tokenField); + holder.add(new Button(i18n.t("Send"), new ClickHandler() { + @Override + public void onClick(final ClickEvent event) { + Log.info("You selected: " + fileUpload.getFilename(), null); + form.submit(); + } + })); - form.addSubmitHandler(new FormPanel.SubmitHandler() { - @Override - public void onSubmit(final SubmitEvent event) { - // final String filename = file.getValueAsString(); - // if (filename != null && filename.length() > 0) { - // getForm().submit(); - // } + form.addSubmitHandler(new FormPanel.SubmitHandler() { + @Override + public void onSubmit(final SubmitEvent event) { + // final String filename = file.getValueAsString(); + // if (filename != null && filename.length() > 0) { + // getForm().submit(); + // } - if (!"".equalsIgnoreCase(fileUpload.getFilename())) { - GWT.log("UPLOADING FILE????", null); - // NOW WHAT???? - } else { - event.cancel(); // cancel the event - } + if (!"".equalsIgnoreCase(fileUpload.getFilename())) { + GWT.log("UPLOADING FILE????", null); + // NOW WHAT???? + } else { + event.cancel(); // cancel the event + } - } - }); + } + }); - form.addSubmitCompleteHandler(new FormPanel.SubmitCompleteHandler() { - @Override - public void onSubmitComplete(final SubmitCompleteEvent event) { - CurrentLogoChangedEvent.fire(eventBus); - } - }); - form.add(holder); - initWidget(form); - setHeight(String.valueOf(EntityOptionsView.HEIGHT)); - setWidth(String.valueOf(EntityOptionsView.WIDTH)); - } + form.addSubmitCompleteHandler(new FormPanel.SubmitCompleteHandler() { + @Override + public void onSubmitComplete(final SubmitCompleteEvent event) { + CurrentLogoChangedEvent.fire(eventBus); + } + }); + form.add(holder); + initWidget(form); + setHeight(String.valueOf(EntityOptionsView.HEIGHT)); + setWidth(String.valueOf(EntityOptionsView.WIDTH)); + } - @Override - public OnAcceptCallback getOnSubmit() { - // TODO Auto-generated method stub - return null; - } + @Override + public OnAcceptCallback getOnSubmit() { + // TODO Auto-generated method stub + return null; + } - @Override - public IsWidget getTabTitle() { - return tabTitle; - } + @Override + public IsWidget getTabTitle() { + return tabTitle; + } - public void reset() { - form.reset(); - } + public void reset() { + form.reset(); + } - @Override - public void setNormalGroupsLabels() { - dialogInfoLabel.setText(i18n.t("Select an image in your computer as the logo for this group. " - + "For best results use a [%d]x[%d] pixel image. We will automatically resize bigger images.", - FileConstants.LOGO_DEF_HEIGHT, FileConstants.LOGO_DEF_HEIGHT) - + TextUtils.brbr()); - tabTitle.setText(CoreMessages.ENT_LOGO_SELECTOR_NORMAL_TITLE); - } + @Override + public void setNormalGroupsLabels() { + dialogInfoLabel.setText(i18n.t("Select an image in your computer as the logo for this group. " + + "For best results use a [%d]x[%d] pixel image. We will automatically resize bigger images.", + FileConstants.LOGO_DEF_HEIGHT, FileConstants.LOGO_DEF_HEIGHT) + + TextUtils.brbr()); + tabTitle.setText(CoreMessages.ENT_LOGO_SELECTOR_NORMAL_TITLE); + } - @Override - public void setPersonalGroupsLabels() { - dialogInfoLabel.setText(i18n.t("Select an image in your computer as your avatar. " - + "For best results use a [%d]x[%d] pixel image. We will automatically resize bigger images.", - FileConstants.LOGO_DEF_HEIGHT, FileConstants.LOGO_DEF_HEIGHT) - + "<br/><br/>"); - tabTitle.setText(CoreMessages.ENT_LOGO_SELECTOR_PERSON_TITLE); - } + @Override + public void setPersonalGroupsLabels() { + dialogInfoLabel.setText(i18n.t("Select an image in your computer as your avatar. " + + "For best results use a [%d]x[%d] pixel image. We will automatically resize bigger images.", + FileConstants.LOGO_DEF_HEIGHT, FileConstants.LOGO_DEF_HEIGHT) + + "<br/><br/>"); + tabTitle.setText(CoreMessages.ENT_LOGO_SELECTOR_PERSON_TITLE); + } - @Override - public void setUploadParams(final String userHash, final String token) { - userhashField.setValue(userHash); - tokenField.setValue(token); - } + @Override + public void setUploadParams(final String userHash, final String token) { + userhashField.setValue(userHash); + tokenField.setValue(token); + } } Modified: trunk/src/main/java/cc/kune/gspace/client/viewers/DocViewerPanel.java =================================================================== --- trunk/src/main/java/cc/kune/gspace/client/viewers/DocViewerPanel.java 2011-04-29 14:42:12 UTC (rev 1333) +++ trunk/src/main/java/cc/kune/gspace/client/viewers/DocViewerPanel.java 2011-05-03 08:22:21 UTC (rev 1334) @@ -44,141 +44,147 @@ import com.gwtplatform.mvp.client.ViewImpl; public class DocViewerPanel extends ViewImpl implements DocViewerView { - interface DocsViewerPanelUiBinder extends UiBinder<Widget, DocViewerPanel> { - } + interface DocsViewerPanelUiBinder extends UiBinder<Widget, DocViewerPanel> { + } - private static DocsViewerPanelUiBinder uiBinder = GWT.create(DocsViewerPanelUiBinder.class); + private static DocsViewerPanelUiBinder uiBinder = GWT.create(DocsViewerPanelUiBinder.class); - private final ContentCapabilitiesRegistry capabilitiesRegistry; - private RemoteViewServiceMultiplexer channel; - private final ContentTitleWidget contentTitle; - @UiField - DeckPanel deck; - private final GSpaceArmor gsArmor; - private IdGenerator idGenerator; - private final Element loading = new LoadingIndicator().getElement(); - @UiField - InlineHTML onlyViewPanel; - private ProfileManager profiles; - /** The wave panel, if a wave is open. */ - private StagesProvider wave; - @UiField - FramedPanel waveFrame; - @UiField - ImplPanel waveHolder; - private final WaveStore waveStore = new SimpleWaveStore(); + private final ContentCapabilitiesRegistry capabilitiesRegistry; + private RemoteViewServiceMultiplexer channel; + private final ContentTitleWidget contentTitle; + @UiField + DeckPanel deck; + private final GSpaceArmor gsArmor; + private IdGenerator idGenerator; + private final Element loading = new LoadingIndicator().getElement(); + @UiField + InlineHTML onlyViewPanel; + private ProfileManager profiles; + /** The wave panel, if a wave is open. */ + private StagesProvider wave; + @UiField + FramedPanel waveFrame; + @UiField + ImplPanel waveHolder; + private final WaveStore waveStore = new SimpleWaveStore(); - private final Widget widget; + private final Widget widget; - @Inject - public DocViewerPanel(final GSpaceArmor wsArmor, - final ContentCapabilitiesRegistry capabilitiesRegistry, final I18nTranslationService i18n) { - this.gsArmor = wsArmor; - this.capabilitiesRegistry = capabilitiesRegistry; - widget = uiBinder.createAndBindUi(this); - contentTitle = new ContentTitleWidget(i18n, gsArmor, capabilitiesRegistry.getIconsRegistry()); - } + @Inject + public DocViewerPanel(final GSpaceArmor wsArmor, final ContentCapabilitiesRegistry capabilitiesRegistry, + final I18nTranslationService i18n) { + this.gsArmor = wsArmor; + this.capabilitiesRegistry = capabilitiesRegistry; + widget = uiBinder.createAndBindUi(this); + contentTitle = new ContentTitleWidget(i18n, gsArmor, capabilitiesRegistry.getIconsRegistry()); + } - @Override - public Widget asWidget() { - return widget; - } + @Override + public Widget asWidget() { + return widget; + } - @Override - public void attach() { - final ForIsWidget docContainer = gsArmor.getDocContainer(); - docContainer.add(widget); - } + @Override + public void attach() { + final ForIsWidget docContainer = gsArmor.getDocContainer(); + docContainer.add(widget); + } - @Override - public void clear() { - onlyViewPanel.setHTML(""); - gsArmor.getSubheaderToolbar().clear(); - UiUtils.clear(gsArmor.getDocContainer()); - UiUtils.clear(gsArmor.getDocHeader()); - } + @Override + public void clear() { + onlyViewPanel.setHTML(""); + gsArmor.getSubheaderToolbar().clear(); + UiUtils.clear(gsArmor.getDocContainer()); + UiUtils.clear(gsArmor.getDocHeader()); + } - @Override - public void detach() { - clear(); - } + @Override + public void detach() { + clear(); + } - @Override - public HasEditHandler getEditTitle() { - return contentTitle.getEditableTitle(); - } + @Override + public HasEditHandler getEditTitle() { + return contentTitle.getEditableTitle(); + } - private WaveRef getWaveRef(final String waveRefS) { - try { - return GwtWaverefEncoder.decodeWaveRefFromPath(waveRefS); - } catch (final InvalidWaveRefException e) { - throw new UIException("Invalid waveref: " + waveRefS); + private WaveRef getWaveRef(final String waveRefS) { + try { + return GwtWaverefEncoder.decodeWaveRefFromPath(waveRefS); + } catch (final InvalidWaveRefException e) { + throw new UIException("Invalid waveref: " + waveRefS); + } } - } - private void initWaveClientIfNeeded() { - if (channel == null) { - final WaveWebSocketClient webSocket = new WaveWebSocketClient(WebClient.useSocketIO(), - WebClient.getWebSocketBaseUrl(GWT.getModuleBaseURL())); - webSocket.connect(); - channel = new RemoteViewServiceMultiplexer(webSocket, - new ParticipantId(Session.get().getAddress()).getAddress()); - profiles = new ProfileManagerImpl(Session.get().getDomain()); - idGenerator = ClientIdGenerator.create(); + private void initWaveClientIfNeeded() { + if (channel == null) { + final WaveWebSocketClient webSocket = new WaveWebSocketClient(WebClient.useSocketIO(), + WebClient.getWebSocketBaseUrl(GWT.getModuleBaseURL())); + webSocket.connect(); + channel = new RemoteViewServiceMultiplexer(webSocket, + new ParticipantId(Session.get().getAddress()).getAddress()); + profiles = new ProfileManagerImpl(Session.get().getDomain()); + idGenerator = ClientIdGenerator.create(); + } } - } - @Override - public void setActions(final GuiActionDescCollection actions) { - gsArmor.getSubheaderToolbar().clear(); - gsArmor.getSubheaderToolbar().addAll(actions); - } + @Override + public void setActions(final GuiActionDescCollection actions) { + gsArmor.getSubheaderToolbar().clear(); + gsArmor.getSubheaderToolbar().addAll(actions); + } - @Override - public void setContent(final StateContentDTO state) { - final boolean editable = state.getContentRights().isEditable(); - contentTitle.setTitle(state.getTitle(), state.getTypeId(), state.getMimeType(), editable - && capabilitiesRegistry.isRenamable(state.getTypeId())); - if (editable) { - initWaveClientIfNeeded(); - setEditableWaveContent(state.getWaveRef(), false); - // waveHolder.clear(); - // waveHolder.add(new Label(state.getContent() - // + " (but here goes the Wave editor -we are testing it-)")); - // onlyViewPanel.setHTML(SafeHtmlUtils.fromTrustedString(state.getContent())); - } else { - onlyViewPanel.setHTML(SafeHtmlUtils.fromTrustedString(state.getContent())); + @Override + public void setContent(final StateContentDTO state) { + final boolean editable = state.getContentRights().isEditable(); + setTitle(state, editable); + onlyViewPanel.setHTML(SafeHtmlUtils.fromTrustedString(state.getContent())); + deck.showWidget(1); } - // deck.showWidget(editable ? 0 : 1); - deck.showWidget(1); - } - @Override - public void setEditableTitle(final String title) { - contentTitle.setText(title); - } + @Override + public void setEditableContent(final StateContentDTO state) { + setTitle(state, true); + initWaveClientIfNeeded(); + setEditableWaveContent(state.getWaveRef(), false); + deck.showWidget(0); + // waveHolder.clear(); + // waveHolder.add(new Label(state.getContent() + // + " (but here goes the Wave editor -we are testing it-)")); + // onlyViewPanel.setHTML(SafeHtmlUtils.fromTrustedString(state.getContent())); + } - private void setEditableWaveContent(final String waveRefS, final boolean isNewWave) { - final WaveRef waveRef = getWaveRef(waveRefS); + @Override + public void setEditableTitle(final String title) { + contentTitle.setText(title); + } - if (wave != null) { - wave.destroy(); - wave = null; + private void setEditableWaveContent(final String waveRefS, final boolean isNewWave) { + final WaveRef waveRef = getWaveRef(waveRefS); + + if (wave != null) { + wave.destroy(); + wave = null; + } + + // Release the display:none. + // 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); + this.wave = wave; + wave.load(new Command() { + @Override + public void execute() { + loading.removeFromParent(); + } + }); } - // Release the display:none. - // 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); - this.wave = wave; - wave.load(new Command() { - @Override - public void execute() { - loading.removeFromParent(); - } - }); - } + private void setTitle(final StateContentDTO state, final boolean editable) { + contentTitle.setTitle(state.getTitle(), state.getTypeId(), state.getMimeType(), editable + && capabilitiesRegistry.isRenamable(state.getTypeId())); + } } Modified: trunk/src/main/java/cc/kune/gspace/client/viewers/DocViewerPanel.ui.xml =================================================================== --- trunk/src/main/java/cc/kune/gspace/client/viewers/DocViewerPanel.ui.xml 2011-04-29 14:42:12 UTC (rev 1333) +++ trunk/src/main/java/cc/kune/gspace/client/viewers/DocViewerPanel.ui.xml 2011-05-03 08:22:21 UTC (rev 1334) @@ -4,23 +4,22 @@ xmlns:w='urn:import:org.waveprotocol.wave.client.widget.common'> <ui:style> .wavePanel { - margin: 0 0 0 0; + margin: 0 0 0 0; } .waveHolder { - position: absolute; - top: 0; - bottom: 0; - left: 0; - right: 0; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; } </ui:style> <g:HTMLPanel width="100%" height="100%"> <g:DeckPanel ui:field="deck" addStyleNames="k-doc-content-deck"> <f:FramedPanel ui:field="waveFrame" addStyleNames="{style.wavePanel}"> + <w:ImplPanel ui:field="waveHolder" addStyleNames="{style.waveHolder}" /> </f:FramedPanel> - <w:ImplPanel ui:field="waveHolder" addStyleNames="{style.waveHolder}" /> -<!-- <g:InlineHTML ui:field="delete" /> --> <g:InlineHTML ui:field="onlyViewPanel" /> </g:DeckPanel> </g:HTMLPanel> Modified: trunk/src/main/java/cc/kune/gspace/client/viewers/DocViewerPresenter.java =================================================================== --- trunk/src/main/java/cc/kune/gspace/client/viewers/DocViewerPresenter.java 2011-04-29 14:42:12 UTC (rev 1333) +++ trunk/src/main/java/cc/kune/gspace/client/viewers/DocViewerPresenter.java 2011-05-03 08:22:21 UTC (rev 1334) @@ -5,6 +5,7 @@ import cc.kune.blogs.client.actions.BlogsClientActions; import cc.kune.blogs.shared.BlogsConstants; import cc.kune.common.client.actions.ui.descrip.GuiActionDescCollection; +import cc.kune.common.client.errors.UIException; import cc.kune.common.client.ui.EditEvent; import cc.kune.common.client.ui.EditEvent.EditHandler; import cc.kune.common.client.ui.HasEditHandler; @@ -32,95 +33,112 @@ import com.gwtplatform.mvp.client.proxy.Proxy; import com.gwtplatform.mvp.client.proxy.RevealRootContentEvent; -public class DocViewerPresenter extends - Presenter<DocViewerPresenter.DocViewerView, DocViewerPresenter.DocViewerProxy> implements - ContentViewer { +public class DocViewerPresenter extends Presenter<DocViewerPresenter.DocViewerView, DocViewerPresenter.DocViewerProxy> + implements ContentViewer { - @ProxyCodeSplit - public interface DocViewerProxy extends Proxy<DocViewerPresenter> { - } + @ProxyCodeSplit + public interface DocViewerProxy extends Proxy<DocViewerPresenter> { + } - public interface DocViewerView extends View { + public interface DocViewerView extends View { - void attach(); + void attach(); - void clear(); + void clear(); - void detach(); + void detach(); - HasEditHandler getEditTitle(); + HasEditHandler getEditTitle(); - void setActions(GuiActionDescCollection actions); + void setActions(GuiActionDescCollection actions); - void setContent(StateContentDTO state); + void setContent(StateContentDTO state); - void setEditableTitle(String title); - } + void setEditableContent(StateContentDTO state); - private final ActionRegistryByType actionsRegistry; - private HandlerRegistration editHandler; - private final Provider<RenameAction> renameAction; - private final Session session; + void setEditableTitle(String title); + } - @Inject - public DocViewerPresenter(final EventBus eventBus, final DocViewerView view, - final DocViewerProxy proxy, final Session session, final ContentViewerSelector viewerSelector, - final ActionRegistryByType actionsRegistry, final DocsClientActions docsActions, - final BlogsClientActions blogActions, final Provider<RenameAction> renameAction) { - super(eventBus, view, proxy); - this.session = session; - this.actionsRegistry = actionsRegistry; - this.renameAction = renameAction; - viewerSelector.register(this, true, DocsConstants.TYPE_DOCUMENT); - viewerSelector.register(this, true, BlogsConstants.TYPE_POST); - } + private final ActionRegistryByType actionsRegistry; + private HandlerRegistration editHandler; + private final Provider<RenameAction> renameAction; + private final Session session; - @Override - public void attach() { - getView().attach(); - if (editHandler == null) { - createEditHandler(); + @Inject + public DocViewerPresenter(final EventBus eventBus, final DocViewerView view, final DocViewerProxy proxy, + final Session session, final ContentViewerSelector viewerSelector, + final ActionRegistryByType actionsRegistry, final DocsClientActions docsActions, + final BlogsClientActions blogActions, final Provider<RenameAction> renameAction) { + super(eventBus, view, proxy); + this.session = session; + this.actionsRegistry = actionsRegistry; + this.renameAction = renameAction; + viewerSelector.register(this, true, DocsConstants.TYPE_DOCUMENT); + viewerSelector.register(this, true, BlogsConstants.TYPE_POST); } - } - private void createEditHandler() { - editHandler = getView().getEditTitle().addEditHandler(new EditHandler() { - @Override - public void fire(final EditEvent event) { - renameAction.get().rename(session.getCurrentStateToken(), session.getCurrentState().getTitle(), - event.getText(), new RenameListener() { - @Override - public void onFail(final StateToken token, final String oldTitle) { - getView().setEditableTitle(oldTitle); - } + @Override + public void attach() { + getView().attach(); + if (editHandler == null) { + createEditHandler(); + } + } - @Override - public void onSuccess(final StateToken token, final String title) { - getView().setEditableTitle(title); - } - }); - } - }); - } + private void createEditHandler() { + editHandler = getView().getEditTitle().addEditHandler(new EditHandler() { + @Override + public void fire(final EditEvent event) { + renameAction.get().rename(session.getCurrentStateToken(), session.getCurrentState().getTitle(), + event.getText(), new RenameListener() { + @Override + public void onFail(final StateToken token, final String oldTitle) { + getView().setEditableTitle(oldTitle); + } - @Override - public void detach() { - getView().detach(); - } + @Override + public void onSuccess(final StateToken token, final String title) { + getView().setEditableTitle(title); + } + }); + } + }); + } - @Override - protected void revealInParent() { - RevealRootContentEvent.fire(this, this); - } + @Override + public void detach() { + getView().detach(); + } - @Override - public void setContent(@Nonnull final HasContent state) { - getView().clear(); - final StateContentDTO stateContent = (StateContentDTO) state; - final AccessRights rights = stateContent.getContentRights(); - final GuiActionDescCollection actions = actionsRegistry.getCurrentActions(stateContent.getGroup(), - stateContent.getTypeId(), session.isLogged(), rights, ActionGroups.VIEW); - getView().setActions(actions); - getView().setContent(stateContent); - } + @Override + protected void revealInParent() { + RevealRootContentEvent.fire(this, this); + } + + @Override + public void setContent(@Nonnull final HasContent state) { + getView().clear(); + final StateContentDTO stateContent = (StateContentDTO) state; + final AccessRights rights = stateContent.getContentRights(); + if (session.isLogged() && rights.isEditable()) { + if (stateContent.isParticipant()) { + // is already participant, show wave editor + getView().setEditableContent(stateContent); + } else { + // add "participate" action + getView().setContent(stateContent); + } + } else { + if (rights.isVisible()) { + // Show contents + getView().setContent(stateContent); + } else { + throw new UIException("Unexpected status in Viewer"); + } + } + final GuiActionDescCollection actions = actionsRegistry.getCurrentActions(stateContent.getGroup(), + stateContent.getTypeId(), session.isLogged(), rights, ActionGroups.VIEW); + getView().setActions(actions); + getView().setContent(stateContent); + } } \ No newline at end of file Modified: trunk/src/main/java/cc/kune/msgs/client/UserMessage.java =================================================================== --- trunk/src/main/java/cc/kune/msgs/client/UserMessage.java 2011-04-29 14:42:12 UTC (rev 1333) +++ trunk/src/main/java/cc/kune/msgs/client/UserMessage.java 2011-05-03 08:22:21 UTC (rev 1334) @@ -26,7 +26,7 @@ import cc.kune.common.client.notify.NotifyLevel; import cc.kune.common.client.utils.TextUtils; -import cc.kune.msgs.client.resources.UserMessageImages; +import cc.kune.msgs.client.resources.UserMessageImagesUtil; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; @@ -108,22 +108,7 @@ }; time.schedule(fadeMills); } - switch (level) { - case error: - icon.setResource(UserMessageImages.INST.error()); - break; - case important: - icon.setResource(UserMessageImages.INST.important()); - break; - case info: - icon.setResource(UserMessageImages.INST.info()); - break; - case veryImportant: - icon.setResource(UserMessageImages.INST.warning()); - break; - default: - break; - } + icon.setResource(UserMessageImagesUtil.getIcon(level)); final Show anim = new Show(this.getElement()); anim.setDuration(0.5); anim.play(); Added: trunk/src/main/java/cc/kune/msgs/client/resources/UserMessageImagesUtil.java =================================================================== --- trunk/src/main/java/cc/kune/msgs/client/resources/UserMessageImagesUtil.java (rev 0) +++ trunk/src/main/java/cc/kune/msgs/client/resources/UserMessageImagesUtil.java 2011-05-03 08:22:21 UTC (rev 1334) @@ -0,0 +1,24 @@ +package cc.kune.msgs.client.resources; + +import cc.kune.common.client.notify.NotifyLevel; + +import com.google.gwt.resources.client.ImageResource; + +public class UserMessageImagesUtil { + + public static ImageResource getIcon(final NotifyLevel level) { + + switch (level) { + case important: + return UserMessageImages.INST.important(); + case info: + return UserMessageImages.INST.info(); + case veryImportant: + return UserMessageImages.INST.warning(); + case error: + default: + return UserMessageImages.INST.error(); + } + } + +} Modified: trunk/src/main/java/cc/kune/wave/client/WebClient.java =================================================================== --- trunk/src/main/java/cc/kune/wave/client/WebClient.java 2011-04-29 14:42:12 UTC (rev 1333) +++ trunk/src/main/java/cc/kune/wave/client/WebClient.java 2011-05-03 08:22:21 UTC (rev 1334) @@ -25,6 +25,7 @@ import java.util.Date; import java.util.logging.Logger; +import org.apache.jasper.compiler.ErrorDispatcher; import org.waveprotocol.box.webclient.client.ClientEvents; import org.waveprotocol.box.webclient.client.ClientIdGenerator; import org.waveprotocol.box.webclient.client.DebugMessagePanel; @@ -64,6 +65,7 @@ import cc.kune.common.client.notify.NotifyUser; import cc.kune.core.client.errors.DefaultException; +import cc.kune.core.client.sitebar.ErrorsDialog; import cc.kune.core.client.sitebar.spaces.Space; import cc.kune.core.client.sitebar.spaces.SpaceConfEvent; import cc.kune.core.client.state.SiteTokens; @@ -263,12 +265,12 @@ */ // XXX check formatting wrt GPE public native static String getWebSocketBaseUrl(String moduleBase) /*-{ - return "ws" + /:\/\/[^\/]+/.exec(moduleBase)[0] + "/"; - }-*/; + return "ws" + /:\/\/[^\/]+/.exec(moduleBase)[0] + "/"; +}-*/; public native static boolean useSocketIO() /*-{ - return !!$wnd.__useSocketIO - }-*/; + return !!$wnd.__useSocketIO +}-*/; /** */ @@ -345,7 +347,7 @@ } public static void install() { - GWT.setUncaughtExceptionHandler(new ErrorHandler(GWT.getUncaughtExceptionHandler())); + GWT.setUncaughtExceptionHandler(new ErrorHandler(GWT.getUncaughtExceptionHandler())); } @Override @@ -357,9 +359,11 @@ getStackTraceAsync(e, new Accessor<SafeHtml>() { @Override public void use(SafeHtml stack) { - NotifyUser.error("Error in wave client", true); + NotifyUser.error("Oops! Something has gone wrong. Please contact the site admins with <em>more details</em>", true); // error.addDetail(stack, null); - REMOTE_LOG.severe(stack.asString().replace("<br>", "\n")); + String message = stack.asString().replace("<br>", "\n"); + REMOTE_LOG.severe(message); + NotifyUser.logError(message); } }); } Modified: trunk/src/main/java/cc/kune/wave/server/KuneWaveManager.java =================================================================== --- trunk/src/main/java/cc/kune/wave/server/KuneWaveManager.java 2011-04-29 14:42:12 UTC (rev 1333) +++ trunk/src/main/java/cc/kune/wave/server/KuneWaveManager.java 2011-05-03 08:22:21 UTC (rev 1334) @@ -7,12 +7,16 @@ public interface KuneWaveManager { - WaveRef createWave(String message, ParticipantId participants); + void addParticipant(WaveRef waveName, String author, String userWhoAdd, String newParticipant); - WaveRef createWave(String title, String message, ParticipantId... participantsArray); + WaveRef createWave(String message, ParticipantId participants); - Wavelet fetchWavelet(WaveRef waveRef, String author); + WaveRef createWave(String title, String message, ParticipantId... participantsArray); - void setTitle(WaveRef waveName, String title, String author); + Wavelet fetchWavelet(WaveRef waveRef, String author); + boolean isParticipant(Wavelet wavelet, String user); + + void setTitle(WaveRef waveName, String title, String author); + } Modified: trunk/src/main/java/cc/kune/wave/server/KuneWaveManagerDefault.java =================================================================== --- trunk/src/main/java/cc/kune/wave/server/KuneWaveManagerDefault.java 2011-04-29 14:42:12 UTC (rev 1333) +++ trunk/src/main/java/cc/kune/wave/server/KuneWaveManagerDefault.java 2011-05-03 08:22:21 UTC (rev 1334) @@ -40,166 +40,210 @@ import com.google.wave.api.impl.WaveletData; public class KuneWaveManagerDefault implements KuneWaveManager { - public static final Log LOG = LogFactory.getLog(KuneWaveManagerDefault.class); + public static final Log LOG = LogFactory.getLog(KuneWaveManagerDefault.class); - private static final String NO_TITLE = ""; + private static final String NO_TITLE = ""; - private final ConversationUtil conversationUtil; - private final EventDataConverterManager converterManager; - private final String domain; - private final OperationServiceRegistry operationRegistry; - private final ParticipantUtils participantUtils; - private final WaveletProvider waveletProvider; + private final ConversationUtil conversationUtil; + private final EventDataConverterManager converterManager; + private final String domain; + private final OperationServiceRegistry operationRegistry; + private final ParticipantUtils participantUtils; + private final WaveletProvider waveletProvider; - @Inject - public KuneWaveManagerDefault(final EventDataConverterManager converterManager, - @Named("DataApiRegistry") final OperationServiceRegistry operationRegistry, - final WaveletProvider waveletProvider, final ConversationUtil conversationUtil, - final ParticipantUtils participantUtils, - @Named(CoreSettings.WAVE_SERVER_DOMAIN) final String domain) { - this.converterManager = converterManager; - this.waveletProvider = waveletProvider; - this.conversationUtil = conversationUtil; - this.operationRegistry = operationRegistry; - this.participantUtils = participantUtils; - this.domain = domain; - } + @Inject + public KuneWaveManagerDefault(final EventDataConverterManager converterManager, + @Named("DataApiRegistry") final OperationServiceRegistry operationRegistry, + final WaveletProvider waveletProvider, final ConversationUtil conversationUtil, + final ParticipantUtils participantUtils, @Named(CoreSettings.WAVE_SERVER_DOMAIN) final String domain) { + this.converterManager = converterManager; + this.waveletProvider = waveletProvider; + this.conversationUtil = conversationUtil; + this.operationRegistry = operationRegistry; + this.participantUtils = participantUtils; + this.domain = domain; + } - @Override - public WaveRef createWave(final String message, final ParticipantId participant) { - return createWave(NO_TITLE, message, participant); - } + @Override + public void addParticipant(final WaveRef waveName, final String author, final String userWhoAdds, + final String participant) { + final Wavelet wavelet = fetchWavelet(waveName, author); + final String whoAdd = wavelet.getParticipants().contains(participantUtils.of(userWhoAdds)) ? userWhoAdds + : author; + final OperationQueue opQueue = new OperationQueue(); + opQueue.addParticipantToWavelet(wavelet, participantUtils.of(participant).toString()); + final OperationContextImpl context = new OperationContextImpl(waveletProvider, + converterManager.getEventDataConverter(ProtocolVersion.DEFAULT), conversationUtil); + final OperationRequest request = opQueue.getPendingOperations().get(0); + OperationUtil.executeOperation(request, operationRegistry, context, participantUtils.of(whoAdd)); + final String reqId = request.getId(); + final JsonRpcResponse response = context.getResponse(reqId); + if (response != null && response.isError()) { + onFailure(context.getResponse(reqId).getErrorMessage()); + } + OperationUtil.submitDeltas(context, waveletProvider, new SubmitRequestListener() { + @Override + public void onFailure(final String arg0) { + KuneWaveManagerDefault.this.onFailure("Wave add participant failed, onFailure: " + arg0); + } - @Override - public WaveRef createWave(@Nonnull final String title, final String message, - @Nonnull final ParticipantId... participantsArray) { - String newWaveId = null; - String newWaveletId = null; - final Set<String> participants = new HashSet<String>(); - for (final ParticipantId participant : participantsArray) { - participants.add(participant.toString()); + @Override + public void onSuccess(final int arg0, final HashedVersion arg1, final long arg2) { + LOG.info("Wave addParticipant success: " + arg1); + } + }); } - final ParticipantId user = participantsArray[0]; - final OperationQueue opQueue = new OperationQueue(); - final Wavelet newWavelet = opQueue.createWavelet(domain, participants); - opQueue.setTitleOfWavelet(newWavelet, title); - final Blip rootBlip = newWavelet.getRootBlip(); - rootBlip.append(new com.google.wave.api.Markup(message).getText()); - final OperationContextImpl context = new OperationContextImpl(waveletProvider, - converterManager.getEventDataConverter(ProtocolVersion.DEFAULT), conversationUtil); - for (final OperationRequest req : opQueue.getPendingOperations()) { - OperationUtil.executeOperation(req, operationRegistry, context, user); - final String reqId = req.getId(); - final JsonRpcResponse response = context.getResponse(reqId); - if (response != null) { - if (response.isError()) { - onFailure(context.getResponse(reqId).getErrorMessage()); - } else { - final Object responseWaveId = response.getData().get(ParamsProperty.WAVE_ID); - final Object responseWaveletId = response.getData().get(ParamsProperty.WAVELET_ID); - if (responseWaveId != null && responseWaveletId != null) { - // This is serialized use - // ApiIdSerializer.instance().deserialiseWaveId (see - // WaveService) - newWaveId = (String) responseWaveId; - newWaveletId = (String) responseWaveletId; - } + + @Override + public WaveRef createWave(final String message, final ParticipantId participant) { + return createWave(NO_TITLE, message, participant); + } + + @Override + public WaveRef createWave(@Nonnull final String title, final String message, + @Nonnull final ParticipantId... participantsArray) { + String newWaveId = null; + String newWaveletId = null; + final Set<String> participants = new HashSet<String>(); + for (final ParticipantId participant : participantsArray) { + participants.add(participant.toString()); } - } + final ParticipantId user = participantsArray[0]; + final OperationQueue opQueue = new OperationQueue(); + final Wavelet newWavelet = opQueue.createWavelet(domain, participants); + opQueue.setTitleOfWavelet(newWavelet, title); + final Blip rootBlip = newWavelet.getRootBlip(); + rootBlip.append(new com.google.wave.api.Markup(message).getText()); + final OperationContextImpl context = new OperationContextImpl(waveletProvider, + converterManager.getEventDataConverter(ProtocolVersion.DEFAULT), conversationUtil); + for (final OperationRequest req : opQueue.getPendingOperations()) { + OperationUtil.executeOperation(req, operationRegistry, context, user); + final String reqId = req.getId(); + final JsonRpcResponse response = context.getResponse(reqId); + if (response != null) { + if (response.isError()) { + onFailure(context.getResponse(reqId).getErrorMessage()); + } else { + final Object responseWaveId = response.getData().get(ParamsProperty.WAVE_ID); + final Object responseWaveletId = response.getData().get(ParamsProperty.WAVELET_ID); + if (responseWaveId != null && responseWaveletId != null) { + // This is serialized use + // ApiIdSerializer.instance().deserialiseWaveId (see + // WaveService) + newWaveId = (String) responseWaveId; + newWaveletId = (String) responseWaveletId; + } + } + } + } + OperationUtil.submitDeltas(context, waveletProvider, new SubmitRequestListener() { + @Override + public void onFailure(final String arg0) { + KuneWaveManagerDefault.this.onFailure("Wave creation failed, onFailure: " + arg0); + } + + @Override + public void onSuccess(final int arg0, final HashedVersion arg1, final long arg2) { + LOG.info("Wave creation success: " + arg1); + } + }); + LOG.info("WaveId: " + newWaveId + " waveletId: " + newWaveletId); + WaveRef wavename; + try { + wavename = WaveRef.of(ApiIdSerializer.instance().deserialiseWaveId(newWaveId), + ApiIdSerializer.instance().deserialiseWaveletId(newWaveletId)); + } catch (final InvalidIdException e) { + throw new DefaultException("Error getting wave id"); + } + return wavename; } - OperationUtil.submitDeltas(context, waveletProvider, new SubmitRequestListener() { - @Override - public void onFailure(final String arg0) { - KuneWaveManagerDefault.this.onFailure("Wave creation failed, onFailure: " + arg0); - } - @Override - public void onSuccess(final int arg0, final HashedVersion arg1, final long arg2) { - LOG.info("Wave creation success: " + arg1); - } - }); - LOG.info("WaveId: " + newWaveId + " waveletId: " + newWaveletId); - WaveRef wavename; - try { - wavename = WaveRef.of(ApiIdSerializer.instance().deserialiseWaveId(newWaveId), - ApiIdSerializer.instance().deserialiseWaveletId(newWaveletId)); - } catch (final InvalidIdException e) { - throw new DefaultException("Error getting wave id"); + public void doOperations(final WaveRef waveName, final String author, final OperationQueue opQueue, + final SubmitRequestListener listener) { + final OperationContextImpl context = new OperationContextImpl(waveletProvider, + converterManager.getEventDataConverter(ProtocolVersion.DEFAULT), conversationUtil); + for (final OperationRequest req : opQueue.getPendingOperations()) { + OperationUtil.executeOperation(req, operationRegistry, context, participantUtils.of(author)); + } + OperationUtil.submitDeltas(context, waveletProvider, listener); } - return wavename; - } - @Override - public Wavelet fetchWavelet(final WaveRef waveName, final String author) { - Wavelet wavelet = null; - final OperationQueue opQueue = new OperationQueue(); - opQueue.fetchWavelet(waveName.getWaveId(), waveName.getWaveletId()); - final OperationContextImpl context = new OperationContextImpl(waveletProvider, - converterManager.getEventDataConverter(ProtocolVersion.DEFAULT), conversationUtil); - final OperationRequest request = opQueue.getPendingOperations().get(0); - OperationUtil.executeOperation(request, operationRegistry, context, participantUtils.of(author)); - final String reqId = request.getId(); - final JsonRpcResponse response = context.getResponse(reqId); - if (response != null && response.isError()) { - onFailure(context.getResponse(reqId).getErrorMessage()); - } else { - // Duplicate code from WaveService - final WaveletData waveletData = (WaveletData) response.getData().get(ParamsProperty.WAVELET_DATA); - final Map<String, Blip> blips = new HashMap<String, Blip>(); - final Map<String, BlipThread> threads = new HashMap<String, BlipThread>(); - wavelet = Wavelet.deserialize(opQueue, blips, threads, waveletData); + @Override + public Wavelet fetchWavelet(final WaveRef waveName, final String author) { + Wavelet wavelet = null; + final OperationQueue opQueue = new OperationQueue(); + opQueue.fetchWavelet(waveName.getWaveId(), waveName.getWaveletId()); + final OperationContextImpl context = new OperationContextImpl(waveletProvider, + converterManager.getEventDataConverter(ProtocolVersion.DEFAULT), conversationUtil); + final OperationRequest request = opQueue.getPendingOperations().get(0); + OperationUtil.executeOperation(request, operationRegistry, context, participantUtils.of(author)); + final String reqId = request.getId(); + final JsonRpcResponse response = context.getResponse(reqId); + if (response != null && response.isError()) { + onFailure(context.getResponse(reqId).getErrorMessage()); + } else { + // Duplicate code from WaveService + final WaveletData waveletData = (WaveletData) response.getData().get(ParamsProperty.WAVELET_DATA); + final Map<String, Blip> blips = new HashMap<String, Blip>(); + final Map<String, BlipThread> threads = new HashMap<String, BlipThread>(); + wavelet = Wavelet.deserialize(opQueue, blips, threads, waveletData); - // Deserialize threads. - @SuppressWarnings("unchecked") - final Map<String, BlipThread> tempThreads = (Map<String, BlipThread>) response.getData().get( - ParamsProperty.THREADS); - for (final Map.Entry<String, BlipThread> entry : tempThreads.entrySet()) { - final BlipThread thread = entry.getValue(); - threads.put(entry.getKey(), - new BlipThread(thread.getId(), thread.getLocation(), thread.getBlipIds(), blips)); - } + // Deserialize threads. + @SuppressWarnings("unchecked") + final Map<String, BlipThread> tempThreads = (Map<String, BlipThread>) response.getData().get( + ParamsProperty.THREADS); + for (final Map.Entry<String, BlipThread> entry : tempThreads.entrySet()) { + final BlipThread thread = entry.getValue(); + threads.put(entry.getKey(), new BlipThread(thread.getId(), thread.getLocation(), thread.getBlipIds(), + blips)); + } - // Deserialize blips. - @SuppressWarnings("unchecked") - final Map<String, BlipData> blipDatas = (Map<String, BlipData>) response.getData().get( - ParamsProperty.BLIPS); - for (final Map.Entry<String, BlipData> entry : blipDatas.entrySet()) { - blips.put(entry.getKey(), Blip.deserialize(opQueue, wavelet, entry.getValue())); - } + // Deserialize blips. + @SuppressWarnings("unchecked") + final Map<String, BlipData> blipDatas = (Map<String, BlipData>) response.getData().get(ParamsProperty.BLIPS); + for (final Map.Entry<String, BlipData> entry : blipDatas.entrySet()) { + blips.put(entry.getKey(), Blip.deserialize(opQueue, wavelet, entry.getValue())); + } + } + return wavelet; } - return wavelet; - } - private void onFailure(final String message) { - final String errorMsg = TextUtils.notEmpty(message) ? message : "Wave operation failed"; - LOG.error(errorMsg); - throw new DefaultException(errorMsg); - } + @Override + public boolean isParticipant(final Wavelet wavelet, final String user) { + return wavelet.getParticipants().contains(participantUtils.of(user)); + } - @Override - public void setTitle(final WaveRef waveName, final String title, final String author) { - final Wavelet wavelet = fetchWavelet(waveName, author); - final OperationQueue opQueue = new OperationQueue(); - opQueue.setTitleOfWavelet(wavelet, title); - final OperationContextImpl context = new OperationContextImpl(waveletProvider, - converterManager.getEventDataConverter(ProtocolVersion.DEFAULT), conversationUtil); - final OperationRequest request = opQueue.getPendingOperations().get(0); - OperationUtil.executeOperation(request, operationRegistry, context, participantUtils.of(author)); - final String reqId = request.getId(); - final JsonRpcResponse response = context.getResponse(reqId); - if (response != null && response.isError()) { - onFailure(context.getResponse(reqId).getErrorMessage()); + private void onFailure(final String message) { + final String errorMsg = TextUtils.notEmpty(message) ? message : "Wave operation failed"; + LOG.error(errorMsg); + throw new DefaultException(errorMsg); } - OperationUtil.submitDeltas(context, waveletProvider, new SubmitRequestListener() { - @Override - public void onFailure(final String arg0) { - KuneWaveManagerDefault.this.onFailure("Wave set title failed, onFailure: " + arg0); - } - @Override - public void onSuccess(final int arg0, final HashedVersion arg1, final long arg2) { - LOG.info("Wave set title success: " + arg1); - } - }); - } + @Override + public void setTitle(final WaveRef waveName, final String title, final String author) { + final Wavelet wavelet = fetchWavelet(waveName, author); + final OperationQueue opQueue = new OperationQueue(); + opQueue.setTitleOfWavelet(wavelet, title); + final OperationContextImpl context = new OperationContextImpl(waveletProvider, + converterManager.getEventDataConverter(ProtocolVersion.DEFAULT), conversationUtil); + final OperationRequest request = opQueue.getPendingOperations().get(0); + OperationUtil.executeOperation(request, operationRegistry, context, participantUtils.of(author)); + final String reqId = request.getId(); + final JsonRpcResponse response = context.getResponse(reqId); + if (response != null && response.isError()) { + onFailure(context.getResponse(reqId).getErrorMessage()); + } + OperationUtil.submitDeltas(context, waveletProvider, new SubmitRequestListener() { + @Override + public void onFailure(final String arg0) { + KuneWaveManagerDefault.this.onFailure("Wave set title failed, onFailure: " + arg0); + } + + @Override + public void onSuccess(final int arg0, final HashedVersion arg1, final long arg2) { + LOG.info("Wave set title success: " + arg1); + } + }); + } + } Modified: trunk/src/test/java/cc/kune/wave/server/KuneWaveManagerDefaultTest.java =================================================================== --- trunk/src/test/java/cc/kune/wave/server/KuneWaveManagerDefaultTest.java 2011-04-29 14:42:12 UTC (rev 1333) +++ trunk/src/test/java/cc/kune/wave/server/KuneWaveManagerDefaultTest.java 2011-05-03 08:22:21 UTC (rev 1334) @@ -19,53 +19,75 @@ public class KuneWaveManagerDefaultTest extends IntegrationTest { - private static final String MESSAGE = "testing"; - private static final String TITLE = "title"; - private static final String TITLENEW = "titleNew"; - @Inject - KuneWaveManagerDefault manager; - @Inject - ParticipantUtils participantUtils; + private static final String MESSAGE = "testing"; + private static final String NEW_PARTICIPANT = "newparti"; + private static final String TITLE = "title"; + private static final String TITLENEW = "titleNew"; + @Inject + KuneWaveManagerDefault manager; + @Inject + ParticipantUtils participantUtils; - @Before - public void before() { - new IntegrationTestHelper(this); + private void addParticipant(final String whoAdds) throws IOException { + doLogin(); + final WaveRef waveletName = manager.createWave(TITLE, MESSAGE, participantUtils.of(getSiteAdminShortName())); + assertNotNull(waveletName); + manager.addParticipant(waveletName, getSiteAdminShortName(), whoAdds, NEW_PARTICIPANT); + final Wavelet fetchWavelet = manager.fetchWavelet(waveletName, getSiteAdminShortName()); + assertNotNull(fetchWavelet); + assertEquals(2, fetchWavelet.getParticipants().size()); + manager.isParticipant(fetchWavelet, NEW_PARTICIPANT); + } - } + @Test + public void authorAddParticipant() throws DefaultException, IOException { + final String whoAdds = getSiteAdminShortName(); + addParticipant(whoAdds); + } - @Test - public void createWave() throws DefaultException, IOException { - doLogin(); - final WaveRef waveletName = manager.createWave(MESSAGE, participantUtils.of(getSiteAdminShortName())); - assertNotNull(waveletName); - final Wavelet fetchWavelet = manager.fetchWavelet(waveletName, getSiteAdminShortName()); - assertNotNull(fetchWavelet); - assertTrue(fetchWavelet.getRootBlip().getContent().contains(MESSAGE)); - } + @Before + public void before() { + new IntegrationTestHelper(this); - @Test - public void createWaveWithTitle() throws DefaultException, IOException { - doLogin(); - final WaveRef waveletName = manager.createWave(TITLE, MESSAGE, - participantUtils.of(getSiteAdminShortName())); - assertNotNull(waveletName); - final Wavelet fetchWavelet = manager.fetchWavelet(waveletName, getSiteAdminShortName()); - assertNotNull(fetchWavelet); - assertTrue(fetchWavelet.getRootBlip().getContent().contains(MESSAGE)); - assertEquals(TITLE, fetchWavelet.getTitle()); - } + } - @Test - public void setTitle() throws DefaultException, IOException { - doLogin(); - final WaveRef waveletName = manager.createWave(TITLE, MESSAGE, - participantUtils.of(getSiteAdminShortName())); - assertNotNull(waveletName); - manager.setTitle(waveletName, TITLENEW, getSiteAdminShortName()); - final Wavelet fetchWavelet = manager.fetchWavelet(waveletName, getSiteAdminShortName()); - assertNotNull(fetchWavelet); - assertTrue(fetchWavelet.getRootBlip().getContent().contains(MESSAGE)); - assertEquals(TITLENEW, fetchWavelet.getTitle()); - } + @Test + public void createWave() throws DefaultException, IOException { + doLogin(); + final WaveRef waveletName = manager.createWave(MESSAGE, participantUtils.of(getSiteAdminShortName())); + assertNotNull(waveletName); + final Wavelet fetchWavelet = manager.fetchWavelet(waveletName, getSiteAdminShortName()); + assertNotNull(fetchWavelet); + assertTrue(fetchWavelet.getRootBlip().getContent().contains(MESSAGE)); + } + @Test + public void createWaveWithTitle() throws DefaultException, IOException { + doLogin(); + final WaveRef waveletName = manager.createWave(TITLE, MESSAGE, participantUtils.of(getSiteAdminShortName())); + assertNotNull(waveletName); + final Wavelet fetchWavelet = manager.fetchWavelet(waveletName, getSiteAdminShortName()); + assertNotNull(fetchWavelet); + assertTrue(fetchWavelet.getRootBlip().getContent().contains(MESSAGE)); + assertEquals(TITLE, fetchWavelet.getTitle()); + } + + @Test + public void otherMemberAddParticipant() throws DefaultException, IOException { + final String whoAdds = "otherMember"; + addParticipant(whoAdds); + } + + @Test + public void setTitle() throws DefaultException, IOException { + doLogin(); + final WaveRef waveletName = manager.createWave(TITLE, MESSAGE, participantUtils.of(getSiteAdminShortName())); + assertNotNull(waveletName); + manager.setTitle(waveletName, TITLENEW, getSiteAdminShortName()); + final Wavelet fetchWavelet = manager.fetchWavelet(waveletName, getSiteAdminShortName()); + assertNotNull(fetchWavelet); + assertTrue(fetchWavelet.getRootBlip().getContent().contains(MESSAGE)); + assertEquals(TITLENEW, fetchWavelet.getTitle()); + } + }
participants (1)
-
Vicente J. Ruiz Jurado