[jboss-svn-commits] JBL Code SVN: r28740 - 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 02:50:32 EDT 2009
Author: michael.neale at jboss.com
Date: 2009-08-03 02:50:32 -0400 (Mon, 03 Aug 2009)
New Revision: 28740
Added:
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/ruleeditor/DiscussionWidget.java
Modified:
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/messages/Constants.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/messages/Constants.properties
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/RepositoryService.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/RepositoryServiceAsync.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/ruleeditor/RuleDocumentWidget.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/ruleeditor/RuleViewer.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/public/Guvnor.css
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/RepositoryServiceServlet.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/util/Discussion.java
labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/ServiceImplementationTest.java
labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/util/DiscussionTest.java
Log:
GUVNOR-302 Discussion feature
Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/messages/Constants.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/messages/Constants.java 2009-08-03 06:45:09 UTC (rev 28739)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/messages/Constants.java 2009-08-03 06:50:32 UTC (rev 28740)
@@ -1892,4 +1892,14 @@
String FreezeAreasForEditing();
String Conditions();
+
+ String smallCommentBy0On1Small();
+
+ String AddADiscussionComment();
+
+ String EraseAllComments();
+
+ String EraseAllCommentsWarning();
+
+ String Discussion();
}
Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/messages/Constants.properties
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/messages/Constants.properties 2009-08-03 06:45:09 UTC (rev 28739)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/messages/Constants.properties 2009-08-03 06:50:32 UTC (rev 28740)
@@ -898,4 +898,9 @@
FrozenAreas=Frozen areas...
FrozenExplanation=Frozen areas mean that the rule can only have its fields edited, no extra conditions added or removed or the structure changed.
FreezeAreasForEditing=Freeze areas for editing:
-Conditions=Conditions
\ No newline at end of file
+Conditions=Conditions
+smallCommentBy0On1Small=<small>Comment by {0} on {1}:</small>
+AddADiscussionComment=Add a discussion comment
+EraseAllComments=Erase all comments
+EraseAllCommentsWarning=Erase ALL discussion items? NOTE that this CAN NOT be undone. Are you sure?
+Discussion=Discussion
\ No newline at end of file
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-03 06:45:09 UTC (rev 28739)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/DiscussionRecord.java 2009-08-03 06:50:32 UTC (rev 28740)
@@ -1,5 +1,7 @@
package org.drools.guvnor.client.rpc;
+import com.google.gwt.user.client.rpc.IsSerializable;
+
import java.io.Serializable;
import java.util.Calendar;
import java.util.Date;
@@ -8,7 +10,13 @@
* This is a discussion record item.
* @author Michael Neale
*/
-public class DiscussionRecord implements Serializable {
+public class DiscussionRecord implements IsSerializable {
+
+ public DiscussionRecord() {}
+ public DiscussionRecord(String userName, String note) {
+ this.author = userName;
+ this.note = note;
+ }
public long timestamp = (new Date()).getTime();
public String note;
public String author;
Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/RepositoryService.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/RepositoryService.java 2009-08-03 06:45:09 UTC (rev 28739)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/RepositoryService.java 2009-08-03 06:50:32 UTC (rev 28740)
@@ -490,4 +490,21 @@
*/
public void installSampleRepository() throws SerializableException;
+
+ /**
+ * Return a list of discussion items for a given asset...
+ */
+ public List<DiscussionRecord> loadDiscussionForAsset(String assetId);
+
+
+ /**
+ * Append a discussion item for the current user.
+ */
+ public List<DiscussionRecord> addToDiscussionForAsset(String assetId, String comment);
+
+
+ /** Only for admins, they can nuke it from orbit to clear it out */
+ public void clearAllDiscussionsForAsset(String assetId);
+
+
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/RepositoryServiceAsync.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/RepositoryServiceAsync.java 2009-08-03 06:45:09 UTC (rev 28739)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/RepositoryServiceAsync.java 2009-08-03 06:50:32 UTC (rev 28740)
@@ -20,6 +20,8 @@
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.rpc.RemoteService;
+import java.util.List;
+
/**
* This is what the remote service will implement, as a servlet.
@@ -98,6 +100,9 @@
public void lockAsset(java.lang.String p0, AsyncCallback cb);
public void unLockAsset(java.lang.String p0, AsyncCallback cb);
public void installSampleRepository(AsyncCallback cb);
+ public void loadDiscussionForAsset(String assetId, AsyncCallback<List<DiscussionRecord>> dr);
+ public void addToDiscussionForAsset(String assetId, String comment, AsyncCallback<List<DiscussionRecord>> response);
+ public void clearAllDiscussionsForAsset(String assetId, AsyncCallback cb);
}
\ No newline at end of file
Added: 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 (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/ruleeditor/DiscussionWidget.java 2009-08-03 06:50:32 UTC (rev 28740)
@@ -0,0 +1,174 @@
+package org.drools.guvnor.client.ruleeditor;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.user.client.ui.Button;
+import com.google.gwt.user.client.ui.ClickListener;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.HTML;
+import com.google.gwt.user.client.ui.HasHorizontalAlignment;
+import com.google.gwt.user.client.ui.HorizontalPanel;
+import com.google.gwt.user.client.ui.Image;
+import com.google.gwt.user.client.ui.Label;
+import com.google.gwt.user.client.ui.TextArea;
+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.gwtext.client.util.Format;
+import com.gwtext.client.widgets.Panel;
+import org.drools.guvnor.client.common.GenericCallback;
+import org.drools.guvnor.client.common.SmallLabel;
+import org.drools.guvnor.client.messages.Constants;
+import org.drools.guvnor.client.rpc.DiscussionRecord;
+import org.drools.guvnor.client.rpc.RepositoryServiceFactory;
+import org.drools.guvnor.client.rpc.RuleAsset;
+
+import java.util.Date;
+import java.util.List;
+import java.util.ArrayList;
+
+/**
+ *
+ * Does the discussion panel for assets.
+ *
+ * @author Michael Neale
+ */
+public class DiscussionWidget extends Composite {
+
+ 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;
+
+
+ public DiscussionWidget(RuleAsset asset) {
+ this.asset = asset;
+ final Panel discussionPanel = new Panel();
+ discussionPanel.setCollapsible( true );
+ discussionPanel.setTitle(constants.Discussion() + ":" );
+ discussionPanel.setBodyBorder(false);
+
+ commentList.setWidth("100%");
+ discussionLayout.setWidth("100%");
+
+ discussionPanel.add(discussionLayout);
+ discussionLayout.add(commentList);
+ newCommentLayout.setWidth("100%");
+
+ refreshDiscussion();
+
+
+ if (!asset.isreadonly) {
+ discussionLayout.add(newCommentLayout);
+ showNewCommentButton();
+ }
+
+ initWidget(discussionPanel);
+ }
+
+
+
+ /** Hit up the server */
+ public void refreshDiscussion() {
+ RepositoryServiceFactory.getService().loadDiscussionForAsset(asset.uuid, new GenericCallback<List<DiscussionRecord>>() {
+ public void onSuccess(List<DiscussionRecord> result) {
+ updateCommentList(result);
+ }
+ });
+ }
+
+ private void updateCommentList(List<DiscussionRecord> ls) {
+ commentList.clear();
+ for(DiscussionRecord dr: ls) {
+ appendComment(dr);
+ }
+ }
+
+ private void appendComment(DiscussionRecord r) {
+ SmallLabel hrd = new SmallLabel(Format.format(constants.smallCommentBy0On1Small(), r.author, new Date(r.timestamp).toString()));
+ hrd.addStyleName("discussion-header");
+ commentList.add(hrd);
+ Label lbl = new Label(r.note);
+ lbl.setStyleName("x-form-field");
+ commentList.add(lbl);
+ commentList.add(new HTML("<br/>"));
+ }
+
+
+ private void showNewCommentButton() {
+ newCommentLayout.clear();
+
+ HorizontalPanel hp = new HorizontalPanel();
+
+ Button createNewComment = new Button(constants.AddADiscussionComment());
+ hp.add(createNewComment);
+
+ Button adminClearAll = new Button(constants.EraseAllComments());
+ hp.add(adminClearAll);
+
+ newCommentLayout.add(hp);
+
+ newCommentLayout.setCellHorizontalAlignment(hp, HasHorizontalAlignment.ALIGN_RIGHT);
+ createNewComment.addClickListener(new ClickListener() {
+ public void onClick(Widget sender) {
+ showAddNewComment();
+ }
+ });
+ adminClearAll.addClickListener(new ClickListener() {
+ public void onClick(Widget sender) {
+ if (Window.confirm(constants.EraseAllCommentsWarning())) {
+ RepositoryServiceFactory.getService().clearAllDiscussionsForAsset(asset.uuid, new GenericCallback() {
+ public void onSuccess(Object result) {
+ updateCommentList(new ArrayList<DiscussionRecord>());
+ }
+ });
+ }
+ }
+ });
+ }
+
+ private void showAddNewComment() {
+ newCommentLayout.clear();
+ final TextArea comment = new TextArea();
+ comment.setWidth("100%");
+ newCommentLayout.add(comment);
+
+ Button ok = new Button(constants.OK());
+ Button cancel = new Button(constants.Cancel());
+
+ ok.addClickListener(new ClickListener() {
+ public void onClick(Widget sender) {
+ sendNewComment(comment.getText());
+ }
+ });
+
+ cancel.addClickListener(new ClickListener() {
+ public void onClick(Widget sender) {
+ showNewCommentButton();
+ }
+ });
+
+ HorizontalPanel hp = new HorizontalPanel();
+ hp.add(ok); hp.add(cancel);
+
+ newCommentLayout.add(hp);
+
+ comment.setFocus(true);
+
+ }
+
+ private void sendNewComment(String text) {
+ newCommentLayout.clear();
+ newCommentLayout.add(new Image("images/spinner.gif"));
+ RepositoryServiceFactory.getService().addToDiscussionForAsset(asset.uuid, text, new GenericCallback<List<DiscussionRecord>>() {
+ public void onSuccess(List<DiscussionRecord> result) {
+ showNewCommentButton();
+ updateCommentList(result);
+ }
+ });
+
+ }
+
+
+}
Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/ruleeditor/RuleDocumentWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/ruleeditor/RuleDocumentWidget.java 2009-08-03 06:45:09 UTC (rev 28739)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/ruleeditor/RuleDocumentWidget.java 2009-08-03 06:50:32 UTC (rev 28740)
@@ -18,12 +18,15 @@
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.ui.*;
+import com.google.gwt.user.client.DeferredCommand;
+import com.google.gwt.user.client.Command;
import com.gwtext.client.widgets.Toolbar;
import com.gwtext.client.widgets.ToolbarTextItem;
import com.gwtext.client.widgets.Panel;
import org.drools.guvnor.client.common.DirtyableComposite;
import org.drools.guvnor.client.messages.Constants;
import org.drools.guvnor.client.rpc.MetaData;
+import org.drools.guvnor.client.rpc.RuleAsset;
/**
* This holds the editor and viewer for rule documentation.
@@ -36,7 +39,8 @@
private TextArea text;
private Constants constants = ((Constants) GWT.create(Constants.class));
- public RuleDocumentWidget(MetaData data) {
+ public RuleDocumentWidget(final RuleAsset asset) {
+ MetaData data = asset.metaData;
text = new TextArea();
text.setWidth( "100%" );
text.setVisibleLines( 5 );
@@ -54,23 +58,15 @@
p.setCollapsed(true);
}
p.add(text);
-
-
-
- Label lbl = new Label("This is a comment");
- lbl.setStyleName("x-form-field");
-
-
-
-
-
-
-
-
- VerticalPanel vp = new VerticalPanel();
+ final VerticalPanel vp = new VerticalPanel();
vp.add(p);
+ DeferredCommand.addCommand(new Command() {
+ public void execute() {
+ vp.add(new DiscussionWidget(asset));
+ }
+ });
vp.setWidth("100%");
Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/ruleeditor/RuleViewer.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/ruleeditor/RuleViewer.java 2009-08-03 06:45:09 UTC (rev 28739)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/ruleeditor/RuleViewer.java 2009-08-03 06:50:32 UTC (rev 28740)
@@ -166,7 +166,7 @@
layout.add( hsp );
//the document widget
- doco = new RuleDocumentWidget( asset.metaData );
+ doco = new RuleDocumentWidget( asset );
VerticalPanel vert = new VerticalPanel();
vert.add( editor );
Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/public/Guvnor.css
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/public/Guvnor.css 2009-08-03 06:45:09 UTC (rev 28739)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/public/Guvnor.css 2009-08-03 06:50:32 UTC (rev 28740)
@@ -479,6 +479,11 @@
.rule-ListEvenRow,.DatePicker .weekheader {
background:#FFFFF0;
}
+
+.discussion-header {
+ background: #FFFFF0;
+}
+
.DatePicker,.DatePicker .cell .gwt-HTML,.DatePicker .day .gwt-HTML {
border: 1px solid #aa9;
}
Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/RepositoryServiceServlet.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/RepositoryServiceServlet.java 2009-08-03 06:45:09 UTC (rev 28739)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/RepositoryServiceServlet.java 2009-08-03 06:50:32 UTC (rev 28740)
@@ -9,6 +9,7 @@
import org.apache.log4j.Logger;
import org.drools.guvnor.client.rpc.DetailedSerializableException;
import org.drools.guvnor.client.rpc.RepositoryService;
+import org.drools.guvnor.client.rpc.DiscussionRecord;
import org.drools.guvnor.server.util.LoggingHelper;
import org.drools.guvnor.server.util.TestEnvironmentSessionHelper;
import org.drools.repository.RulesRepository;
@@ -21,7 +22,8 @@
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
/**
- * GWT RPC service endpoint for Repository service. A place to hang some exception handling, but mostly just passing on through.
+ * GWT RPC service endpoint for Repository service. A place to hang some exception handling mainly.
+ * This passes on all requests unmolested to the underlying ServiceImplemention class.
*
* @author Michael Neale
*/
@@ -303,5 +305,17 @@
getService().installSampleRepository();
}
+ public List<DiscussionRecord> loadDiscussionForAsset(String assetId) {
+ return getService().loadDiscussionForAsset(assetId);
+ }
+ public List<DiscussionRecord> addToDiscussionForAsset(String assetId, String comment) {
+ return getService().addToDiscussionForAsset(assetId, comment);
+ }
+
+ public void clearAllDiscussionsForAsset(String assetId) {
+ getService().clearAllDiscussionsForAsset(assetId);
+ }
+
+
}
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-03 06:45:09 UTC (rev 28739)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/ServiceImplementation.java 2009-08-03 06:50:32 UTC (rev 28740)
@@ -32,6 +32,7 @@
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.Arrays;
import java.util.jar.JarEntry;
import java.util.jar.JarInputStream;
@@ -74,6 +75,7 @@
import org.drools.guvnor.client.rpc.TableDataResult;
import org.drools.guvnor.client.rpc.TableDataRow;
import org.drools.guvnor.client.rpc.ValidatedResponse;
+import org.drools.guvnor.client.rpc.DiscussionRecord;
import org.drools.guvnor.server.builder.AuditLogReporter;
import org.drools.guvnor.server.builder.BRMSPackageBuilder;
import org.drools.guvnor.server.builder.ContentAssemblyError;
@@ -95,6 +97,7 @@
import org.drools.guvnor.server.util.MetaDataMapper;
import org.drools.guvnor.server.util.TableDisplayHandler;
import org.drools.guvnor.server.util.VerifierRunner;
+import org.drools.guvnor.server.util.Discussion;
import org.drools.lang.descr.PackageDescr;
import org.drools.lang.descr.RuleDescr;
import org.drools.lang.descr.TypeDeclarationDescr;
@@ -2348,15 +2351,44 @@
@Restrict("#{identity.loggedIn}")
public void installSampleRepository() throws SerializableException {
- if ( Contexts.isApplicationContextActive() ) {
- Identity.instance().checkPermission( new AdminType(),
- RoleTypes.ADMIN );
- }
+ checkIfADMIN();
repository.importRepository( this.getClass().getResourceAsStream( "/mortgage-sample-repository.xml" ) );
this.rebuildPackages();
this.rebuildSnapshots();
}
+ @Restrict("#{identity.loggedIn}")
+ public List<DiscussionRecord> loadDiscussionForAsset(String assetId) {
+ return new Discussion().fromString(getRulesRepository().loadAssetByUUID(assetId).getStringProperty("discussion"));
+ }
+
+ @Restrict("#{identity.loggedIn}")
+ public List<DiscussionRecord> addToDiscussionForAsset(String assetId, String comment) {
+ RulesRepository repo = getRulesRepository();
+ AssetItem asset = repo.loadAssetByUUID(assetId);
+ Discussion dp = new Discussion();
+ List<DiscussionRecord> discussion = dp.fromString(asset.getStringProperty("discussion"));
+ discussion.add(new DiscussionRecord(repo.getSession().getUserID(), comment));
+ asset.updateStringProperty(dp.toString(discussion), "discussion");
+ repo.save();
+ return discussion;
+ }
+
+ @Restrict("#{identity.loggedIn}")
+ public void clearAllDiscussionsForAsset(String assetId) {
+ checkIfADMIN();
+ RulesRepository repo = getRulesRepository();
+ AssetItem asset = repo.loadAssetByUUID(assetId);
+ asset.updateStringProperty("", "discussion");
+ repo.save();
+ }
+
+ private void checkIfADMIN() {
+ if ( Contexts.isApplicationContextActive() ) {
+ Identity.instance().checkPermission( new AdminType(), RoleTypes.ADMIN );
+ }
+ }
+
public String cleanHTML(String s) {
return s.replace( "<",
"<" ).replace( ">",
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-03 06:45:09 UTC (rev 28739)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/util/Discussion.java 2009-08-03 06:50:32 UTC (rev 28740)
@@ -3,6 +3,10 @@
import org.drools.guvnor.client.rpc.DiscussionRecord;
import com.thoughtworks.xstream.XStream;
+import java.util.List;
+import java.util.Collections;
+import java.util.ArrayList;
+
/**
* @author Michael Neale
*/
@@ -10,20 +14,20 @@
private XStream xs = getXStream();
- public String toString(DiscussionRecord[] recs) {
+ public String toString(List<DiscussionRecord> recs) {
return xs.toXML(recs);
}
- public DiscussionRecord[] fromString(String data) {
- if (data == null || data.equals("")) return new DiscussionRecord[0];
- return (DiscussionRecord[]) xs.fromXML(data);
+ public List<DiscussionRecord> fromString(String data) {
+ if (data == null || data.equals("")) return new ArrayList<DiscussionRecord>();
+ return (List<DiscussionRecord>) xs.fromXML(data);
}
public XStream getXStream() {
XStream xs = new XStream();
xs.alias("discussion-record", DiscussionRecord.class);
- xs.alias("discussion", DiscussionRecord[].class);
+ xs.alias("discussion", List.class);
return xs;
}
}
Modified: labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/ServiceImplementationTest.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/ServiceImplementationTest.java 2009-08-03 06:45:09 UTC (rev 28739)
+++ labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/ServiceImplementationTest.java 2009-08-03 06:50:32 UTC (rev 28740)
@@ -66,6 +66,7 @@
import org.drools.guvnor.client.rpc.TableDataResult;
import org.drools.guvnor.client.rpc.TableDataRow;
import org.drools.guvnor.client.rpc.ValidatedResponse;
+import org.drools.guvnor.client.rpc.DiscussionRecord;
import org.drools.guvnor.client.rulelist.AssetItemGrid;
import org.drools.guvnor.server.security.MockIdentity;
import org.drools.guvnor.server.util.BRXMLPersistence;
@@ -1213,8 +1214,69 @@
}
+ public void testDiscussion() throws Exception {
+ ServiceImplementation impl = getService();
+ RulesRepository repo = impl.repository;
+ PackageItem pkg = repo.createPackage("testDiscussionFeature", "");
+ AssetItem rule1 = pkg.addAsset("rule_1", "");
+ rule1.updateFormat(AssetFormats.DRL);
+ rule1.updateContent("rule 'rule1' \n when \np : Person() \n then \np.setAge(42); \n end");
+ rule1.checkin("");
+ repo.save();
+ List<DiscussionRecord> dr = impl.loadDiscussionForAsset(rule1.getUUID());
+ assertEquals(0, dr.size());
+
+ List<DiscussionRecord> dr_ = impl.addToDiscussionForAsset(rule1.getUUID(), "This is a note");
+ assertEquals(1, dr_.size()) ;
+ assertNotNull(dr_.get(0).author);
+ assertEquals("This is a note", dr_.get(0).note);
+ Thread.sleep(100);
+ impl.addToDiscussionForAsset(rule1.getUUID(), "This is a note2");
+
+
+ List<DiscussionRecord> d_ = impl.loadDiscussionForAsset(rule1.getUUID());
+ assertEquals(2, d_.size());
+
+ assertEquals("This is a note", d_.get(0).note);
+ assertEquals("This is a note2", d_.get(1).note);
+ assertTrue(d_.get(1).timestamp > d_.get(0).timestamp);
+
+
+
+ rule1.updateContent("some more content");
+ rule1.checkin("");
+
+
+ impl.addToDiscussionForAsset(rule1.getUUID(), "This is a note2");
+ d_ = impl.loadDiscussionForAsset(rule1.getUUID());
+ assertEquals(3, d_.size());
+
+ assertEquals("This is a note", d_.get(0).note);
+ assertEquals("This is a note2", d_.get(1).note);
+
+ impl.clearAllDiscussionsForAsset(rule1.getUUID());
+ d_ = impl.loadDiscussionForAsset(rule1.getUUID());
+ assertEquals(0, d_.size());
+
+ impl.addToDiscussionForAsset(rule1.getUUID(), "This is a note2");
+ d_ = impl.loadDiscussionForAsset(rule1.getUUID());
+ assertEquals(1, d_.size());
+
+
+
+
+
+
+
+
+
+
+ }
+
+
+
/**
* This will test creating a package, check it compiles, and can exectute
* rules, then take a snapshot, and check that it reports errors.
Modified: labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/util/DiscussionTest.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/util/DiscussionTest.java 2009-08-03 06:45:09 UTC (rev 28739)
+++ labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/util/DiscussionTest.java 2009-08-03 06:50:32 UTC (rev 28740)
@@ -3,6 +3,9 @@
import org.drools.guvnor.client.rpc.DiscussionRecord;
import junit.framework.TestCase;
+import java.util.List;
+import java.util.ArrayList;
+
/**
* @author Michael Neale
*/
@@ -20,20 +23,34 @@
Thread.sleep(100);
Discussion d = new Discussion();
- String xml = d.toString(new DiscussionRecord[] {dr, dr2});
+ List<DiscussionRecord> drs = new ArrayList<DiscussionRecord>();
+ drs.add(dr);
+ drs.add(dr2);
+ String xml = d.toString(drs);
System.err.println(xml);
- DiscussionRecord[] res = d.fromString(xml);
- assertEquals(2, res.length);
+ List<DiscussionRecord> res = d.fromString(xml);
+ assertEquals(2, res.size());
- assertEquals("mic", res[0].author);
+ assertEquals("mic", res.get(0).author);
- assertEquals(dr.timestamp, res[0].timestamp);
+ assertEquals(dr.timestamp, res.get(0).timestamp);
assertNotNull(d.fromString(null));
assertNotNull(d.fromString(""));
+ DiscussionRecord dr3 = new DiscussionRecord();
+ dr3.author = "sam";
+ dr3.note = "yeah !";
+ res.add(dr3);
+
+ assertTrue(d.toString(res).indexOf("sam") > -1);
+ List<DiscussionRecord> d_ = d.fromString(d.toString(res));
+ assertEquals(3, d_.size());
+ assertEquals("sam", d_.get(2).author);
+
+
}
}
More information about the jboss-svn-commits
mailing list