From 397759713a7d63e17f0b668a60d35547363a2585 Mon Sep 17 00:00:00 2001
From: cramakri <cramakri>
Date: Tue, 14 May 2013 09:17:33 +0000
Subject: [PATCH] CCS-35 SP-627 : Switch to using Java infrastructure where
 possible

SVN: 29117
---
 .../ipad-read-service-v1/ipad_read.py         |  55 +++++++++++-------
 .../lib/ipad-framework.jar                    | Bin 0 -> 34796 bytes
 .../UserInterfaceState.xcuserstate            | Bin 211084 -> 211085 bytes
 .../UserInterfaceState.xcuserstate            | Bin 159205 -> 159205 bytes
 4 files changed, 35 insertions(+), 20 deletions(-)
 create mode 100644 openbis-ipad/source/core-plugins/ipad-ui-ylab/1/dss/reporting-plugins/ipad-read-service-v1/lib/ipad-framework.jar

diff --git a/openbis-ipad/source/core-plugins/ipad-ui-ylab/1/dss/reporting-plugins/ipad-read-service-v1/ipad_read.py b/openbis-ipad/source/core-plugins/ipad-ui-ylab/1/dss/reporting-plugins/ipad-read-service-v1/ipad_read.py
index 265c01d67ea..46709252f75 100644
--- a/openbis-ipad/source/core-plugins/ipad-ui-ylab/1/dss/reporting-plugins/ipad-read-service-v1/ipad_read.py
+++ b/openbis-ipad/source/core-plugins/ipad-ui-ylab/1/dss/reporting-plugins/ipad-read-service-v1/ipad_read.py
@@ -1,3 +1,7 @@
+from ch.systemsx.cisd.openbis.ipad.v2.server import IRequestHandler, AbstractRequestHandler, ClientPreferencesRequestHandler, RootRequestHandler
+from ch.systemsx.cisd.openbis.ipad.v2.server import DrillRequestHandler, NavigationRequestHandler, DetailRequestHandler
+from ch.systemsx.cisd.openbis.ipad.v2.server import EmptyDataRequestHandler, IpadServiceUtilities
+from ch.systemsx.cisd.openbis.ipad.v2.server import IRequestHandlerFactory, RequestHandlerDispatcher
 from ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v1 import MaterialIdentifierCollection
 from ch.systemsx.cisd.openbis.generic.shared.basic.dto import MaterialIdentifier
 from com.fasterxml.jackson.databind import ObjectMapper 
@@ -13,17 +17,17 @@ import codecs
 
 def json_encoded_value(coll):
 	"""Utility function for converting a list into a json-encoded list"""
-	return ObjectMapper().writeValueAsString(coll)
+	return IpadServiceUtilities.jsonEncodedValue(coll)
 
 def json_empty_list():
   """Utility function to return an json-encoded empty list"""
-  return json_encoded_value([])
+  return IpadServiceUtilities.jsonEmptyList()
 
 def json_empty_dict():
   """Utility function to return an json-encoded empty dictionary"""
-  return json_encoded_value({})
+  return IpadServiceUtilities.jsonEmptyDict()
 
-class RequestHandler(object):
+class RequestHandler(IRequestHandler):
 	"""Abstract superclass for the handlers for concrete requests like ROOT.
 
 	This superclass defines behavior common to all requests.
@@ -156,7 +160,10 @@ class RequestHandler(object):
 			elif 'ENZYME' == sample.getSampleType():
 				self.enzymes.append(sample)
 			elif 'WESTERN_BLOTTING' == sample.getSampleType():
-				self.westernBlottings.append(sample)		
+				self.westernBlottings.append(sample)
+
+	def processRequest(self):
+		self.process_request()
 
 class ClientPreferencesRequestHandler(object):
 	"""Abstract superclass for the handlers for CLIENT_PREFS request.
@@ -733,21 +740,29 @@ class YeastLabDetailRequestHandler(DetailRequestHandler):
 		self.add_rows(yeasts_to_dict(self.yeasts, {}, True))
 		self.add_rows(bacterias_to_dict(self.bacterias, True))
 		self.add_rows(enzymes_to_dict(self.enzymes, True))
-		self.add_rows(westernBlottings_to_dict(self.westernBlottings, True))	  
+		self.add_rows(westernBlottings_to_dict(self.westernBlottings, True))
+
+class NavigationRequestHandlerFactory(IRequestHandlerFactory):
+	def createRequestHandler(self, parameters, builder, searchService):
+		return YeastLabNavigationRequestHandler(parameters, builder)
+		
+class RootRequestHandlerFactory(IRequestHandlerFactory):
+	def createRequestHandler(self, parameters, builder, searchService):
+		return YeastLabRootRequestHandler(parameters, builder)
+		
+class DrillRequestHandlerFactory(IRequestHandlerFactory):
+	def createRequestHandler(self, parameters, builder, searchService):
+		return YeastLabDrillRequestHandler(parameters, builder)
+
+class DetailRequestHandlerFactory(IRequestHandlerFactory):
+	def createRequestHandler(self, parameters, builder, searchService):
+		return YeastLabDetailRequestHandler(parameters, builder)
 			
 
 def aggregate(parameters, builder):
-	request_key = parameters.get('requestKey')
-	if 'CLIENT_PREFS' == request_key:
-		handler = YeastLabClientPreferencesRequestHandler(parameters, builder)
-	elif 'NAVIGATION' == request_key:
-		handler = YeastLabNavigationRequestHandler(parameters, builder)
-	elif 'ROOT' == request_key:
-		handler = YeastLabRootRequestHandler(parameters, builder)
-	elif 'DRILL' == request_key:
-		handler = YeastLabDrillRequestHandler(parameters, builder)
-	elif 'DETAIL' == request_key:
-		handler = YeastLabDetailRequestHandler(parameters, builder)
-	else:		
-		handler = EmptyDataRequestHandler(parameters, builder)
-	handler.process_request()		
+	dispatcher = RequestHandlerDispatcher()
+	dispatcher.navigationRequestHandlerFactory = NavigationRequestHandlerFactory()
+	dispatcher.rootRequestHandlerFactory = RootRequestHandlerFactory()
+	dispatcher.drillRequestHandlerFactory = DrillRequestHandlerFactory()
+	dispatcher.detailRequestHandlerFactory = DetailRequestHandlerFactory()
+	dispatcher.dispatch(parameters, builder, searchService)
diff --git a/openbis-ipad/source/core-plugins/ipad-ui-ylab/1/dss/reporting-plugins/ipad-read-service-v1/lib/ipad-framework.jar b/openbis-ipad/source/core-plugins/ipad-ui-ylab/1/dss/reporting-plugins/ipad-read-service-v1/lib/ipad-framework.jar
new file mode 100644
index 0000000000000000000000000000000000000000..6d1202283a8a4d4ace2bf876be1ac6491bb0f53c
GIT binary patch
literal 34796
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
NLV5*vZBOvi{{hG-y>kEn

literal 0
HcmV?d00001

diff --git a/openbis-ipad/source/objc/Research/BisMac.xcodeproj/project.xcworkspace/xcuserdata/cramakri.xcuserdatad/UserInterfaceState.xcuserstate b/openbis-ipad/source/objc/Research/BisMac.xcodeproj/project.xcworkspace/xcuserdata/cramakri.xcuserdatad/UserInterfaceState.xcuserstate
index 190a8d6a5280e1750d429bf5d2bcbb4c2d0efc89..a3746f963ddbef37afa88defad1c6f50aef7cf9d 100644
GIT binary patch
delta 5269
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

delta 5268
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
C$otR$

diff --git a/openbis-ipad/source/objc/openBIS/openBIS.xcodeproj/project.xcworkspace/xcuserdata/cramakri.xcuserdatad/UserInterfaceState.xcuserstate b/openbis-ipad/source/objc/openBIS/openBIS.xcodeproj/project.xcworkspace/xcuserdata/cramakri.xcuserdatad/UserInterfaceState.xcuserstate
index 80f19f774dc24f2636224863e1fe98139b407ec4..f5a65d0eb717d901ec0c2838a0ffb35147539b1b 100644
GIT binary patch
delta 37
qcmaEQoAc>y&W0_Fc9Cr6uf;>G3%9#OGCuGEb8=2?*IL53`y>D|8xQaR

delta 37
scmaEQoAc>y&W0_Fc9CpGyRYxPaC5s$B;x}w5NDsJ!FH`BjJr<)0A5`Y`2YX_

-- 
GitLab