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

Reply via email to