Author: lucaa Date: 2008-02-17 02:28:27 +0100 (Sun, 17 Feb 2008) New Revision: 7769
Added: xwiki-products/xwiki-watch/trunk/gwt/src/main/java/com/xpn/xwiki/watch/client/data/Group.java xwiki-products/xwiki-watch/trunk/gwt/src/main/java/com/xpn/xwiki/watch/client/ui/dialog/GroupDialog.java Removed: xwiki-products/xwiki-watch/trunk/gwt/src/main/java/com/xpn/xwiki/watch/client/ui/dialog/AddGroupDialog.java Modified: xwiki-products/xwiki-watch/trunk/gwt/src/main/java/com/xpn/xwiki/watch/client/Config.java xwiki-products/xwiki-watch/trunk/gwt/src/main/java/com/xpn/xwiki/watch/client/Watch.java xwiki-products/xwiki-watch/trunk/gwt/src/main/java/com/xpn/xwiki/watch/client/data/DataManager.java xwiki-products/xwiki-watch/trunk/gwt/src/main/java/com/xpn/xwiki/watch/client/ui/dialog/AddKeywordDialog.java xwiki-products/xwiki-watch/trunk/gwt/src/main/java/com/xpn/xwiki/watch/client/ui/dialog/FeedDialog.java xwiki-products/xwiki-watch/trunk/gwt/src/main/java/com/xpn/xwiki/watch/client/ui/menu/FeedTreeWidget.java xwiki-products/xwiki-watch/trunk/gwt/src/main/java/com/xpn/xwiki/watch/client/ui/menu/KeywordsWidget.java xwiki-products/xwiki-watch/trunk/gwt/src/main/java/com/xpn/xwiki/watch/client/ui/wizard/ConfigWizard.java xwiki-products/xwiki-watch/trunk/gwt/src/main/java/com/xpn/xwiki/watch/public/Watch.css xwiki-products/xwiki-watch/trunk/wikis/watch/src/main/resources/WatchCode/Translations xwiki-products/xwiki-watch/trunk/wikis/watch/src/main/resources/WatchCode/Translations.fr xwiki-products/xwiki-watch/trunk/wikis/watch/src/main/resources/WatchSheets/GroupSheet Log: XWATCH-96: Adding a "delete" button under group names in the list on the left * Added class for groups (com.xpn.xwiki.watch.client.data.Group) * Added the delete and edit buttons under the group name in the feedtree; delete triggers update on the feeds in the group and the keywords defined for the group * Fixed the WatchSheets.GroupSheet to correctly display the feeds in the group Modified: xwiki-products/xwiki-watch/trunk/gwt/src/main/java/com/xpn/xwiki/watch/client/Config.java =================================================================== --- xwiki-products/xwiki-watch/trunk/gwt/src/main/java/com/xpn/xwiki/watch/client/Config.java 2008-02-15 22:20:07 UTC (rev 7768) +++ xwiki-products/xwiki-watch/trunk/gwt/src/main/java/com/xpn/xwiki/watch/client/Config.java 2008-02-17 01:28:27 UTC (rev 7769) @@ -4,6 +4,7 @@ import com.xpn.xwiki.gwt.api.client.Document; import com.xpn.xwiki.gwt.api.client.XObject; import com.xpn.xwiki.watch.client.data.FeedArticle; +import com.xpn.xwiki.watch.client.data.Group; import com.xpn.xwiki.watch.client.data.Keyword; import com.google.gwt.user.client.rpc.AsyncCallback; @@ -131,7 +132,7 @@ } } - private void addToGroup(String group, String groupTitle, Feed feed) { + private void addToGroup(String group, Feed feed) { Map feeds = (Map) feedsByGroupList.get(group); if (feeds == null) { feeds = new HashMap(); @@ -139,8 +140,11 @@ } if (feed!=null) feeds.put(feed.getName(), feed); - if (!groups.containsKey(group)) - groups.put(group, groupTitle); + if (!groups.containsKey(group)) { + Group newGroup = new Group(); + newGroup.setName(group); + groups.put(group, newGroup); + } } private void addToConfig(Document feedpage) { @@ -153,11 +157,11 @@ if (feedgroups!=null) { for (int j=0;j<feedgroups.size();j++) { String groupFullName = (String) feedgroups.get(j); - addToGroup(groupFullName, groupFullName, feed); + addToGroup(groupFullName, feed); } } String all = watch.getTranslation("all"); - addToGroup(all, all, feed); + addToGroup(all, feed); feedsList.put(feed.getName(), feed); } } @@ -174,9 +178,9 @@ if (gobjects!=null) { for (int j=0;j<gobjects.size();j++) { XObject xobj = (XObject) gobjects.get(j); - String name = (String) xobj.getViewProperty("name"); - if ((name!=null)&&(!name.equals(""))) - groups.put(feedpage.getFullName(), name); + Group group = new Group(xobj); + if ((group.getName()!=null)&&(!group.getName().equals(""))) + groups.put(feedpage.getFullName(), group); } } Modified: xwiki-products/xwiki-watch/trunk/gwt/src/main/java/com/xpn/xwiki/watch/client/Watch.java =================================================================== --- xwiki-products/xwiki-watch/trunk/gwt/src/main/java/com/xpn/xwiki/watch/client/Watch.java 2008-02-15 22:20:07 UTC (rev 7768) +++ xwiki-products/xwiki-watch/trunk/gwt/src/main/java/com/xpn/xwiki/watch/client/Watch.java 2008-02-17 01:28:27 UTC (rev 7769) @@ -9,6 +9,7 @@ import com.xpn.xwiki.watch.client.ui.wizard.ConfigWizard; import com.xpn.xwiki.watch.client.ui.wizard.PressReviewWizard; import com.xpn.xwiki.watch.client.data.DataManager; +import com.xpn.xwiki.watch.client.data.Group; import com.xpn.xwiki.watch.client.data.Keyword; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; @@ -341,6 +342,8 @@ getFilterStatus().setGroup(groupName); getFilterStatus().setStart(0); refreshArticleList(); + //also refresh the tree, to set the current selected group + refreshFeedTree(); } /** @@ -515,7 +518,7 @@ }); } - public void addGroup(final String group, final AsyncCallback cb) { + public void addGroup(final Group group, final AsyncCallback cb) { getDataManager().addGroup(group, new XWikiAsyncCallback(this) { public void onFailure(Throwable caught) { super.onFailure(caught); Modified: xwiki-products/xwiki-watch/trunk/gwt/src/main/java/com/xpn/xwiki/watch/client/data/DataManager.java =================================================================== --- xwiki-products/xwiki-watch/trunk/gwt/src/main/java/com/xpn/xwiki/watch/client/data/DataManager.java 2008-02-15 22:20:07 UTC (rev 7768) +++ xwiki-products/xwiki-watch/trunk/gwt/src/main/java/com/xpn/xwiki/watch/client/data/DataManager.java 2008-02-17 01:28:27 UTC (rev 7769) @@ -4,6 +4,7 @@ import com.xpn.xwiki.watch.client.FilterStatus; import com.xpn.xwiki.watch.client.Constants; import com.xpn.xwiki.watch.client.Feed; +import com.xpn.xwiki.gwt.api.client.app.ModalMessageDialogBox; import com.xpn.xwiki.gwt.api.client.app.XWikiAsyncCallback; import com.xpn.xwiki.gwt.api.client.XWikiService; import com.xpn.xwiki.gwt.api.client.XObject; @@ -126,7 +127,56 @@ } }); } + + public void updateGroup(Group group, final XWikiAsyncCallback cb) { + final String pageName = group.getPageName(); + if (pageName == null || pageName.equals("") || group.getName().equals("")) { + cb.onFailure(null); + } + //create a group object and save it + XObject groupObj = new XObject(); + groupObj.setName(pageName); + groupObj.setClassName(Constants.CLASS_AGGREGATOR_GROUP); + groupObj.setNumber(0); + groupObj.setProperty(Constants.PROPERTY_GROUP_NAME, group.getName()); + watch.getXWikiServiceInstance().saveObject(groupObj, new AsyncCallback() { + public void onFailure(Throwable throwable) { + cb.onFailure(throwable); + } + public void onSuccess(Object object) { + // We return the page name + if (!((Boolean)object).booleanValue()) { + cb.onFailure(null); + } else { + cb.onSuccess(pageName); + } + } + }); + } + + public void updateKeyword(Keyword keyword, final XWikiAsyncCallback cb) { + final String pageName = keyword.getPageName(); + XObject kwObject = new XObject(); + kwObject.setName(pageName); + kwObject.setClassName(Constants.CLASS_AGGREGATOR_KEYWORD); + kwObject.setNumber(0); + kwObject.setProperty(Constants.PROPERTY_KEYWORD_NAME, keyword.getName()); + kwObject.setProperty(Constants.PROPERTY_KEYWORD_GROUP, keyword.getGroup()); + watch.getXWikiServiceInstance().saveObject(kwObject, new AsyncCallback() { + public void onFailure(Throwable throwable) { + cb.onFailure(throwable); + } + public void onSuccess(Object object) { + // We return the page name + if (!((Boolean)object).booleanValue()) + cb.onFailure(null); + else + cb.onSuccess(pageName); + } + }); + } + public void addKeyword(final String keyword, final String group, final AsyncCallback cb) { if (keyword==null) cb.onFailure(null); @@ -178,11 +228,12 @@ }); } - public void addGroup(final String group, final AsyncCallback cb) { + public void addGroup(final Group group, final AsyncCallback cb) { if (group==null) cb.onFailure(null); - watch.getXWikiServiceInstance().getUniquePageName(watch.getWatchSpace(), "Group_" + group, new XWikiAsyncCallback(watch) { + watch.getXWikiServiceInstance().getUniquePageName(watch.getWatchSpace(), + "Group_" + group.getName(), new XWikiAsyncCallback(watch) { public void onFailure(Throwable caught) { super.onFailure(caught); // We failed to get a unique page name @@ -198,7 +249,7 @@ feedObj.setName(pageName); feedObj.setClassName(Constants.CLASS_AGGREGATOR_GROUP); feedObj.setNumber(0); - feedObj.setProperty(Constants.PROPERTY_KEYWORD_NAME, group); + feedObj.setProperty(Constants.PROPERTY_GROUP_NAME, group.getName()); watch.getXWikiServiceInstance().saveObject(feedObj, new AsyncCallback() { public void onFailure(Throwable throwable) { cb.onFailure(throwable); @@ -249,12 +300,50 @@ } } - public void removeGroup(String group, final AsyncCallback cb) { + public void removeGroup(Group group, final AsyncCallback cb) { try { - if ((group==null)||(group.equals(""))) + if ((group==null)||(group.equals(""))) { cb.onFailure(null); - - watch.getXWikiServiceInstance().deleteDocument(group, new XWikiAsyncCallback(watch) { + return; + } + //first update feeds in this group to unset the group + //TODO: decide what to do if one update fails + Collection feedList = (Collection)((Map)watch.getConfig().getFeedsByGroupList() + .get(group.getPageName())).values(); + for (Iterator feedListIt = feedList.iterator(); feedListIt.hasNext();) { + Feed currentFeed = (Feed)feedListIt.next(); + currentFeed.getGroups().remove(group.getPageName()); + this.updateFeed(currentFeed, new XWikiAsyncCallback(watch) { + public void onSuccess(Object result) { + super.onSuccess(result); + } + public void onFailure(Throwable caught) { + super.onFailure(caught); + } + }); + } + + //update the keywords for this group and delete them + List keywords = watch.getConfig().getKeywords(); + for (Iterator kwIt = keywords.iterator(); kwIt.hasNext();) { + Keyword kw = (Keyword)kwIt.next(); + if (kw.getGroup().equals(group.getPageName())) { + //update keyword remove group + kw.setGroup(""); + this.updateKeyword(kw, new XWikiAsyncCallback(watch) { + public void onSuccess(Object result) { + super.onSuccess(result); + } + public void onFailure(Throwable caught) { + super.onFailure(caught); + } + }); + } + } + + //now delete the group + watch.getXWikiServiceInstance().deleteDocument(group.getPageName(), + new XWikiAsyncCallback(watch) { public void onFailure(Throwable caught) { super.onFailure(caught); cb.onFailure(caught); Added: xwiki-products/xwiki-watch/trunk/gwt/src/main/java/com/xpn/xwiki/watch/client/data/Group.java =================================================================== --- xwiki-products/xwiki-watch/trunk/gwt/src/main/java/com/xpn/xwiki/watch/client/data/Group.java (rev 0) +++ xwiki-products/xwiki-watch/trunk/gwt/src/main/java/com/xpn/xwiki/watch/client/data/Group.java 2008-02-17 01:28:27 UTC (rev 7769) @@ -0,0 +1,57 @@ +/** + * See the NOTICE file distributed with this work for additional + * information regarding copyright ownership. + * <p/> + * This is free software;you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation;either version2.1of + * the License,or(at your option)any later version. + * <p/> + * This software 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 + * Lesser General Public License for more details. + * <p/> + * You should have received a copy of the GNU Lesser General Public + * License along with this software;if not,write to the Free + * Software Foundation,Inc.,51 Franklin St,Fifth Floor,Boston,MA + * 02110-1301 USA,or see the FSF site:http://www.fsf.org. + * + */ + +package com.xpn.xwiki.watch.client.data; + +import com.xpn.xwiki.gwt.api.client.XObject; + +public class Group +{ + private String name; + private String pageName; + + public Group() {} + + public Group(XObject xobj) { + setName((String) xobj.getProperty("name")); + setPageName(xobj.getName()); + } + + public String getName() + { + return name == null ? "" : name; + } + + public void setName(String name) + { + this.name = name; + } + + public String getPageName() + { + return pageName == null ? "" : pageName; + } + + public void setPageName(String pageName) + { + this.pageName = pageName; + } +} Deleted: xwiki-products/xwiki-watch/trunk/gwt/src/main/java/com/xpn/xwiki/watch/client/ui/dialog/AddGroupDialog.java =================================================================== --- xwiki-products/xwiki-watch/trunk/gwt/src/main/java/com/xpn/xwiki/watch/client/ui/dialog/AddGroupDialog.java 2008-02-15 22:20:07 UTC (rev 7768) +++ xwiki-products/xwiki-watch/trunk/gwt/src/main/java/com/xpn/xwiki/watch/client/ui/dialog/AddGroupDialog.java 2008-02-17 01:28:27 UTC (rev 7769) @@ -1,113 +0,0 @@ -package com.xpn.xwiki.watch.client.ui.dialog; - -import com.google.gwt.user.client.ui.*; -import com.google.gwt.user.client.Window; -import com.google.gwt.user.client.rpc.AsyncCallback; -import com.xpn.xwiki.gwt.api.client.app.XWikiGWTApp; -import com.xpn.xwiki.gwt.api.client.dialog.Dialog; -import com.xpn.xwiki.watch.client.Watch; - -import java.util.List; -import java.util.ArrayList; - -/** - * See the NOTICE file distributed with this work for additional - * information regarding copyright ownership. - * <p/> - * This is free software;you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation;either version2.1of - * the License,or(at your option)any later version. - * <p/> - * This software 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 - * Lesser General Public License for more details. - * <p/> - * You should have received a copy of the GNU Lesser General Public - * License along with this software;if not,write to the Free - * Software Foundation,Inc.,51 Franklin St,Fifth Floor,Boston,MA - * 02110-1301 USA,or see the FSF site:http://www.fsf.org. - * - * @author ldubost - */ - -public class AddGroupDialog extends Dialog { - protected TextBox groupTextBox; - protected String group; - - /** - * Choice dialog - * @param app XWiki GWT App object to access translations and css prefix names - * @param name dialog name - * @param buttonModes button modes Dialog.BUTTON_CANCEL|Dialog.BUTTON_NEXT for Cancel / Next - */ - public AddGroupDialog(XWikiGWTApp app, String name, int buttonModes, String group) { - super(app, name, buttonModes); - this.group = group; - - FlowPanel main = new FlowPanel(); - main.addStyleName(getCSSName("main")); - - HTMLPanel invitationPanel = new HTMLPanel(app.getTranslation(getDialogTranslationName() + ".invitation")); - invitationPanel.addStyleName(getCssPrefix() + "-invitation"); - main.add(invitationPanel); - main.add(getParametersPanel()); - main.add(getActionsPanel()); - add(main); - } - - protected boolean updateData() { - group = groupTextBox.getText(); - - if (group.equals("")) { - Window.alert(app.getTranslation(getDialogTranslationName() + ".nogroup")); - return false; - } - - return true; - } - - protected Widget getParametersPanel() { - FlowPanel paramsPanel = new FlowPanel(); - Label groupLabel = new Label(); - groupLabel.setStyleName("group-label"); - groupLabel.setText(app.getTranslation(getDialogTranslationName() + ".group")); - paramsPanel.add(groupLabel); - groupTextBox = new TextBox(); - if (group!=null) - groupTextBox.setText(group); - groupTextBox.setVisibleLength(20); - groupTextBox.setName("group"); - groupTextBox.setStyleName(getCSSName("group")); - paramsPanel.add(groupTextBox); - paramsPanel.add(getGroupsFields()); - return paramsPanel; - } - - protected Widget getGroupsFields() { - return new FlowPanel(); - } - - protected void endDialog() { - if (updateData()) { - setCurrentResult(group); - ((Watch)app).addGroup(group, new AsyncCallback() { - public void onFailure(Throwable throwable) { - // There should already have been an error display - ((Watch)app).refreshFeedTree(); - } - - public void onSuccess(Object object) { - endDialog2(); - ((Watch)app).refreshFeedTree(); - } - }); - } - } - - private void endDialog2() { - super.endDialog(); - } - -} Modified: xwiki-products/xwiki-watch/trunk/gwt/src/main/java/com/xpn/xwiki/watch/client/ui/dialog/AddKeywordDialog.java =================================================================== --- xwiki-products/xwiki-watch/trunk/gwt/src/main/java/com/xpn/xwiki/watch/client/ui/dialog/AddKeywordDialog.java 2008-02-15 22:20:07 UTC (rev 7768) +++ xwiki-products/xwiki-watch/trunk/gwt/src/main/java/com/xpn/xwiki/watch/client/ui/dialog/AddKeywordDialog.java 2008-02-17 01:28:27 UTC (rev 7769) @@ -22,6 +22,7 @@ import com.xpn.xwiki.gwt.api.client.app.XWikiGWTApp; import com.xpn.xwiki.gwt.api.client.dialog.Dialog; import com.xpn.xwiki.watch.client.Watch; +import com.xpn.xwiki.watch.client.data.Group; import com.google.gwt.user.client.ui.*; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; @@ -103,11 +104,16 @@ while (it.hasNext()) { String groupname = (String) it.next(); if (!groupname.equals(all)) { - String grouptitle = (String) groupMap.get(groupname); - groupListBox.addItem(grouptitle,groupname); - if (group.equals(groupname)) { - selected = true; - groupListBox.setItemSelected(groupListBox.getItemCount(), true); + //get group for this key + Group currentGroup = (Group)groupMap.get(groupname); + //don't add it unless it is a real group + if (!currentGroup.getPageName().equals("") || group.equals(groupname)) { + String grouptitle = currentGroup.getName(); + groupListBox.addItem(grouptitle,groupname); + if (group.equals(groupname)) { + selected = true; + groupListBox.setItemSelected(groupListBox.getItemCount(), true); + } } } } @@ -131,8 +137,6 @@ public void onSuccess(Object object) { endDialog2(); - // We don't need to refresh keywords here as it as been taken care by the addKeyword call - //((Watch)app).refreshOnNewKeyword() } }); } Modified: xwiki-products/xwiki-watch/trunk/gwt/src/main/java/com/xpn/xwiki/watch/client/ui/dialog/FeedDialog.java =================================================================== --- xwiki-products/xwiki-watch/trunk/gwt/src/main/java/com/xpn/xwiki/watch/client/ui/dialog/FeedDialog.java 2008-02-15 22:20:07 UTC (rev 7768) +++ xwiki-products/xwiki-watch/trunk/gwt/src/main/java/com/xpn/xwiki/watch/client/ui/dialog/FeedDialog.java 2008-02-17 01:28:27 UTC (rev 7769) @@ -5,6 +5,7 @@ import com.xpn.xwiki.gwt.api.client.dialog.Dialog; import com.xpn.xwiki.watch.client.Feed; import com.xpn.xwiki.watch.client.Watch; +import com.xpn.xwiki.watch.client.data.Group; import com.google.gwt.user.client.ui.*; import com.google.gwt.user.client.rpc.AsyncCallback; @@ -113,12 +114,17 @@ String groupname = (String) it.next(); String all = ((Watch)app).getTranslation("all"); if (!groupname.equals(all)) { - String grouptitle = (String) groupMap.get(groupname); - if (groupname.indexOf(".")==-1) - grouptitle = "[" + grouptitle + "]"; - groupsListBox.addItem(grouptitle, groupname); - if (currentGroups.contains(groupname)) { - groupsListBox.setItemSelected(groupsListBox.getItemCount()-1, true); + //get group for this key + Group currentGroup = (Group)groupMap.get(groupname); + //don't add unless it is a real group + if (!currentGroup.getPageName().equals("") || currentGroups.contains(groupname)) { + String grouptitle = currentGroup.getName(); + if (groupname.indexOf(".")==-1) + grouptitle = "[" + grouptitle + "]"; + groupsListBox.addItem(grouptitle, groupname); + if (currentGroups.contains(groupname)) { + groupsListBox.setItemSelected(groupsListBox.getItemCount()-1, true); + } } } } Added: xwiki-products/xwiki-watch/trunk/gwt/src/main/java/com/xpn/xwiki/watch/client/ui/dialog/GroupDialog.java =================================================================== --- xwiki-products/xwiki-watch/trunk/gwt/src/main/java/com/xpn/xwiki/watch/client/ui/dialog/GroupDialog.java (rev 0) +++ xwiki-products/xwiki-watch/trunk/gwt/src/main/java/com/xpn/xwiki/watch/client/ui/dialog/GroupDialog.java 2008-02-17 01:28:27 UTC (rev 7769) @@ -0,0 +1,119 @@ +package com.xpn.xwiki.watch.client.ui.dialog; + +import com.google.gwt.user.client.ui.*; +import com.google.gwt.user.client.Window; +import com.google.gwt.user.client.rpc.AsyncCallback; +import com.xpn.xwiki.gwt.api.client.app.XWikiGWTApp; +import com.xpn.xwiki.gwt.api.client.dialog.Dialog; +import com.xpn.xwiki.watch.client.Watch; +import com.xpn.xwiki.watch.client.data.Group; + +import java.util.List; +import java.util.ArrayList; + +/** + * See the NOTICE file distributed with this work for additional + * information regarding copyright ownership. + * <p/> + * This is free software;you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation;either version2.1of + * the License,or(at your option)any later version. + * <p/> + * This software 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 + * Lesser General Public License for more details. + * <p/> + * You should have received a copy of the GNU Lesser General Public + * License along with this software;if not,write to the Free + * Software Foundation,Inc.,51 Franklin St,Fifth Floor,Boston,MA + * 02110-1301 USA,or see the FSF site:http://www.fsf.org. + * + * @author ldubost + */ + +public class GroupDialog extends Dialog { + protected TextBox groupTextBox; + protected Group group; + + /** + * Choice dialog + * @param app XWiki GWT App object to access translations and css prefix names + * @param name dialog name + * @param buttonModes button modes Dialog.BUTTON_CANCEL|Dialog.BUTTON_NEXT for Cancel / Next + */ + public GroupDialog(XWikiGWTApp app, String name, int buttonModes, Group group) { + super(app, name, buttonModes); + this.group = group; + + FlowPanel main = new FlowPanel(); + main.addStyleName(getCSSName("main")); + + HTMLPanel invitationPanel = new HTMLPanel(app.getTranslation(getDialogTranslationName() + ".invitation")); + invitationPanel.addStyleName(getCssPrefix() + "-invitation"); + main.add(invitationPanel); + main.add(getParametersPanel()); + main.add(getActionsPanel()); + add(main); + } + + protected boolean updateData() { + String groupName = groupTextBox.getText(); + + if (groupName.equals("")) { + Window.alert(app.getTranslation(getDialogTranslationName() + ".nogroup")); + return false; + } else { + this.group.setName(groupName); + return true; + } + } + + protected Widget getParametersPanel() { + FlowPanel paramsPanel = new FlowPanel(); + Label groupLabel = new Label(); + groupLabel.setStyleName("group-label"); + groupLabel.setText(app.getTranslation(getDialogTranslationName() + ".group")); + paramsPanel.add(groupLabel); + groupTextBox = new TextBox(); + if (group!=null) + groupTextBox.setText(group.getName()); + groupTextBox.setVisibleLength(20); + groupTextBox.setName("group"); + groupTextBox.setStyleName(getCSSName("group")); + paramsPanel.add(groupTextBox); + paramsPanel.add(getGroupsFields()); + return paramsPanel; + } + + protected Widget getGroupsFields() { + return new FlowPanel(); + } + + protected void endDialog() { + if (updateData()) { + setCurrentResult(group); + if (this.group.getPageName().equals("")) { + ((Watch)app).addGroup(group, new AsyncCallback() { + public void onFailure(Throwable throwable) { + // There should already have been an error display + ((Watch)app).refreshFeedTree(); + } + + public void onSuccess(Object object) { + endDialog2(); + ((Watch)app).refreshFeedTree(); + } + }); + } else { + endDialog2(); + } + } + } + + private void endDialog2() { + super.endDialog(); + } + +} Modified: xwiki-products/xwiki-watch/trunk/gwt/src/main/java/com/xpn/xwiki/watch/client/ui/menu/FeedTreeWidget.java =================================================================== --- xwiki-products/xwiki-watch/trunk/gwt/src/main/java/com/xpn/xwiki/watch/client/ui/menu/FeedTreeWidget.java 2008-02-15 22:20:07 UTC (rev 7768) +++ xwiki-products/xwiki-watch/trunk/gwt/src/main/java/com/xpn/xwiki/watch/client/ui/menu/FeedTreeWidget.java 2008-02-17 01:28:27 UTC (rev 7769) @@ -1,6 +1,8 @@ package com.xpn.xwiki.watch.client.ui.menu; +import com.xpn.xwiki.watch.client.data.Group; import com.xpn.xwiki.watch.client.ui.WatchWidget; +import com.xpn.xwiki.watch.client.ui.dialog.GroupDialog; import com.xpn.xwiki.watch.client.ui.dialog.FeedDialog; import com.xpn.xwiki.watch.client.ui.dialog.StandardFeedDialog; import com.xpn.xwiki.watch.client.Watch; @@ -8,6 +10,7 @@ import com.xpn.xwiki.watch.client.Constants; import com.xpn.xwiki.gwt.api.client.app.XWikiAsyncCallback; import com.xpn.xwiki.gwt.api.client.dialog.Dialog; +import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.*; import com.google.gwt.user.client.rpc.AsyncCallback; @@ -110,14 +113,16 @@ Iterator groupit = keys.iterator(); while (groupit.hasNext()) { final String groupname = (String) groupit.next(); - String groupTitle = (String) groups.get(groupname); - if (groupTitle==null) - groupTitle = groupname; + Group currentGroup = (Group) groups.get(groupname); + if (currentGroup == null) { + currentGroup = new Group(); + currentGroup.setName(groupname); + } if ((groupname!=null)&&(!groupname.trim().equals(""))) { - Map group = (Map) feedsbygroup.get(groupname); + Map groupFeeds = (Map) feedsbygroup.get(groupname); TreeItem groupItemTree = new TreeItem(); //set the TreeItem's object - GroupTreeItemObject groupObj = new GroupTreeItemObject(groupname, groupTitle); + GroupTreeItemObject groupObj = new GroupTreeItemObject(groupname, currentGroup); groupItemTree.setUserObject(groupObj); //check if selected boolean selected = false; @@ -127,12 +132,12 @@ } groupItemTree.setWidget(groupObj.getWidget(selected)); groupTree.addItem(groupItemTree); - List feedList = new ArrayList(group.keySet()); + List feedList = new ArrayList(groupFeeds.keySet()); Collections.sort(feedList); Iterator feedgroupit = feedList.iterator(); while (feedgroupit.hasNext()) { String feedname = (String) feedgroupit.next(); - Feed feed = (Feed) group.get(feedname); + Feed feed = (Feed) groupFeeds.get(feedname); //set it's userObject to the name of the group + name of the feed since a //feed can be part of multiple groups and we need to identify it uniquely. String itemTreeKey = groupname + "." + feedname; @@ -195,31 +200,85 @@ super(key, data); } - public GroupTreeItemObject(String groupname, String groupTitle) - { - super(groupname, null); - //can only instantiate groupdata obj from class. - //TODO: declare it static or not inner once all the data classes are moved. - this.data = new String[2]; - ((String[])this.data)[0] = groupname; - ((String[])this.data)[1] = groupTitle; - } - public Widget getWidget(boolean selected) { - final String[] gData = (String[])this.data; - Hyperlink link = new Hyperlink(gData[1], ""); + final Group group = (Group)this.data; + Hyperlink link = new Hyperlink(group.getName(), ""); link.setStyleName(watch.getStyleName("feedtree","link")); link.addClickListener(new ClickListener() { public void onClick(Widget widget) { - watch.refreshOnGroupChange(gData[0]); + watch.refreshOnGroupChange(group.getPageName().trim().equals("") + ? group.getName() : group.getPageName()); } }); Widget widget = link; - if (selected) { + //if group is All group or it is a non-existent group, we shouldn't be able to edit it + if (selected && (!group.getName().equals(watch.getTranslation("all"))) + && !group.getPageName().equals("")) { //create a composite with link as main widget and some actions widget = new HyperlinkComposite(link); - //no actions for now + Hyperlink editHyperlink = new Hyperlink(watch.getTranslation("feedtree.edit"), "#"); + editHyperlink.addClickListener(new ClickListener() { + public void onClick (Widget widget) { + GroupDialog gDialog = new GroupDialog(watch, "addgroup", + Dialog.BUTTON_CANCEL | Dialog.BUTTON_NEXT, group); + gDialog.setAsyncCallback(new AsyncCallback() { + public void onFailure(Throwable throwable) { + //nothing + } + public void onSuccess(Object object) { + Group newGroup = (Group)object; + watch.getDataManager().updateGroup(newGroup, new XWikiAsyncCallback(watch) { + public void onFailure(Throwable caught) { + super.onFailure(caught); + } + + public void onSuccess(Object result) { + super.onSuccess(result); + // We need to refreshData the tree + watch.refreshOnNewGroup(); + watch.refreshOnNewKeyword(); + } + }); + } + }); + gDialog.show(); + } + }); + HyperlinkComposite editHyperlinkComposite = new HyperlinkComposite(editHyperlink); + Hyperlink deleteHyperlink = new Hyperlink(watch.getTranslation("feedtree.delete"), ""); + deleteHyperlink.addClickListener(new ClickListener() { + public void onClick(Widget widget) { + String confirmString = watch.getTranslation("removegroup.confirm", + new String[] {group.getName()}); + boolean confirm = Window.confirm(confirmString); + if (confirm) { + watch.getDataManager().removeGroup(group, new XWikiAsyncCallback(watch) { + public void onFailure(Throwable caught) { + super.onFailure(caught); + } + public void onSuccess(Object result) { + super.onSuccess(result); + // We need to refreshData the tree + watch.refreshOnNewGroup(); + watch.refreshOnNewKeyword(); + } + }); + } else { + //nothing + } + } + }); + HyperlinkComposite deleteHyperlinkComposite = new HyperlinkComposite(deleteHyperlink); + //set styles + editHyperlinkComposite.setStyleName(watch.getStyleName("feedtree", "groupaction") + + " " + watch.getStyleName("feedtree", "editgroup")); + deleteHyperlinkComposite.setStyleName(watch.getStyleName("feedtree", "groupaction") + + " " + watch.getStyleName("feedtree", "deletegroup")); + //add the two actions to the hyperlink composite, in reverse order since they will + //be floated to the right + ((HyperlinkComposite)widget).add(deleteHyperlinkComposite); + ((HyperlinkComposite)widget).add(editHyperlinkComposite); } return widget; } @@ -290,7 +349,7 @@ public void onClick(Widget widget) { String confirmString = watch.getTranslation("removefeed.confirm", new String[] {feed.getName()}); - boolean confirm = com.google.gwt.user.client.Window.confirm(confirmString); + boolean confirm = Window.confirm(confirmString); if (confirm) { watch.getDataManager().removeFeed(feed, new XWikiAsyncCallback(watch) { public void onFailure(Throwable caught) { Modified: xwiki-products/xwiki-watch/trunk/gwt/src/main/java/com/xpn/xwiki/watch/client/ui/menu/KeywordsWidget.java =================================================================== --- xwiki-products/xwiki-watch/trunk/gwt/src/main/java/com/xpn/xwiki/watch/client/ui/menu/KeywordsWidget.java 2008-02-15 22:20:07 UTC (rev 7768) +++ xwiki-products/xwiki-watch/trunk/gwt/src/main/java/com/xpn/xwiki/watch/client/ui/menu/KeywordsWidget.java 2008-02-17 01:28:27 UTC (rev 7769) @@ -2,6 +2,7 @@ import com.xpn.xwiki.watch.client.ui.WatchWidget; import com.xpn.xwiki.watch.client.Watch; +import com.xpn.xwiki.watch.client.data.Group; import com.xpn.xwiki.watch.client.data.Keyword; import com.google.gwt.user.client.ui.*; @@ -86,10 +87,13 @@ while (it.hasNext()) { final Keyword keyword = (Keyword) it.next(); if ((keyword.getName()!=null)&&(!keyword.equals(""))) { - String groupDisplayName = (String) watch.getConfig().getGroups() + Group kwGroup = (Group) watch.getConfig().getGroups() .get(keyword.getGroup()); - if (groupDisplayName == null) { + String groupDisplayName; + if (kwGroup == null) { groupDisplayName = keyword.getGroup(); + } else { + groupDisplayName = kwGroup.getName(); } String keywordDisplayName = keyword.getName() + ((!groupDisplayName.trim().equals("")) ? (" - " + groupDisplayName) : ""); Modified: xwiki-products/xwiki-watch/trunk/gwt/src/main/java/com/xpn/xwiki/watch/client/ui/wizard/ConfigWizard.java =================================================================== --- xwiki-products/xwiki-watch/trunk/gwt/src/main/java/com/xpn/xwiki/watch/client/ui/wizard/ConfigWizard.java 2008-02-15 22:20:07 UTC (rev 7768) +++ xwiki-products/xwiki-watch/trunk/gwt/src/main/java/com/xpn/xwiki/watch/client/ui/wizard/ConfigWizard.java 2008-02-17 01:28:27 UTC (rev 7769) @@ -2,6 +2,7 @@ import com.xpn.xwiki.watch.client.Watch; import com.xpn.xwiki.watch.client.Feed; +import com.xpn.xwiki.watch.client.data.Group; import com.xpn.xwiki.watch.client.ui.dialog.*; import com.xpn.xwiki.gwt.api.client.wizard.Wizard; import com.xpn.xwiki.gwt.api.client.dialog.ChoiceDialog; @@ -66,7 +67,7 @@ AddKeywordDialog addKeywordDialog = new AddKeywordDialog(watch, "addkeyword", Dialog.BUTTON_PREVIOUS | Dialog.BUTTON_CANCEL | Dialog.BUTTON_NEXT, "", ""); addDialog(addKeywordDialog, "end"); - AddGroupDialog addGroupDialog = new AddGroupDialog(watch, "addgroup", Dialog.BUTTON_PREVIOUS | Dialog.BUTTON_CANCEL | Dialog.BUTTON_NEXT, ""); + GroupDialog addGroupDialog = new GroupDialog(watch, "addgroup", Dialog.BUTTON_PREVIOUS | Dialog.BUTTON_CANCEL | Dialog.BUTTON_NEXT, new Group()); addDialog(addGroupDialog, "end"); LoadingStatusDialog loadingStatusDialog = new LoadingStatusDialog(watch, "loadingstatus", Dialog.BUTTON_CANCEL); Modified: xwiki-products/xwiki-watch/trunk/gwt/src/main/java/com/xpn/xwiki/watch/public/Watch.css =================================================================== --- xwiki-products/xwiki-watch/trunk/gwt/src/main/java/com/xpn/xwiki/watch/public/Watch.css 2008-02-15 22:20:07 UTC (rev 7768) +++ xwiki-products/xwiki-watch/trunk/gwt/src/main/java/com/xpn/xwiki/watch/public/Watch.css 2008-02-17 01:28:27 UTC (rev 7769) @@ -219,17 +219,17 @@ white-space: normal; } -.watch-feedtree-feedaction { +.watch-feedtree-feedaction, .watch-feedtree-groupaction { float: right; padding-left: 0.5em; padding-right: 0.5em; } -div.watch-feedtree-editfeed { +div.watch-feedtree-editfeed, div.watch-feedtree-editgroup{ background-color: #FFAA00; } -div.watch-feedtree-deletefeed { +div.watch-feedtree-deletefeed, div.watch-feedtree-deletegroup{ background-color: #FF0000; } Modified: xwiki-products/xwiki-watch/trunk/wikis/watch/src/main/resources/WatchCode/Translations =================================================================== --- xwiki-products/xwiki-watch/trunk/wikis/watch/src/main/resources/WatchCode/Translations 2008-02-15 22:20:07 UTC (rev 7768) +++ xwiki-products/xwiki-watch/trunk/wikis/watch/src/main/resources/WatchCode/Translations 2008-02-17 01:28:27 UTC (rev 7769) @@ -138,6 +138,7 @@ watch.addfeed.button.wikio.description=Create and add a Feed from Wikio watch.removefeed.confirm=Are you sure you want to delete feed "{0}"? +watch.removegroup.confirm=Are you sure you want to delete group "{0}"? watch.addgroup.invitation=Please add a group below watch.addgroup.group=Group Name Modified: xwiki-products/xwiki-watch/trunk/wikis/watch/src/main/resources/WatchCode/Translations.fr =================================================================== --- xwiki-products/xwiki-watch/trunk/wikis/watch/src/main/resources/WatchCode/Translations.fr 2008-02-15 22:20:07 UTC (rev 7768) +++ xwiki-products/xwiki-watch/trunk/wikis/watch/src/main/resources/WatchCode/Translations.fr 2008-02-17 01:28:27 UTC (rev 7769) @@ -126,6 +126,7 @@ watch.addfeed.button.wikio.description=Cr�ez et ajoutez un flux depuis Wikio watch.removefeed.confirm=�tes-vous s�r de vouloir effacer le flux "{0}"? +watch.removegroup.confirm=�tes-vous s�r de vouloir effacer le group "{0}"? watch.addgroup.invitation=Veuillez ajouter le nom du groupe ci dessous watch.addgroup.group=Noms du groupe: Modified: xwiki-products/xwiki-watch/trunk/wikis/watch/src/main/resources/WatchSheets/GroupSheet =================================================================== --- xwiki-products/xwiki-watch/trunk/wikis/watch/src/main/resources/WatchSheets/GroupSheet 2008-02-15 22:20:07 UTC (rev 7768) +++ xwiki-products/xwiki-watch/trunk/wikis/watch/src/main/resources/WatchSheets/GroupSheet 2008-02-17 01:28:27 UTC (rev 7769) @@ -57,7 +57,7 @@ #set($groupObj = $doc.getObject("XWiki.AggregatorGroupClass")) #if ($groupObj) ## for a reason or another, a feed holds in its group value, the name of a group document and not a group name, so the query is very simple: - #set($feedsQuery =" , BaseObject as obj, XWiki.AggregatorURLClass as feed where doc.fullName = obj.name and doc.web = '${doc.space}' and obj.id = feed.id and obj.className = 'XWiki.AggregatorUrlClass' and '${groupObj.name}' in elements(feed.group)") + #set($feedsQuery =" , BaseObject as obj, XWiki.AggregatorURLClass as feed where doc.fullName = obj.name and doc.web = '${doc.space}' and obj.id = feed.id and obj.className = 'XWiki.AggregatorURLClass' and '${groupObj.name}' in elements(feed.group)") #set($list = $xwiki.searchDocuments($feedsQuery)) #set($parList = $xwiki.arrayList) #set($dispose = $parList.add($groupObj.getProperty("name").value))
_______________________________________________ notifications mailing list notifications@xwiki.org http://lists.xwiki.org/mailman/listinfo/notifications