Author: michiel
Date: 2010-03-16 10:06:48 +0100 (Tue, 16 Mar 2010)
New Revision: 41391
Added:
mmbase/trunk/applications/searchrelate/src/main/java/org/mmbase/searchrelate/Submitter.java
Removed:
mmbase/trunk/applications/searchrelate/src/main/java/org/mmbase/searchrelate/OrderSubmitter.java
Log:
Renamed OrderSubmitter to Submitter, wanting to use it a bit more genericly
Deleted:
mmbase/trunk/applications/searchrelate/src/main/java/org/mmbase/searchrelate/OrderSubmitter.java
===================================================================
---
mmbase/trunk/applications/searchrelate/src/main/java/org/mmbase/searchrelate/OrderSubmitter.java
2010-03-16 08:53:16 UTC (rev 41390)
+++
mmbase/trunk/applications/searchrelate/src/main/java/org/mmbase/searchrelate/OrderSubmitter.java
2010-03-16 09:06:48 UTC (rev 41391)
@@ -1,130 +0,0 @@
-/*
- * This software is OSI Certified Open Source Software.
- * OSI Certified is a certification mark of the Open Source Initiative. The
- * license (Mozilla version 1.0) can be read at the MMBase site. See
- * http://www.MMBase.org/license
- */
-package org.mmbase.searchrelate;
-
-import java.io.*;
-import java.util.*;
-import java.util.concurrent.*;
-import org.mmbase.core.event.*;
-import org.mmbase.bridge.NodeQuery;
-import org.mmbase.bridge.util.Queries;
-
-import org.mmbase.util.logging.Logger;
-import org.mmbase.util.logging.Logging;
-
-/**
- * This is used by mm-sr:relatednodes to changes in order which were made in a
transaction.
- * We do this afterwards because new nodes have negative numbers.
- *
- * @author Michiel Meeuwissen
- * @version $Id$
- */
-public class OrderSubmitter implements TransactionEventListener {
- private static final Logger LOG =
Logging.getLoggerInstance(OrderSubmitter.class);
-
- private static final Map<String, OrderSubmitter> instances = new
ConcurrentHashMap<String, OrderSubmitter>();
-
- private final String transactionName;
- private final Map<NodeQuery, List<Integer>> orders = new
HashMap<NodeQuery, List<Integer>>();
- private final List<Runnable> endCallBacks = new ArrayList<Runnable>();
-
- protected OrderSubmitter(String tn) {
- transactionName = tn;
- }
-
- public static OrderSubmitter getInstance(String name) {
- synchronized(instances) {
- OrderSubmitter os = instances.get(name);
- if (os == null) {
- os = new OrderSubmitter(name);
- instances.put(name, os);
- EventManager.getInstance().addEventListener(os);
- LOG.info("Listening " + os);
- } else {
- LOG.info("Already an instance of " + name + " in " +
instances);
- }
- return os;
- }
- }
-
-
- public String getTransactionName() {
- return transactionName;
- }
-
- public void setOrder(NodeQuery nq, List order) {
-
- // making sure the arrays contaisn integer
- // (it is produced in jsp, and will probably contain strings in stead)
- List<Integer> integerOrder = new ArrayList<Integer>();
- for (Object o : order) {
- integerOrder.add(org.mmbase.util.Casting.toInt(o));
- }
-
- orders.put(nq, integerOrder);
- LOG.info("Orders " + orders);
- }
-
- public void addCallbackForEnd(Runnable r) {
- if (! endCallBacks.contains(r)) {
- endCallBacks.add(r);
- }
- }
-
-
-
- public void notify(TransactionEvent e) {
- if (e.getTransactionName().equals(transactionName)) {
- LOG.info("" + e);
- if (e instanceof TransactionEvent.Resolve) {
- TransactionEvent.Resolve resolve = (TransactionEvent.Resolve)
e;
- 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());
- if (index != -1) {
- entry.getValue().set(index, resolution.getValue());
- }
- }
- LOG.info("Resolved " + resolve.getResolution() + " order
now" + entry.getValue());
- }
- }
- if (e instanceof TransactionEvent.Commit) {
- for (Map.Entry<NodeQuery, List<Integer>> entry :
orders.entrySet()) {
- int changes = Queries.reorderResult(entry.getKey(),
entry.getValue());
- LOG.info("Made " + changes + " changes for " + entry);
- }
- }
- if (e instanceof TransactionEvent.End) {
- LOG.info("Will remove " + this);
- EventManager.getInstance().removeEventListener(this);
- instances.remove(getTransactionName());
- for (Runnable r : endCallBacks) {
- r.run();
- }
- }
- } else {
- LOG.info("Ignoring " + e);
- }
- }
- @Override
- public String toString() {
- return "OrderSubmitter for " + transactionName;
- }
-
- @Override
- public int hashCode() {
- return transactionName.hashCode();
- }
- @Override
- public boolean equals(Object o) {
- return
- o != null &&
- o instanceof OrderSubmitter &&
- ((OrderSubmitter) o).getTransactionName().equals(transactionName);
- }
-}
-
Copied:
mmbase/trunk/applications/searchrelate/src/main/java/org/mmbase/searchrelate/Submitter.java
(from rev 41386,
mmbase/trunk/applications/searchrelate/src/main/java/org/mmbase/searchrelate/OrderSubmitter.java)
===================================================================
---
mmbase/trunk/applications/searchrelate/src/main/java/org/mmbase/searchrelate/Submitter.java
(rev 0)
+++
mmbase/trunk/applications/searchrelate/src/main/java/org/mmbase/searchrelate/Submitter.java
2010-03-16 09:06:48 UTC (rev 41391)
@@ -0,0 +1,141 @@
+/*
+ * This software is OSI Certified Open Source Software.
+ * OSI Certified is a certification mark of the Open Source Initiative. The
+ * license (Mozilla version 1.0) can be read at the MMBase site. See
+ * http://www.MMBase.org/license
+ */
+package org.mmbase.searchrelate;
+
+import java.io.*;
+import java.util.*;
+import java.util.concurrent.*;
+import org.mmbase.core.event.*;
+import org.mmbase.bridge.NodeQuery;
+import org.mmbase.bridge.util.Queries;
+
+import org.mmbase.util.logging.Logger;
+import org.mmbase.util.logging.Logging;
+
+/**
+ * This is used by mm-sr:relatednodes to execute some things after a
transaction is committed.
+ *
+ * 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.
+ *
+ * @author Michiel Meeuwissen
+ * @version $Id$
+ */
+public class Submitter implements TransactionEventListener {
+ private static final Logger LOG =
Logging.getLoggerInstance(Submitter.class);
+
+ 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>();
+
+ protected Submitter(String tn) {
+ transactionName = tn;
+ }
+
+ public static Submitter getInstance(String name) {
+ synchronized(instances) {
+ Submitter os = instances.get(name);
+ if (os == null) {
+ os = new Submitter(name);
+ instances.put(name, os);
+ EventManager.getInstance().addEventListener(os);
+ LOG.debug("Listening " + os);
+ } else {
+ LOG.debug("Already an instance of " + name + " in " +
instances);
+ }
+ return os;
+ }
+ }
+
+
+ public String getTransactionName() {
+ return transactionName;
+ }
+
+
+ /**
+ * Sets the new order for a certain nq, which must be committed after the
transaction.
+ * @param order The list with node numbers. The node numbers may still be
negative (from transaction).
+ * The numbers may also be Strings.
+ */
+ public void setOrder(NodeQuery nq, List order) {
+
+ // making sure the arrays contaisn integer
+ // (it is produced in jsp, and will probably contain strings in stead)
+ List<Integer> integerOrder = new ArrayList<Integer>();
+ for (Object o : order) {
+ integerOrder.add(org.mmbase.util.Casting.toInt(o));
+ }
+
+ orders.put(nq, integerOrder);
+ LOG.debug("Orders " + orders);
+ }
+
+ public void addCallbackForEnd(Runnable r) {
+ if (! endCallBacks.contains(r)) {
+ endCallBacks.add(r);
+ }
+ }
+
+
+
+ public void notify(TransactionEvent e) {
+ if (e.getTransactionName().equals(transactionName)) {
+ LOG.debug("" + e);
+ if (e instanceof TransactionEvent.Resolve) {
+ TransactionEvent.Resolve resolve = (TransactionEvent.Resolve)
e;
+ 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());
+ if (index != -1) {
+ entry.getValue().set(index, resolution.getValue());
+ }
+ }
+ LOG.debug("Resolved " + resolve.getResolution() + " order
now" + entry.getValue());
+ }
+ }
+ if (e instanceof TransactionEvent.Commit) {
+ for (Map.Entry<NodeQuery, List<Integer>> entry :
orders.entrySet()) {
+ int changes = Queries.reorderResult(entry.getKey(),
entry.getValue());
+ LOG.service("Made " + changes + " changes for " + entry);
+ }
+ }
+ if (e instanceof TransactionEvent.End) {
+ LOG.service("Will remove " + this);
+ EventManager.getInstance().removeEventListener(this);
+ instances.remove(getTransactionName());
+ for (Runnable r : endCallBacks) {
+ LOG.service("Calling " + r);
+ r.run();
+ }
+ }
+ } else {
+ LOG.debug("Ignoring " + e);
+ }
+ }
+ @Override
+ public String toString() {
+ return "Submitter for " + transactionName;
+ }
+
+ @Override
+ public int hashCode() {
+ return transactionName.hashCode();
+ }
+ @Override
+ public boolean equals(Object o) {
+ return
+ o != null &&
+ o instanceof Submitter &&
+ ((Submitter) o).getTransactionName().equals(transactionName);
+ }
+}
+
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs