Author: michiel
Date: 2010-03-23 18:40:50 +0100 (Tue, 23 Mar 2010)
New Revision: 41575

Modified:
   
mmbase/branches/MMBase-1_9/applications/searchrelate/src/main/java/org/mmbase/searchrelate/SessionCleaner.java
   
mmbase/branches/MMBase-1_9/applications/searchrelate/src/main/java/org/mmbase/searchrelate/Submitter.java
   
mmbase/branches/MMBase-1_9/applications/searchrelate/src/main/resources/META-INF/tags/mm/searchrelate/relatednodes.tagx
   
mmbase/branches/MMBase-1_9/applications/searchrelate/src/main/webapp/mmbase/searchrelate/List.js.jsp
   
mmbase/branches/MMBase-1_9/applications/searchrelate/src/main/webapp/mmbase/searchrelate/list/lazy-part.jspx
   
mmbase/branches/MMBase-1_9/applications/searchrelate/src/main/webapp/mmbase/searchrelate/list/order.jspx
Log:
maintaining also resolutions in the session, which makes it easier to do some 
things. E.g. temporary numbers can remain working.

Modified: 
mmbase/branches/MMBase-1_9/applications/searchrelate/src/main/java/org/mmbase/searchrelate/SessionCleaner.java
===================================================================
--- 
mmbase/branches/MMBase-1_9/applications/searchrelate/src/main/java/org/mmbase/searchrelate/SessionCleaner.java
      2010-03-23 17:10:03 UTC (rev 41574)
+++ 
mmbase/branches/MMBase-1_9/applications/searchrelate/src/main/java/org/mmbase/searchrelate/SessionCleaner.java
      2010-03-23 17:40:50 UTC (rev 41575)
@@ -22,7 +22,7 @@
  */
 public class SessionCleaner implements Runnable {
     private static final Logger LOG = 
Logging.getLoggerInstance(SessionCleaner.class);
-    private static final String KEY = SessionCleaner.class.getName() + ".KEY";
+    private static final String KEY = SessionCleaner.class.getName();
 
     private final HttpSession session;
     private final Set<String> keys = new HashSet<String>();

Modified: 
mmbase/branches/MMBase-1_9/applications/searchrelate/src/main/java/org/mmbase/searchrelate/Submitter.java
===================================================================
--- 
mmbase/branches/MMBase-1_9/applications/searchrelate/src/main/java/org/mmbase/searchrelate/Submitter.java
   2010-03-23 17:10:03 UTC (rev 41574)
+++ 
mmbase/branches/MMBase-1_9/applications/searchrelate/src/main/java/org/mmbase/searchrelate/Submitter.java
   2010-03-23 17:40:50 UTC (rev 41575)
@@ -12,6 +12,8 @@
 import org.mmbase.core.event.*;
 import org.mmbase.bridge.NodeQuery;
 import org.mmbase.bridge.util.Queries;
+import org.mmbase.storage.search.*;
+import javax.servlet.http.HttpSession;
 
 import org.mmbase.util.logging.Logger;
 import org.mmbase.util.logging.Logging;
@@ -22,7 +24,7 @@
  * In the first place this was for changes in order which were made in a 
transaction.  We do this afterwards because to sort a query result,
  * it is important that the query can be executed. Which is not possible when 
nodes are modified or new in a transaction.
  *
- *It will probably also be used to clean up other stuff from the session.
+ * It will probably also be used to clean up other stuff from the session.
  *
  * @author  Michiel Meeuwissen
  * @version $Id$
@@ -30,17 +32,20 @@
 public class Submitter implements TransactionEventListener {
     private static final Logger LOG = 
Logging.getLoggerInstance(Submitter.class);
 
+    private static final String KEY_RESOLUTIONS = Submitter.class.getName() + 
".resolutions";
     private static final Map<String, Submitter> instances = new 
ConcurrentHashMap<String, Submitter>();
 
     private final String transactionName;
     private final Map<NodeQuery, List<Integer>> orders = new 
HashMap<NodeQuery, List<Integer>>();
     private final List<Runnable> endCallBacks = new ArrayList<Runnable>();
+    private HttpSession session;
 
+
     protected Submitter(String tn) {
         transactionName = tn;
     }
 
-    public static Submitter getInstance(String name) {
+    public static Submitter getInstance(String name, HttpSession session) {
         synchronized(instances) {
             Submitter os = instances.get(name);
             if (os == null) {
@@ -51,6 +56,9 @@
             } else {
                 LOG.debug("Already an instance of " + name + " in " + 
instances);
             }
+            if (session != null) {
+                os.session = session;
+            }
             return os;
         }
     }
@@ -92,6 +100,31 @@
             LOG.debug("" + e);
             if (e instanceof TransactionEvent.Resolve) {
                 TransactionEvent.Resolve resolve = (TransactionEvent.Resolve) 
e;
+                List<NodeQuery> keys = new 
ArrayList<NodeQuery>(orders.keySet());
+
+                if (session != null) {
+                    Map<Integer, Integer> resolutions = (Map<Integer, 
Integer>) session.getAttribute(KEY_RESOLUTIONS);
+                    if (resolutions == null) {
+                        resolutions =  new ConcurrentHashMap<Integer, 
Integer>();
+                        session.setAttribute(KEY_RESOLUTIONS, resolutions);
+                    }
+                    resolutions.putAll(resolve.getResolution());
+                    LOG.debug("put " + KEY_RESOLUTIONS + " -> " + resolutions 
+ " in session");
+                } else {
+                    LOG.debug("No session in " + this);
+                }
+
+                // first fix queries which were using startNodes that are new.
+                for (NodeQuery q : keys) {
+                    NodeQuery toChange = (NodeQuery) Queries.fixQuery(q, 
resolve.getResolution());
+                    if (toChange != null) {
+                        List<Integer> value = orders.remove(q);
+                        orders.put(toChange, value);
+                        LOG.debug("Replaced " + q.toSql() + " with " + 
toChange.toSql());
+                    }
+                }
+
+                // The fix the new nodes in the the saved lists with orders.
                 for (Map.Entry<NodeQuery, List<Integer>> entry : 
orders.entrySet()) {
                     for (Map.Entry<Integer, Integer> resolution : 
resolve.getResolution().entrySet()) {
                         int index = 
entry.getValue().indexOf(resolution.getKey());
@@ -103,6 +136,8 @@
                 }
             }
             if (e instanceof TransactionEvent.Commit) {
+
+                // Commit the actual new order to the database too.
                 for (Map.Entry<NodeQuery, List<Integer>> entry : 
orders.entrySet()) {
                     try {
                         int changes = Queries.reorderResult(entry.getKey(), 
entry.getValue());
@@ -130,6 +165,8 @@
             LOG.debug("Ignoring " + e);
         }
     }
+
+
     @Override
     public String toString() {
         return "Submitter for " + transactionName;

Modified: 
mmbase/branches/MMBase-1_9/applications/searchrelate/src/main/resources/META-INF/tags/mm/searchrelate/relatednodes.tagx
===================================================================
--- 
mmbase/branches/MMBase-1_9/applications/searchrelate/src/main/resources/META-INF/tags/mm/searchrelate/relatednodes.tagx
     2010-03-23 17:10:03 UTC (rev 41574)
+++ 
mmbase/branches/MMBase-1_9/applications/searchrelate/src/main/resources/META-INF/tags/mm/searchrelate/relatednodes.tagx
     2010-03-23 17:40:50 UTC (rev 41575)
@@ -324,7 +324,7 @@
     <mm:write value="${requestScope['org.mmbase.transaction'].id}" jspvar="fn" 
vartype="string" write="false">
       <mm:write value="${rid}" jspvar="rid" vartype="string" write="false">
         <jsp:scriptlet>
-          Submitter submitter = Submitter.getInstance(fn);
+          Submitter submitter = Submitter.getInstance(fn, session);
           SessionCleaner cleaner   = SessionCleaner.getInstance(session);
           submitter.addCallbackForEnd(cleaner);
           cleaner.addKey(rid + "_order");

Modified: 
mmbase/branches/MMBase-1_9/applications/searchrelate/src/main/webapp/mmbase/searchrelate/List.js.jsp
===================================================================
--- 
mmbase/branches/MMBase-1_9/applications/searchrelate/src/main/webapp/mmbase/searchrelate/List.js.jsp
        2010-03-23 17:10:03 UTC (rev 41574)
+++ 
mmbase/branches/MMBase-1_9/applications/searchrelate/src/main/webapp/mmbase/searchrelate/List.js.jsp
        2010-03-23 17:40:50 UTC (rev 41575)
@@ -730,6 +730,7 @@
                 $(self.div).trigger("mmsrStartSave", [self]);
                 result = null;
                 self.saving = true;
+                console.log("ASYNC " + (leavePage == null ? true : 
!leavePage));
                 $.ajax({ type: "POST",
                          async: leavePage == null ? true : !leavePage,
                          url: 
"${mm:link('/mmbase/searchrelate/list/save.jspx')}",

Modified: 
mmbase/branches/MMBase-1_9/applications/searchrelate/src/main/webapp/mmbase/searchrelate/list/lazy-part.jspx
===================================================================
--- 
mmbase/branches/MMBase-1_9/applications/searchrelate/src/main/webapp/mmbase/searchrelate/list/lazy-part.jspx
        2010-03-23 17:10:03 UTC (rev 41574)
+++ 
mmbase/branches/MMBase-1_9/applications/searchrelate/src/main/webapp/mmbase/searchrelate/list/lazy-part.jspx
        2010-03-23 17:40:50 UTC (rev 41575)
@@ -1,6 +1,7 @@
 <jsp:root
     version="2.0"
     xmlns:c="http://java.sun.com/jsp/jstl/core";
+    xmlns:fn="http://java.sun.com/jsp/jstl/functions";
     xmlns:jsp="http://java.sun.com/JSP/Page";
     xmlns:mm-sr="http://www.mmbase.org/tags/mm/searchrelate";
     xmlns:mm="http://www.mmbase.org/mmbase-taglib-2.0";
@@ -8,7 +9,7 @@
   <jsp:output omit-xml-declaration="true" />
   <jsp:directive.include file="parameters.jspf" />
   <mm:import externid="href" required="true" />
-  <mm:import externid="node" required="true" />
+  <mm:import externid="node" required="true"  vartype="integer"/>
   <mm:import externid="requestID" required="true" />
   <c:if test="${! empty parameters.config}">
     <mm:write  request="org.mmbase.searchrelate.config" 
value="${parameters.config}" />
@@ -20,7 +21,9 @@
         <c:choose>
           <c:when test="${! parameters.autosubmit or ! empty 
parameters.formtag}">
             <mm:form name="${parameters.formtag}">
-              <mm:node number="${node}" commitonclose="false">
+              <mm:log>RS: 
${sessionScope['org.mmbase.searchrelate.Submitter.resolutions']}</mm:log>
+              <mm:import 
id="resolvedNode">${sessionScope['org.mmbase.searchrelate.Submitter.resolutions'][node]}</mm:import>
+              <mm:node number="${empty resolvedNode ? node : resolvedNode}" 
commitonclose="false">
                 <mm:include debug="html"
                             page="${href}"
                             referids="rid">

Modified: 
mmbase/branches/MMBase-1_9/applications/searchrelate/src/main/webapp/mmbase/searchrelate/list/order.jspx
===================================================================
--- 
mmbase/branches/MMBase-1_9/applications/searchrelate/src/main/webapp/mmbase/searchrelate/list/order.jspx
    2010-03-23 17:10:03 UTC (rev 41574)
+++ 
mmbase/branches/MMBase-1_9/applications/searchrelate/src/main/webapp/mmbase/searchrelate/list/order.jspx
    2010-03-23 17:40:50 UTC (rev 41575)
@@ -34,7 +34,7 @@
           <mm:form name="${parameters.formtag}">
             <mm:write value="${requestScope['org.mmbase.transaction'].id}" 
jspvar="fn" vartype="string">
               <jsp:scriptlet>
-                Submitter submitter = Submitter.getInstance(fn);
+                Submitter submitter = Submitter.getInstance(fn, session);
                 submitter.setOrder(query, order);
               </jsp:scriptlet>
             </mm:write>

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

Reply via email to