r1755 - in trunk: . src/main/java/cc/kune/barters/client/actions src/main/java/cc/kune/blogs/client/actions src/main/java/cc/kune/core/client/rpcservices src/main/java/cc/kune/core/server src/main/java/cc/kune/core/server/access src/main/java/cc/kune/core/server/content src/main/java/cc/kune/core/server/manager src/main/java/cc/kune/core/server/manager/impl src/main/java/cc/kune/core/server/rpc src/main/java/cc/kune/docs/client/actions src/main/java/cc/kune/events/client/actions src/main/java
Author: vjrj_ Date: 2012-03-11 09:06:00 +0100 (Sun, 11 Mar 2012) New Revision: 1755 Added: trunk/src/main/java/cc/kune/gspace/client/actions/CopyContentMenuItem.java trunk/src/main/java/cc/kune/gspace/client/actions/MenuLoggedDescriptor.java trunk/src/main/java/cc/kune/gspace/client/actions/WriteToParticipantsMenuItem.java Modified: trunk/TODO trunk/TODO_done trunk/src/main/java/cc/kune/barters/client/actions/BartersClientActions.java trunk/src/main/java/cc/kune/blogs/client/actions/BlogsClientActions.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/server/UserSession.java trunk/src/main/java/cc/kune/core/server/UserSessionManager.java trunk/src/main/java/cc/kune/core/server/access/FinderService.java trunk/src/main/java/cc/kune/core/server/access/FinderServiceDefault.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/content/CreationServiceDefault.java trunk/src/main/java/cc/kune/core/server/manager/KuneWaveManager.java trunk/src/main/java/cc/kune/core/server/manager/impl/KuneWaveManagerDefault.java trunk/src/main/java/cc/kune/core/server/manager/impl/UserManagerDefault.java trunk/src/main/java/cc/kune/core/server/rpc/ContentRPC.java trunk/src/main/java/cc/kune/core/server/rpc/UserRPC.java trunk/src/main/java/cc/kune/docs/client/actions/DocsClientActions.java trunk/src/main/java/cc/kune/events/client/actions/EventsClientActions.java trunk/src/main/java/cc/kune/gspace/client/actions/AbstractEditorsMenu.java trunk/src/main/java/cc/kune/gspace/client/actions/ContentViewerShareMenu.java trunk/src/main/java/cc/kune/lists/client/actions/ListsClientActions.java trunk/src/main/java/cc/kune/tasks/client/actions/TasksClientActions.java trunk/src/main/java/cc/kune/wave/server/ParticipantUtils.java trunk/src/main/java/cc/kune/wave/server/kspecific/KuneAgent.java trunk/src/main/java/cc/kune/wave/server/kspecific/KuneWaveService.java trunk/src/main/java/cc/kune/wave/server/kspecific/KuneWaveServiceDefault.java trunk/src/main/java/cc/kune/wiki/client/actions/WikiClientActions.java trunk/src/main/java/com/google/wave/splash/text/ContentRenderer.java Log: Possibility to copy waves and participants Modified: trunk/TODO =================================================================== --- trunk/TODO 2012-03-10 07:36:46 UTC (rev 1754) +++ trunk/TODO 2012-03-11 08:06:00 UTC (rev 1755) @@ -160,11 +160,6 @@ *** Add -startupUrl to your GWT Run launch with /ws/?locale=en&log_level=INFO (or similar) *** When you compile/run gwt web-app from eclipse, select target/kune-CURRENT-VERSION as War directory selection *** src/main/webapp in GWTDesigner??? -** new UI library (gwt-ext is dead) -- mosaic, -- gtx -- smartclient -- ** Documentation CLOSED: [2012-03-04 dom 22:51] *** Windows users @@ -219,49 +214,6 @@ action (act) lista de (des) ---> lista de views - -** <s> Changes in UI - - [ ] 2:21 (video) add member dialog with confirmation (other way to do confirmation) - - [ ] Leave this group, with green icon - - [ ] 2.23 "page 1 de 1" - - [ ] "Those who can view..." too long - - [ ] cute menus ala https://addons.mozilla.org/es-ES/firefox/addon/1330 - - [ ] 2:27 (?) icon ... - - [ ] 2:35 "Start a chat with this member"-> chat! and other long items - - [ ] 2.41 long submenus... - - [ ] scroll of licenses -** maven-gwt problem (using another plugin from codehaus) :ARCHIVE: - mvn com.totsp.gwt:maven-googlewebtoolkit2-plugin:compile - and so on. - More info: - http://code.google.com/p/gwt-maven/wiki/M2FAQ -** vjrj use xwiki maven repo - http://maven.xwiki.org/releases/com/xpn/xwiki/platform/xwiki-web-wysiwyg/1.8... -** vjrj <v> better RTE :ARCHIVE: -*** Pending -**** Insert/Edit link -***** use cases - ^<a href="http://example.com">sample</a>^ --- Parse and edit - <a href="http://example.com">s^ample</a> --- Parse and edit - <a href="http://example.com">s^amp^le</a> --- Parse and edit - <a href="http://example.com">s^a<em>kk</em>mp^le</a> --- Parse, get contains and edit - ^some text <a href="http://example.com">samp^le</a> --- new link with get inner content? -**** bidi support -**** images (local/remote) with preview -**** youtube videos/podcasts -**** File > Rename (F2) -**** Insert > Page break (for printing) -**** Shortcut to fonts (Ctrl + numbers) -*** Links - http://www.ongwt.com/post/2009/01/08/XWiki-:-Wysiwyg-editor-based-on-GWT - http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/samples/int... - http://www.mozilla.org/editor/midas-spec.html - http://mozilla.org/editor/midasdemo/ -** vjrj <v> GWT 1.6 :ARCHIVE: - http://code.google.com/intl/es/webtoolkit/doc/1.6/ReleaseNotes_1_6.html#Upgr... - http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/3e7e6... - http://code.google.com/p/google-web-toolkit/wiki/WAR_Design_1_6 - http://www.gwt-ext.com/forum/viewtopic.php?f=5&p=12038 ** TODO <v> User preferences storing *** links: **** http://download.oracle.com/javase/1.4.2/docs/guide/lang/preferences.html (Preferences API) Modified: trunk/TODO_done =================================================================== --- trunk/TODO_done 2012-03-10 07:36:46 UTC (rev 1754) +++ trunk/TODO_done 2012-03-11 08:06:00 UTC (rev 1755) @@ -300,7 +300,93 @@ overflow: hidden; width: 14px; } +* new UI library (gwt-ext is dead) + :PROPERTIES: + :ARCHIVE_TIME: 2012-03-10 sáb 15:32 + :ARCHIVE_FILE: ~/proyectos/dev/kune/trunk/TODO + :ARCHIVE_OLPATH: SHORT-TERM (URGENT) + :ARCHIVE_CATEGORY: TODO + :END: +- mosaic, +- gtx +- smartclient +- +* <s> Changes in UI + :PROPERTIES: + :ARCHIVE_TIME: 2012-03-10 sáb 15:32 + :ARCHIVE_FILE: ~/proyectos/dev/kune/trunk/TODO + :ARCHIVE_OLPATH: SHORT-TERM (URGENT) + :ARCHIVE_CATEGORY: TODO + :END: + - [ ] 2:21 (video) add member dialog with confirmation (other way to do confirmation) + - [ ] Leave this group, with green icon + - [ ] 2.23 "page 1 de 1" + - [ ] "Those who can view..." too long + - [ ] cute menus ala https://addons.mozilla.org/es-ES/firefox/addon/1330 + - [ ] 2:27 (?) icon ... + - [ ] 2:35 "Start a chat with this member"-> chat! and other long items + - [ ] 2.41 long submenus... + - [ ] scroll of licenses +* maven-gwt problem (using another plugin from codehaus) :ARCHIVE: + :PROPERTIES: + :ARCHIVE_TIME: 2012-03-10 sáb 15:32 + :ARCHIVE_FILE: ~/proyectos/dev/kune/trunk/TODO + :ARCHIVE_OLPATH: SHORT-TERM (URGENT) + :ARCHIVE_CATEGORY: TODO + :END: + mvn com.totsp.gwt:maven-googlewebtoolkit2-plugin:compile + and so on. + More info: + http://code.google.com/p/gwt-maven/wiki/M2FAQ +* vjrj use xwiki maven repo + :PROPERTIES: + :ARCHIVE_TIME: 2012-03-10 sáb 15:32 + :ARCHIVE_FILE: ~/proyectos/dev/kune/trunk/TODO + :ARCHIVE_OLPATH: SHORT-TERM (URGENT) + :ARCHIVE_CATEGORY: TODO + :ARCHIVE_TODO: vjrj + :END: + http://maven.xwiki.org/releases/com/xpn/xwiki/platform/xwiki-web-wysiwyg/1.8... +* vjrj <v> better RTE :ARCHIVE: + :PROPERTIES: + :ARCHIVE_TIME: 2012-03-10 sáb 15:32 + :ARCHIVE_FILE: ~/proyectos/dev/kune/trunk/TODO + :ARCHIVE_OLPATH: SHORT-TERM (URGENT) + :ARCHIVE_CATEGORY: TODO + :ARCHIVE_TODO: vjrj + :END: +** Pending +*** Insert/Edit link +**** use cases + ^<a href="http://example.com">sample</a>^ --- Parse and edit + <a href="http://example.com">s^ample</a> --- Parse and edit + <a href="http://example.com">s^amp^le</a> --- Parse and edit + <a href="http://example.com">s^a<em>kk</em>mp^le</a> --- Parse, get contains and edit + ^some text <a href="http://example.com">samp^le</a> --- new link with get inner content? +*** bidi support +*** images (local/remote) with preview +*** youtube videos/podcasts +*** File > Rename (F2) +*** Insert > Page break (for printing) +*** Shortcut to fonts (Ctrl + numbers) +** Links + http://www.ongwt.com/post/2009/01/08/XWiki-:-Wysiwyg-editor-based-on-GWT + http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/samples/int... + http://www.mozilla.org/editor/midas-spec.html + http://mozilla.org/editor/midasdemo/ +* vjrj <v> GWT 1.6 :ARCHIVE: + :PROPERTIES: + :ARCHIVE_TIME: 2012-03-10 sáb 15:32 + :ARCHIVE_FILE: ~/proyectos/dev/kune/trunk/TODO + :ARCHIVE_OLPATH: SHORT-TERM (URGENT) + :ARCHIVE_CATEGORY: TODO + :ARCHIVE_TODO: vjrj + :END: + http://code.google.com/intl/es/webtoolkit/doc/1.6/ReleaseNotes_1_6.html#Upgr... + http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/3e7e6... + http://code.google.com/p/google-web-toolkit/wiki/WAR_Design_1_6 + http://www.gwt-ext.com/forum/viewtopic.php?f=5&p=12038 @@ -317,3 +403,10 @@ + + + + + + + Modified: trunk/src/main/java/cc/kune/barters/client/actions/BartersClientActions.java =================================================================== --- trunk/src/main/java/cc/kune/barters/client/actions/BartersClientActions.java 2012-03-10 07:36:46 UTC (rev 1754) +++ trunk/src/main/java/cc/kune/barters/client/actions/BartersClientActions.java 2012-03-11 08:06:00 UTC (rev 1755) @@ -35,9 +35,11 @@ import cc.kune.gspace.client.actions.AddPublicToContentMenuItem; import cc.kune.gspace.client.actions.ContentViewerOptionsMenu; import cc.kune.gspace.client.actions.ContentViewerShareMenu; +import cc.kune.gspace.client.actions.CopyContentMenuItem; import cc.kune.gspace.client.actions.ParticipateInContentBtn; import cc.kune.gspace.client.actions.RefreshContentMenuItem; import cc.kune.gspace.client.actions.TutorialContainerBtn; +import cc.kune.gspace.client.actions.WriteToParticipantsMenuItem; import com.google.inject.Inject; import com.google.inject.Provider; @@ -63,7 +65,9 @@ final Provider<AddPublicToContentMenuItem> addPublicMenuItem, final Provider<TutorialContainerBtn> tutorialBtn, final Provider<ParticipateInContentBtn> participateBtn, - final Provider<DelFolderMenuItem> delFolderMenuItem, final Provider<RefreshContentMenuItem> refresh) { + final Provider<DelFolderMenuItem> delFolderMenuItem, + final Provider<RefreshContentMenuItem> refresh, final Provider<CopyContentMenuItem> copyContent, + final Provider<WriteToParticipantsMenuItem> writeToParticipants) { super(session, stateManager, i18n, registry); actionsRegistry.addAction(ActionGroups.TOOLBAR, optionsMenuContent, all); actionsRegistry.addAction(ActionGroups.TOOLBAR, refresh, all); @@ -78,6 +82,8 @@ actionsRegistry.addAction(ActionGroups.TOOLBAR, newBartersBtn, containers); actionsRegistry.addAction(ActionGroups.TOOLBAR, participateBtn, contents); actionsRegistry.addAction(ActionGroups.TOOLBAR, newFolderBtn, containers); + actionsRegistry.addAction(ActionGroups.TOOLBAR, copyContent, contents); + actionsRegistry.addAction(ActionGroups.TOOLBAR, writeToParticipants, contents); actionsRegistry.addAction(ActionGroups.ITEM_MENU, openContentMenuItem, contents); actionsRegistry.addAction(ActionGroups.ITEM_MENU, openContentMenuItem, containersNoRoot); actionsRegistry.addAction(ActionGroups.ITEM_MENU, delContentMenuItem, contents); @@ -86,6 +92,8 @@ actionsRegistry.addAction(ActionGroups.ITEM_MENU, addAdminMembersMenuItem, contents); actionsRegistry.addAction(ActionGroups.ITEM_MENU, addCollabMembersMenuItem, contents); actionsRegistry.addAction(ActionGroups.ITEM_MENU, addPublicMenuItem, contents); + actionsRegistry.addAction(ActionGroups.ITEM_MENU, copyContent, contents); + actionsRegistry.addAction(ActionGroups.ITEM_MENU, writeToParticipants, contents); } @Override Modified: trunk/src/main/java/cc/kune/blogs/client/actions/BlogsClientActions.java =================================================================== --- trunk/src/main/java/cc/kune/blogs/client/actions/BlogsClientActions.java 2012-03-10 07:36:46 UTC (rev 1754) +++ trunk/src/main/java/cc/kune/blogs/client/actions/BlogsClientActions.java 2012-03-11 08:06:00 UTC (rev 1755) @@ -39,10 +39,12 @@ import cc.kune.gspace.client.actions.AddPublicToContentMenuItem; import cc.kune.gspace.client.actions.ContentViewerOptionsMenu; import cc.kune.gspace.client.actions.ContentViewerShareMenu; +import cc.kune.gspace.client.actions.CopyContentMenuItem; import cc.kune.gspace.client.actions.ParticipateInContentBtn; import cc.kune.gspace.client.actions.RefreshContentMenuItem; import cc.kune.gspace.client.actions.SetAsHomePageMenuItem; import cc.kune.gspace.client.actions.TutorialContainerBtn; +import cc.kune.gspace.client.actions.WriteToParticipantsMenuItem; import com.google.inject.Inject; import com.google.inject.Provider; @@ -73,6 +75,8 @@ final Provider<ParticipateInContentBtn> participateBtn, final BlogsNewMenu blogNewMenu, final PostNewMenu postNewMenu, final NewMenusForTypeIdsRegistry newMenusRegistry, final Provider<ChatAboutContentBtn> chatAbout, final Provider<DelBlogMenuItem> delFolderMenuItem, + final Provider<CopyContentMenuItem> copyContent, + final Provider<WriteToParticipantsMenuItem> writeToParticipants, final Provider<SetAsHomePageMenuItem> setAsHomePage) { super(session, stateManager, i18n, registry); actionsRegistry.addAction(ActionGroups.TOOLBAR, optionsMenuContent, all); @@ -92,6 +96,8 @@ actionsRegistry.addAction(ActionGroups.TOOLBAR, tutorialBtn, containers); actionsRegistry.addAction(ActionGroups.TOOLBAR, participateBtn, contents); actionsRegistry.addAction(ActionGroups.TOOLBAR, chatAbout, contents); + actionsRegistry.addAction(ActionGroups.TOOLBAR, copyContent, contents); + actionsRegistry.addAction(ActionGroups.TOOLBAR, writeToParticipants, contents); actionsRegistry.addAction(ActionGroups.ITEM_MENU, openContentMenuItem, contents); actionsRegistry.addAction(ActionGroups.ITEM_MENU, openContentMenuItem, containersNoRoot); actionsRegistry.addAction(ActionGroups.ITEM_MENU, delContentMenuItem, contents); @@ -100,6 +106,8 @@ actionsRegistry.addAction(ActionGroups.ITEM_MENU, addAdminMembersMenuItem, contents); actionsRegistry.addAction(ActionGroups.ITEM_MENU, addCollabMembersMenuItem, contents); actionsRegistry.addAction(ActionGroups.ITEM_MENU, addPublicMenuItem, contents); + actionsRegistry.addAction(ActionGroups.ITEM_MENU, copyContent, contents); + actionsRegistry.addAction(ActionGroups.ITEM_MENU, writeToParticipants, contents); newMenusRegistry.register(TYPE_BLOG, blogNewMenu.get()); newMenusRegistry.register(TYPE_POST, (MenuDescriptor) postNewMenu.get().withText(i18n.t("Add Gadget"))); Modified: trunk/src/main/java/cc/kune/core/client/rpcservices/ContentService.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/rpcservices/ContentService.java 2012-03-10 07:36:46 UTC (rev 1754) +++ trunk/src/main/java/cc/kune/core/client/rpcservices/ContentService.java 2012-03-11 08:06:00 UTC (rev 1755) @@ -65,6 +65,9 @@ StateContainerDTO addRoom(String user, StateToken parentToken, String name) throws DefaultException; + StateContentDTO copyContent(String userHash, StateToken parentToken, StateToken token) + throws DefaultException; + StateContentDTO delContent(String userHash, StateToken token) throws DefaultException; StateAbstractDTO getContent(String userHash, StateToken token) throws DefaultException; @@ -108,4 +111,6 @@ String writeTo(String userHash, StateToken token, boolean onlyToAdmins, String title, String message) throws DefaultException; + + String writeToParticipants(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 2012-03-10 07:36:46 UTC (rev 1754) +++ trunk/src/main/java/cc/kune/core/client/rpcservices/ContentServiceAsync.java 2012-03-11 08:06:00 UTC (rev 1755) @@ -65,6 +65,9 @@ void addRoom(String user, StateToken parentToken, String name, AsyncCallback<StateContainerDTO> callback); + void copyContent(String userHash, StateToken parentToken, StateToken token, + AsyncCallback<StateContentDTO> callback); + void delContent(String userHash, StateToken token, AsyncCallback<StateContentDTO> asyncCallback); void getContent(String user, StateToken newState, AsyncCallback<StateAbstractDTO> callback); @@ -116,4 +119,6 @@ void writeTo(String userHash, StateToken token, boolean onlyToAdmins, String title, String message, AsyncCallback<String> callback); + void writeToParticipants(String userHash, StateToken token, AsyncCallback<String> callback); + } Modified: trunk/src/main/java/cc/kune/core/server/UserSession.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/UserSession.java 2012-03-10 07:36:46 UTC (rev 1754) +++ trunk/src/main/java/cc/kune/core/server/UserSession.java 2012-03-11 08:06:00 UTC (rev 1755) @@ -30,6 +30,7 @@ private String userHash; private Long userId; + private String userName; public UserSession() { } @@ -42,6 +43,10 @@ return userId; } + public String getUserName() { + return userName; + } + public void setHash(final String hash) { this.userHash = hash; } @@ -50,4 +55,8 @@ this.userId = userId; } + public void setUserName(final String userName) { + this.userName = userName; + } + } Modified: trunk/src/main/java/cc/kune/core/server/UserSessionManager.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/UserSessionManager.java 2012-03-10 07:36:46 UTC (rev 1754) +++ trunk/src/main/java/cc/kune/core/server/UserSessionManager.java 2012-03-11 08:06:00 UTC (rev 1755) @@ -56,14 +56,14 @@ return getUserSession().getHash(); } + public User getUser() { + return manager.find(getUserSession().getUserId()); + } + private String getUserLoggedShortName() { return getUser().getShortName(); } - public User getUser() { - return manager.find(getUserSession().getUserId()); - } - private UserSession getUserSession() { return userSessionProv.get(); } @@ -81,8 +81,9 @@ return !isUserLoggedIn(); } - public void login(final Long userId, final String newUserHash) { + public void login(final Long userId, final String name, final String newUserHash) { getUserSession().setUserId(userId); + getUserSession().setUserName(name); getUserSession().setHash(newUserHash); updateLoggedUser(); } @@ -92,6 +93,7 @@ logins.remove(getUserLoggedShortName()); } getUserSession().setUserId(null); + getUserSession().setUserName(null); getUserSession().setHash(null); } Modified: trunk/src/main/java/cc/kune/core/server/access/FinderService.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/access/FinderService.java 2012-03-10 07:36:46 UTC (rev 1754) +++ trunk/src/main/java/cc/kune/core/server/access/FinderService.java 2012-03-11 08:06:00 UTC (rev 1755) @@ -29,6 +29,8 @@ public interface FinderService { + Container getContainer(Long folderId) throws DefaultException; + Content getContent(Long contentId) throws DefaultException; Content getContent(StateToken token, Group defaultGroup) throws DefaultException; Modified: trunk/src/main/java/cc/kune/core/server/access/FinderServiceDefault.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/access/FinderServiceDefault.java 2012-03-10 07:36:46 UTC (rev 1754) +++ trunk/src/main/java/cc/kune/core/server/access/FinderServiceDefault.java 2012-03-11 08:06:00 UTC (rev 1755) @@ -186,4 +186,9 @@ return rateManager.getRateByUsers(content); } + @Override + public Container getContainer(Long folderId) throws DefaultException { + return getFolder(folderId); + } + } Modified: trunk/src/main/java/cc/kune/core/server/content/ContentManager.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/content/ContentManager.java 2012-03-10 07:36:46 UTC (rev 1754) +++ trunk/src/main/java/cc/kune/core/server/content/ContentManager.java 2012-03-11 08:06:00 UTC (rev 1755) @@ -55,6 +55,8 @@ boolean addParticipants(User user, Long contentId, Group group, SocialNetworkSubGroup whichOnes); + Content copyContent(User user, Container container, Content contentToCopy); + Content createGadget(User user, Container container, String gadgetname, String typeIdChild, String title, String body, Map<String, String> gadgetProperties); Modified: trunk/src/main/java/cc/kune/core/server/content/ContentManagerDefault.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/content/ContentManagerDefault.java 2012-03-10 07:36:46 UTC (rev 1754) +++ trunk/src/main/java/cc/kune/core/server/content/ContentManagerDefault.java 2012-03-11 08:06:00 UTC (rev 1755) @@ -36,9 +36,11 @@ import org.apache.lucene.queryParser.MultiFieldQueryParser; import org.apache.lucene.queryParser.ParseException; import org.apache.lucene.search.Query; +import org.waveprotocol.wave.model.waveref.InvalidWaveRefException; import org.waveprotocol.wave.model.waveref.WaveRef; import org.waveprotocol.wave.util.escapers.jvm.JavaWaverefEncoder; +import cc.kune.common.shared.i18n.I18nTranslationService; import cc.kune.core.client.actions.xml.XMLKuneClientActions; import cc.kune.core.client.actions.xml.XMLWaveExtension; import cc.kune.core.client.errors.DefaultException; @@ -86,6 +88,7 @@ private final ContainerFinder containerFinder; private final ContentFinder contentFinder; private final FinderService finder; + private final I18nTranslationService i18n; private final KuneWaveService kuneWaveManager; private final I18nLanguageFinder languageFinder; private final Log LOG = LogFactory.getLog(ContentManagerDefault.class); @@ -100,7 +103,7 @@ final FinderService finder, final UserFinder userFinder, final I18nLanguageFinder languageFinder, final TagUserContentManager tagManager, final KuneWaveService kuneWaveManager, final ParticipantUtils participantUtils, final ServerToolRegistry tools, - final XMLActionReader xmlActionReader) { + final XMLActionReader xmlActionReader, final I18nTranslationService i18n) { super(provider, Content.class); this.contentFinder = contentFinder; this.containerFinder = containerFinder; @@ -111,6 +114,7 @@ this.kuneWaveManager = kuneWaveManager; this.participantUtils = participantUtils; this.tools = tools; + this.i18n = i18n; this.actions = xmlActionReader.getActions(); } @@ -174,14 +178,27 @@ return addParticipants(user, content, members.toArray(new String[members.size()])); } + @Override + public Content copyContent(final User user, final Container destination, final Content contentToCopy) { + try { + return createContent( + findInexistentTitle(destination, i18n.t("Copy of [%s]", contentToCopy.getTitle())), "", + JavaWaverefEncoder.decodeWaveRefFromPath(contentToCopy.getWaveId()), user, destination, + contentToCopy.getTypeId(), KuneWaveService.WITHOUT_GADGET, + Collections.<String, String> emptyMap()); + } catch (final InvalidWaveRefException e) { + throw new DefaultException("Error copying wave", e); + } + } + protected Content createContent(final String title, final String body, final User author, final Container container, final String typeId) { - return createContent(title, body, author, container, typeId, KuneWaveService.WITHOUT_GADGET, - Collections.<String, String> emptyMap()); + return createContent(title, body, KuneWaveService.NO_WAVE_TO_COPY, author, container, typeId, + KuneWaveService.WITHOUT_GADGET, Collections.<String, String> emptyMap()); } - protected Content createContent(final String title, final String body, final User author, - final Container container, final String typeId, final URL gadgetUrl, + protected Content createContent(final String title, final String body, final WaveRef waveIdToCopy, + final User author, final Container container, final String typeId, final URL gadgetUrl, final Map<String, String> gadgetProperties) { FilenameUtils.checkBasicFilename(title); final String newtitle = findInexistentTitle(container, title); @@ -196,7 +213,7 @@ // Duplicate in StateServiceDefault if (newContent.isWave()) { final String authorName = author.getShortName(); - final WaveRef waveRef = kuneWaveManager.createWave(newtitle, body, + final WaveRef waveRef = kuneWaveManager.createWave(newtitle, body, waveIdToCopy, KuneWaveService.DO_NOTHING_CBACK, gadgetUrl, gadgetProperties, participantUtils.of(authorName)); newContent.setWaveId(JavaWaverefEncoder.encodeToUriPathSegment(waveRef)); newContent.setModifiedOn((new Date()).getTime()); @@ -213,8 +230,8 @@ final String toolName = container.getToolName(); final ServerTool tool = tools.get(toolName); tool.checkTypesBeforeContentCreation(container.getTypeId(), typeIdChild); - final Content content = createContent(title, body, user, container, typeIdChild, - getGadgetUrl(gadgetname), gadgetProperties); + final Content content = createContent(title, body, KuneWaveService.NO_WAVE_TO_COPY, user, container, + typeIdChild, getGadgetUrl(gadgetname), gadgetProperties); tool.onCreateContent(content, container); return content; } Modified: trunk/src/main/java/cc/kune/core/server/content/CreationServiceDefault.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/content/CreationServiceDefault.java 2012-03-10 07:36:46 UTC (rev 1754) +++ trunk/src/main/java/cc/kune/core/server/content/CreationServiceDefault.java 2012-03-11 08:06:00 UTC (rev 1755) @@ -59,8 +59,8 @@ tool.checkTypesBeforeContentCreation(container.getTypeId(), typeId); final URL gagdetUrl = tool instanceof ServerWaveTool ? ((ServerWaveTool) tool).getGadgetUrl() : KuneWaveService.WITHOUT_GADGET; - final Content content = contentManager.createContent(title, body, user, container, typeId, - gagdetUrl, Collections.<String, String> emptyMap()); + final Content content = contentManager.createContent(title, body, KuneWaveService.NO_WAVE_TO_COPY, + user, container, typeId, gagdetUrl, Collections.<String, String> emptyMap()); tool.onCreateContent(content, container); return content; } Modified: trunk/src/main/java/cc/kune/core/server/manager/KuneWaveManager.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/manager/KuneWaveManager.java 2012-03-10 07:36:46 UTC (rev 1754) +++ trunk/src/main/java/cc/kune/core/server/manager/KuneWaveManager.java 2012-03-11 08:06:00 UTC (rev 1755) @@ -29,4 +29,6 @@ String writeTo(User user, String groupName, boolean onlyToAdmins, String title, String content); + String writeToParticipants(String author, String from, String waveId); + } Modified: trunk/src/main/java/cc/kune/core/server/manager/impl/KuneWaveManagerDefault.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/manager/impl/KuneWaveManagerDefault.java 2012-03-10 07:36:46 UTC (rev 1754) +++ trunk/src/main/java/cc/kune/core/server/manager/impl/KuneWaveManagerDefault.java 2012-03-11 08:06:00 UTC (rev 1755) @@ -20,13 +20,17 @@ package cc.kune.core.server.manager.impl; import java.util.ArrayList; +import java.util.Arrays; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; import org.waveprotocol.wave.model.wave.ParticipantId; +import org.waveprotocol.wave.model.waveref.InvalidWaveRefException; +import org.waveprotocol.wave.util.escapers.jvm.JavaWaverefEncoder; import cc.kune.core.client.errors.AccessViolationException; +import cc.kune.core.client.errors.DefaultException; import cc.kune.core.server.access.AccessRightsUtils; import cc.kune.core.server.manager.KuneWaveManager; import cc.kune.core.server.manager.UserManager; @@ -44,6 +48,7 @@ import com.google.inject.Inject; import com.google.inject.Singleton; +import com.google.wave.api.Participants; @Singleton public class KuneWaveManagerDefault implements KuneWaveManager { @@ -107,4 +112,20 @@ return KuneWaveServerUtils.getUrl(waveService.createWave(title, message, KuneWaveService.DO_NOTHING_CBACK, participantUtils.listFrom(toList))); } + + @Override + public String writeToParticipants(final String author, final String from, final String waveId) { + try { + final Participants parts = waveService.getParticipants( + JavaWaverefEncoder.decodeWaveRefFromPath(waveId), author); + final List<String> list = new ArrayList<String>(); + // From the first in the list + list.add(from); + list.addAll(Arrays.asList(parts.toArray(new String[parts.size()]))); + return KuneWaveServerUtils.getUrl(waveService.createWave("", KuneWaveService.DO_NOTHING_CBACK, + participantUtils.listFrom(list))); + } catch (final InvalidWaveRefException e) { + throw new DefaultException("Cannot access to the wave to copy"); + } + } } Modified: trunk/src/main/java/cc/kune/core/server/manager/impl/UserManagerDefault.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/manager/impl/UserManagerDefault.java 2012-03-10 07:36:46 UTC (rev 1754) +++ trunk/src/main/java/cc/kune/core/server/manager/impl/UserManagerDefault.java 2012-03-11 08:06:00 UTC (rev 1755) @@ -31,6 +31,8 @@ import javax.persistence.EntityManager; import javax.persistence.NoResultException; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.queryParser.MultiFieldQueryParser; import org.apache.lucene.queryParser.ParseException; @@ -42,6 +44,8 @@ import org.waveprotocol.box.server.persistence.AccountStore; import org.waveprotocol.box.server.persistence.PersistenceException; import org.waveprotocol.box.server.robots.agent.RobotAgentUtil; +import org.waveprotocol.wave.model.id.InvalidIdException; +import org.waveprotocol.wave.model.id.WaveId; import org.waveprotocol.wave.model.wave.ParticipantId; import org.waveprotocol.wave.model.waveref.WaveRef; @@ -91,6 +95,7 @@ @Singleton public class UserManagerDefault extends DefaultManager<User, Long> implements UserManager { + public static final Log LOG = LogFactory.getLog(UserManagerDefault.class); private final ChatProperties chatProperties; private final I18nCountryManager countryManager; private final GroupManager groupManager; @@ -259,25 +264,32 @@ throw e; } WaveRef welcome = null; + final User user = new User(shortName, longName, email, passwd, passwdDigest.getDigest(), + passwdDigest.getSalt(), language, country, tz); + + final String defWave = properties.getWelcomewave(); + groupManager.createUserGroup(user, wantPersonalHomepage); try { - final User user = new User(shortName, longName, email, passwd, passwdDigest.getDigest(), - passwdDigest.getSalt(), language, country, tz); - - final String defWave = properties.getWelcomewave(); - groupManager.createUserGroup(user, wantPersonalHomepage); - if (defWave != null) { - welcome = kuneWaveManager.createWave( - ContentConstants.WELCOME_WAVE_CONTENT_TITLE.replaceAll("\\[%s\\]", - properties.getDefaultSiteName()), "", defWave, new SimpleArgCallback<WaveRef>() { - @Override - public void onCallback(final WaveRef arg) { - // Is this necessary? try to remove (used when we were setting - // the def - // content - // contentManager.save(userGroup.getDefaultContent()); - askForEmailConfirmation(user, EmailConfirmationType.emailVerification); - } - }, null, participantUtils.of(properties.getAdminShortName()), participantUtils.of(shortName)); + try { + if (defWave != null) { + final WaveId copyWaveId = WaveId.ofChecked(participantUtils.getDomain(), defWave); + welcome = kuneWaveManager.createWave( + ContentConstants.WELCOME_WAVE_CONTENT_TITLE.replaceAll("\\[%s\\]", + properties.getDefaultSiteName()), "", WaveRef.of(copyWaveId), + new SimpleArgCallback<WaveRef>() { + @Override + public void onCallback(final WaveRef arg) { + // Is this necessary? try to remove (used when we were setting + // the def + // content + // contentManager.save(userGroup.getDefaultContent()); + askForEmailConfirmation(user, EmailConfirmationType.emailVerification); + } + }, null, participantUtils.of(properties.getAdminShortName()), + participantUtils.of(shortName)); + } + } catch (final InvalidIdException e) { + LOG.error("Cannot create a welcome wave", e); } return user; } catch (final RuntimeException e) { Modified: trunk/src/main/java/cc/kune/core/server/rpc/ContentRPC.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/rpc/ContentRPC.java 2012-03-10 07:36:46 UTC (rev 1754) +++ trunk/src/main/java/cc/kune/core/server/rpc/ContentRPC.java 2012-03-11 08:06:00 UTC (rev 1755) @@ -215,6 +215,22 @@ return getState(user, chatManager.addRoom(userHash, user, parentToken, roomName, "")); } + @Authenticated + @Authorizated(actionLevel = ActionLevel.container, accessRolRequired = AccessRol.Editor, mustCheckMembership = true) + @Transactional + public StateContentDTO copyContent(final String userHash, final StateToken parentToken, + final StateToken token) throws DefaultException { + final User user = getCurrentUser(); + final Content contentToCopy = finderService.getContent(ContentUtils.parseId(token.getDocument())); + final Container container = finderService.getContainer(ContentUtils.parseId(parentToken.getFolder())); + if (rightsService.get(user, contentToCopy.getAccessLists()).isVisible()) { + return mapper.map(contentManager.copyContent(user, container, contentToCopy), + StateContentDTO.class); + } else { + throw new AccessViolationException(); + } + } + private StateContentDTO createContent(final StateToken parentToken, final String title, final String typeId) { final User user = getCurrentUser(); @@ -586,4 +602,15 @@ return waveManager.writeTo(user, token.getGroup(), onlyToAdmins, title, message); } + @Authenticated + @Authorizated(actionLevel = ActionLevel.content, accessRolRequired = AccessRol.Editor, mustCheckMembership = false) + @Transactional + public String writeToParticipants(final String userHash, final StateToken token) + throws DefaultException { + final User user = getCurrentUser(); + final Content content = finderService.getContent(ContentUtils.parseId(token.getDocument())); + return waveManager.writeToParticipants(content.getAuthors().get(0).getShortName(), + user.getShortName(), content.getWaveId()); + } + } Modified: trunk/src/main/java/cc/kune/core/server/rpc/UserRPC.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/rpc/UserRPC.java 2012-03-10 07:36:46 UTC (rev 1754) +++ trunk/src/main/java/cc/kune/core/server/rpc/UserRPC.java 2012-03-11 08:06:00 UTC (rev 1755) @@ -180,7 +180,7 @@ private UserInfoDTO loginUser(final User user, final String waveToken) throws DefaultException { if (user != null) { - userSessionManager.login(user.getId(), waveToken); + userSessionManager.login(user.getId(), user.getShortName(), waveToken); return loadUserInfo(user); } else { throw new UserAuthException(); Modified: trunk/src/main/java/cc/kune/docs/client/actions/DocsClientActions.java =================================================================== --- trunk/src/main/java/cc/kune/docs/client/actions/DocsClientActions.java 2012-03-10 07:36:46 UTC (rev 1754) +++ trunk/src/main/java/cc/kune/docs/client/actions/DocsClientActions.java 2012-03-11 08:06:00 UTC (rev 1755) @@ -39,10 +39,12 @@ import cc.kune.gspace.client.actions.AddPublicToContentMenuItem; import cc.kune.gspace.client.actions.ContentViewerOptionsMenu; import cc.kune.gspace.client.actions.ContentViewerShareMenu; +import cc.kune.gspace.client.actions.CopyContentMenuItem; import cc.kune.gspace.client.actions.ParticipateInContentBtn; import cc.kune.gspace.client.actions.RefreshContentMenuItem; import cc.kune.gspace.client.actions.SetAsHomePageMenuItem; import cc.kune.gspace.client.actions.TutorialContainerBtn; +import cc.kune.gspace.client.actions.WriteToParticipantsMenuItem; import com.google.inject.Inject; import com.google.inject.Provider; @@ -74,6 +76,8 @@ final Provider<TutorialContainerBtn> tutorialBtn, final Provider<ChatAboutContentBtn> chatAbout, final Provider<RefreshContentMenuItem> refresh, final Provider<SetAsHomePageMenuItem> setAsHomePage, + final Provider<CopyContentMenuItem> copyContent, + final Provider<WriteToParticipantsMenuItem> writeToParticipants, final NewMenusForTypeIdsRegistry newMenusRegistry, final DocsFolderNewMenu foldersNewMenu, final DocsNewMenu docsNewMenu) { super(session, stateManager, i18n, registry); @@ -95,6 +99,8 @@ actionsRegistry.addAction(ActionGroups.TOOLBAR, participateBtn, contents); actionsRegistry.addAction(ActionGroups.TOOLBAR, newFolderMenuItem, containers); actionsRegistry.addAction(ActionGroups.TOOLBAR, chatAbout, contents); + actionsRegistry.addAction(ActionGroups.TOOLBAR, copyContent, contents); + actionsRegistry.addAction(ActionGroups.TOOLBAR, writeToParticipants, contents); actionsRegistry.addAction(ActionGroups.ITEM_MENU, openContentMenuItem, contents); actionsRegistry.addAction(ActionGroups.ITEM_MENU, openContentMenuItem, containersNoRoot); actionsRegistry.addAction(ActionGroups.ITEM_MENU, delContentMenuItem, contents); @@ -104,6 +110,8 @@ actionsRegistry.addAction(ActionGroups.ITEM_MENU, addAdminMembersMenuItem, contents); actionsRegistry.addAction(ActionGroups.ITEM_MENU, addCollabMembersMenuItem, contents); actionsRegistry.addAction(ActionGroups.ITEM_MENU, addPublicMenuItem, contents); + actionsRegistry.addAction(ActionGroups.ITEM_MENU, copyContent, contents); + actionsRegistry.addAction(ActionGroups.ITEM_MENU, writeToParticipants, contents); newMenusRegistry.register(TYPE_FOLDER, foldersNewMenu.get()); newMenusRegistry.register(TYPE_ROOT, foldersNewMenu.get()); newMenusRegistry.register(TYPE_DOCUMENT, Modified: trunk/src/main/java/cc/kune/events/client/actions/EventsClientActions.java =================================================================== --- trunk/src/main/java/cc/kune/events/client/actions/EventsClientActions.java 2012-03-10 07:36:46 UTC (rev 1754) +++ trunk/src/main/java/cc/kune/events/client/actions/EventsClientActions.java 2012-03-11 08:06:00 UTC (rev 1755) @@ -34,8 +34,10 @@ import cc.kune.gspace.client.actions.AddPublicToContentMenuItem; import cc.kune.gspace.client.actions.ContentViewerOptionsMenu; import cc.kune.gspace.client.actions.ContentViewerShareMenu; +import cc.kune.gspace.client.actions.CopyContentMenuItem; import cc.kune.gspace.client.actions.ParticipateInContentBtn; import cc.kune.gspace.client.actions.RefreshContentMenuItem; +import cc.kune.gspace.client.actions.WriteToParticipantsMenuItem; import com.google.inject.Inject; import com.google.inject.Provider; @@ -66,6 +68,8 @@ final Provider<EventAddMenuItem> eventAddMenuItem, final Provider<EventOpenMenuItem> eventOpenMenuItem, final Provider<CalendarGoPrevBtn> calPrevBtn, final Provider<EventRemoveMenuItem> eventRemoveMenuItem, + final Provider<CopyContentMenuItem> copyContent, + final Provider<WriteToParticipantsMenuItem> writeToParticipants, final Provider<ExportCalendarMenuItem> export, final Provider<CalendarGoNextBtn> calNextBtn, final CalendarOnOverMenu onOverMenu, final Provider<CalendarGoTodayBtn> goToday, final Provider<RefreshContentMenuItem> refresh) { @@ -87,6 +91,8 @@ actionsRegistry.addAction(ActionGroups.TOOLBAR, addAdminMembersMenuItem, contents); actionsRegistry.addAction(ActionGroups.TOOLBAR, addCollabMembersMenuItem, contents); actionsRegistry.addAction(ActionGroups.TOOLBAR, addPublicMenuItem, contents); + actionsRegistry.addAction(ActionGroups.TOOLBAR, copyContent, contents); + actionsRegistry.addAction(ActionGroups.TOOLBAR, writeToParticipants, contents); // On over calendar menu actionsRegistry.addAction(ActionGroups.TOOLBAR, onOverMenu, containers); Modified: trunk/src/main/java/cc/kune/gspace/client/actions/AbstractEditorsMenu.java =================================================================== --- trunk/src/main/java/cc/kune/gspace/client/actions/AbstractEditorsMenu.java 2012-03-10 07:36:46 UTC (rev 1754) +++ trunk/src/main/java/cc/kune/gspace/client/actions/AbstractEditorsMenu.java 2012-03-11 08:06:00 UTC (rev 1755) @@ -19,15 +19,14 @@ */ package cc.kune.gspace.client.actions; -import cc.kune.common.client.actions.ui.descrip.MenuDescriptor; import cc.kune.core.client.events.AccessRightsChangedEvent; import cc.kune.core.client.events.AccessRightsChangedEvent.AccessRightsChangedHandler; import cc.kune.core.client.state.AccessRightsClientManager; -public class AbstractEditorsMenu extends MenuDescriptor { +public class AbstractEditorsMenu extends MenuLoggedDescriptor { public AbstractEditorsMenu(final AccessRightsClientManager rightsManager) { - super(); + super(rightsManager); this.withStyles(ActionStyles.MENU_BTN_STYLE_LEFT); rightsManager.onRightsChanged(true, new AccessRightsChangedHandler() { @Override Modified: trunk/src/main/java/cc/kune/gspace/client/actions/ContentViewerShareMenu.java =================================================================== --- trunk/src/main/java/cc/kune/gspace/client/actions/ContentViewerShareMenu.java 2012-03-10 07:36:46 UTC (rev 1754) +++ trunk/src/main/java/cc/kune/gspace/client/actions/ContentViewerShareMenu.java 2012-03-11 08:06:00 UTC (rev 1755) @@ -19,19 +19,20 @@ */ package cc.kune.gspace.client.actions; -import cc.kune.common.client.actions.ui.descrip.MenuDescriptor; import cc.kune.common.shared.i18n.I18nTranslationService; import cc.kune.core.client.resources.CoreResources; +import cc.kune.core.client.state.AccessRightsClientManager; import com.google.inject.Inject; -public class ContentViewerShareMenu extends MenuDescriptor { +public class ContentViewerShareMenu extends MenuLoggedDescriptor { private static final String ID = "k-cnt-viewer-share-menu"; @Inject - public ContentViewerShareMenu(final CoreResources res, final I18nTranslationService i18n) { - super(); + public ContentViewerShareMenu(final CoreResources res, final I18nTranslationService i18n, + final AccessRightsClientManager rightsManager) { + super(rightsManager); this.withText(i18n.t("Share")).withToolTip(i18n.t("Share this with group members, etc")).withIcon( res.world16()).withStyles(ActionStyles.MENU_BTN_STYLE_RIGHT).withId(ID); } Added: trunk/src/main/java/cc/kune/gspace/client/actions/CopyContentMenuItem.java =================================================================== --- trunk/src/main/java/cc/kune/gspace/client/actions/CopyContentMenuItem.java (rev 0) +++ trunk/src/main/java/cc/kune/gspace/client/actions/CopyContentMenuItem.java 2012-03-11 08:06:00 UTC (rev 1755) @@ -0,0 +1,85 @@ +/* + * + * Copyright (C) 2007-2011 The kune development team (see CREDITS for details) + * This file is part of kune. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ +package cc.kune.gspace.client.actions; + +import cc.kune.common.client.actions.ActionEvent; +import cc.kune.common.client.actions.ui.descrip.MenuItemDescriptor; +import cc.kune.common.client.notify.NotifyUser; +import cc.kune.common.shared.i18n.I18nTranslationService; +import cc.kune.core.client.actions.RolAction; +import cc.kune.core.client.resources.nav.NavResources; +import cc.kune.core.client.rpcservices.AsyncCallbackSimple; +import cc.kune.core.client.rpcservices.ContentServiceAsync; +import cc.kune.core.client.state.Session; +import cc.kune.core.client.state.StateManager; +import cc.kune.core.shared.domain.utils.StateToken; +import cc.kune.core.shared.dto.AbstractContentSimpleDTO; +import cc.kune.core.shared.dto.AccessRolDTO; +import cc.kune.core.shared.dto.StateContentDTO; + +import com.google.inject.Inject; + +public class CopyContentMenuItem extends MenuItemDescriptor { + + public static class CopyContentAction extends RolAction { + + private final ContentServiceAsync contentService; + private final I18nTranslationService i18n; + private final Session session; + private final StateManager stateManager; + + @Inject + public CopyContentAction(final Session session, final StateManager stateManager, + final ContentServiceAsync contentService, final I18nTranslationService i18n) { + super(AccessRolDTO.Editor, true); + this.session = session; + this.stateManager = stateManager; + this.contentService = contentService; + this.i18n = i18n; + } + + @Override + public void actionPerformed(final ActionEvent event) { + NotifyUser.showProgress(i18n.t("Copying")); + final boolean inContent = session.getCurrentStateToken().hasAll(); + final StateToken token = inContent ? session.getCurrentStateToken() + : ((AbstractContentSimpleDTO) event.getTarget()).getStateToken(); + final StateToken parentToken = inContent ? session.getContentState().getContainer().getStateToken() + : session.getCurrentStateToken(); + contentService.copyContent(session.getUserHash(), parentToken, token, + new AsyncCallbackSimple<StateContentDTO>() { + @Override + public void onSuccess(final StateContentDTO result) { + NotifyUser.hideProgress(); + stateManager.setRetrievedStateAndGo(result); + } + }); + } + + } + + @Inject + public CopyContentMenuItem(final I18nTranslationService i18n, final CopyContentAction action, + final ContentViewerOptionsMenu optionsMenu, final NavResources res) { + super(action); + this.withParent(optionsMenu, false); + this.withText(i18n.t("Copy this to a new message")); + } +} Added: trunk/src/main/java/cc/kune/gspace/client/actions/MenuLoggedDescriptor.java =================================================================== --- trunk/src/main/java/cc/kune/gspace/client/actions/MenuLoggedDescriptor.java (rev 0) +++ trunk/src/main/java/cc/kune/gspace/client/actions/MenuLoggedDescriptor.java 2012-03-11 08:06:00 UTC (rev 1755) @@ -0,0 +1,18 @@ +package cc.kune.gspace.client.actions; + +import cc.kune.common.client.actions.ui.descrip.MenuDescriptor; +import cc.kune.core.client.events.AccessRightsChangedEvent; +import cc.kune.core.client.events.AccessRightsChangedEvent.AccessRightsChangedHandler; +import cc.kune.core.client.state.AccessRightsClientManager; + +public class MenuLoggedDescriptor extends MenuDescriptor { + public MenuLoggedDescriptor(final AccessRightsClientManager rightsManager) { + rightsManager.onRightsChanged(true, new AccessRightsChangedHandler() { + @Override + public void onAccessRightsChanged(final AccessRightsChangedEvent event) { + MenuLoggedDescriptor.this.setVisible(event.getCurrentRights().isEditable()); + } + }); + } + +} Added: trunk/src/main/java/cc/kune/gspace/client/actions/WriteToParticipantsMenuItem.java =================================================================== --- trunk/src/main/java/cc/kune/gspace/client/actions/WriteToParticipantsMenuItem.java (rev 0) +++ trunk/src/main/java/cc/kune/gspace/client/actions/WriteToParticipantsMenuItem.java 2012-03-11 08:06:00 UTC (rev 1755) @@ -0,0 +1,85 @@ +/* + * + * Copyright (C) 2007-2011 The kune development team (see CREDITS for details) + * This file is part of kune. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ +package cc.kune.gspace.client.actions; + +import cc.kune.common.client.actions.ActionEvent; +import cc.kune.common.client.actions.ui.descrip.MenuItemDescriptor; +import cc.kune.common.client.notify.NotifyUser; +import cc.kune.common.shared.i18n.I18nTranslationService; +import cc.kune.core.client.actions.RolAction; +import cc.kune.core.client.resources.nav.NavResources; +import cc.kune.core.client.rpcservices.AsyncCallbackSimple; +import cc.kune.core.client.rpcservices.ContentServiceAsync; +import cc.kune.core.client.state.Session; +import cc.kune.core.client.state.StateManager; +import cc.kune.core.shared.domain.utils.StateToken; +import cc.kune.core.shared.dto.AbstractContentSimpleDTO; +import cc.kune.core.shared.dto.AccessRolDTO; + +import com.google.inject.Inject; + +public class WriteToParticipantsMenuItem extends MenuItemDescriptor { + + public static class WriteToParticipantsAction extends RolAction { + + private final ContentServiceAsync contentService; + private final I18nTranslationService i18n; + private final Session session; + private final StateManager stateManager; + + @Inject + public WriteToParticipantsAction(final Session session, final StateManager stateManager, + final ContentServiceAsync contentService, final I18nTranslationService i18n) { + super(AccessRolDTO.Editor, true); + this.session = session; + this.stateManager = stateManager; + this.contentService = contentService; + this.i18n = i18n; + } + + @Override + public void actionPerformed(final ActionEvent event) { + NotifyUser.showProgress(i18n.t("Writing")); + final boolean inContent = session.getCurrentStateToken().hasAll(); + final StateToken token = inContent ? session.getCurrentStateToken() + : ((AbstractContentSimpleDTO) event.getTarget()).getStateToken(); + contentService.writeToParticipants(session.getUserHash(), token, + new AsyncCallbackSimple<String>() { + @Override + public void onSuccess(final String result) { + NotifyUser.hideProgress(); + NotifyUser.info(i18n.t("Message created. Just edit it")); + stateManager.gotoHistoryToken(result); + } + }); + } + + } + + @Inject + public WriteToParticipantsMenuItem(final I18nTranslationService i18n, + final WriteToParticipantsAction action, final NavResources res, + final ContentViewerOptionsMenu optionsMenu) { + super(action); + this.withText(i18n.t("New message with everyone here")).withIcon(res.pageText()).withParent( + optionsMenu, false); + } + +} Modified: trunk/src/main/java/cc/kune/lists/client/actions/ListsClientActions.java =================================================================== --- trunk/src/main/java/cc/kune/lists/client/actions/ListsClientActions.java 2012-03-10 07:36:46 UTC (rev 1754) +++ trunk/src/main/java/cc/kune/lists/client/actions/ListsClientActions.java 2012-03-11 08:06:00 UTC (rev 1755) @@ -37,9 +37,11 @@ import cc.kune.gspace.client.actions.AddCollabMembersToContentMenuItem; import cc.kune.gspace.client.actions.AddPublicToContentMenuItem; import cc.kune.gspace.client.actions.ContentViewerShareMenu; +import cc.kune.gspace.client.actions.CopyContentMenuItem; import cc.kune.gspace.client.actions.ParticipateInContentBtn; import cc.kune.gspace.client.actions.SetAsHomePageMenuItem; import cc.kune.gspace.client.actions.TutorialContainerBtn; +import cc.kune.gspace.client.actions.WriteToParticipantsMenuItem; import com.google.inject.Inject; import com.google.inject.Provider; @@ -69,7 +71,9 @@ final Provider<AddCollabMembersToContentMenuItem> addCollabMembersMenuItem, final Provider<AddPublicToContentMenuItem> addPublicMenuItem, final Provider<SetListOpenessMenuItem> listOpenessMenuItem, - final Provider<ParticipateInContentBtn> participateBtn, final ListsNewMenu listNewMenu, + final Provider<ParticipateInContentBtn> participateBtn, + final Provider<CopyContentMenuItem> copyContent, + final Provider<WriteToParticipantsMenuItem> writeToParticipants, final ListsNewMenu listNewMenu, final PostNewMenu postNewMenu, final NewMenusForTypeIdsRegistry newMenusRegistry, final Provider<ChatAboutContentBtn> chatAbout, final Provider<DelListMenuItem> delFolderMenuItem, final Provider<SetAsHomePageMenuItem> setAsHomePage) { @@ -96,6 +100,8 @@ actionsRegistry.addAction(ActionGroups.TOOLBAR, participateBtn, contents); actionsRegistry.addAction(ActionGroups.TOOLBAR, subscribersCount, containersNoRoot); actionsRegistry.addAction(ActionGroups.TOOLBAR, chatAbout, contents); + actionsRegistry.addAction(ActionGroups.TOOLBAR, copyContent, contents); + actionsRegistry.addAction(ActionGroups.TOOLBAR, writeToParticipants, contents); actionsRegistry.addAction(ActionGroups.ITEM_MENU, openContentMenuItem, contents); actionsRegistry.addAction(ActionGroups.ITEM_MENU, openContentMenuItem, containersNoRoot); actionsRegistry.addAction(ActionGroups.ITEM_MENU, delFolderMenuItem, containersNoRoot); @@ -103,6 +109,8 @@ actionsRegistry.addAction(ActionGroups.ITEM_MENU, addAdminMembersMenuItem, contents); actionsRegistry.addAction(ActionGroups.ITEM_MENU, addCollabMembersMenuItem, contents); actionsRegistry.addAction(ActionGroups.ITEM_MENU, addPublicMenuItem, contents); + actionsRegistry.addAction(ActionGroups.ITEM_MENU, copyContent, contents); + actionsRegistry.addAction(ActionGroups.ITEM_MENU, writeToParticipants, contents); newMenusRegistry.register(TYPE_LIST, listNewMenu.get()); newMenusRegistry.register(TYPE_ROOT, listNewMenu.get()); newMenusRegistry.register(TYPE_POST, Modified: trunk/src/main/java/cc/kune/tasks/client/actions/TasksClientActions.java =================================================================== --- trunk/src/main/java/cc/kune/tasks/client/actions/TasksClientActions.java 2012-03-10 07:36:46 UTC (rev 1754) +++ trunk/src/main/java/cc/kune/tasks/client/actions/TasksClientActions.java 2012-03-11 08:06:00 UTC (rev 1755) @@ -39,10 +39,12 @@ import cc.kune.gspace.client.actions.AddPublicToContentMenuItem; import cc.kune.gspace.client.actions.ContentViewerOptionsMenu; import cc.kune.gspace.client.actions.ContentViewerShareMenu; +import cc.kune.gspace.client.actions.CopyContentMenuItem; import cc.kune.gspace.client.actions.ParticipateInContentBtn; import cc.kune.gspace.client.actions.RefreshContentMenuItem; import cc.kune.gspace.client.actions.SetAsHomePageMenuItem; import cc.kune.gspace.client.actions.TutorialContainerBtn; +import cc.kune.gspace.client.actions.WriteToParticipantsMenuItem; import com.google.inject.Inject; import com.google.inject.Provider; @@ -72,8 +74,10 @@ final Provider<AddAdminMembersToContentMenuItem> addAdminMembersMenuItem, final Provider<AddCollabMembersToContentMenuItem> addCollabMembersMenuItem, final Provider<AddPublicToContentMenuItem> addPublicMenuItem, + final Provider<ChatAboutContentBtn> chatAbout, final Provider<CopyContentMenuItem> copyContent, + final Provider<WriteToParticipantsMenuItem> writeToParticipants, final TasksFolderNewMenu taskFolderNewMenu, final TasksNewMenu taskNewMenu, - final NewMenusForTypeIdsRegistry newMenusRegistry, final Provider<ChatAboutContentBtn> chatAbout, + final NewMenusForTypeIdsRegistry newMenusRegistry, final Provider<DelFolderMenuItem> delFolderMenuItem, final Provider<SetAsHomePageMenuItem> setAsHomePage) { super(session, stateManager, i18n, registry); @@ -95,6 +99,8 @@ actionsRegistry.addAction(ActionGroups.TOOLBAR, addPublicMenuItem, contents); actionsRegistry.addAction(ActionGroups.TOOLBAR, participateBtn, contents); actionsRegistry.addAction(ActionGroups.TOOLBAR, chatAbout, contents); + actionsRegistry.addAction(ActionGroups.TOOLBAR, copyContent, contents); + actionsRegistry.addAction(ActionGroups.TOOLBAR, writeToParticipants, contents); actionsRegistry.addAction(ActionGroups.ITEM_MENU, openContentMenuItem, contents); actionsRegistry.addAction(ActionGroups.ITEM_MENU, openContentMenuItem, containersNoRoot); actionsRegistry.addAction(ActionGroups.ITEM_MENU, marksAsDoneMenuItem, @@ -108,6 +114,8 @@ actionsRegistry.addAction(ActionGroups.ITEM_MENU, addAdminMembersMenuItem, contents); actionsRegistry.addAction(ActionGroups.ITEM_MENU, addCollabMembersMenuItem, contents); actionsRegistry.addAction(ActionGroups.ITEM_MENU, addPublicMenuItem, contents); + actionsRegistry.addAction(ActionGroups.ITEM_MENU, copyContent, contents); + actionsRegistry.addAction(ActionGroups.ITEM_MENU, writeToParticipants, contents); // Currently new menu in folders has no sense (because we have buttons for // the same contents) // newMenusRegistry.register(TYPE_FOLDER, taskFolderNewMenu.get()); Modified: trunk/src/main/java/cc/kune/wave/server/ParticipantUtils.java =================================================================== --- trunk/src/main/java/cc/kune/wave/server/ParticipantUtils.java 2012-03-10 07:36:46 UTC (rev 1754) +++ trunk/src/main/java/cc/kune/wave/server/ParticipantUtils.java 2012-03-11 08:06:00 UTC (rev 1755) @@ -20,6 +20,7 @@ package cc.kune.wave.server; import java.util.Iterator; +import java.util.List; import java.util.Set; import org.waveprotocol.box.server.CoreSettings; @@ -60,6 +61,10 @@ return atDomain; } + public String getDomain() { + return domain; + } + public ParticipantId getPublicParticipantId() { return of(getAtDomain()); } @@ -72,6 +77,14 @@ return address.contains(getAtDomain()); } + public ParticipantId[] listFrom(final List<String> list) { + final ParticipantId[] array = new ParticipantId[list.size()]; + for (int i = 0; i < list.size(); i++) { + array[i] = of(list.get(i)); + } + return array; + } + public ParticipantId[] listFrom(final Set<User> list) { final ParticipantId[] array = new ParticipantId[list.size()]; final Iterator<User> iterator = list.iterator(); Modified: trunk/src/main/java/cc/kune/wave/server/kspecific/KuneAgent.java =================================================================== --- trunk/src/main/java/cc/kune/wave/server/kspecific/KuneAgent.java 2012-03-10 07:36:46 UTC (rev 1754) +++ trunk/src/main/java/cc/kune/wave/server/kspecific/KuneAgent.java 2012-03-11 08:06:00 UTC (rev 1755) @@ -115,7 +115,7 @@ } @Override - public WaveRef createWave(final String title, final String message, final String waveIdToCopy, + public WaveRef createWave(final String title, final String message, final WaveRef waveIdToCopy, final SimpleArgCallback<WaveRef> onCreate, final URL gadgetUrl, final Map<String, String> gadgetProperties, final ParticipantId... participantsArray) { // TODO Auto-generated method stub @@ -123,7 +123,7 @@ } @Override - public WaveRef createWave(final String title, final String message, final String waveIdToCopy, + public WaveRef createWave(final String title, final String message, final WaveRef waveIdToCopy, final SimpleArgCallback<WaveRef> onCreate, final URL gadgetUrl, final ParticipantId... participantsArray) { return null; Modified: trunk/src/main/java/cc/kune/wave/server/kspecific/KuneWaveService.java =================================================================== --- trunk/src/main/java/cc/kune/wave/server/kspecific/KuneWaveService.java 2012-03-10 07:36:46 UTC (rev 1754) +++ trunk/src/main/java/cc/kune/wave/server/kspecific/KuneWaveService.java 2012-03-11 08:06:00 UTC (rev 1755) @@ -42,6 +42,7 @@ }; public static final String NO_MESSAGE = ""; public static final String NO_TITLE = ""; + public static final WaveRef NO_WAVE_TO_COPY = null; public static final URL WITHOUT_GADGET = null; void addGadget(WaveRef waveName, String author, URL gadgetUrl); @@ -62,11 +63,11 @@ WaveRef createWave(String title, String message, SimpleArgCallback<WaveRef> onCreate, URL gadgetUrl, ParticipantId... participantsArray); - WaveRef createWave(String title, String message, String waveIdToCopy, + WaveRef createWave(String title, String message, WaveRef waveIdToCopy, SimpleArgCallback<WaveRef> onCreate, URL gadgetUrl, Map<String, String> gadgetProperties, ParticipantId... participantsArray); - WaveRef createWave(String title, String message, String waveIdToCopy, + WaveRef createWave(String title, String message, WaveRef waveIdToCopy, SimpleArgCallback<WaveRef> onCreate, URL gadgetUrl, ParticipantId... participantsArray); void delParticipants(WaveRef waveName, String whoDel, String... participants); Modified: trunk/src/main/java/cc/kune/wave/server/kspecific/KuneWaveServiceDefault.java =================================================================== --- trunk/src/main/java/cc/kune/wave/server/kspecific/KuneWaveServiceDefault.java 2012-03-10 07:36:46 UTC (rev 1754) +++ trunk/src/main/java/cc/kune/wave/server/kspecific/KuneWaveServiceDefault.java 2012-03-11 08:06:00 UTC (rev 1755) @@ -68,10 +68,8 @@ import com.google.wave.api.ElementType; import com.google.wave.api.FormElement; import com.google.wave.api.Gadget; -import com.google.wave.api.Image; import com.google.wave.api.JsonRpcConstant.ParamsProperty; import com.google.wave.api.JsonRpcResponse; -import com.google.wave.api.Line; import com.google.wave.api.OperationQueue; import com.google.wave.api.OperationRequest; import com.google.wave.api.OperationRequest.Parameter; @@ -95,7 +93,6 @@ private static final String NO_ANNOTATION_KEY = null; private static final List<BundledAnnotation> NO_BUNDLED_ANNOTATIONS = Collections.emptyList(); private static final List<String> NO_VALUES = Collections.<String> emptyList(); - private static final String NO_WAVE_TO_COPY = null; /** * @@ -134,14 +131,16 @@ result = new FormElement(type, entry.getValue().getProperties()); } else if (type == ElementType.GADGET) { result = new Gadget(entry.getValue().getProperties()); - } else if (type == ElementType.IMAGE) { - result = new Image(entry.getValue().getProperties()); - } else if (type == ElementType.LINE) { - result = new Line(entry.getValue().getProperties()); - } else { - result = new Element(type, entry.getValue().getProperties()); + // } else if (type == ElementType.IMAGE) { + // result = new Image(entry.getValue().getProperties()); + // } else if (type == ElementType.LINE) { + // result = new Line(entry.getValue().getProperties()); + // } else { + // result = new Element(type, entry.getValue().getProperties()); } - toBlip.append(result); + if (result != null) { + toBlip.append(result); + } } } @@ -249,7 +248,7 @@ @Override public WaveRef createWave(@Nonnull final String title, final String message, - final String waveIdToCopy, final SimpleArgCallback<WaveRef> onCreate, final URL gadgetUrl, + final WaveRef waveIdToCopy, final SimpleArgCallback<WaveRef> onCreate, final URL gadgetUrl, final Map<String, String> gadgetProperties, @Nonnull final ParticipantId... participantsArray) { String newWaveId = null; String newWaveletId = null; @@ -264,17 +263,16 @@ final Blip rootBlip = newWavelet.getRootBlip(); rootBlip.append(new com.google.wave.api.Markup(message).getText()); - if (waveIdToCopy != NO_WAVE_TO_COPY && TextUtils.notEmpty(waveIdToCopy)) { + if (waveIdToCopy != NO_WAVE_TO_COPY) { try { - WaveId copyWaveId; - copyWaveId = WaveId.ofChecked(domain, waveIdToCopy); - final Wavelet waveletToCopy = fetchWave(copyWaveId, WaveletId.of(domain, "conv+root"), + // WaveId copyWaveId; + // copyWaveId = WaveId.ofChecked(domain, waveIdToCopy); + final Wavelet waveletToCopy = fetchWave(waveIdToCopy.getWaveId(), waveIdToCopy.getWaveletId(), participantsArray[0].toString()); if (waveletToCopy != null) { copyWavelet(waveletToCopy.getRootBlip(), rootBlip); + copyWaveletElements(waveletToCopy.getRootBlip(), rootBlip); } - } catch (final InvalidIdException e) { - LOG.error("Error copying wave content", e); } catch (final DefaultException e2) { LOG.error("Error copying wave content", e2); } @@ -327,7 +325,7 @@ @Override public WaveRef createWave(@Nonnull final String title, final String message, - final String waveIdToCopy, final SimpleArgCallback<WaveRef> onCreate, final URL gadgetUrl, + final WaveRef waveIdToCopy, final SimpleArgCallback<WaveRef> onCreate, final URL gadgetUrl, @Nonnull final ParticipantId... participantsArray) { return createWave(title, message, waveIdToCopy, onCreate, gadgetUrl, Collections.<String, String> emptyMap(), participantsArray); Modified: trunk/src/main/java/cc/kune/wiki/client/actions/WikiClientActions.java =================================================================== --- trunk/src/main/java/cc/kune/wiki/client/actions/WikiClientActions.java 2012-03-10 07:36:46 UTC (rev 1754) +++ trunk/src/main/java/cc/kune/wiki/client/actions/WikiClientActions.java 2012-03-11 08:06:00 UTC (rev 1755) @@ -39,10 +39,12 @@ import cc.kune.gspace.client.actions.AddPublicToContentMenuItem; import cc.kune.gspace.client.actions.ContentViewerOptionsMenu; import cc.kune.gspace.client.actions.ContentViewerShareMenu; +import cc.kune.gspace.client.actions.CopyContentMenuItem; import cc.kune.gspace.client.actions.ParticipateInContentBtn; import cc.kune.gspace.client.actions.RefreshContentMenuItem; import cc.kune.gspace.client.actions.SetAsHomePageMenuItem; import cc.kune.gspace.client.actions.TutorialContainerBtn; +import cc.kune.gspace.client.actions.WriteToParticipantsMenuItem; import com.google.inject.Inject; import com.google.inject.Provider; @@ -74,6 +76,8 @@ final Provider<ChatAboutContentBtn> chatAbout, final Provider<RefreshContentMenuItem> refresh, final Provider<SetAsHomePageMenuItem> setAsHomePage, final NewMenusForTypeIdsRegistry newMenusRegistry, final WikiFolderNewMenu folderNewMenu, + final Provider<CopyContentMenuItem> copyContent, + final Provider<WriteToParticipantsMenuItem> writeToParticipants, final WikiPageNewMenu wikipageNewMenu) { super(session, stateManager, i18n, registry); actionsRegistry.addAction(ActionGroups.TOOLBAR, optionsMenuContent, all); @@ -97,6 +101,8 @@ actionsRegistry.addAction(ActionGroups.TOOLBAR, tutorialBtn, containers); actionsRegistry.addAction(ActionGroups.TOOLBAR, participateBtn, contents); actionsRegistry.addAction(ActionGroups.TOOLBAR, chatAbout, contents); + actionsRegistry.addAction(ActionGroups.TOOLBAR, copyContent, contents); + actionsRegistry.addAction(ActionGroups.TOOLBAR, writeToParticipants, contents); actionsRegistry.addAction(ActionGroups.ITEM_MENU, openContentMenuItem, contents); actionsRegistry.addAction(ActionGroups.ITEM_MENU, openContentMenuItem, containersNoRoot); actionsRegistry.addAction(ActionGroups.ITEM_MENU, delContentMenuItem, contents); @@ -106,6 +112,8 @@ actionsRegistry.addAction(ActionGroups.ITEM_MENU, addAdminMembersMenuItem, contents); actionsRegistry.addAction(ActionGroups.ITEM_MENU, addCollabMembersMenuItem, contents); actionsRegistry.addAction(ActionGroups.ITEM_MENU, addPublicMenuItem, contents); + actionsRegistry.addAction(ActionGroups.ITEM_MENU, copyContent, contents); + actionsRegistry.addAction(ActionGroups.ITEM_MENU, writeToParticipants, contents); // Currently new menu in folders has no sense (because we have buttons for // the same contents) // newMenusRegistry.register(TYPE_FOLDER, folderNewMenu.get()); Modified: trunk/src/main/java/com/google/wave/splash/text/ContentRenderer.java =================================================================== --- trunk/src/main/java/com/google/wave/splash/text/ContentRenderer.java 2012-03-10 07:36:46 UTC (rev 1754) +++ trunk/src/main/java/com/google/wave/splash/text/ContentRenderer.java 2012-03-11 08:06:00 UTC (rev 1755) @@ -24,6 +24,7 @@ import org.waveprotocol.wave.client.editor.content.paragraph.DefaultParagraphHtmlRenderer; import org.waveprotocol.wave.client.editor.content.paragraph.Paragraph; +import org.waveprotocol.wave.client.editor.content.paragraph.Paragraph.Alignment; import com.google.gwt.dom.client.Style.FontWeight; import com.google.inject.Inject; @@ -99,6 +100,7 @@ private final GadgetRenderer gadgetRenderer; private boolean identing; + private boolean inAlign = false; private boolean inheader = false; private final WaveRenderer waveRenderer; @@ -117,7 +119,13 @@ } private void emitAnnotation(final Marker marker, final StringBuilder builder) { - if (marker.isEnd) { + if (marker.annotation.getName().startsWith("link")) { + if (marker.isEnd) { + builder.append("</a>"); + } else { + builder.append("<a href=\"" + marker.annotation.getValue() + "\" target=\"_blank\">"); + } + } else if (marker.isEnd) { // if (marker.annotation.getName().) builder.append("</span>"); } else { @@ -147,12 +155,19 @@ final String i = element.getProperty(Line.INDENT); final String a = element.getProperty(Line.ALIGNMENT); final String d = element.getProperty(Line.DIRECTION); + // For direction stuff (RTL etc) see DefaultParagraphHtml + if (inAlign) { + // Close identations + inAlign = false; + builder.append("</div><!-- end of align -->"); + } final Integer ident = i != null ? Integer.valueOf(i) : 0; if (inheader) { // New line, we close previous header builder.append("</div> <!-- end h1/h2... header -->"); inheader = false; } + if (t != null && t.equals(Paragraph.LIST_TYPE)) { // type-0 to 2, margin 22px * i <li class="bullet-type-0" // style="margin-left: 88px;"> @@ -166,6 +181,10 @@ } else { closeIndentIfNecessary(builder); } + if (a != null) { + builder.append("<div style=\"text-align:" + Alignment.fromValue(a).cssValue() + ";\">"); + inAlign = true; + } if (t != null && t.startsWith("h")) { // See DefaultParagraphHtml final String fontWeight = FontWeight.BOLD.getCssName(); @@ -249,6 +268,9 @@ if (annotationName.startsWith("style")) { markers.add(Marker.fromAnnotation(annotation, annotation.getRange().getStart(), false)); markers.add(Marker.fromAnnotation(annotation, annotation.getRange().getEnd(), true)); + } else if (annotationName.startsWith("link")) { + markers.add(Marker.fromAnnotation(annotation, annotation.getRange().getStart(), false)); + markers.add(Marker.fromAnnotation(annotation, annotation.getRange().getEnd(), true)); } else if ("conv/title".equals(annotationName)) { // Find the first newline and make sure the annotation only gets to that // point. @@ -261,6 +283,8 @@ // "bold", start, end); // markers.add(Marker.fromAnnotation(title, start, false)); // markers.add(Marker.fromAnnotation(title, end, true)); + } else { + // LOG? } } }
participants (1)
-
Vicente J. Ruiz Jurado