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