Update of
/var/cvs/contributions/CMSContainer_Modules/luceus/src/java/com/finalist/cmsc/module/luceusmodule
In directory
james.mmbase.org:/tmp/cvs-serv19271/luceus/src/java/com/finalist/cmsc/module/luceusmodule
Modified Files:
Tag: b1_6
QueuedUpdate.java LuceusModule.java IndexUpdateTask.java
CustomContentHandler.java
Added Files:
Tag: b1_6
CustomObjectHandler.java
Log Message:
CMSC-1346 Indexing custom objects
See also:
http://cvs.mmbase.org/viewcvs/contributions/CMSContainer_Modules/luceus/src/java/com/finalist/cmsc/module/luceusmodule
See also: http://www.mmbase.org/jira/browse/CMSC-1346
CustomObjectHandler.java is new
Index: QueuedUpdate.java
===================================================================
RCS file:
/var/cvs/contributions/CMSContainer_Modules/luceus/src/java/com/finalist/cmsc/module/luceusmodule/QueuedUpdate.java,v
retrieving revision 1.3
retrieving revision 1.3.2.1
diff -u -b -r1.3 -r1.3.2.1
--- QueuedUpdate.java 4 Nov 2008 10:04:09 -0000 1.3
+++ QueuedUpdate.java 25 Mar 2009 09:44:17 -0000 1.3.2.1
@@ -37,6 +37,12 @@
public final static int METHOD_CREATE_CONTENT_INDEX = 11;
+ public final static int METHOD_UPDATE_CUSTOMOBJECT_INDEX = 12;
+
+ public final static int METHOD_DELETE_CUSTOMOBJECT_INDEX = 13;
+
+ public final static int METHOD_CREATE_CUSTOMOBJECT_INDEX = 14;
+
public static final int METHOD_ERASE_INDEX = 666;
private int method;
Index: LuceusModule.java
===================================================================
RCS file:
/var/cvs/contributions/CMSContainer_Modules/luceus/src/java/com/finalist/cmsc/module/luceusmodule/LuceusModule.java,v
retrieving revision 1.7
retrieving revision 1.7.2.1
diff -u -b -r1.7 -r1.7.2.1
--- LuceusModule.java 4 Nov 2008 10:04:09 -0000 1.7
+++ LuceusModule.java 25 Mar 2009 09:44:17 -0000 1.7.2.1
@@ -71,6 +71,8 @@
private CustomContentHandler customContentHandler;
+ private CustomObjectHandler customObjectHandler;
+
private Set<String> secondaryCache = Collections.synchronizedSet(new
HashSet<String>());
@@ -209,7 +211,7 @@
}
}
- // read customhandlerclass and create instance
+ // read customContentHandlerClass and create instance
String customContentHandlerClassname =
getInitParameter("custom-content-handler-classname");
if (customContentHandlerClassname != null) {
try {
@@ -220,6 +222,17 @@
}
}
+ // read customObjectHandlerClass and create instance
+ String customObjectHandlerClassname =
getInitParameter("custom-object-handler-classname");
+ if (customObjectHandlerClassname != null) {
+ try {
+ customObjectHandler = (CustomObjectHandler)
Class.forName(customObjectHandlerClassname).newInstance();
+ }
+ catch (Exception e) {
+ log.warn("Unable to create CustomObjectHandler! (" +
e.getMessage() + ")");
+ }
+ }
+
in = new LinkedBlockingQueue<QueuedUpdate>(updateQueueSize);
if (doListeners) {
@@ -230,6 +243,9 @@
if (customContentHandler != null) {
customContentHandler.registerListeners(this);
}
+ if (customObjectHandler != null) {
+ customObjectHandler.registerListeners(this);
+ }
}
ScheduledThreadPoolExecutor exec = new
ScheduledThreadPoolExecutor(execs);
@@ -298,18 +314,24 @@
addToQueue(new QueuedUpdate(QueuedUpdate.METHOD_DELETE_PAGE_INDEX,
nodeNumber));
}
+ public void deleteCustomObjectIndex(int nodeNumber) {
+ addToQueue(new
QueuedUpdate(QueuedUpdate.METHOD_DELETE_CUSTOMOBJECT_INDEX, nodeNumber));
+ }
+
// aka fullindex
public void createContentIndex(Node node) {
addToQueue(new QueuedUpdate(QueuedUpdate.METHOD_CREATE_CONTENT_INDEX,
node.getNumber()));
}
+ public void createCustomObjectIndex(Node node) {
+ addToQueue(new
QueuedUpdate(QueuedUpdate.METHOD_CREATE_CUSTOMOBJECT_INDEX, node.getNumber()));
+ }
public void updateContentIndex(Node node) {
updateContentIndex(node.getNumber());
}
-
public void updateContentIndex(int nodeNumber) {
addToQueue(new QueuedUpdate(QueuedUpdate.METHOD_UPDATE_CONTENT_INDEX,
nodeNumber));
}
@@ -329,6 +351,13 @@
addToQueue(new
QueuedUpdate(QueuedUpdate.METHOD_UPDATE_SECONDARYCONTENT_INDEX, nodeNumber));
}
+ public void updateCustomObjectIndex(Node node) {
+ updateCustomObjectIndex(node.getNumber());
+ }
+
+ public void updateCustomObjectIndex(int nodeNumber) {
+ addToQueue(new
QueuedUpdate(QueuedUpdate.METHOD_UPDATE_CUSTOMOBJECT_INDEX, nodeNumber));
+ }
public Cloud getAnonymousCloud() {
return CloudProviderFactory.getCloudProvider().getAnonymousCloud();
@@ -388,6 +417,10 @@
}
}
+ //if (customObjectHandler != null) {
+ // customObjectHandler.fullIndex(erase);
+ //}
+
log.info("===>fullIndex done<==");
}
}
@@ -454,6 +487,9 @@
return customContentHandler;
}
+ public CustomObjectHandler getCustomObjectHandler() {
+ return customObjectHandler;
+ }
public boolean hasProcessedSecondary(String scId) {
return secondaryCache.contains(scId);
Index: IndexUpdateTask.java
===================================================================
RCS file:
/var/cvs/contributions/CMSContainer_Modules/luceus/src/java/com/finalist/cmsc/module/luceusmodule/IndexUpdateTask.java,v
retrieving revision 1.12
retrieving revision 1.12.2.1
diff -u -b -r1.12 -r1.12.2.1
--- IndexUpdateTask.java 29 Dec 2008 13:48:54 -0000 1.12
+++ IndexUpdateTask.java 25 Mar 2009 09:44:17 -0000 1.12.2.1
@@ -53,12 +53,15 @@
private CustomContentHandler cch;
+ private CustomObjectHandler coh;
+
public IndexUpdateTask(LuceusModule module,
LinkedBlockingQueue<QueuedUpdate> queue, int id) {
this.module = module;
this.in = queue;
this.id = id;
this.cch = module.getCustomContentHandler();
+ this.coh = module.getCustomObjectHandler();
}
@@ -97,6 +100,15 @@
case QueuedUpdate.METHOD_CREATE_CONTENT_INDEX:
executeCreateContentIndex(update.getNodeNumber());
break;
+ case QueuedUpdate.METHOD_UPDATE_CUSTOMOBJECT_INDEX:
+ executeUpdateCustomObjectIndex(update.getNodeNumber());
+ break;
+ case QueuedUpdate.METHOD_DELETE_CUSTOMOBJECT_INDEX:
+ executeDeleteCustomObjectIndex(update.getNodeNumber());
+ break;
+ case QueuedUpdate.METHOD_CREATE_CUSTOMOBJECT_INDEX:
+ executeCreateCustomObjectIndex(update.getNodeNumber());
+ break;
case QueuedUpdate.METHOD_ERASE_INDEX:
executeEraseIndex();
break;
@@ -151,18 +163,48 @@
private void executeDeletePageContentIndex(int page, int contentElement) {
log.debug(id + " Delete page: " + page + " with content: " +
contentElement);
delete(String.valueOf(page), String.valueOf(contentElement));
+
+ // find and delete custom object related to the page
+ Node node = fetchNode(page);
+ Set<Node> elementen = Collections.emptySet();
+ if (node != null && coh != null) {
+ elementen = coh.findLinkedContent(node);
+ }
+ for (Node element : elementen) {
+ executeDeleteCustomObjectIndex(element.getNumber());
+ }
}
private void executeDeletePageIndex(int pageNumber) {
log.debug(id + " Delete page: " + pageNumber);
delete(String.valueOf(pageNumber), null);
+
+ // find and delete custom object related to the page
+ Node node = fetchNode(pageNumber);
+ Set<Node> elementen = Collections.emptySet();
+ if (node != null && coh != null) {
+ elementen = coh.findLinkedContent(node);
+ }
+ for (Node element : elementen) {
+ executeDeleteCustomObjectIndex(element.getNumber());
+ }
}
private void executeDeleteContentIndex(int ceNumber) {
log.debug(id + " Delete content: " + ceNumber);
delete(null, String.valueOf(ceNumber));
+
+ // find and delete custom object related to content
+ Node node = fetchNode(ceNumber);
+ Set<Node> elementen = Collections.emptySet();
+ if (node != null && coh != null) {
+ elementen = coh.findLinkedContent(node);
+ }
+ for (Node element : elementen) {
+ executeDeleteCustomObjectIndex(element.getNumber());
+ }
}
@@ -181,6 +223,15 @@
int pageId = info.getPageNumber();
create(String.valueOf(pageId), node);
}
+
+ // find and create custom object related to content
+ Set<Node> elementen = Collections.emptySet();
+ if (coh != null) {
+ elementen = coh.findLinkedContent(node);
+ }
+ for (Node element : elementen) {
+ executeCreateCustomObjectIndex(element);
+ }
}
@@ -195,6 +246,15 @@
int pageId = info.getPageNumber();
update(String.valueOf(pageId), node, triggeredByPrimary);
}
+
+ // find and update custom object related to content
+ Set<Node> elementen = Collections.emptySet();
+ if (coh != null) {
+ elementen = coh.findLinkedContent(node);
+ }
+ for (Node element : elementen) {
+ executeUpdateCustomObjectIndex(element);
+ }
}
@@ -205,6 +265,15 @@
}
else {
delete(null, "" + nodeNumber);
+
+ // find and delete custom object related to content
+ Set<Node> elementen = Collections.emptySet();
+ if (node != null && coh != null) {
+ elementen = coh.findLinkedContent(node);
+ }
+ for (Node element : elementen) {
+ executeDeleteCustomObjectIndex(element.getNumber());
+ }
}
}
@@ -260,12 +329,82 @@
for (Node element : elementen) {
update(pageNode, element, true);
}
+
+ // find and update custom object related to page
+ elementen = Collections.emptySet();
+ if (coh != null) {
+ elementen = coh.findLinkedContent(pageNode);
+ }
+ for (Node element : elementen) {
+ executeUpdateCustomObjectIndex(element);
+ }
}
else {
delete("" + pageNumber, null);
+
+ // find and delete custom object related to the page
+ Node node = fetchNode(pageNumber);
+ Set<Node> elementen = Collections.emptySet();
+ if (node != null && coh != null) {
+ elementen = coh.findLinkedContent(node);
+ }
+ for (Node element : elementen) {
+ executeDeleteCustomObjectIndex(element.getNumber());
+ }
+ }
+ }
+
+ private void executeUpdateCustomObjectIndex(int nodeNumber) {
+ Node node = fetchNode(nodeNumber);
+ if (node != null) {
+ executeUpdateCustomObjectIndex(node);
+ }
+ else {
+ delete(null, "" + nodeNumber);
}
}
+ private void executeUpdateCustomObjectIndex(Node node) {
+ log.debug(id + " Update custom object index: " + node.getNumber());
+
+ Set<PageInfo> pages = Collections.emptySet();
+ if (coh != null) {
+ pages = coh.findAllPagesForCustomObject(node);
+ }
+ if (pages.size() == 0) {
+ log.debug(id + " Unable to find page(s) for update of custom object:
" + node.getNumber());
+ delete(null, String.valueOf(node.getNumber()));
+ }
+ for (PageInfo info : pages) {
+ int pageId = info.getPageNumber();
+ update(String.valueOf(pageId), node, false);
+ }
+ }
+
+ private void executeDeleteCustomObjectIndex(int nodeNumber) {
+ log.debug(id + " Delete custom object: " + nodeNumber);
+ delete(null, String.valueOf(nodeNumber));
+ }
+
+ private void executeCreateCustomObjectIndex(int nodeNumber) {
+ Node node = fetchNode(nodeNumber);
+ if (node != null) {
+ executeCreateCustomObjectIndex(node);
+ }
+ }
+
+ private void executeCreateCustomObjectIndex(Node node) {
+ log.debug(id + " Create custom object index: " + node.getNumber());
+
+ Set<PageInfo> pages = Collections.emptySet();
+ if (coh != null) {
+ pages = coh.findAllPagesForCustomObject(node);
+ }
+ for (PageInfo info : pages) {
+ int pageId = info.getPageNumber();
+ create(String.valueOf(pageId), node);
+ }
+ }
private void create(String pageId, Node contentElement) {
Node pageNode = contentElement.getCloud().getNode(pageId);
@@ -381,6 +520,15 @@
}
}
+ if (coh != null) {
+ custom = coh.findLinkedContent(contentElement);
+
+ // Finally fields of the custom object to the document
+ for (Node customNode : custom) {
+ LuceusUtil.nodeFields(customNode, doc);
+ }
+ }
+
Indexer idx = module.getIndexer();
if (idx != null) {
idx.write(doc);
Index: CustomContentHandler.java
===================================================================
RCS file:
/var/cvs/contributions/CMSContainer_Modules/luceus/src/java/com/finalist/cmsc/module/luceusmodule/CustomContentHandler.java,v
retrieving revision 1.2
retrieving revision 1.2.6.1
diff -u -b -r1.2 -r1.2.6.1
--- CustomContentHandler.java 26 Nov 2007 11:42:13 -0000 1.2
+++ CustomContentHandler.java 25 Mar 2009 09:44:17 -0000 1.2.6.1
@@ -21,9 +21,8 @@
*/
public interface CustomContentHandler {
- public abstract Set<Node> findLinkedContent(Node contentElement);
+ Set<Node> findLinkedContent(Node contentElement);
-
- public abstract void registerListeners(LuceusModule module);
+ void registerListeners(LuceusModule module);
}
\ No newline at end of file
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs