r1312 - in trunk/src: main/java/cc/kune/common/client/tooltip main/java/cc/kune/core/client/auth main/java/cc/kune/core/client/cnt main/java/cc/kune/core/client/sn/actions/registry main/java/cc/kune/core/client/ui main/java/cc/kune/core/server/init main/java/cc/kune/core/server/rpc main/java/cc/kune/core/server/state main/java/cc/kune/core/shared/dto main/java/cc/kune/docs/client/cnt main/java/cc/kune/docs/server main/java/cc/kune/gspace/client main/java/cc/kune/gspace/client/resources main/j
Author: vjrj_ Date: 2011-04-14 16:15:20 +0200 (Thu, 14 Apr 2011) New Revision: 1312 Modified: trunk/src/main/java/cc/kune/common/client/tooltip/Tooltip.java trunk/src/main/java/cc/kune/common/client/tooltip/TooltipPosition.java trunk/src/main/java/cc/kune/common/client/tooltip/TooltipTimers.java trunk/src/main/java/cc/kune/core/client/auth/SignInForm.java trunk/src/main/java/cc/kune/core/client/auth/SignInPanel.java trunk/src/main/java/cc/kune/core/client/auth/SignInPresenter.java trunk/src/main/java/cc/kune/core/client/auth/SignInView.java trunk/src/main/java/cc/kune/core/client/cnt/AbstractContentView.java trunk/src/main/java/cc/kune/core/client/cnt/FoldableContentPanel.java trunk/src/main/java/cc/kune/core/client/cnt/FoldableContentPresenter.java trunk/src/main/java/cc/kune/core/client/sn/actions/registry/UserSNConfActions.java trunk/src/main/java/cc/kune/core/client/sn/actions/registry/UserSNMenuItemsRegistry.java trunk/src/main/java/cc/kune/core/client/ui/DefaultFormUtils.java trunk/src/main/java/cc/kune/core/server/init/DatabaseInitializer.java trunk/src/main/java/cc/kune/core/server/rpc/GroupRPC.java trunk/src/main/java/cc/kune/core/server/rpc/UserRPC.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/cnt/DocFolderContentPanel.java trunk/src/main/java/cc/kune/docs/client/cnt/DocumentViewerPanel.java trunk/src/main/java/cc/kune/docs/server/DocumentServerTool.java trunk/src/main/java/cc/kune/gspace/client/WsArmorImpl.ui.xml trunk/src/main/java/cc/kune/gspace/client/resources/WsArmorResources.java trunk/src/main/java/cc/kune/gspace/client/resources/wsArmor.css trunk/src/main/java/cc/kune/wave/client/WaveClientManager.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/main/java/cc/kune/wave/server/ParticipantUtils.java trunk/src/main/java/org/ourproject/kune/blogs/client/cnt/BlogFolderContentPanel.java trunk/src/main/java/org/ourproject/kune/blogs/client/cnt/BlogViewerPanel.java trunk/src/main/java/org/ourproject/kune/chat/client/cnt/ChatRoomPanel.java trunk/src/main/java/org/ourproject/kune/gallery/client/cnt/GalleryFolderContentPanel.java trunk/src/main/java/org/ourproject/kune/gallery/client/cnt/GalleryViewerPanel.java trunk/src/main/java/org/ourproject/kune/wiki/client/cnt/WikiFolderContentPanel.java trunk/src/main/java/org/ourproject/kune/wiki/client/cnt/WikiViewerPanel.java trunk/src/test/java/cc/kune/common/client/tooltip/TooltipTimersTest.java trunk/src/test/java/cc/kune/wave/server/KuneWaveManagerDefaultTest.java Log: CLOSED - # 37: Implement a GWT Tooltip widget similar to qtip or others http://kune.ourproject.org/issues/ticket/37 Modified: trunk/src/main/java/cc/kune/common/client/tooltip/Tooltip.java =================================================================== --- trunk/src/main/java/cc/kune/common/client/tooltip/Tooltip.java 2011-04-13 15:41:45 UTC (rev 1311) +++ trunk/src/main/java/cc/kune/common/client/tooltip/Tooltip.java 2011-04-14 14:15:20 UTC (rev 1312) @@ -6,6 +6,10 @@ import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.Style.Unit; +import com.google.gwt.event.dom.client.BlurEvent; +import com.google.gwt.event.dom.client.BlurHandler; +import com.google.gwt.event.dom.client.FocusEvent; +import com.google.gwt.event.dom.client.FocusHandler; import com.google.gwt.event.dom.client.MouseOutEvent; import com.google.gwt.event.dom.client.MouseOutHandler; import com.google.gwt.event.dom.client.MouseOverEvent; @@ -69,14 +73,17 @@ show(); } }); - final TimerWrapper outTimer = new TimerWrapper(); - outTimer.configure(new Executer() { + final Executer hideExecuter = new Executer() { @Override public void execute() { hide(); } - }); - timers = new TooltipTimers(overTimer, outTimer); + }; + final TimerWrapper outTimer = new TimerWrapper(); + final TimerWrapper securityTimer = new TimerWrapper(); + outTimer.configure(hideExecuter); + securityTimer.configure(hideExecuter); + timers = new TooltipTimers(overTimer, outTimer, securityTimer); } protected int getHeight() { @@ -150,6 +157,18 @@ timers.onOver(); } }, MouseOverEvent.getType()); + ofWidget.addDomHandler(new FocusHandler() { + @Override + public void onFocus(final FocusEvent event) { + // timers.onOver(); + } + }, FocusEvent.getType()); + ofWidget.addDomHandler(new BlurHandler() { + @Override + public void onBlur(final BlurEvent event) { + timers.onOut(); + } + }, BlurEvent.getType()); ofWidget.addDomHandler(new MouseOutHandler() { @Override public void onMouseOut(final MouseOutEvent event) { Modified: trunk/src/main/java/cc/kune/common/client/tooltip/TooltipPosition.java =================================================================== --- trunk/src/main/java/cc/kune/common/client/tooltip/TooltipPosition.java 2011-04-13 15:41:45 UTC (rev 1311) +++ trunk/src/main/java/cc/kune/common/client/tooltip/TooltipPosition.java 2011-04-14 14:15:20 UTC (rev 1312) @@ -8,7 +8,7 @@ public static final int ARROW_DEF_MARGIN = 10; public static final int ARROW_SIZE = 7; - public static final int TOOLTIP_DISTANCE = 7; + public static final int TOOLTIP_DISTANCE = 12; private int arrowLeft; private ArrowPosition arrowPosition; Modified: trunk/src/main/java/cc/kune/common/client/tooltip/TooltipTimers.java =================================================================== --- trunk/src/main/java/cc/kune/common/client/tooltip/TooltipTimers.java 2011-04-13 15:41:45 UTC (rev 1311) +++ trunk/src/main/java/cc/kune/common/client/tooltip/TooltipTimers.java 2011-04-14 14:15:20 UTC (rev 1312) @@ -5,11 +5,13 @@ public class TooltipTimers { private final TimerWrapper hideTimer; + private final TimerWrapper securityTimer; private final TimerWrapper showTimer; - public TooltipTimers(final TimerWrapper showTimer, final TimerWrapper hideTimer) { + public TooltipTimers(final TimerWrapper showTimer, final TimerWrapper hideTimer, final TimerWrapper securityTimer) { this.showTimer = showTimer; this.hideTimer = hideTimer; + this.securityTimer = securityTimer; } public void onOut() { @@ -19,14 +21,20 @@ if (!hideTimer.isScheduled()) { hideTimer.schedule(650); } + if (!securityTimer.isScheduled()) { + securityTimer.cancel(); + } } public void onOver() { if (!showTimer.isScheduled()) { - showTimer.schedule(500); + showTimer.schedule(700); } if (hideTimer.isScheduled()) { hideTimer.cancel(); } + if (!securityTimer.isScheduled()) { + securityTimer.schedule(7000); + } } } Modified: trunk/src/main/java/cc/kune/core/client/auth/SignInForm.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/auth/SignInForm.java 2011-04-13 15:41:45 UTC (rev 1311) +++ trunk/src/main/java/cc/kune/core/client/auth/SignInForm.java 2011-04-14 14:15:20 UTC (rev 1312) @@ -19,6 +19,7 @@ \*/ package cc.kune.core.client.auth; +import cc.kune.common.client.utils.OnAcceptCallback; import cc.kune.core.client.ui.DefaultForm; import cc.kune.core.shared.i18n.I18nTranslationService; @@ -34,6 +35,7 @@ private final TextField<String> loginNickOrEmailField; private final TextField<String> loginPassField; + private OnAcceptCallback onAcceptCallback; public SignInForm(final I18nTranslationService i18n) { super.addStyleName("kune-Margin-Large-trbl"); @@ -61,8 +63,7 @@ @Override public void handleEvent(final FieldEvent fe) { if (fe.getEvent().getKeyCode() == 13) { - // Window.alert("SignInForm"); - // presenter.onFormSignIn(); + onAcceptCallback.onSuccess(); } } }); @@ -96,4 +97,8 @@ public void setNickOrEmail(final String nickOrEmail) { loginNickOrEmailField.setValue(nickOrEmail); } + + public void setOnPasswordReturn(final OnAcceptCallback onAcceptCallback) { + this.onAcceptCallback = onAcceptCallback; + } } Modified: trunk/src/main/java/cc/kune/core/client/auth/SignInPanel.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/auth/SignInPanel.java 2011-04-13 15:41:45 UTC (rev 1311) +++ trunk/src/main/java/cc/kune/core/client/auth/SignInPanel.java 2011-04-14 14:15:20 UTC (rev 1312) @@ -21,6 +21,7 @@ import cc.kune.common.client.notify.NotifyLevelImages; import cc.kune.common.client.ui.MaskWidgetView; +import cc.kune.common.client.utils.OnAcceptCallback; import cc.kune.core.client.resources.CoreMessages; import cc.kune.core.client.ui.KuneUiUtils; import cc.kune.core.client.ui.dialogs.MessageToolbar; @@ -122,6 +123,11 @@ } @Override + public void setOnPasswordReturn(final OnAcceptCallback onAcceptCallback) { + signInForm.setOnPasswordReturn(onAcceptCallback); + } + + @Override public void show() { super.show(); KuneUiUtils.focusOnField(getNickname()); Modified: trunk/src/main/java/cc/kune/core/client/auth/SignInPresenter.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/auth/SignInPresenter.java 2011-04-13 15:41:45 UTC (rev 1311) +++ trunk/src/main/java/cc/kune/core/client/auth/SignInPresenter.java 2011-04-14 14:15:20 UTC (rev 1312) @@ -21,6 +21,7 @@ import cc.kune.common.client.log.Log; import cc.kune.common.client.notify.NotifyLevel; +import cc.kune.common.client.utils.OnAcceptCallback; import cc.kune.common.client.utils.TextUtils; import cc.kune.common.client.utils.TimerWrapper; import cc.kune.common.client.utils.TimerWrapper.Executer; @@ -131,6 +132,12 @@ onFormSignIn(); } }); + getView().setOnPasswordReturn(new OnAcceptCallback() { + @Override + public void onSuccess() { + onFormSignIn(); + } + }); getView().getSecondBtn().addClickHandler(new ClickHandler() { @Override Modified: trunk/src/main/java/cc/kune/core/client/auth/SignInView.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/auth/SignInView.java 2011-04-13 15:41:45 UTC (rev 1311) +++ trunk/src/main/java/cc/kune/core/client/auth/SignInView.java 2011-04-14 14:15:20 UTC (rev 1312) @@ -19,6 +19,8 @@ */ package cc.kune.core.client.auth; +import cc.kune.common.client.utils.OnAcceptCallback; + import com.google.gwt.event.dom.client.HasClickHandlers; public interface SignInView extends SignInAbstractView { @@ -39,6 +41,8 @@ void setNickOrEmail(String nickOrEmail); + void setOnPasswordReturn(OnAcceptCallback onAcceptCallback); + void validate(); } Modified: trunk/src/main/java/cc/kune/core/client/cnt/AbstractContentView.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/cnt/AbstractContentView.java 2011-04-13 15:41:45 UTC (rev 1311) +++ trunk/src/main/java/cc/kune/core/client/cnt/AbstractContentView.java 2011-04-14 14:15:20 UTC (rev 1312) @@ -19,12 +19,12 @@ */ package cc.kune.core.client.cnt; +import org.waveprotocol.wave.model.waveref.WaveRef; + import com.google.gwt.user.client.ui.Widget; public interface AbstractContentView { - public void setRawContent(final String content); - void attach(); void detach(); @@ -37,6 +37,10 @@ void setNoPreview(); + public void setRawContent(final String content); + + void setEditableWaveContent(WaveRef waveRef, boolean isNewWave); + void setWidgetAsContent(final Widget widget, boolean setDefMargins); void showImage(String imageUrl, String imageResizedUrl, boolean showPreviewMsg); Modified: trunk/src/main/java/cc/kune/core/client/cnt/FoldableContentPanel.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/cnt/FoldableContentPanel.java 2011-04-13 15:41:45 UTC (rev 1311) +++ trunk/src/main/java/cc/kune/core/client/cnt/FoldableContentPanel.java 2011-04-14 14:15:20 UTC (rev 1312) @@ -19,28 +19,56 @@ */ package cc.kune.core.client.cnt; +import org.waveprotocol.box.webclient.client.RemoteViewServiceMultiplexer; +import org.waveprotocol.box.webclient.client.SimpleWaveStore; +import org.waveprotocol.box.webclient.client.StagesProvider; +import org.waveprotocol.box.webclient.search.WaveStore; +import org.waveprotocol.box.webclient.widget.frame.FramedPanel; +import org.waveprotocol.box.webclient.widget.loading.LoadingIndicator; +import org.waveprotocol.wave.client.account.ProfileManager; +import org.waveprotocol.wave.client.widget.common.ImplPanel; +import org.waveprotocol.wave.model.id.IdGenerator; +import org.waveprotocol.wave.model.waveref.WaveRef; + +import cc.kune.common.client.log.Log; import cc.kune.common.client.ui.IconLabel; import cc.kune.core.client.resources.CoreResources; import cc.kune.core.shared.i18n.I18nTranslationService; import cc.kune.gspace.client.WsArmor; +import cc.kune.wave.client.WaveClientManager; +import cc.kune.wave.client.WebClient; +import com.google.gwt.dom.client.Document; +import com.google.gwt.dom.client.Element; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; +import com.google.gwt.user.client.Command; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.Label; +import com.google.gwt.user.client.ui.UIObject; import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.user.client.ui.Widget; public abstract class FoldableContentPanel extends AbstractContentPanel implements AbstractContentView { private static final String DEF_CONTENT_MARGINS_STYLE = "kune-Margin-7-trbl"; + private final RemoteViewServiceMultiplexer channel; private final I18nTranslationService i18n; + private final IdGenerator idGenerator; + private final Element loading = new LoadingIndicator().getElement(); private final IconLabel messageLabel; private final FlowPanel messagePanel; + private final ProfileManager profiles; + /** The wave panel, if a wave is open. */ + private StagesProvider wave; + private final FramedPanel waveFrame; + private final ImplPanel waveHolder; + private final WaveStore waveStore = new SimpleWaveStore(); - public FoldableContentPanel(final WsArmor ws, final I18nTranslationService i18n, final CoreResources res) { + public FoldableContentPanel(final WsArmor ws, final I18nTranslationService i18n, final CoreResources res, + final WaveClientManager waveClientManager) { super(ws); this.i18n = i18n; messageLabel = new IconLabel(""); @@ -50,6 +78,13 @@ messagePanel.add(messageLabel); messagePanel.addStyleName("k-preview-msg"); messagePanel.addStyleName("kune-Margin-7-b"); + waveFrame = new FramedPanel(); + waveHolder = new ImplPanel(""); + waveFrame.add(waveHolder); + final WebClient webClient = waveClientManager.getWebClient(); + channel = webClient.getChannel(); + profiles = webClient.getProfiles(); + idGenerator = webClient.getIdGenerator(); } private VerticalPanel createMessageVp(final boolean showMsg) { @@ -137,6 +172,31 @@ } @Override + public void setEditableWaveContent(final WaveRef waveRef, final boolean isNewWave) { + Log.info("FCPanel.setWave()"); + + 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(); + } + }); + setWidgetAsContent(waveFrame, false); + } + + @Override public void setWidgetAsContent(final Widget widget, final boolean setDefMargins) { if (setDefMargins) { widget.addStyleName(DEF_CONTENT_MARGINS_STYLE); Modified: trunk/src/main/java/cc/kune/core/client/cnt/FoldableContentPresenter.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/cnt/FoldableContentPresenter.java 2011-04-13 15:41:45 UTC (rev 1311) +++ trunk/src/main/java/cc/kune/core/client/cnt/FoldableContentPresenter.java 2011-04-14 14:15:20 UTC (rev 1312) @@ -19,7 +19,10 @@ */ package cc.kune.core.client.cnt; +import org.waveprotocol.box.webclient.client.HistorySupport; + import cc.kune.common.client.actions.ui.descrip.GuiActionDescCollection; +import cc.kune.common.client.notify.NotifyUser; import cc.kune.core.client.services.FileDownloadUtils; import cc.kune.core.client.services.ImageSize; import cc.kune.core.client.services.MediaUtils; @@ -91,10 +94,12 @@ protected void setContent(final StateContentDTO state) { final String typeId = state.getTypeId(); + NotifyUser.info(typeId); if (typeId.equals(getUploadType())) { setUploadedContent(state); } else if (typeId.equals(getWaveType())) { - // setWaveContent(state); + setNormalContent(state); + // setWaveContent(state.getContent()); } else { setNormalContent(state); } @@ -179,6 +184,10 @@ this.uploadType = uploadType; } + private void setWaveContent(final String id) { + view.setEditableWaveContent(HistorySupport.waveRefFromHistoryToken(id), false); + } + public void setWaveType(final String waveType) { this.waveType = waveType; } Modified: trunk/src/main/java/cc/kune/core/client/sn/actions/registry/UserSNConfActions.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/sn/actions/registry/UserSNConfActions.java 2011-04-13 15:41:45 UTC (rev 1311) +++ trunk/src/main/java/cc/kune/core/client/sn/actions/registry/UserSNConfActions.java 2011-04-14 14:15:20 UTC (rev 1312) @@ -13,7 +13,6 @@ import cc.kune.core.client.state.StateChangedEvent.StateChangedHandler; import cc.kune.core.client.state.StateManager; import cc.kune.core.shared.domain.UserSNetVisibility; -import cc.kune.core.shared.dto.GroupDTO; import cc.kune.core.shared.dto.StateAbstractDTO; import cc.kune.core.shared.i18n.I18nTranslationService; @@ -30,8 +29,8 @@ public UserSNConfActions(final Session session, final StateManager stateManager, final I18nTranslationService i18n, final Provider<UserSNVisibilityMenuItem> userBuddiesVisibility, final CoreResources res, final IsGroupCondition isGroupCondition, final AddNewBuddiesAction addNewBuddiesAction) { - OPTIONS_MENU.withToolTip(i18n.t("Options")).withIcon(res.arrowDownSitebar()).withStyles("k-sn-options-menu"); - + OPTIONS_MENU.withToolTip(i18n.t("Options")).withIcon(res.arrowDownSitebar()).withStyles( + "k-sn-options-menu, k-noborder, k-nobackcolor"); final MenuRadioItemDescriptor anyoneItem = userBuddiesVisibility.get().withVisibility(UserSNetVisibility.anyone); final MenuRadioItemDescriptor onlyYourBuddiesItem = userBuddiesVisibility.get().withVisibility( UserSNetVisibility.yourbuddies); Modified: trunk/src/main/java/cc/kune/core/client/sn/actions/registry/UserSNMenuItemsRegistry.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/sn/actions/registry/UserSNMenuItemsRegistry.java 2011-04-13 15:41:45 UTC (rev 1311) +++ trunk/src/main/java/cc/kune/core/client/sn/actions/registry/UserSNMenuItemsRegistry.java 2011-04-14 14:15:20 UTC (rev 1312) @@ -25,7 +25,8 @@ public class UserSNMenuItemsRegistry extends AbstractSNMembersActionsRegistry { @Inject - public UserSNMenuItemsRegistry(final Session session, final IsCurrentStateAdministrableCondition isAdministrableCondition, + public UserSNMenuItemsRegistry(final Session session, + final IsCurrentStateAdministrableCondition isAdministrableCondition, final IsPersonCondition isPersonCondition, final IsGroupCondition isGroupCondition, final IsLoggedCondition isLoggedCondition, final IsMeCondition isMe, final IsNotMeCondition isNotMe, final ChangeToCollabAction changeToCollabAction, final ChangeToAdminAction changeToAdminAction, @@ -50,14 +51,16 @@ return item; } }); - add(new Provider<MenuItemDescriptor>() { - @Override - public MenuItemDescriptor get() { - final MenuItemDescriptor item = new MenuItemDescriptor(unjoinAction); - item.add(isLoggedCondition); - item.add(isGroupCondition); - return item; - } - }); + // This doesn't works, because its unregister from current state not + // from target group + // add(new Provider<MenuItemDescriptor>() { + // @Override + // public MenuItemDescriptor get() { + // final MenuItemDescriptor item = new MenuItemDescriptor(unjoinAction); + // item.add(isLoggedCondition); + // item.add(isGroupCondition); + // return item; + // } + // }); } } Modified: trunk/src/main/java/cc/kune/core/client/ui/DefaultFormUtils.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/ui/DefaultFormUtils.java 2011-04-13 15:41:45 UTC (rev 1311) +++ trunk/src/main/java/cc/kune/core/client/ui/DefaultFormUtils.java 2011-04-14 14:15:20 UTC (rev 1312) @@ -19,6 +19,8 @@ */ package cc.kune.core.client.ui; +import cc.kune.common.client.tooltip.Tooltip; + import com.extjs.gxt.ui.client.widget.form.FieldSet; import com.extjs.gxt.ui.client.widget.form.Radio; @@ -34,7 +36,8 @@ fieldSet.add(radio); if (radioTip != null) { - radio.setTitle(radioTip); + Tooltip.to(radio, radioTip); + // radio.setTitle(radioTip); radio.setBoxLabel(radioLabel); // radio.setBoxLabel(KuneUiUtils.genQuickTipLabel(radioLabel, null, // radioTip)); Modified: trunk/src/main/java/cc/kune/core/server/init/DatabaseInitializer.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/init/DatabaseInitializer.java 2011-04-13 15:41:45 UTC (rev 1311) +++ trunk/src/main/java/cc/kune/core/server/init/DatabaseInitializer.java 2011-04-14 14:15:20 UTC (rev 1312) @@ -5,6 +5,8 @@ import javax.persistence.NoResultException; import org.waveprotocol.box.server.authentication.PasswordDigest; +import org.waveprotocol.wave.model.waveref.WaveRef; +import org.waveprotocol.wave.util.escapers.jvm.JavaWaverefEncoder; import cc.kune.core.client.errors.UserMustBeLoggedException; import cc.kune.core.server.content.ContentManager; @@ -87,9 +89,9 @@ groupManager.reIndex(); final Content defaultContent = siteGroup.getDefaultContent(); - final String waveId = kuneWaveManager.createWave( + final WaveRef waveId = kuneWaveManager.createWave( ContentConstants.INITIAL_CONTENT.replaceAll("\\[%s\\]", siteName), user.getShortName()); - contentManager.save(user, defaultContent, waveId); + contentManager.save(user, defaultContent, JavaWaverefEncoder.encodeToUriPathSegment(waveId)); contentManager.setStatus(defaultContent.getId(), ContentStatus.publishedOnline); } Modified: trunk/src/main/java/cc/kune/core/server/rpc/GroupRPC.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/rpc/GroupRPC.java 2011-04-13 15:41:45 UTC (rev 1311) +++ trunk/src/main/java/cc/kune/core/server/rpc/GroupRPC.java 2011-04-14 14:15:20 UTC (rev 1312) @@ -19,6 +19,9 @@ */ package cc.kune.core.server.rpc; +import org.waveprotocol.wave.model.waveref.WaveRef; +import org.waveprotocol.wave.util.escapers.jvm.JavaWaverefEncoder; + import cc.kune.core.client.errors.DefaultException; import cc.kune.core.client.rpcservices.GroupService; import cc.kune.core.server.UserSession; @@ -106,9 +109,9 @@ final User user = getUserLogged(); final Group group = mapper.map(groupDTO, Group.class); final Group newGroup = groupManager.createGroup(group, user); - final String waveId = kuneWaveManager.createWave("<h1>" + i18n.t("About [%s]", groupDTO.getLongName()) + final WaveRef waveId = kuneWaveManager.createWave("<h1>" + i18n.t("About [%s]", groupDTO.getLongName()) + "</h1>" + publicDesc, user.getShortName()); - contentManager.save(user, newGroup.getDefaultContent(), waveId); + contentManager.save(user, newGroup.getDefaultContent(), JavaWaverefEncoder.encodeToUriPathSegment(waveId)); // contentManager.setTags(user, defContentId, tags); return newGroup.getDefaultContent().getStateToken(); }; Modified: trunk/src/main/java/cc/kune/core/server/rpc/UserRPC.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/rpc/UserRPC.java 2011-04-13 15:41:45 UTC (rev 1311) +++ trunk/src/main/java/cc/kune/core/server/rpc/UserRPC.java 2011-04-14 14:15:20 UTC (rev 1312) @@ -25,6 +25,8 @@ import org.json.JSONObject; import org.waveprotocol.box.server.CoreSettings; import org.waveprotocol.box.server.authentication.SessionManager; +import org.waveprotocol.wave.model.waveref.WaveRef; +import org.waveprotocol.wave.util.escapers.jvm.JavaWaverefEncoder; import cc.kune.core.client.errors.AccessViolationException; import cc.kune.core.client.errors.DefaultException; @@ -104,9 +106,9 @@ userDTO.getPassword(), userDTO.getLanguage().getCode(), userDTO.getCountry().getCode(), userDTO.getTimezone().getId()); final Group userGroup = groupManager.createUserGroup(user, wantPersonalHomepage); - final String waveId = kuneWaveManager.createWave("<h1>" + i18n.t("[%s] Bio", userDTO.getName()) + "</h1>" + final WaveRef waveId = kuneWaveManager.createWave("<h1>" + i18n.t("[%s] Bio", userDTO.getName()) + "</h1>" + i18n.t("This user has not written its biography yet"), user.getShortName()); - contentManager.save(user, userGroup.getDefaultContent(), waveId); + contentManager.save(user, userGroup.getDefaultContent(), JavaWaverefEncoder.encodeToUriPathSegment(waveId)); } @Override 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-13 15:41:45 UTC (rev 1311) +++ trunk/src/main/java/cc/kune/core/server/state/StateContent.java 2011-04-14 14:15:20 UTC (rev 1312) @@ -27,21 +27,21 @@ import cc.kune.domain.BasicMimeType; import cc.kune.domain.User; - public class StateContent extends StateContainer { - private String documentId; - private int version; + private List<User> authors; private String content; private AccessRights contentRights; - private ContentStatus status; - private Double rate; - private Integer rateByUsers; private Double currentUserRate; + private String documentId; private BasicMimeType mimeType; private Date publishedOn; + private Double rate; + private Integer rateByUsers; + private ContentStatus status; private String tags; - private List<User> authors; + private int version; + private String waveRef; public StateContent() { } @@ -94,54 +94,62 @@ return version; } - public void setAuthors(List<User> authors) { + public String getWaveRef() { + return waveRef; + } + + public void setAuthors(final List<User> authors) { this.authors = authors; } - public void setContent(String content) { + public void setContent(final String content) { this.content = content; } - public void setContentRights(AccessRights contentRights) { + public void setContentRights(final AccessRights contentRights) { this.contentRights = contentRights; } - public void setCurrentUserRate(Double currentUserRate) { + public void setCurrentUserRate(final Double currentUserRate) { this.currentUserRate = currentUserRate; } - public void setDocumentId(String documentId) { + public void setDocumentId(final String documentId) { this.documentId = documentId; } - public void setMimeType(BasicMimeType mimeType) { + public void setMimeType(final BasicMimeType mimeType) { this.mimeType = mimeType; } - public void setPublishedOn(Date publishedOn) { + public void setPublishedOn(final Date publishedOn) { this.publishedOn = publishedOn; } - public void setRate(Double rate) { + public void setRate(final Double rate) { this.rate = rate; } - public void setRateByUsers(Integer rateByUsers) { + public void setRateByUsers(final Integer rateByUsers) { this.rateByUsers = rateByUsers; } - public void setStatus(ContentStatus status) { + public void setStatus(final ContentStatus status) { this.status = status; } - public void setTags(String tags) { + public void setTags(final String tags) { this.tags = tags; } - public void setVersion(int version) { + public void setVersion(final int version) { this.version = version; } + 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-13 15:41:45 UTC (rev 1311) +++ trunk/src/main/java/cc/kune/core/server/state/StateServiceDefault.java 2011-04-14 14:15:20 UTC (rev 1312) @@ -19,19 +19,24 @@ */ package cc.kune.core.server.state; +import org.waveprotocol.wave.model.waveref.InvalidWaveRefException; +import org.waveprotocol.wave.util.escapers.jvm.JavaWaverefEncoder; +import cc.kune.core.client.errors.DefaultException; import cc.kune.core.server.access.AccessRightsService; import cc.kune.core.server.content.ContentManager; import cc.kune.core.server.manager.GroupManager; import cc.kune.core.server.manager.SocialNetworkManager; import cc.kune.core.server.manager.TagUserContentManager; import cc.kune.core.shared.i18n.I18nTranslationService; +import cc.kune.docs.server.DocumentServerTool; import cc.kune.domain.Container; import cc.kune.domain.Content; import cc.kune.domain.Group; import cc.kune.domain.License; import cc.kune.domain.Revision; import cc.kune.domain.User; +import cc.kune.wave.server.KuneWaveManager; import com.google.inject.Inject; import com.google.inject.Singleton; @@ -39,26 +44,34 @@ @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 GroupManager groupManager; private final TagUserContentManager tagManager; - private final ContentManager contentManager; - private final I18nTranslationService i18n; @Inject - public StateServiceDefault(GroupManager groupManager, SocialNetworkManager socialNetworkManager, - ContentManager contentManager, TagUserContentManager tagManager, AccessRightsService rightsService, - I18nTranslationService i18n) { + 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; } - public StateContainer create(User userLogged, Container container) { + 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()); @@ -67,14 +80,16 @@ state.setRootContainer(calculateRootContainer(container)); state.setLicense(container.getOwner().getDefaultLicense()); state.setAccessLists(container.getAccessLists()); - Group group = container.getOwner(); + final Group group = container.getOwner(); setCommon(state, userLogged, group, container); return state; } - public StateContent create(User userLogged, Content content) { - StateContent state = new StateContent(); - state.setTypeId(content.getTypeId()); + @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()); @@ -83,15 +98,25 @@ state.setTags(tagManager.getTagsAsString(userLogged, content)); state.setStatus(content.getStatus()); state.setStateToken(content.getStateToken()); - Revision revision = content.getLastRevision(); + final Revision revision = content.getLastRevision(); state.setTitle(revision.getTitle()); state.setVersion(content.getVersion()); - char[] text = revision.getBody(); - state.setContent(text == null ? null : new String(text)); - Container container = content.getContainer(); + final char[] text = revision.getBody(); + final String textBody = text == null ? null : new String(text); + if (typeId.equals(DocumentServerTool.TYPE_WAVE)) { + state.setWaveRef(textBody); + try { + state.setContent(kuneWaveManager.fetchWavelet(JavaWaverefEncoder.decodeWaveRefFromPath(textBody)).getRootBlip().getContent()); + } catch (final InvalidWaveRefException e) { + throw new DefaultException("Error retriving Wave"); + } + } else { + state.setContent(textBody); + } + final Container container = content.getContainer(); state.setRootContainer(calculateRootContainer(container)); - License license = content.getLicense(); - Group group = container.getOwner(); + 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()); @@ -100,17 +125,18 @@ state.setCurrentUserRate(contentManager.getRateContent(userLogged, content)); } // FIXME: user RateResult - Double rateAvg = contentManager.getRateAvg(content); + final Double rateAvg = contentManager.getRateAvg(content); state.setRate(rateAvg != null ? rateAvg : 0D); - Long rateByUsers = contentManager.getRateByUsers(content); + final Long rateByUsers = contentManager.getRateByUsers(content); state.setRateByUsers(rateByUsers != null ? rateByUsers.intValue() : 0); return state; } - public StateNoContent createNoHome(User userLogged, String groupShortName) { - Group group = groupManager.findByShortName(groupShortName); + @Override + public StateNoContent createNoHome(final User userLogged, final String groupShortName) { + final Group group = groupManager.findByShortName(groupShortName); assert (group.isPersonal()); - StateNoContent state = new StateNoContent(); + final StateNoContent state = new StateNoContent(); state.setGroup(group); state.setEnabledTools(groupManager.findEnabledTools(group.getId())); setSocialNetwork(state, userLogged, group); @@ -119,11 +145,8 @@ return state; } - private Container calculateRootContainer(Container container) { - return container.isRoot() ? container : container.getAbsolutePath().get(0); - } - - private void setCommon(StateContainer state, User userLogged, Group group, Container container) { + 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); @@ -133,7 +156,7 @@ setSocialNetwork(state, userLogged, group); } - private void setSocialNetwork(StateAbstract state, User userLogged, Group 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-13 15:41:45 UTC (rev 1311) +++ trunk/src/main/java/cc/kune/core/shared/dto/StateContentDTO.java 2011-04-14 14:15:20 UTC (rev 1312) @@ -30,18 +30,19 @@ public class StateContentDTO extends StateContainerDTO implements IsSerializable { - private String documentId; - private int version; + private List<UserSimpleDTO> authors; private String content; private AccessRights contentRights; - private ContentStatus status; - private Double rate; - private Integer rateByUsers; private Double currentUserRate; + private String documentId; private BasicMimeTypeDTO mimeType; private Date publishedOn; + private Double rate; + private Integer rateByUsers; + private ContentStatus status; private String tags; - private List<UserSimpleDTO> authors; + private int version; + private String waveRef; public StateContentDTO() { } @@ -94,6 +95,10 @@ return version; } + public String getWaveRef() { + return waveRef; + } + public void setAuthors(final List<UserSimpleDTO> authors) { this.authors = authors; } @@ -148,6 +153,10 @@ this.version = version; } + public void setWaveRef(final String waveRef) { + this.waveRef = waveRef; + } + @Override public String toString() { return "StateDTO[" + getStateToken() + "/" + getTypeId() + (mimeType != null ? "-" + mimeType : "") + "]"; Modified: trunk/src/main/java/cc/kune/docs/client/cnt/DocFolderContentPanel.java =================================================================== --- trunk/src/main/java/cc/kune/docs/client/cnt/DocFolderContentPanel.java 2011-04-13 15:41:45 UTC (rev 1311) +++ trunk/src/main/java/cc/kune/docs/client/cnt/DocFolderContentPanel.java 2011-04-14 14:15:20 UTC (rev 1312) @@ -23,14 +23,16 @@ import cc.kune.core.client.resources.CoreResources; import cc.kune.core.shared.i18n.I18nTranslationService; import cc.kune.gspace.client.WsArmor; +import cc.kune.wave.client.WaveClientManager; import com.google.inject.Inject; public class DocFolderContentPanel extends FoldableContentPanel implements DocFolderContentView { @Inject - public DocFolderContentPanel(final WsArmor ws, final I18nTranslationService i18n, final CoreResources res) { - super(ws, i18n, res); + public DocFolderContentPanel(final WsArmor ws, final I18nTranslationService i18n, final CoreResources res, + final WaveClientManager waveClientManager) { + super(ws, i18n, res, waveClientManager); setInfo(""); } } Modified: trunk/src/main/java/cc/kune/docs/client/cnt/DocumentViewerPanel.java =================================================================== --- trunk/src/main/java/cc/kune/docs/client/cnt/DocumentViewerPanel.java 2011-04-13 15:41:45 UTC (rev 1311) +++ trunk/src/main/java/cc/kune/docs/client/cnt/DocumentViewerPanel.java 2011-04-14 14:15:20 UTC (rev 1312) @@ -23,13 +23,15 @@ import cc.kune.core.client.resources.CoreResources; import cc.kune.core.shared.i18n.I18nTranslationService; import cc.kune.gspace.client.WsArmor; +import cc.kune.wave.client.WaveClientManager; import com.google.inject.Inject; public class DocumentViewerPanel extends FoldableContentPanel implements DocumentViewerView { @Inject - public DocumentViewerPanel(final WsArmor ws, final I18nTranslationService i18n, final CoreResources res) { - super(ws, i18n, res); + public DocumentViewerPanel(final WsArmor ws, final I18nTranslationService i18n, final CoreResources res, + final WaveClientManager waveClientManager) { + super(ws, i18n, res, waveClientManager); } } Modified: trunk/src/main/java/cc/kune/docs/server/DocumentServerTool.java =================================================================== --- trunk/src/main/java/cc/kune/docs/server/DocumentServerTool.java 2011-04-13 15:41:45 UTC (rev 1311) +++ trunk/src/main/java/cc/kune/docs/server/DocumentServerTool.java 2011-04-14 14:15:20 UTC (rev 1312) @@ -46,6 +46,7 @@ public static final String TYPE_FOLDER = NAME + "." + "folder"; public static final String TYPE_ROOT = NAME + "." + "root"; public static final String TYPE_UPLOADEDFILE = NAME + "." + ServerTool.UPLOADEDFILE_SUFFIX; + public static final String TYPE_WAVE = NAME + "." + ServerTool.WAVE_SUFFIX; private final ToolConfigurationManager configurationManager; private final ContainerManager containerManager; @@ -75,9 +76,10 @@ } void checkContentTypeId(final String parentTypeId, final String typeId) { - if (typeId.equals(TYPE_DOCUMENT) || typeId.equals(TYPE_UPLOADEDFILE)) { + if (typeId.equals(TYPE_DOCUMENT) || typeId.equals(TYPE_UPLOADEDFILE) || typeId.equals(TYPE_WAVE)) { // ok valid content if ((typeId.equals(TYPE_DOCUMENT) && (parentTypeId.equals(TYPE_ROOT) || parentTypeId.equals(TYPE_FOLDER))) + || (typeId.equals(TYPE_WAVE) && (parentTypeId.equals(TYPE_ROOT) || parentTypeId.equals(TYPE_FOLDER))) || (typeId.equals(TYPE_UPLOADEDFILE) && (parentTypeId.equals(TYPE_ROOT) || parentTypeId.equals(TYPE_FOLDER)))) { // ok } else { @@ -123,10 +125,10 @@ configurationManager.persist(config); final String longName = group.getLongName(); final Content content = contentManager.createContent(i18n.t("About [%s]", longName), "", user, rootFolder, - DocumentServerTool.TYPE_DOCUMENT); + DocumentServerTool.TYPE_WAVE); content.addAuthor(user); content.setLanguage(user.getLanguage()); - content.setTypeId(TYPE_DOCUMENT); + content.setTypeId(TYPE_WAVE); content.setStatus(ContentStatus.publishedOnline); content.setPublishedOn(new Date()); group.setDefaultContent(content); Modified: trunk/src/main/java/cc/kune/gspace/client/WsArmorImpl.ui.xml =================================================================== --- trunk/src/main/java/cc/kune/gspace/client/WsArmorImpl.ui.xml 2011-04-13 15:41:45 UTC (rev 1311) +++ trunk/src/main/java/cc/kune/gspace/client/WsArmorImpl.ui.xml 2011-04-14 14:15:20 UTC (rev 1312) @@ -49,8 +49,7 @@ </g:FlowPanel> <g:FlowPanel width="100%" height="60px" styleName="{res.style.docSubheader}" ui:field="docSubheader"> - <g:Image resource='{res.defThemeDocArrowDown}' - styleName='{res.style.docHeaderArrow}' /> + <g:HTMLPanel ui:field="arrow" styleName="{res.style.docSubheaderArrow}" /> </g:FlowPanel> </g:VerticalPanel> </g:north> Modified: trunk/src/main/java/cc/kune/gspace/client/resources/WsArmorResources.java =================================================================== --- trunk/src/main/java/cc/kune/gspace/client/resources/WsArmorResources.java 2011-04-13 15:41:45 UTC (rev 1311) +++ trunk/src/main/java/cc/kune/gspace/client/resources/WsArmorResources.java 2011-04-14 14:15:20 UTC (rev 1312) @@ -38,6 +38,8 @@ String docSubheader(); + String docSubheaderArrow(); + String docSubheaderLeft(); String entityFooter(); Modified: trunk/src/main/java/cc/kune/gspace/client/resources/wsArmor.css =================================================================== --- trunk/src/main/java/cc/kune/gspace/client/resources/wsArmor.css 2011-04-13 15:41:45 UTC (rev 1311) +++ trunk/src/main/java/cc/kune/gspace/client/resources/wsArmor.css 2011-04-14 14:15:20 UTC (rev 1312) @@ -169,4 +169,24 @@ color: #a05a2c; font-size: 20px; font-weight: bold; +} + +/* Derived from: from http://jonrohan.me/guide/css/creating-triangles-in-css/ */ +.docSubheaderArrow { + border-color: #C87137 transparent transparent transparent; + border-style: solid; + border-width: 7px; + height: 0; + width: 0; + position: absolute; + bottom: 47px; + left: 36px; +} + +/* IE6 */ +.docSubheaderArrow { + _border-left-color: pink; + _border-bottom-color: pink; + _border-right-color: pink; + _filter: literal("chroma(color=pink)"); } \ No newline at end of file Modified: trunk/src/main/java/cc/kune/wave/client/WaveClientManager.java =================================================================== --- trunk/src/main/java/cc/kune/wave/client/WaveClientManager.java 2011-04-13 15:41:45 UTC (rev 1311) +++ trunk/src/main/java/cc/kune/wave/client/WaveClientManager.java 2011-04-14 14:15:20 UTC (rev 1312) @@ -62,6 +62,10 @@ }); } + public WebClient getWebClient() { + return webClient; + } + private native void setClientFlags(JavaScriptObject object) /*-{ $wnd.__client_flags = object; }-*/; Modified: trunk/src/main/java/cc/kune/wave/client/WebClient.java =================================================================== --- trunk/src/main/java/cc/kune/wave/client/WebClient.java 2011-04-13 15:41:45 UTC (rev 1311) +++ trunk/src/main/java/cc/kune/wave/client/WebClient.java 2011-04-14 14:15:20 UTC (rev 1312) @@ -132,6 +132,18 @@ private RemoteViewServiceMultiplexer channel; + public RemoteViewServiceMultiplexer getChannel() { + return channel; +} + + public IdGenerator getIdGenerator() { + return idGenerator; +} + + public ProfileManager getProfiles() { + return profiles; +} + private final EventBus eventBus; /** @@ -254,9 +266,13 @@ * Returns <code>ws://yourhost[:port]/</code>. */ // XXX check formatting wrt GPE - private native String getWebSocketBaseUrl(String moduleBase) /*-{return "ws" + /:\/\/[^\/]+/.exec(moduleBase)[0] + "/";}-*/; + private native String getWebSocketBaseUrl(String moduleBase) /*-{ + return "ws" + /:\/\/[^\/]+/.exec(moduleBase)[0] + "/"; +}-*/; - private native boolean useSocketIO() /*-{ return !!$wnd.__useSocketIO }-*/; + private native boolean useSocketIO() /*-{ + return !!$wnd.__useSocketIO +}-*/; /** */ Modified: trunk/src/main/java/cc/kune/wave/server/KuneWaveManager.java =================================================================== --- trunk/src/main/java/cc/kune/wave/server/KuneWaveManager.java 2011-04-13 15:41:45 UTC (rev 1311) +++ trunk/src/main/java/cc/kune/wave/server/KuneWaveManager.java 2011-04-14 14:15:20 UTC (rev 1312) @@ -1,7 +1,13 @@ package cc.kune.wave.server; +import org.waveprotocol.wave.model.waveref.WaveRef; + +import com.google.wave.api.Wavelet; + public interface KuneWaveManager { - String createWave(String message, String... participants); + WaveRef createWave(String message, String... participants); + Wavelet fetchWavelet(WaveRef waveRef); + } Modified: trunk/src/main/java/cc/kune/wave/server/KuneWaveManagerDefault.java =================================================================== --- trunk/src/main/java/cc/kune/wave/server/KuneWaveManagerDefault.java 2011-04-13 15:41:45 UTC (rev 1311) +++ trunk/src/main/java/cc/kune/wave/server/KuneWaveManagerDefault.java 2011-04-14 14:15:20 UTC (rev 1312) @@ -1,6 +1,8 @@ package cc.kune.wave.server; +import java.util.HashMap; import java.util.HashSet; +import java.util.Map; import java.util.Set; import org.apache.commons.logging.Log; @@ -12,15 +14,20 @@ import org.waveprotocol.box.server.robots.util.OperationUtil; import org.waveprotocol.box.server.waveserver.WaveletProvider; import org.waveprotocol.box.server.waveserver.WaveletProvider.SubmitRequestListener; +import org.waveprotocol.wave.model.id.InvalidIdException; import org.waveprotocol.wave.model.version.HashedVersion; import org.waveprotocol.wave.model.wave.ParticipantId; +import org.waveprotocol.wave.model.waveref.WaveRef; import cc.kune.common.client.utils.TextUtils; import cc.kune.core.client.errors.DefaultException; import com.google.inject.Inject; import com.google.inject.name.Named; +import com.google.wave.api.ApiIdSerializer; import com.google.wave.api.Blip; +import com.google.wave.api.BlipData; +import com.google.wave.api.BlipThread; import com.google.wave.api.JsonRpcConstant.ParamsProperty; import com.google.wave.api.JsonRpcResponse; import com.google.wave.api.OperationQueue; @@ -28,6 +35,7 @@ import com.google.wave.api.ProtocolVersion; import com.google.wave.api.Wavelet; import com.google.wave.api.data.converter.EventDataConverterManager; +import com.google.wave.api.impl.WaveletData; public class KuneWaveManagerDefault implements KuneWaveManager { public static final Log LOG = LogFactory.getLog(KuneWaveManagerDefault.class); @@ -53,8 +61,9 @@ } @Override - public String createWave(final String message, final String... participantArray) { + public WaveRef createWave(final String message, final String... participantArray) { String newWaveId = null; + String newWaveletId = null; final Set<String> participants = new HashSet<String>(); for (final String participant : participantArray) { participants.add(participantUtils.of(participant).toString()); @@ -62,16 +71,8 @@ final ParticipantId user = participantUtils.of(participantArray[0]); final OperationQueue opQueue = new OperationQueue(); final Wavelet newWavelet = opQueue.createWavelet(domain, participants); - // opQueue.appendMarkupToDocument(newWavelet.getRootBlip(), - // Markup.of(message).getMarkup()); - // opQueue.appendBlipToWavelet(newWavelet, - // Markup.of(message).getMarkup()); - // final Blip rootBlip = newWavelet.getRootBlip(); - // rootBlip.append(Markup.of(message)); - rootBlip.append(new com.google.wave.api.Markup("<b>kk</b>")); - // opQueue.modifyDocument(rootBlip).addParameter( - // Parameter.of(ParamsProperty.MODIFY_ACTION, ModifyHow.INSERT_AFTER)); + 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()) { @@ -83,11 +84,13 @@ onFailure(context.getResponse(reqId).getErrorMessage()); } else { final Object responseWaveId = response.getData().get(ParamsProperty.WAVE_ID); - if (responseWaveId != null) { + 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; } } } @@ -103,9 +106,60 @@ LOG.info("Wave creation success: " + arg1); } }); - return newWaveId; + 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; } + @Override + public Wavelet fetchWavelet(final WaveRef waveName) { + 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.getSuperAdmin()); + final String reqId = request.getId(); + final JsonRpcResponse response = context.getResponse(reqId); + if (response != null) { + if (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 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; + } + private void onFailure(final String message) { final String errorMsg = TextUtils.notEmpty(message) ? message : "Wave operation failed"; LOG.error(errorMsg); Modified: trunk/src/main/java/cc/kune/wave/server/ParticipantUtils.java =================================================================== --- trunk/src/main/java/cc/kune/wave/server/ParticipantUtils.java 2011-04-13 15:41:45 UTC (rev 1311) +++ trunk/src/main/java/cc/kune/wave/server/ParticipantUtils.java 2011-04-14 14:15:20 UTC (rev 1312) @@ -5,6 +5,7 @@ import org.waveprotocol.wave.model.wave.ParticipantId; import cc.kune.core.client.errors.DefaultException; +import cc.kune.core.server.properties.DatabaseProperties; import com.google.inject.Inject; import com.google.inject.Singleton; @@ -14,12 +15,19 @@ public class ParticipantUtils { private final String domain; + private final ParticipantId superAdmin; @Inject - public ParticipantUtils(@Named(CoreSettings.WAVE_SERVER_DOMAIN) final String domain) { + public ParticipantUtils(@Named(CoreSettings.WAVE_SERVER_DOMAIN) final String domain, + final DatabaseProperties databaseProperties) throws InvalidParticipantAddress { this.domain = domain; + superAdmin = of(databaseProperties.getAdminShortName()); } + public ParticipantId getSuperAdmin() { + return superAdmin; + } + public ParticipantId of(final String username) { try { if (username.contains(ParticipantId.DOMAIN_PREFIX)) { Modified: trunk/src/main/java/org/ourproject/kune/blogs/client/cnt/BlogFolderContentPanel.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/blogs/client/cnt/BlogFolderContentPanel.java 2011-04-13 15:41:45 UTC (rev 1311) +++ trunk/src/main/java/org/ourproject/kune/blogs/client/cnt/BlogFolderContentPanel.java 2011-04-14 14:15:20 UTC (rev 1312) @@ -23,13 +23,15 @@ import cc.kune.core.client.resources.CoreResources; import cc.kune.core.shared.i18n.I18nTranslationService; import cc.kune.gspace.client.WsArmor; +import cc.kune.wave.client.WaveClientManager; import com.google.inject.Inject; public class BlogFolderContentPanel extends FoldableContentPanel implements BlogFolderContentView { @Inject - public BlogFolderContentPanel(final WsArmor ws, final I18nTranslationService i18n, final CoreResources res) { - super(ws, i18n, res); + public BlogFolderContentPanel(final WsArmor ws, final I18nTranslationService i18n, final CoreResources res, + final WaveClientManager waveClientManager) { + super(ws, i18n, res, waveClientManager); } } Modified: trunk/src/main/java/org/ourproject/kune/blogs/client/cnt/BlogViewerPanel.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/blogs/client/cnt/BlogViewerPanel.java 2011-04-13 15:41:45 UTC (rev 1311) +++ trunk/src/main/java/org/ourproject/kune/blogs/client/cnt/BlogViewerPanel.java 2011-04-14 14:15:20 UTC (rev 1312) @@ -23,12 +23,14 @@ import cc.kune.core.client.resources.CoreResources; import cc.kune.core.shared.i18n.I18nTranslationService; import cc.kune.gspace.client.WsArmor; +import cc.kune.wave.client.WaveClientManager; import com.google.inject.Inject; public class BlogViewerPanel extends FoldableContentPanel implements BlogViewerView { @Inject - public BlogViewerPanel(final WsArmor ws, final I18nTranslationService i18n, final CoreResources res) { - super(ws, i18n, res); + public BlogViewerPanel(final WsArmor ws, final I18nTranslationService i18n, final CoreResources res, + final WaveClientManager waveClientManager) { + super(ws, i18n, res, waveClientManager); } } Modified: trunk/src/main/java/org/ourproject/kune/chat/client/cnt/ChatRoomPanel.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/chat/client/cnt/ChatRoomPanel.java 2011-04-13 15:41:45 UTC (rev 1311) +++ trunk/src/main/java/org/ourproject/kune/chat/client/cnt/ChatRoomPanel.java 2011-04-14 14:15:20 UTC (rev 1312) @@ -23,13 +23,15 @@ import cc.kune.core.client.resources.CoreResources; import cc.kune.core.shared.i18n.I18nTranslationService; import cc.kune.gspace.client.WsArmor; +import cc.kune.wave.client.WaveClientManager; import com.google.inject.Inject; public class ChatRoomPanel extends FoldableContentPanel implements ChatRoomView { @Inject - public ChatRoomPanel(final WsArmor ws, final I18nTranslationService i18n, final CoreResources res) { - super(ws, i18n, res); + public ChatRoomPanel(final WsArmor ws, final I18nTranslationService i18n, final CoreResources res, + final WaveClientManager waveClientManager) { + super(ws, i18n, res, waveClientManager); } } Modified: trunk/src/main/java/org/ourproject/kune/gallery/client/cnt/GalleryFolderContentPanel.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/gallery/client/cnt/GalleryFolderContentPanel.java 2011-04-13 15:41:45 UTC (rev 1311) +++ trunk/src/main/java/org/ourproject/kune/gallery/client/cnt/GalleryFolderContentPanel.java 2011-04-14 14:15:20 UTC (rev 1312) @@ -27,6 +27,7 @@ import cc.kune.core.shared.domain.utils.StateToken; import cc.kune.core.shared.i18n.I18nTranslationService; import cc.kune.gspace.client.WsArmor; +import cc.kune.wave.client.WaveClientManager; import com.google.gwt.core.client.Scheduler; import com.google.gwt.core.client.Scheduler.ScheduledCommand; @@ -44,8 +45,8 @@ @Inject public GalleryFolderContentPanel(final WsArmor ws, final I18nTranslationService i18n, final CoreResources res, - final StateManager stateManager, final Session session) { - super(ws, i18n, res); + final StateManager stateManager, final Session session, final WaveClientManager waveClientManager) { + super(ws, i18n, res, waveClientManager); this.stateManager = stateManager; this.session = session; } Modified: trunk/src/main/java/org/ourproject/kune/gallery/client/cnt/GalleryViewerPanel.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/gallery/client/cnt/GalleryViewerPanel.java 2011-04-13 15:41:45 UTC (rev 1311) +++ trunk/src/main/java/org/ourproject/kune/gallery/client/cnt/GalleryViewerPanel.java 2011-04-14 14:15:20 UTC (rev 1312) @@ -23,13 +23,15 @@ import cc.kune.core.client.resources.CoreResources; import cc.kune.core.shared.i18n.I18nTranslationService; import cc.kune.gspace.client.WsArmor; +import cc.kune.wave.client.WaveClientManager; import com.google.inject.Inject; public class GalleryViewerPanel extends FoldableContentPanel implements GalleryViewerView { @Inject - public GalleryViewerPanel(final WsArmor ws, final I18nTranslationService i18n, final CoreResources res) { - super(ws, i18n, res); + public GalleryViewerPanel(final WsArmor ws, final I18nTranslationService i18n, final CoreResources res, + final WaveClientManager waveClientManager) { + super(ws, i18n, res, waveClientManager); } } Modified: trunk/src/main/java/org/ourproject/kune/wiki/client/cnt/WikiFolderContentPanel.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/wiki/client/cnt/WikiFolderContentPanel.java 2011-04-13 15:41:45 UTC (rev 1311) +++ trunk/src/main/java/org/ourproject/kune/wiki/client/cnt/WikiFolderContentPanel.java 2011-04-14 14:15:20 UTC (rev 1312) @@ -23,14 +23,16 @@ import cc.kune.core.client.resources.CoreResources; import cc.kune.core.shared.i18n.I18nTranslationService; import cc.kune.gspace.client.WsArmor; +import cc.kune.wave.client.WaveClientManager; import com.google.inject.Inject; public class WikiFolderContentPanel extends FoldableContentPanel implements WikiFolderContentView { @Inject - public WikiFolderContentPanel(final WsArmor ws, final I18nTranslationService i18n, final CoreResources res) { - super(ws, i18n, res); + public WikiFolderContentPanel(final WsArmor ws, final I18nTranslationService i18n, final CoreResources res, + final WaveClientManager waveClientManager) { + super(ws, i18n, res, waveClientManager); super.setLabel(""); } } Modified: trunk/src/main/java/org/ourproject/kune/wiki/client/cnt/WikiViewerPanel.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/wiki/client/cnt/WikiViewerPanel.java 2011-04-13 15:41:45 UTC (rev 1311) +++ trunk/src/main/java/org/ourproject/kune/wiki/client/cnt/WikiViewerPanel.java 2011-04-14 14:15:20 UTC (rev 1312) @@ -23,12 +23,14 @@ import cc.kune.core.client.resources.CoreResources; import cc.kune.core.shared.i18n.I18nTranslationService; import cc.kune.gspace.client.WsArmor; +import cc.kune.wave.client.WaveClientManager; import com.google.inject.Inject; public class WikiViewerPanel extends FoldableContentPanel implements WikiViewerView { @Inject - public WikiViewerPanel(final WsArmor ws, final I18nTranslationService i18n, final CoreResources res) { - super(ws, i18n, res); + public WikiViewerPanel(final WsArmor ws, final I18nTranslationService i18n, final CoreResources res, + final WaveClientManager waveClientManager) { + super(ws, i18n, res, waveClientManager); } } Modified: trunk/src/test/java/cc/kune/common/client/tooltip/TooltipTimersTest.java =================================================================== --- trunk/src/test/java/cc/kune/common/client/tooltip/TooltipTimersTest.java 2011-04-13 15:41:45 UTC (rev 1311) +++ trunk/src/test/java/cc/kune/common/client/tooltip/TooltipTimersTest.java 2011-04-14 14:15:20 UTC (rev 1312) @@ -11,6 +11,7 @@ public class TooltipTimersTest { private TimerWrapper hideTimer; protected boolean hideTimerScheduled = false; + private TimerWrapper securityTimer; private TimerWrapper showTimer; protected boolean showTimerScheduled = false; private TooltipTimers timers; @@ -19,7 +20,8 @@ public void before() { showTimer = Mockito.mock(TimerWrapper.class); hideTimer = Mockito.mock(TimerWrapper.class); - timers = new TooltipTimers(showTimer, hideTimer); + securityTimer = Mockito.mock(TimerWrapper.class); + timers = new TooltipTimers(showTimer, hideTimer, securityTimer); Mockito.doAnswer(new Answer<Object>() { @Override public Object answer(final InvocationOnMock invocation) throws Throwable { Modified: trunk/src/test/java/cc/kune/wave/server/KuneWaveManagerDefaultTest.java =================================================================== --- trunk/src/test/java/cc/kune/wave/server/KuneWaveManagerDefaultTest.java 2011-04-13 15:41:45 UTC (rev 1311) +++ trunk/src/test/java/cc/kune/wave/server/KuneWaveManagerDefaultTest.java 2011-04-14 14:15:20 UTC (rev 1312) @@ -1,20 +1,24 @@ package cc.kune.wave.server; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; import java.io.IOException; import org.junit.Before; import org.junit.Test; +import org.waveprotocol.wave.model.waveref.WaveRef; import cc.kune.core.client.errors.DefaultException; import cc.kune.core.server.integration.IntegrationTest; import cc.kune.core.server.integration.IntegrationTestHelper; import com.google.inject.Inject; +import com.google.wave.api.Wavelet; public class KuneWaveManagerDefaultTest extends IntegrationTest { + private static final String MESSAGE = "testing"; @Inject KuneWaveManagerDefault manager; @@ -27,6 +31,10 @@ @Test public void createWave() throws DefaultException, IOException { doLogin(); - assertNotNull(manager.createWave("testing", getSiteAdminShortName())); + final WaveRef waveletName = manager.createWave(MESSAGE, getSiteAdminShortName()); + assertNotNull(waveletName); + final Wavelet fetchWavelet = manager.fetchWavelet(waveletName); + assertNotNull(fetchWavelet); + assertTrue(fetchWavelet.getRootBlip().getContent().contains(MESSAGE)); } }
participants (1)
-
Vicente J. Ruiz Jurado