Author: ssmiweve
Date: 2008-05-09 15:58:41 +0200 (Fri, 09 May 2008)
New Revision: 6594
Modified:
trunk/data-model-api/src/main/java/no/sesat/search/datamodel/DataModelFactory.java
trunk/data-model-javabean-impl/src/main/java/no/sesat/search/datamodel/BeanDataModelInvocationHandler.java
trunk/data-model-javabean-impl/src/main/java/no/sesat/search/datamodel/DataModelFactoryImpl.java
trunk/result-handler-control-spi/src/main/java/no/sesat/search/result/handler/DataModelResultHandler.java
Log:
Issue SKER4737: (Commands marked as asynchronous throws
UndeclaredThrowableException)
Modified:
trunk/data-model-api/src/main/java/no/sesat/search/datamodel/DataModelFactory.java
===================================================================
---
trunk/data-model-api/src/main/java/no/sesat/search/datamodel/DataModelFactory.java
2008-05-09 13:50:27 UTC (rev 6593)
+++
trunk/data-model-api/src/main/java/no/sesat/search/datamodel/DataModelFactory.java
2008-05-09 13:58:41 UTC (rev 6594)
@@ -160,12 +160,23 @@
* control process stack.
*
* <b>This method is only to be used by SESAT classes, not skin
implementations!</b>
+ * Future version must impose this restriction.
*
** @param datamodel
* @param controlLevel
* @return
*/
public abstract DataModel assignControlLevel(final DataModel datamodel,
final ControlLevel controlLevel);
+
+ /** What is the current ControlLevel for the given datamodel.
+ *
+ * <b>This method is only to be used by SESAT classes, not skin
implementations!</b>
+ * Future version must impose this restriction.
+ *
+ * @param datamodel related datamodel we are looking for its control level
+ * @return the current control level
+ */
+ public abstract ControlLevel currentControlLevel(final DataModel
datamodel);
// Package protected ---------------------------------------------
Modified:
trunk/data-model-javabean-impl/src/main/java/no/sesat/search/datamodel/BeanDataModelInvocationHandler.java
===================================================================
---
trunk/data-model-javabean-impl/src/main/java/no/sesat/search/datamodel/BeanDataModelInvocationHandler.java
2008-05-09 13:50:27 UTC (rev 6593)
+++
trunk/data-model-javabean-impl/src/main/java/no/sesat/search/datamodel/BeanDataModelInvocationHandler.java
2008-05-09 13:58:41 UTC (rev 6594)
@@ -72,7 +72,7 @@
// Inner classes -------------------------------------------------
- protected static final class DataModelBeanContextSupport extends
BeanContextSupport{
+ static final class DataModelBeanContextSupport extends BeanContextSupport{
final Object dataModelLock = new Boolean(true); // needs to be
serialisable
Modified:
trunk/data-model-javabean-impl/src/main/java/no/sesat/search/datamodel/DataModelFactoryImpl.java
===================================================================
---
trunk/data-model-javabean-impl/src/main/java/no/sesat/search/datamodel/DataModelFactoryImpl.java
2008-05-09 13:50:27 UTC (rev 6593)
+++
trunk/data-model-javabean-impl/src/main/java/no/sesat/search/datamodel/DataModelFactoryImpl.java
2008-05-09 13:58:41 UTC (rev 6594)
@@ -128,6 +128,14 @@
return datamodel;
}
+
+ public ControlLevel currentControlLevel(final DataModel datamodel){
+
+ final BeanDataModelInvocationHandler handler
+ = (BeanDataModelInvocationHandler)
Proxy.getInvocationHandler(datamodel);
+
+ return
((BeanDataModelInvocationHandler.DataModelBeanContextSupport)handler.context).getControlLevel();
+ }
// Package protected ---------------------------------------------
Modified:
trunk/result-handler-control-spi/src/main/java/no/sesat/search/result/handler/DataModelResultHandler.java
===================================================================
---
trunk/result-handler-control-spi/src/main/java/no/sesat/search/result/handler/DataModelResultHandler.java
2008-05-09 13:50:27 UTC (rev 6593)
+++
trunk/result-handler-control-spi/src/main/java/no/sesat/search/result/handler/DataModelResultHandler.java
2008-05-09 13:58:41 UTC (rev 6594)
@@ -28,6 +28,8 @@
import no.sesat.commons.ref.ReferenceMap;
import no.sesat.search.datamodel.DataModel;
import no.sesat.search.datamodel.DataModelFactory;
+import no.sesat.search.datamodel.access.ControlLevel;
+import static
no.sesat.search.datamodel.access.ControlLevel.SEARCH_COMMAND_EXECUTION;
import no.sesat.search.datamodel.generic.DataObject;
import no.sesat.search.datamodel.query.QueryDataObject;
import no.sesat.search.datamodel.search.SearchDataObject;
@@ -108,7 +110,19 @@
new DataObject.Property("query", queryDO),
new DataObject.Property("results", cxt.getSearchResult()));
+ ControlLevel originalControlLevel = null;
+ if(config.isAsynchronous()){
+ // in asynchronous mode we have absolutely no constraint as to
what part of the lifecycle we are in.
+ originalControlLevel = factory.currentControlLevel(datamodel);
+ factory.assignControlLevel(datamodel, SEARCH_COMMAND_EXECUTION);
+ }
+
datamodel.setSearch(config.getName(), searchDO);
+
+ if(null != originalControlLevel && SEARCH_COMMAND_EXECUTION ==
factory.currentControlLevel(datamodel)){
+ // restore the control level, given that nobody else has touched
it.
+ factory.assignControlLevel(datamodel, originalControlLevel);
+ }
// also ping everybody that might be waiting on these results:
"dinner's served!"
synchronized (datamodel.getSearches()) {
_______________________________________________
Kernel-commits mailing list
[email protected]
http://sesat.no/mailman/listinfo/kernel-commits