Author: jkoster
Date: 2009-06-05 15:10:55 +0200 (Fri, 05 Jun 2009)
New Revision: 35773

Removed:
   
CMSContainer/trunk/CMSContainer_Modules/directreaction/migration/migration_1.1_to_1.2.txt
Modified:
   
CMSContainer/trunk/CMSContainer_Modules/directreaction/src/java/com/finalist/cmsc/directreaction/taglib/GetReactionTag.java
   
CMSContainer/trunk/CMSContainer_Modules/directreaction/src/java/com/finalist/cmsc/directreaction/util/ReactionUtil.java
   
CMSContainer/trunk/CMSContainer_Modules/directreaction/src/java/com/finalist/cmsc/resources/forms/DeleteReactionAction.java
   
CMSContainer/trunk/CMSContainer_Modules/directreaction/src/java/com/finalist/cmsc/resources/forms/ReactionAction.java
   
CMSContainer/trunk/CMSContainer_Modules/directreaction/src/webapp/editors/resources/reactioninfo.jsp
   
CMSContainer/trunk/CMSContainer_Modules/directreaction/src/webapp/editors/resources/reactionsearch.jsp
Log:
CMSC-1423 - DirectReactions Module does not correctly retrieve the remote 
cloud, if running in live/staging mode

Deleted: 
CMSContainer/trunk/CMSContainer_Modules/directreaction/migration/migration_1.1_to_1.2.txt
===================================================================
--- 
CMSContainer/trunk/CMSContainer_Modules/directreaction/migration/migration_1.1_to_1.2.txt
   2009-06-05 13:10:39 UTC (rev 35772)
+++ 
CMSContainer/trunk/CMSContainer_Modules/directreaction/migration/migration_1.1_to_1.2.txt
   2009-06-05 13:10:55 UTC (rev 35773)
@@ -1,67 +0,0 @@
-Migration document:
-
-Part: directreaction module
-From versie: 1.1
-To versie: 1.2
-
-
-Execute the following steps below in the given order:
-
-
-Name: Store your reaction yourself
-Goal: Alter your views so the reactions will be stored 
-Type:  manual action
-Steps:
-* Edit your views
-* Now use the <cmsc-dr:add> tag to store the reaction
-*
-*
-Exceptions/errors/other problems and what to do:
-* reactions are not stored anymore by the AbstractContentPortlet, the view has 
to do this itself
-*
-*
-
-
-
-
-Name: Create new column (modules) for links
-Goal: A link can now be part of a reaction
-Type: sql-script
---- Start script ---
-alter table mm_reaction add column link text;
-alter table live_reaction add column link text;
---- End script ---
-Exceptions/errors/other problems and what to do:
-*
-*
-*
-
-
-
-
-Name:  
-Goal:
-Type:  sql-script
---- Start script ---
-(paste script here)
---- End script ---
-Exceptions/errors/other problems and what to do:
-*
-*
-*
-
-
-Name:  
-Goal:
-Type:  manual action
-Steps:
-*
-*
-*
-*
-Exceptions/errors/other problems and what to do:
-*
-*
-*
-
-

Modified: 
CMSContainer/trunk/CMSContainer_Modules/directreaction/src/java/com/finalist/cmsc/directreaction/taglib/GetReactionTag.java
===================================================================
--- 
CMSContainer/trunk/CMSContainer_Modules/directreaction/src/java/com/finalist/cmsc/directreaction/taglib/GetReactionTag.java
 2009-06-05 13:10:39 UTC (rev 35772)
+++ 
CMSContainer/trunk/CMSContainer_Modules/directreaction/src/java/com/finalist/cmsc/directreaction/taglib/GetReactionTag.java
 2009-06-05 13:10:55 UTC (rev 35773)
@@ -1,68 +1,59 @@
-package com.finalist.cmsc.directreaction.taglib;
-
-import javax.servlet.jsp.tagext.SimpleTagSupport;
-
-import net.sf.mmapps.modules.cloudprovider.CloudProvider;
-import net.sf.mmapps.modules.cloudprovider.CloudProviderFactory;
-
-import org.mmbase.bridge.*;
-
-import com.finalist.cmsc.directreaction.util.Reaction;
-import com.finalist.cmsc.services.publish.Publish;
-
-/**
- * The GetReactionTag will retrieve a single reaction node from the live
- * database and then populate and return a Reaction object.
- *
- * @author jderuijter
- */
-public class GetReactionTag extends SimpleTagSupport {
-
-   private int number;
-   private String var;
-
-
-   @Override
-   public void doTag() {
-      Cloud remoteCloud = getLiveCloud();
-      Node node = remoteCloud.getNode(number);
-
-      Reaction reaction = new Reaction(node.getIntValue("number"), 
node.getStringValue("title"), node
-            .getStringValue("body"), node.getStringValue("name"), 
node.getStringValue("email"), node
-            .getDateValue("creationdate"), this.getRelatedContentTitle());
-
-      getJspContext().setAttribute(var, reaction);
-   }
-
-
-   public Cloud getLiveCloud() {
-      CloudProvider cloudProvider = CloudProviderFactory.getCloudProvider();
-      Cloud cloud = cloudProvider.getCloud();
-      Cloud remoteCloud = Publish.getRemoteCloud(cloud);
-      return remoteCloud;
-   }
-
-
-   public String getRelatedContentTitle() {
-      String contentTitle = null;
-      NodeList nodeList = getLiveCloud().getList("" + number, 
"reaction,contentelement", "contentelement.title", null,
-            null, null, null, true);
-
-      for (NodeIterator ni = nodeList.nodeIterator(); ni.hasNext();) {
-         Node node = ni.nextNode();
-         contentTitle = node.getStringValue("contentelement.title");
-      }
-      return contentTitle;
-   }
-
-
-   public void setNumber(int number) {
-      this.number = number;
-   }
-
-
-   public void setVar(String var) {
-      this.var = var;
-   }
-
-}
+package com.finalist.cmsc.directreaction.taglib;
+
+import javax.servlet.jsp.tagext.SimpleTagSupport;
+
+import org.mmbase.bridge.*;
+
+import com.finalist.cmsc.directreaction.util.Reaction;
+import com.finalist.cmsc.directreaction.util.ReactionUtil;
+
+/**
+ * The GetReactionTag will retrieve a single reaction node from the live/remote
+ * database/cloud and then populate and return a Reaction object.
+ *
+ * @author jderuijter
+ */
+public class GetReactionTag extends SimpleTagSupport {
+
+   private int number;
+   private String var;
+
+
+   @Override
+   public void doTag() {
+      Cloud remoteCloud = ReactionUtil.getRemoteCloud();
+      Node node = remoteCloud.getNode(number);
+
+      Reaction reaction = new Reaction(node.getIntValue("number"), 
node.getStringValue("title"), node
+            .getStringValue("body"), node.getStringValue("name"), 
node.getStringValue("email"), node
+            .getDateValue("creationdate"), this.getRelatedContentTitle());
+
+      getJspContext().setAttribute(var, reaction);
+   }
+
+
+   public String getRelatedContentTitle() {
+      String contentTitle = null;
+      NodeList nodeList = ReactionUtil.getRemoteCloud().getList("" + number, 
"reaction,contentelement", "contentelement.title", null,
+            null, null, null, true);
+      
+      //Only using one node, because the getList was using 1 number.
+      if (!nodeList.isEmpty()) {
+         Node node = nodeList.getNode(0);
+         contentTitle = node.getStringValue("contentelement.title");
+      }
+      
+      return contentTitle;
+   }
+
+
+   public void setNumber(int number) {
+      this.number = number;
+   }
+
+
+   public void setVar(String var) {
+      this.var = var;
+   }
+
+}

Modified: 
CMSContainer/trunk/CMSContainer_Modules/directreaction/src/java/com/finalist/cmsc/directreaction/util/ReactionUtil.java
===================================================================
--- 
CMSContainer/trunk/CMSContainer_Modules/directreaction/src/java/com/finalist/cmsc/directreaction/util/ReactionUtil.java
     2009-06-05 13:10:39 UTC (rev 35772)
+++ 
CMSContainer/trunk/CMSContainer_Modules/directreaction/src/java/com/finalist/cmsc/directreaction/util/ReactionUtil.java
     2009-06-05 13:10:55 UTC (rev 35773)
@@ -1,75 +1,101 @@
-package com.finalist.cmsc.directreaction.util;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import net.sf.mmapps.modules.cloudprovider.CloudProviderFactory;
-
-import org.mmbase.bridge.Cloud;
-import org.mmbase.bridge.Node;
-import org.mmbase.bridge.NodeIterator;
-import org.mmbase.bridge.NodeList;
-import org.mmbase.bridge.NodeManager;
-import org.mmbase.bridge.Relation;
-
-public class ReactionUtil {
-
-   private static final String REACTION = "reaction";
-
-
-   /**
-    * Warning, this method is untested
-    * 
-    * @param number
-    * @return
-    */
-   public static List<Reaction> getReactions(int number) {
-      ArrayList<Reaction> result = new ArrayList<Reaction>();
-
-      Cloud cloud = CloudProviderFactory.getCloudProvider().getCloud();
-      NodeList nodeList = cloud.getList("" + number, "contentelement,reaction",
-            
"reaction.number,reaction.title,reaction.body,reaction.name,reaction.email", 
"", "reaction.number", null,
-            null, true);
-      for (NodeIterator ni = nodeList.nodeIterator(); ni.hasNext();) {
-         Node node = ni.nextNode();
-         result.add(new Reaction(node.getIntValue("reaction.number"), 
node.getStringValue("reaction.title"), node
-               .getStringValue("reaction.body"), 
node.getStringValue("reaction.name"), node
-               .getStringValue("reaction.email"), null, null));
-      }
-
-      return result;
-   }
-
-
-   public static void addReaction(int number, String title, String body, 
String name, String email, String link) {
-      Cloud cloud = CloudProviderFactory.getCloudProvider().getCloud();
-      NodeManager nodeManager = cloud.getNodeManager("reaction");
-
-      Node message = nodeManager.createNode();
-      message.setStringValue("title", title);
-      message.setStringValue("body", body);
-      message.setStringValue("name", name);
-      if (email != null) {
-         message.setStringValue("email", email);
-      }
-      if (link != null) {
-         message.setStringValue("link", link);
-      }
-      message.commit();
-
-      Node element = cloud.getNode(number);
-      Relation posrel = element.createRelation(message, 
cloud.getRelationManager("posrel"));
-      posrel.commit();
-   }
-
-
-   public static boolean isReaction(String node) {
-      Node reacion = 
CloudProviderFactory.getCloudProvider().getCloud().getNode(node);
-      return isReaction(reacion);
-   }
-
-
-   public static boolean isReaction(Node node) {
-      return REACTION.equals(node.getNodeManager().getName());
-   }
-}
+package com.finalist.cmsc.directreaction.util;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import net.sf.mmapps.modules.cloudprovider.CloudProviderFactory;
+
+import org.mmbase.bridge.Cloud;
+import org.mmbase.bridge.Node;
+import org.mmbase.bridge.NodeIterator;
+import org.mmbase.bridge.NodeList;
+import org.mmbase.bridge.NodeManager;
+import org.mmbase.bridge.Relation;
+
+import com.finalist.cmsc.services.publish.Publish;
+import com.finalist.cmsc.util.ServerUtil;
+
+public class ReactionUtil {
+
+   private ReactionUtil() {
+      //Utility only
+   }
+   
+   private static final String REACTION = "reaction";
+
+
+   /**
+    * Warning, this method is untested
+    * 
+    * @param number
+    * @return
+    */
+   public static List<Reaction> getReactions(int number) {
+      ArrayList<Reaction> result = new ArrayList<Reaction>();
+
+      Cloud cloud = CloudProviderFactory.getCloudProvider().getCloud();
+      NodeList nodeList = cloud.getList("" + number, "contentelement,reaction",
+            
"reaction.number,reaction.title,reaction.body,reaction.name,reaction.email", 
"", "reaction.number", null,
+            null, true);
+      for (NodeIterator ni = nodeList.nodeIterator(); ni.hasNext();) {
+         Node node = ni.nextNode();
+         result.add(new Reaction(node.getIntValue("reaction.number"), 
node.getStringValue("reaction.title"), node
+               .getStringValue("reaction.body"), 
node.getStringValue("reaction.name"), node
+               .getStringValue("reaction.email"), null, null));
+      }
+
+      return result;
+   }
+
+
+   public static void addReaction(int number, String title, String body, 
String name, String email, String link) {
+      Cloud cloud = CloudProviderFactory.getCloudProvider().getCloud();
+      NodeManager nodeManager = cloud.getNodeManager("reaction");
+
+      Node message = nodeManager.createNode();
+      message.setStringValue("title", title);
+      message.setStringValue("body", body);
+      message.setStringValue("name", name);
+      if (email != null) {
+         message.setStringValue("email", email);
+      }
+      if (link != null) {
+         message.setStringValue("link", link);
+      }
+      message.commit();
+
+      Node element = cloud.getNode(number);
+      Relation posrel = element.createRelation(message, 
cloud.getRelationManager("posrel"));
+      posrel.commit();
+   }
+   
+   public static Cloud getRemoteCloud() {
+      return getRemoteCloud(null);
+   }
+   
+   public static Cloud getRemoteCloud(Cloud cloud) {
+      /* It should use the staging cloud if it runs in single-war mode.
+       * At live, the local cloud can be used.
+       */
+      if (cloud == null) {
+         cloud = CloudProviderFactory.getCloudProvider().getCloud();
+      }
+      
+      if (ServerUtil.isSingle() || ServerUtil.isLive()) {
+         return cloud;         
+      }
+      
+      return Publish.getRemoteCloud(cloud);
+   }
+
+
+   public static boolean isReaction(String node) {
+      Node reacion = 
CloudProviderFactory.getCloudProvider().getCloud().getNode(node);
+      return isReaction(reacion);
+   }
+
+
+   public static boolean isReaction(Node node) {
+      return REACTION.equals(node.getNodeManager().getName());
+   }
+}

Modified: 
CMSContainer/trunk/CMSContainer_Modules/directreaction/src/java/com/finalist/cmsc/resources/forms/DeleteReactionAction.java
===================================================================
--- 
CMSContainer/trunk/CMSContainer_Modules/directreaction/src/java/com/finalist/cmsc/resources/forms/DeleteReactionAction.java
 2009-06-05 13:10:39 UTC (rev 35772)
+++ 
CMSContainer/trunk/CMSContainer_Modules/directreaction/src/java/com/finalist/cmsc/resources/forms/DeleteReactionAction.java
 2009-06-05 13:10:55 UTC (rev 35773)
@@ -1,46 +1,46 @@
-package com.finalist.cmsc.resources.forms;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts.action.*;
-import org.mmbase.bridge.Cloud;
-import org.mmbase.util.logging.Logger;
-import org.mmbase.util.logging.Logging;
-
-import com.finalist.cmsc.services.publish.Publish;
-import com.finalist.cmsc.struts.MMBaseAction;
-
-public class DeleteReactionAction extends DeleteSecondaryContentAction {
-
-   private static final Logger log = 
Logging.getLoggerInstance(DeleteReactionAction.class.getName());
-
-
-   @Override
-   public ActionForward execute(ActionMapping mapping, ActionForm form, 
HttpServletRequest request,
-         HttpServletResponse response, Cloud cloud) throws Exception {
-
-      DeleteSecondaryContentForm deleteForm = (DeleteSecondaryContentForm) 
form;
-
-      String number = deleteForm.getObjectnumber();
-      if 
(MMBaseAction.ADMINISTRATOR.equals(cloud.getUser().getRank().toString())) {
-         log.debug("deleting secondary content: " + number);
-         Cloud remoteCloud = Publish.getRemoteCloud(cloud);
-         remoteCloud.getNode(number).delete(true);
-      }
-      else {
-         log.warn("did not delete secondary content because user was not 
administrator: " + number + " ("
-               + cloud.getUser() + ":" + cloud.getUser().getRank() + ")");
-      }
-
-      String returnurl = deleteForm.getReturnurl();
-      return new ActionForward(returnurl);
-
-   }
-
-   @Override
-   public String getRequiredRankStr() {
-      return ADMINISTRATOR;
-   }
-
-}
+package com.finalist.cmsc.resources.forms;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.struts.action.*;
+import org.mmbase.bridge.Cloud;
+import org.mmbase.util.logging.Logger;
+import org.mmbase.util.logging.Logging;
+
+import com.finalist.cmsc.directreaction.util.ReactionUtil;
+import com.finalist.cmsc.struts.MMBaseAction;
+
+public class DeleteReactionAction extends DeleteSecondaryContentAction {
+
+   private static final Logger log = 
Logging.getLoggerInstance(DeleteReactionAction.class.getName());
+
+
+   @Override
+   public ActionForward execute(ActionMapping mapping, ActionForm form, 
HttpServletRequest request,
+         HttpServletResponse response, Cloud cloud) throws Exception {
+
+      DeleteSecondaryContentForm deleteForm = (DeleteSecondaryContentForm) 
form;
+
+      String number = deleteForm.getObjectnumber();
+      if 
(MMBaseAction.ADMINISTRATOR.equals(cloud.getUser().getRank().toString())) {
+         log.debug("deleting secondary content: " + number);
+         Cloud remoteCloud = ReactionUtil.getRemoteCloud(cloud);
+         remoteCloud.getNode(number).delete(true);
+      }
+      else {
+         log.warn("did not delete secondary content because user was not 
administrator: " + number + " ("
+               + cloud.getUser() + ":" + cloud.getUser().getRank() + ")");
+      }
+
+      String returnurl = deleteForm.getReturnurl();
+      return new ActionForward(returnurl);
+
+   }
+
+   @Override
+   public String getRequiredRankStr() {
+      return ADMINISTRATOR;
+   }
+
+}

Modified: 
CMSContainer/trunk/CMSContainer_Modules/directreaction/src/java/com/finalist/cmsc/resources/forms/ReactionAction.java
===================================================================
--- 
CMSContainer/trunk/CMSContainer_Modules/directreaction/src/java/com/finalist/cmsc/resources/forms/ReactionAction.java
       2009-06-05 13:10:39 UTC (rev 35772)
+++ 
CMSContainer/trunk/CMSContainer_Modules/directreaction/src/java/com/finalist/cmsc/resources/forms/ReactionAction.java
       2009-06-05 13:10:55 UTC (rev 35773)
@@ -1,110 +1,103 @@
-package com.finalist.cmsc.resources.forms;
-
-import java.util.*;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import net.sf.mmapps.modules.cloudprovider.CloudProviderFactory;
-
-import org.apache.struts.action.*;
-import org.mmbase.bridge.*;
-import org.mmbase.storage.search.RelationStep;
-import org.mmbase.storage.search.Step;
-import org.mmbase.util.logging.Logger;
-import org.mmbase.util.logging.Logging;
-
-import com.finalist.cmsc.services.publish.Publish;
-import com.finalist.cmsc.util.ServerUtil;
-
-public class ReactionAction extends SearchAction {
-
-   private static final Logger log = 
Logging.getLoggerInstance(ReactionAction.class.getName());
-
-   public static final String NAME_FIELD = "name";
-   public static final String EMAIL_FIELD = "email";
-   public static final String TITLE_FIELD = "title";
-   public static final String BODY_FIELD = "body";
-
-
-   @Override
-   public ActionForward execute(ActionMapping mapping, ActionForm form, 
HttpServletRequest request,
-         HttpServletResponse response, Cloud cloud) throws Exception {
-      // TODO retrieve articles/newsitems in one query along with the reactions
-      // (I don't know how to do it)
-      // search for the reactions
-      super.execute(mapping, form, request, response, cloud);
-      Map<Integer, String> titles = new HashMap<Integer, String>();
-      // get the reactions from the request
-      NodeList results = (NodeList) request.getAttribute("results");
-      // for every reaction search for the contentelement it belongs to
-      for (Iterator<Node> iter = results.iterator(); iter.hasNext();) {
-         Node node = iter.next();
-         String title = getArticleTitles(cloud, node);
-         // store the title in a map
-         titles.put(node.getNumber(), title);
-      }
-      log.debug("Found titles: " + titles);
-      // put the titles as a map into the request
-      request.setAttribute("titles", titles);
-
-      return mapping.getInputForward();
-   }
-
-
-   @Override
-   public Cloud getCloud() {
-      /* The DirectReactions should use the staging cloud if we are
-       *  running in single-war-file mode.
-       */
-      return getCloudForAnonymousUpdate(ServerUtil.isLive());
-   }
-
-   public Cloud getCloudForAnonymousUpdate(boolean isRemote) {
-      Cloud cloud = CloudProviderFactory.getCloudProvider().getCloud();
-      if (isRemote) {
-         return Publish.getRemoteCloud(cloud);
-      }
-      return cloud;
-   }
-
-   @Override
-   public String getRequiredRankStr() {
-      return null;
-   }
-
-
-   @Override
-   protected void addConstraints(SearchForm searchForm, NodeManager 
nodeManager,
-         QueryStringComposer queryStringComposer, NodeQuery query) {
-      ReactionForm form = (ReactionForm) searchForm;
-      addField(nodeManager, queryStringComposer, query, NAME_FIELD, 
form.getName());
-      addField(nodeManager, queryStringComposer, query, EMAIL_FIELD, 
form.getEmail());
-      addField(nodeManager, queryStringComposer, query, TITLE_FIELD, 
form.getTitle());
-      addField(nodeManager, queryStringComposer, query, BODY_FIELD, 
form.getBody());
-   }
-
-
-   private String getArticleTitles(Cloud cloud, Node parentNode) {
-      // this query is hacked from the relatednodestag, which doesn't work with
-      // a remotecloud
-      NodeQuery query = cloud.createNodeQuery();
-      Step step1 = query.addStep(parentNode.getNodeManager());
-      query.setAlias(step1, parentNode.getNodeManager().getName() + "0");
-      query.addNode(step1, parentNode);
-
-      NodeManager otherManager = cloud.getNodeManager("contentelement");
-
-      RelationStep step2 = query.addRelationStep(otherManager);
-      Step step3 = step2.getNext();
-      query.setNodeStep(step3);
-      query.setNodeStep((Step) query.getSteps().get(2));
-      NodeList nodeList = query.getNodeManager().getList(query);
-      if (nodeList.size() > 0) {
-         Node node = (Node) nodeList.get(0);
-         return node.getStringValue("title");
-      }
-      return "";
-   }
-
-}
+package com.finalist.cmsc.resources.forms;
+
+import java.util.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import net.sf.mmapps.modules.cloudprovider.CloudProviderFactory;
+
+import org.apache.struts.action.*;
+import org.mmbase.bridge.*;
+import org.mmbase.storage.search.RelationStep;
+import org.mmbase.storage.search.Step;
+import org.mmbase.util.logging.Logger;
+import org.mmbase.util.logging.Logging;
+
+import com.finalist.cmsc.directreaction.util.ReactionUtil;
+import com.finalist.cmsc.services.publish.Publish;
+import com.finalist.cmsc.util.ServerUtil;
+
+public class ReactionAction extends SearchAction {
+
+   private static final Logger log = 
Logging.getLoggerInstance(ReactionAction.class.getName());
+
+   public static final String NAME_FIELD = "name";
+   public static final String EMAIL_FIELD = "email";
+   public static final String TITLE_FIELD = "title";
+   public static final String BODY_FIELD = "body";
+
+
+   @Override
+   public ActionForward execute(ActionMapping mapping, ActionForm form, 
HttpServletRequest request,
+         HttpServletResponse response, Cloud cloud) throws Exception {
+      // TODO retrieve articles/newsitems in one query along with the reactions
+      // (I don't know how to do it)
+      // search for the reactions
+      super.execute(mapping, form, request, response, cloud);
+      Map<Integer, String> titles = new HashMap<Integer, String>();
+      // get the reactions from the request
+      List<Node> results = (NodeList) request.getAttribute("results");
+      // for every reaction search for the contentelement it belongs to
+      for (Node node : results) {
+         String title = getArticleTitles(cloud, node);
+         // store the title in a map
+         titles.put(node.getNumber(), title);
+      }
+      log.debug("Found titles: " + titles);
+      // put the titles as a map into the request
+      request.setAttribute("titles", titles);
+
+      return mapping.getInputForward();
+   }
+
+
+   @Override
+   public Cloud getCloud() {
+      /* It should use the staging cloud if it runs in single-war mode.
+       * At live, the local cloud can be used.
+       */
+
+      return ReactionUtil.getRemoteCloud();
+   }
+
+   @Override
+   public String getRequiredRankStr() {
+      return null;
+   }
+
+
+   @Override
+   protected void addConstraints(SearchForm searchForm, NodeManager 
nodeManager,
+         QueryStringComposer queryStringComposer, NodeQuery query) {
+      ReactionForm form = (ReactionForm) searchForm;
+      addField(nodeManager, queryStringComposer, query, NAME_FIELD, 
form.getName());
+      addField(nodeManager, queryStringComposer, query, EMAIL_FIELD, 
form.getEmail());
+      addField(nodeManager, queryStringComposer, query, TITLE_FIELD, 
form.getTitle());
+      addField(nodeManager, queryStringComposer, query, BODY_FIELD, 
form.getBody());
+   }
+
+
+   private String getArticleTitles(Cloud cloud, Node parentNode) {
+      // this query is hacked from the relatednodestag, which doesn't work with
+      // a remotecloud
+      NodeQuery query = cloud.createNodeQuery();
+      Step step1 = query.addStep(parentNode.getNodeManager());
+      query.setAlias(step1, parentNode.getNodeManager().getName() + "0");
+      query.addNode(step1, parentNode);
+
+      NodeManager otherManager = cloud.getNodeManager("contentelement");
+
+      RelationStep step2 = query.addRelationStep(otherManager);
+      Step step3 = step2.getNext();
+      query.setNodeStep(step3);
+      query.setNodeStep((Step) query.getSteps().get(2));
+      NodeList nodeList = query.getNodeManager().getList(query);
+      if (nodeList.size() > 0) {
+         Node node = (Node) nodeList.get(0);
+         return node.getStringValue("title");
+      }
+      return "";
+   }
+
+}

Modified: 
CMSContainer/trunk/CMSContainer_Modules/directreaction/src/webapp/editors/resources/reactioninfo.jsp
===================================================================
--- 
CMSContainer/trunk/CMSContainer_Modules/directreaction/src/webapp/editors/resources/reactioninfo.jsp
        2009-06-05 13:10:39 UTC (rev 35772)
+++ 
CMSContainer/trunk/CMSContainer_Modules/directreaction/src/webapp/editors/resources/reactioninfo.jsp
        2009-06-05 13:10:55 UTC (rev 35773)
@@ -1,74 +1,74 @@
-<%...@page language="java" contentType="text/html;charset=UTF-8"%>
-<%...@taglib uri="http://finalist.com/cmsc-directreaction"; prefix="cmsc-dr"%>
-
-<%...@include file="globals.jsp" %>
-<fmt:setBundle basename="cmsc-reactions" scope="request" />
-<mm:content type="text/html" encoding="UTF-8" expires="0">
-<html:html xhtml="true">
-<cmscedit:head title="reactioninfo.title" />
-
-<cmsc-dr:getreaction number="${param.objectnumber}" var="reactionObject"/>
-<body>
-   <div class="side_block_green" style="width: 100%">
-      <div class="header">
-         <div class="title">
-            <fmt:message key="reactioninfo.title" />: ${reactionObject.title}
-         </div>
-      <div class="header_end"></div>
-   </div>
-   <div class="body" >
-   
-      <table class="listcontent">
-         <tr>
-            <td><fmt:message key="reactioninfo.number" />:</td>
-            <td>${reactionObject.number}</td>
-         </tr>
-         <tr>
-            <td><fmt:message key="secondaryinfo.creationdate" />:</td>
-            <td><fmt:formatDate value="${reactionObject.creationdate}" 
pattern="dd MMMMM yyyy hh:mm:ss"/></td>
-         </tr>
-         <tr>
-            <td><fmt:message key="secondaryinfo.creator" />:</td>
-            <td>${reactionObject.name}</td>
-         </tr>
-         <tr>
-            <td><fmt:message key="reactioninfo.titlefield" />:</td>
-            <td>${reactionObject.title}</td>
-         </tr>
-         <tr>
-            <td><fmt:message key="reactioninfo.bodyfield" />:</td>
-            <td>${reactionObject.body}</td>
-         </tr>            
-         <tr>
-            <td><fmt:message key="reactioninfo.emailfield" />:</td>
-            <td>${reactionObject.email}</td>
-         </tr>         
-      </table>
-      <table class="listcontent">
-         <tr>
-            <td>
-               <hr/>
-               <fmt:message key="reactioninfo.related" />
-               <table>
-                  <tr>
-                     <td>
-                        <b>${reactionObject.contentTitle}</b>
-                     </td>
-                  </tr>
-               </table>
-            </td>
-         </tr>
-      </table>
-      <br />
-      <ul class="shortcuts">
-         <li class="close">
-            <a href="#" onClick="window.close()"><fmt:message 
key="reactioninfo.close" /></a>
-         </li>
-      </ul>
-   </div>
-   <div class="side_block_end"></div>
-   </div>            
-</body>
-
-</html:html>
+<%...@page language="java" contentType="text/html;charset=UTF-8"
+%><%...@taglib uri="http://finalist.com/cmsc-directreaction"; prefix="cmsc-dr"
+%><%...@include file="globals.jsp" 
+%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd";>
+<mm:content type="text/html" encoding="UTF-8" expires="0">
+<fmt:setBundle basename="cmsc-reactions" scope="request" />
+<html:html xhtml="true">
+<cmscedit:head title="reactioninfo.title" />
+
+<cmsc-dr:getreaction number="${param.objectnumber}" var="reactionObject"/>
+<body>
+   <div class="side_block_green" style="width: 100%">
+      <div class="header">
+         <div class="title">
+            <fmt:message key="reactioninfo.title" />: ${reactionObject.title}
+         </div>
+      <div class="header_end"></div>
+   </div>
+   <div class="body" >
+   
+      <table class="listcontent">
+         <tr>
+            <td><fmt:message key="reactioninfo.number" />:</td>
+            <td>${reactionObject.number}</td>
+         </tr>
+         <tr>
+            <td><fmt:message key="secondaryinfo.creationdate" />:</td>
+            <td><fmt:formatDate value="${reactionObject.creationdate}" 
pattern="dd MMMMM yyyy hh:mm:ss"/></td>
+         </tr>
+         <tr>
+            <td><fmt:message key="secondaryinfo.creator" />:</td>
+            <td>${reactionObject.name}</td>
+         </tr>
+         <tr>
+            <td><fmt:message key="reactioninfo.titlefield" />:</td>
+            <td>${reactionObject.title}</td>
+         </tr>
+         <tr>
+            <td><fmt:message key="reactioninfo.bodyfield" />:</td>
+            <td>${reactionObject.body}</td>
+         </tr>            
+         <tr>
+            <td><fmt:message key="reactioninfo.emailfield" />:</td>
+            <td><a 
href="mailto:${reactionObject.email}";>${reactionObject.email}</a></td>
+         </tr>         
+      </table>
+      <table class="listcontent">
+         <tr>
+            <td>
+               <hr/>
+               <fmt:message key="reactioninfo.related" />
+               <table>
+                  <tr>
+                     <td>
+                        <b>${reactionObject.contentTitle}</b>
+                     </td>
+                  </tr>
+               </table>
+            </td>
+         </tr>
+      </table>
+      <br />
+      <ul class="shortcuts">
+         <li class="close">
+            <a href="#" onClick="window.close()"><fmt:message 
key="reactioninfo.close" /></a>
+         </li>
+      </ul>
+   </div>
+   <div class="side_block_end"></div>
+   </div>            
+</body>
+
+</html:html>
 </mm:content>              
\ No newline at end of file

Modified: 
CMSContainer/trunk/CMSContainer_Modules/directreaction/src/webapp/editors/resources/reactionsearch.jsp
===================================================================
--- 
CMSContainer/trunk/CMSContainer_Modules/directreaction/src/webapp/editors/resources/reactionsearch.jsp
      2009-06-05 13:10:39 UTC (rev 35772)
+++ 
CMSContainer/trunk/CMSContainer_Modules/directreaction/src/webapp/editors/resources/reactionsearch.jsp
      2009-06-05 13:10:55 UTC (rev 35773)
@@ -1,116 +1,118 @@
-<%...@page language="java" contentType="text/html;charset=utf-8"
-%><%...@include file="globals.jsp"
-%><%@ taglib prefix="edit" tagdir="/WEB-INF/tags/edit" 
-%><fmt:setBundle basename="cmsc-reactions" scope="request" /><%...@page 
import="java.util.Iterator,
-                 com.finalist.cmsc.mmbase.PropertiesUtil"
-%><mm:content type="text/html" encoding="UTF-8" expires="0">
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd";>
-<html:html xhtml="true">
-<cmscedit:head title="reactions.title">
-      <script src="../repository/search.js" type="text/javascript"></script>
-      <script src="../repository/content.js" type="text/javascript"></script>
-               <script type="text/javascript">
-                       function selectElement(element, title, src) {
-                               if(window.top.opener != undefined) {
-                                       
window.top.opener.selectElement(element, title, src);
-                                       window.top.close();
-                               }
-                       }
-                       
-                       function showInfo(objectnumber) {
-                               openPopupWindow('reactioninfo', '500', '500', 
'reactioninfo.jsp?objectnumber='+objectnumber);
-            }
-               </script>
-</cmscedit:head>
-   <body>
-      <mm:cloud jspvar="cloud" loginpage="../../editors/login.jsp">
-
-<mm:import externid="action">search</mm:import><%-- either: search of select 
--%>
-
-      <div class="tabs">
-         <div class="tab_active">
-            <div class="body">
-               <div>
-                  <a href="#"><fmt:message key="reactions.title" /></a>
-               </div>
-            </div>
-         </div>
-      </div>
-
-     <div class="editor" style="height:500px">
-      <div class="body">
-
-         <mm:import id="searchinit"><c:url 
value='/editors/resources/ReactionInitAction.do'/></mm:import>
+<%...@page language="java" contentType="text/html;charset=utf-8"
+%><%...@include file="globals.jsp"
+%><%@ taglib prefix="edit" tagdir="/WEB-INF/tags/edit" 
+%><fmt:setBundle basename="cmsc-reactions" scope="request" 
+/><%...@page import="java.util.Iterator, 
com.finalist.cmsc.mmbase.PropertiesUtil"
+%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd";>
+<mm:content type="text/html" encoding="UTF-8" expires="0">
+<html:html xhtml="true">
+<cmscedit:head title="reactions.title">
+   <script src="../repository/search.js" type="text/javascript"></script>
+   <script src="../repository/content.js" type="text/javascript"></script>
+       <script type="text/javascript">
+               function selectElement(element, title, src) {
+                       if(window.top.opener != undefined) {
+                               window.top.opener.selectElement(element, title, 
src);
+                               window.top.close();
+                       }
+               }
+               
+               function showInfo(objectnumber) {
+                       openPopupWindow('reactioninfo', '500', '500', 
'reactioninfo.jsp?objectnumber='+objectnumber);
+      }
+       </script>
+</cmscedit:head>
+   <body>
+      <mm:cloud jspvar="cloud" loginpage="../../editors/login.jsp">
+
+<mm:import externid="action">search</mm:import><%-- either: search of select 
--%>
+
+      <div class="tabs">
+         <div class="tab_active">
+            <div class="body">
+               <div>
+                  <a href="#"><fmt:message key="reactions.title" /></a>
+               </div>
+            </div>
+         </div>
+      </div>
+
+     <div class="editor" style="height:500px">
+      <div class="body">
+
+         <mm:import id="searchinit"><c:url 
value='/editors/resources/ReactionInitAction.do'/></mm:import>
          <c:set 
var="pagerDOToffset"><%=request.getParameter("pager.offset")%></c:set>
-         <html:form action="/editors/resources/ReactionAction" method="post">
-                       <html:hidden property="action" value="${action}"/>
-            <html:hidden property="offset"/>
+         <html:form action="/editors/resources/ReactionAction" method="post">
+                       <html:hidden property="action" value="${action}"/>
+            <html:hidden property="offset"/>
             <html:hidden property="pager.offset" value="${pagerDOToffset}"/>
-            <html:hidden property="order"/>
-            <html:hidden property="direction"/>
-
-<mm:import id="contenttypes" jspvar="contenttypes">reaction</mm:import>
-<%...@include file="reactionform.jsp" %>
-
-         </html:form>
-       </div>
-
-<div class="ruler_green"><div><fmt:message key="reactions.results" 
/></div></div>
-
-<div class="body">
-<mm:import externid="results" jspvar="nodeList" vartype="List" />
-<mm:import externid="resultCount" jspvar="resultCount" 
vartype="Integer">0</mm:import>
-<mm:import externid="offset" jspvar="offset" vartype="Integer">0</mm:import>
-<c:if test="${resultCount > 0}">
+            <html:hidden property="order"/>
+            <html:hidden property="direction"/>
+
+<mm:import id="contenttypes" jspvar="contenttypes">reaction</mm:import>
+<%...@include file="reactionform.jsp" %>
+
+         </html:form>
+       </div>
+
+<div class="ruler_green"><div><fmt:message key="reactions.results" 
/></div></div>
+
+<div class="body">
+<mm:import externid="results" jspvar="nodeList" vartype="List" />
+<mm:import externid="resultCount" jspvar="resultCount" 
vartype="Integer">0</mm:import>
+<mm:import externid="offset" jspvar="offset" vartype="Integer">0</mm:import>
+<c:if test="${resultCount > 0}">
 <edit:pages search="true" totalElements="${resultCount}" offset="${offset}"/>
-
-         <table>
-            <tr class="listheader">
-               <th> </th>
-               <th><a href="#" class="headerlink" 
onClick="orderBy('name');"><fmt:message key="reactionsearch.namecolumn" 
/></a></th>
-               <th><a href="#" class="headerlink" 
onClick="orderBy('title');"><fmt:message key="reactionsearch.titlecolumn" 
/></a></th>
-               <th><fmt:message key="reactionsearch.articlecolumn" /></th>
-            </tr>
-            <tbody class="hover">
-                <c:set var="useSwapStyle">true</c:set>
-                       <mm:listnodes referid="results">
-                         <mm:import 
id="url">javascript:selectElement('<mm:field name="number"/>', '<mm:field 
name="title" escape="js-single-quotes"/>');</mm:import>
-                         <tr <c:if test="${useSwapStyle}">class="swap"</c:if> 
href="<mm:write referid="url"/>">
-                            <td style="white-space:nowrap;">
-                                                     
-                         <a href="#" onClick="showInfo(<mm:field name="number" 
/>);" >
-                           <img src="../gfx/icons/info.png" alt="<fmt:message 
key="reactionsearch.icon.info" />" title="<fmt:message 
key="reactionsearch.icon.info" />" />
-                         </a>                        
-                        
-                        <c:if test="${action != 'select'}">
-                                                     <mm:hasrank 
minvalue="siteadmin">
-                            <a href="<mm:url page="DeleteReactionAction.do">
-                                <mm:param name="objectnumber"><mm:field 
name="number" /></mm:param>
-                                <mm:param name="returnurl" 
value='<%="/editors/resources/ReactionAction.do" + 
request.getAttribute("geturl")%>' />
-                             </mm:url>">
-                            <img src="../gfx/icons/delete.png" 
title="<fmt:message key="reactionsearch.icon.delete" />"/></a>
-                       </mm:hasrank>
-                       </c:if>
-
-                       </td>
-
-                         <td onMouseDown="objClick(this);"><mm:field 
name="name"/></td>
-                        <td onMouseDown="objClick(this);"><mm:field 
name="title"/></td>
-                        <mm:field name="number" write="false" jspvar="myId"/>
-                         <td onMouseDown="objClick(this);">${titles[myId]}</td>
-                         </tr>
-                      <c:set var="useSwapStyle">${!useSwapStyle}</c:set>
-                   </mm:listnodes>
-                </tbody>
-         </table>
-</c:if>
-<c:if test="${resultCount == 0 && param.title != null}">
-       <fmt:message key="reactionsearch.noresult" />
-</c:if>
-<c:if test="${resultCount > 0}">
+
+         <table>
+            <tr class="listheader">
+               <th> </th>
+               <th><a href="#" class="headerlink" 
onClick="orderBy('name');"><fmt:message key="reactionsearch.namecolumn" 
/></a></th>
+               <th><a href="#" class="headerlink" 
onClick="orderBy('title');"><fmt:message key="reactionsearch.titlecolumn" 
/></a></th>
+               <th><fmt:message key="reactionsearch.articlecolumn" /></th>
+            </tr>
+            <tbody class="hover">
+                <c:set var="useSwapStyle">true</c:set>
+                       <mm:listnodes referid="results">
+                         <mm:import 
id="url">javascript:selectElement('<mm:field name="number"/>', '<mm:field 
name="title" escape="js-single-quotes"/>');</mm:import>
+                         <tr <c:if test="${useSwapStyle}">class="swap"</c:if> 
href="<mm:write referid="url"/>">
+                            <td style="white-space:nowrap;">
+                                                     
+                         <a href="#" onClick="showInfo(<mm:field name="number" 
/>);" >
+                           <img src="../gfx/icons/info.png" alt="<fmt:message 
key="reactionsearch.icon.info" />" title="<fmt:message 
key="reactionsearch.icon.info" />" />
+                         </a>                        
+                        
+                        <c:if test="${action != 'select'}">
+                                                     <mm:hasrank 
minvalue="siteadmin">
+                            <a href="<mm:url page="DeleteReactionAction.do">
+                                <mm:param name="objectnumber"><mm:field 
name="number" /></mm:param>
+                                <mm:param name="returnurl" 
value='<%="/editors/resources/ReactionAction.do" + 
request.getAttribute("geturl")%>' />
+                             </mm:url>">
+                            <img src="../gfx/icons/delete.png" 
title="<fmt:message key="reactionsearch.icon.delete" />"/></a>
+                       </mm:hasrank>
+                       </c:if>
+
+                       </td>
+
+                         <td onMouseDown="objClick(this);"><mm:field 
name="name"/></td>
+                        <td onMouseDown="objClick(this);"><mm:field 
name="title"/></td>
+                        <mm:field name="number" write="false" jspvar="myId"/>
+                         <td onMouseDown="objClick(this);">${titles[myId]}</td>
+                         </tr>
+                      <c:set var="useSwapStyle">${!useSwapStyle}</c:set>
+                   </mm:listnodes>
+                </tbody>
+         </table>
+</c:if>
+<c:if test="${resultCount == 0 && param.title != null}">
+       <fmt:message key="reactionsearch.noresult" />
+</c:if>
+<c:if test="${resultCount > 0}">
        <edit:pages search="true" totalElements="${resultCount}" 
offset="${offset}"/>
-</c:if>        
-</mm:cloud>
-   </body>
-</html:html>
+</c:if>        
+</mm:cloud>
+</div>
+</div>
+   </body>
+</html:html>
 </mm:content>
\ No newline at end of file

_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to