[jboss-svn-commits] JBL Code SVN: r28774 - in labs/jbossrules/trunk/drools-guvnor/src: main/java/org/drools/guvnor/client/rpc and 6 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Mon Aug 3 21:55:21 EDT 2009
Author: michael.neale at jboss.com
Date: 2009-08-03 21:55:21 -0400 (Mon, 03 Aug 2009)
New Revision: 28774
Modified:
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/explorer/CategoriesPanel.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/DiscussionRecord.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/ruleeditor/DiscussionWidget.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rulelist/AssetItemGrid.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/ServiceImplementation.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/files/FeedServlet.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/util/Discussion.java
labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/files/FeedServletTest.java
Log:
GUVNOR-302 atom feed for comments
Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/explorer/CategoriesPanel.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/explorer/CategoriesPanel.java 2009-08-04 01:34:24 UTC (rev 28773)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/explorer/CategoriesPanel.java 2009-08-04 01:55:21 UTC (rev 28774)
@@ -106,8 +106,9 @@
/**
* The URL that will be used to open up assets in a feed.
+ * (by tacking asset id on the end, of course !).
*/
- static String getSelfURL() {
+ public static String getSelfURL() {
String selfURL = Window.Location.getHref();
if (selfURL.contains("#")) {
selfURL = selfURL.substring(0, selfURL.indexOf("#"));
Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/DiscussionRecord.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/DiscussionRecord.java 2009-08-04 01:34:24 UTC (rev 28773)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/DiscussionRecord.java 2009-08-04 01:55:21 UTC (rev 28774)
@@ -7,7 +7,9 @@
import java.util.Date;
/**
- * This is a discussion record item.
+ * This is a discussion record item - persisted via Discussion.java (xstream) to XML, as a
+ * a property on an AssetItem.
+ *
* @author Michael Neale
*/
public class DiscussionRecord implements IsSerializable {
Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/ruleeditor/DiscussionWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/ruleeditor/DiscussionWidget.java 2009-08-04 01:34:24 UTC (rev 28773)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/ruleeditor/DiscussionWidget.java 2009-08-04 01:55:21 UTC (rev 28774)
@@ -13,6 +13,7 @@
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.user.client.Window;
+import com.google.gwt.http.client.URL;
import com.gwtext.client.util.Format;
import com.gwtext.client.widgets.Panel;
import org.drools.guvnor.client.common.GenericCallback;
@@ -22,6 +23,7 @@
import org.drools.guvnor.client.rpc.RepositoryServiceFactory;
import org.drools.guvnor.client.rpc.RuleAsset;
import org.drools.guvnor.client.explorer.ExplorerLayoutManager;
+import org.drools.guvnor.client.explorer.CategoriesPanel;
import org.drools.guvnor.client.security.Capabilities;
import java.util.Date;
@@ -39,7 +41,6 @@
private static Constants constants = ((Constants) GWT.create(Constants.class));
private VerticalPanel commentList = new VerticalPanel();
- private VerticalPanel discussionLayout = new VerticalPanel();
private VerticalPanel newCommentLayout = new VerticalPanel();
private RuleAsset asset;
@@ -52,6 +53,7 @@
discussionPanel.setBodyBorder(false);
commentList.setWidth("100%");
+ VerticalPanel discussionLayout = new VerticalPanel();
discussionLayout.setWidth("100%");
discussionPanel.add(discussionLayout);
@@ -61,10 +63,8 @@
refreshDiscussion();
- if (!asset.isreadonly) {
- discussionLayout.add(newCommentLayout);
- showNewCommentButton();
- }
+ discussionLayout.add(newCommentLayout);
+ showNewCommentButton();
initWidget(discussionPanel);
}
@@ -107,6 +107,7 @@
hp.add(createNewComment);
+
if (ExplorerLayoutManager.shouldShow(Capabilities.SHOW_ADMIN)) {
Button adminClearAll = new Button(constants.EraseAllComments());
hp.add(adminClearAll);
@@ -124,6 +125,11 @@
}
+
+ String feedURL = GWT.getModuleBaseURL() + "feed/discussion?package=" + asset.metaData.packageName+
+ "&assetName=" + URL.encode(asset.metaData.name) + "&viewUrl=" + CategoriesPanel.getSelfURL();
+ hp.add(new HTML("<a href='" + feedURL + "' target='_blank'><img src='images/feed.png'/></a>"));
+
newCommentLayout.add(hp);
newCommentLayout.setCellHorizontalAlignment(hp, HasHorizontalAlignment.ALIGN_RIGHT);
Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rulelist/AssetItemGrid.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rulelist/AssetItemGrid.java 2009-08-04 01:34:24 UTC (rev 28773)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rulelist/AssetItemGrid.java 2009-08-04 01:55:21 UTC (rev 28774)
@@ -92,8 +92,8 @@
this.layout = new SimplePanel();
if ( !columnConfigs.containsKey( tableConfig ) ) {
RepositoryServiceFactory.getService().loadTableConfig( tableConfig,
- new GenericCallback() {
- public void onSuccess(Object data) {
+ new GenericCallback<TableConfig>() {
+ public void onSuccess(TableConfig data) {
TableConfig conf = (TableConfig) data;
ColumnModel cm = createColumnModel( conf );
columnConfigs.put( tableConfig,
Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/ServiceImplementation.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/ServiceImplementation.java 2009-08-04 01:34:24 UTC (rev 28773)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/ServiceImplementation.java 2009-08-04 01:55:21 UTC (rev 28774)
@@ -136,6 +136,7 @@
/**
* This is the implementation of the repository service to drive the GWT based
* front end.
+ * Generally requests for this are passed through from RepositoryServiceServlet - and Seam manages instances of this.
*
* @author Michael Neale
*/
@@ -2359,7 +2360,7 @@
@Restrict("#{identity.loggedIn}")
public List<DiscussionRecord> loadDiscussionForAsset(String assetId) {
- return new Discussion().fromString(getRulesRepository().loadAssetByUUID(assetId).getStringProperty("discussion"));
+ return new Discussion().fromString(getRulesRepository().loadAssetByUUID(assetId).getStringProperty(Discussion.DISCUSSION_PROPERTY_KEY));
}
@Restrict("#{identity.loggedIn}")
@@ -2367,9 +2368,9 @@
RulesRepository repo = getRulesRepository();
AssetItem asset = repo.loadAssetByUUID(assetId);
Discussion dp = new Discussion();
- List<DiscussionRecord> discussion = dp.fromString(asset.getStringProperty("discussion"));
+ List<DiscussionRecord> discussion = dp.fromString(asset.getStringProperty(Discussion.DISCUSSION_PROPERTY_KEY));
discussion.add(new DiscussionRecord(repo.getSession().getUserID(), comment));
- asset.updateStringProperty(dp.toString(discussion), "discussion");
+ asset.updateStringProperty(dp.toString(discussion), Discussion.DISCUSSION_PROPERTY_KEY);
repo.save();
return discussion;
}
Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/files/FeedServlet.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/files/FeedServlet.java 2009-08-04 01:34:24 UTC (rev 28773)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/files/FeedServlet.java 2009-08-04 01:55:21 UTC (rev 28774)
@@ -3,6 +3,8 @@
import org.drools.guvnor.server.security.PackageNameType;
import org.drools.guvnor.server.security.RoleTypes;
import org.drools.guvnor.server.security.CategoryPathType;
+import org.drools.guvnor.server.util.Discussion;
+import org.drools.guvnor.client.rpc.DiscussionRecord;
import org.drools.repository.AssetItem;
import org.drools.repository.PackageItem;
import org.drools.repository.AssetPageList;
@@ -43,6 +45,12 @@
doCategoryFeed(request, response);
}
});
+ } else if (url.indexOf("feed/discussion") > -1) {
+ doAuthorizedAction(request, response, new A() {
+ public void a() throws Exception {
+ doDiscussionFeed(request, response);
+ }
+ });
}
} catch (AuthorizationException e) {
response.setHeader("WWW-Authenticate", "BASIC realm=\"users\"");
@@ -51,8 +59,28 @@
}
+ private void doDiscussionFeed(HttpServletRequest request, HttpServletResponse response) throws IOException {
+ String assetName = request.getParameter("assetName");
+ String packageName = request.getParameter("package");
+ AssetItem asset = getFileManager().getRepository().loadPackage(packageName).loadAsset(assetName);
+ checkPackageReadPermission(asset.getPackageName());
+ List<AtomFeed.AtomEntry> entries = new ArrayList<AtomFeed.AtomEntry>();
+ entries.add(new AtomFeed.AtomEntry(request, asset));
+ List<DiscussionRecord> drs = new Discussion().fromString(asset.getStringProperty(Discussion.DISCUSSION_PROPERTY_KEY));
+ for (DiscussionRecord dr : drs) {
+ entries.add(new AtomFeed.AtomEntry(request, asset, dr));
+ }
+ AtomFeed feed = new AtomFeed("Discussion of: " + packageName + "/" + assetName,
+ Calendar.getInstance(),
+ request.getServerName() + "/" + packageName + "/" + assetName,
+ request.getParameter(VIEW_URL),
+ request.getRequestURL().toString(), entries, "A list of updated discussion content.");
+ response.setContentType("application/atom+xml");
+ response.getOutputStream().print(feed.getAtom());
+ }
+
private void doCategoryFeed(HttpServletRequest request, HttpServletResponse response) throws IOException {
String cat = request.getParameter("name");
String status = request.getParameter("status");
@@ -178,6 +206,9 @@
private String format;
+ /**
+ * We are creating an entry for each asset.
+ */
public AtomEntry(HttpServletRequest req, AssetItem asset) {
this.name = asset.getName();
this.format = asset.getFormat();
@@ -191,6 +222,23 @@
this.checkinComment = asset.getCheckinComment();
}
+ /** We are creating entries for each discussion record */
+ public AtomEntry(HttpServletRequest req, AssetItem asset, DiscussionRecord discussionRec) {
+ this.name = asset.getName();
+ this.format = asset.getFormat();
+ this.webURL = req.getParameter(VIEW_URL) + "#asset=" + asset.getUUID() + "&nochrome";
+ this.id = asset.getUUID() + "&discussion=" + discussionRec.timestamp + "&author=" + discussionRec.author;
+ Calendar c = Calendar.getInstance();
+ c.setTime(new Date(discussionRec.timestamp));
+ this.updated = ISO8601.format(c);
+ this.published = ISO8601.format(c);
+ this.author = discussionRec.author;
+ this.contributor = asset.getLastContributor();
+ this.description = "Discussion comment was added by: " + discussionRec.author;
+ this.checkinComment = discussionRec.note;
+
+ }
+
public String getName() {
return name;
}
Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/util/Discussion.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/util/Discussion.java 2009-08-04 01:34:24 UTC (rev 28773)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/util/Discussion.java 2009-08-04 01:55:21 UTC (rev 28774)
@@ -8,10 +8,13 @@
import java.util.ArrayList;
/**
+ * Utility methods for persisting discussion data as a property on an asset.
* @author Michael Neale
*/
public class Discussion {
+ public static final String DISCUSSION_PROPERTY_KEY = "discussion";
+
private XStream xs = getXStream();
public String toString(List<DiscussionRecord> recs) {
Modified: labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/files/FeedServletTest.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/files/FeedServletTest.java 2009-08-04 01:34:24 UTC (rev 28773)
+++ labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/files/FeedServletTest.java 2009-08-04 01:55:21 UTC (rev 28774)
@@ -162,6 +162,62 @@
}
+
+
+ public void testDiscussionFeed() throws Exception {
+ RulesRepository repo = new RulesRepository( TestEnvironmentSessionHelper.getSession( true ) );
+ PackageItem pkg = repo.createPackage("testDiscussionFeed", "");
+ AssetItem asset = pkg.addAsset("asset1", "desc");
+ asset.updateFormat("drl");
+ asset.checkin("");
+
+ ServiceImplementation impl = new ServiceImplementation();
+ impl.repository = repo;
+ impl.addToDiscussionForAsset(asset.getUUID(), "This is a comment");
+ impl.addToDiscussionForAsset(asset.getUUID(), "This is another comment");
+
+ Map<String, String> headers = new HashMap<String, String>() {
+ {
+ put("Irrelevant", "garbage");
+ }
+ };
+
+ MockHTTPRequest req = new MockHTTPRequest("/org.foo/feed/discussion?package=...", headers);
+ FeedServlet fs = new FeedServlet();
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ MockHTTPResponse res = new MockHTTPResponse(out);
+ fs.doGet(req, res);
+ assertEquals(HttpServletResponse.SC_UNAUTHORIZED, res.errorCode);
+
+ headers = new HashMap<String, String>() {
+ {
+ put("Authorization", "BASIC " + new String(Base64.encode("test:password".getBytes())));
+ }
+ };
+
+
+ req = new MockHTTPRequest("/org.foo/feed/discussion", headers, new HashMap<String, String>() {
+ {
+ put("package", "testDiscussionFeed");
+ put("assetName", "asset1");
+ }
+ });
+ fs = new FeedServlet();
+ out = new ByteArrayOutputStream();
+ res = new MockHTTPResponse(out);
+ fs.doGet(req, res);
+
+ String r = new String(out.toByteArray());
+ assertNotNull(r);
+ assertTrue(r.indexOf("This is a comment") > -1);
+ assertTrue(r.indexOf("This is another comment") > r.indexOf("This is a comment"));
+ System.err.println(r);
+
+
+
+ }
+
+
class MockFeedServlet extends FeedServlet {
boolean throwAuthException = false;
@Override
More information about the jboss-svn-commits
mailing list