From 71de08c819652c1a373f6f7404d27c69573388fb Mon Sep 17 00:00:00 2001
From: cramakri <cramakri>
Date: Mon, 22 Oct 2012 09:11:17 +0000
Subject: [PATCH] Initial refactoring into request handler classes

SVN: 27263
---
 .../UserInterfaceState.xcuserstate            | Bin 159187 -> 159186 bytes
 .../ipad-read-service-v1/ipad_read.py         | 120 ++++++++++--------
 2 files changed, 68 insertions(+), 52 deletions(-)

diff --git a/openbis-ipad/Research/BisMac.xcodeproj/project.xcworkspace/xcuserdata/cramakri.xcuserdatad/UserInterfaceState.xcuserstate b/openbis-ipad/Research/BisMac.xcodeproj/project.xcworkspace/xcuserdata/cramakri.xcuserdatad/UserInterfaceState.xcuserstate
index e503324679de9d1a81f180e7e61672237b914ebf..d39a5b71f68ae4ea2e29718b19967ba2b526bb6a 100644
GIT binary patch
delta 40034
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
K{Qqm%w)Ve*BxW@L

delta 40004
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

diff --git a/openbis-ipad/ipad-example-data/ipad-ui/1/dss/reporting-plugins/ipad-read-service-v1/ipad_read.py b/openbis-ipad/ipad-example-data/ipad-ui/1/dss/reporting-plugins/ipad-read-service-v1/ipad_read.py
index c3b921a8c3b..c4649cdc177 100644
--- a/openbis-ipad/ipad-example-data/ipad-ui/1/dss/reporting-plugins/ipad-read-service-v1/ipad_read.py
+++ b/openbis-ipad/ipad-example-data/ipad-ui/1/dss/reporting-plugins/ipad-read-service-v1/ipad_read.py
@@ -5,26 +5,53 @@ from com.fasterxml.jackson.databind import ObjectMapper
 class RequestHandler:
 	"""Abstract superclass for the handlers for concrete requests like ROOT.
 
-	This superclass defines behavior common to all requests."""
+	This superclass defines behavior common to all requests.
 
-	def __init__(parameters, builder):
+	Subclasses need to implement the method optional_headers(), which returns
+	a list of the optional headers they fill out.
+
+	Subclasses should implement retrieve_data to get the data they provide.
+
+	Subclasses should implement add_data_rows. In this method, they should call add_row.
+	The method add_row takes a dictionary as an argument. The keys of the dictionary match the
+	headers in the result columns. The dictionary should include data for the required columns
+	and optional ones they fill.
+
+	"""
+
+	def __init__(self, parameters, builder):
 		self.parameters = parameters
 		self.builder = builder
 		global searchService
 		self.searchService = searchService
+		self.headers = ['PERM_ID', 'REFCON'] + self.optional_headers()
+
+
+	def optional_headers(self):
+		"""Return a list of optional headers supported by this request. Sublass responsibility.
+
+		See add_headers() for the list of supported headers
+		"""
+		return []
 
-	def retrieve_data():
+	def retrieve_data(self):
 		"""Get the data for the request. Subclass responsibility"""
 		pass
 
-	def add_headers():
+	def add_data_rows(self):
+		"""Take the information from the data and put it into the table.
+		Subclass responsibility.
+		"""
+		pass
+
+	def add_headers(self):
 		"""Configure the headers for this request.
 
 		The possible headers come from the following list:
-			PERM_ID : A stable identifier for the object.
+			PERM_ID : A stable identifier for the object. (required)
 			REFCON : Data that is passed unchanged back to the server when a row is modified.
 				This can be used by the server to encode whatever it needs in order to
-				modify the row.
+				modify the row. (required)
 			CATEGORY : A category identifier for showing the entity. If empty or None, then the
 				the entity in this row is not shown in top level navigation views. Such entities
 				may appear as children of other entities.
@@ -38,51 +65,52 @@ class RequestHandler:
 
 		The relevant headers are determined by the request.
 		"""
-		pass
+		for header in self.headers:
+			self.builder.addHeader(header)
 
-	def add_data_rows():
-		"""Take the information from the data and put it into the table.
-		Subclass responsibility.
-		"""
-		pass
+	def add_row(self, entry):
+		"""Append a row of data to the table"""
+		row = self.builder.addRow()
+		for header in self.headers:
+			row.setCell(header, entry.get(header))
 
-	def process_request():
+	def add_rows(self, entities):
+		"""Take a collection of dictionaries and add a row for each one"""
+		for entry in entities:
+			self.add_row(entry)
+
+	def process_request(self):
 		"""Execute the steps necessary to process the request."""
 		self.add_headers()
 		self.retrieve_data()
 		self.add_data_rows()
 
+class AllDataRequestHandler(RequestHandler):
+	"""Handler for the ALLDATA request."""
+
+	def __init__(self, parameters, builder):
+		RequestHandler.__init__(self, parameters, builder)
+
+	def retrieve_data(self):
+		# Get the data and add a row for each data item
+		self.samples = self.searchService.searchForSamples("DESC", "*", "5HT_PROBE")
+		material_identifiers = gather_materials(self.samples)
+		materials = self.searchService.listMaterials(material_identifiers)
+		self.material_dict_array = materials_to_dict(materials)
+		self.material_by_perm_id = dict([(material.getMaterialIdentifier(), material) for material in materials])
 
-def add_headers(builder):
-	builder.addHeader("PERM_ID")
-	builder.addHeader("REFCON")
-	builder.addHeader("CATEGORY")
-	builder.addHeader("SUMMARY_HEADER")
-	builder.addHeader("SUMMARY")
-	builder.addHeader("CHILDREN")
-	builder.addHeader("IDENTIFIER")
-	builder.addHeader("IMAGE_URL")
-	builder.addHeader("PROPERTIES")
+	def optional_headers(self):
+		return ["CATEGORY", "SUMMARY_HEADER", "SUMMARY", "CHILDREN", "IDENTIFIER", "IMAGE_URL", "PROPERTIES"]
+
+	def add_data_rows(self):
+		self.add_rows(self.material_dict_array)
+		self.add_rows(samples_to_dict(self.samples, self.material_by_perm_id))
 
 def image_url_for_compound(material):
 	"""Given a material (compound) return the image url"""
 	chemblId =  material.getCode()
 	return 'https://www.ebi.ac.uk/chemblws/compounds/%s/image' % chemblId
 
-
-def add_row(builder, entry):
-	"""Append a row of data to the table"""
-	row = builder.addRow()
-	row.setCell("SUMMARY_HEADER", entry.get("SUMMARY_HEADER"))
-	row.setCell("SUMMARY", entry.get("SUMMARY"))
-	row.setCell("IDENTIFIER", entry.get("IDENTIFIER"))
-	row.setCell("PERM_ID", entry.get("PERM_ID"))
-	row.setCell("REFCON", entry.get("REFCON"))
-	row.setCell("CATEGORY", entry.get("CATEGORY"))
-	row.setCell("IMAGE_URL", entry.get("IMAGE_URL"))
-	row.setCell("CHILDREN", entry.get("CHILDREN"))
-	row.setCell("PROPERTIES", str(entry.get("PROPERTIES")))
-
 def material_to_dict(material):
 	material_dict = {}
 	material_dict['SUMMARY_HEADER'] = material.getCode()
@@ -130,10 +158,6 @@ def sample_to_dict(five_ht_sample, material_by_perm_id):
 	# Need to handle the material links as entity links: "TARGET", "COMPOUND"
 	return sample_dict
 
-def add_rows(builder, entities):
-	"""Take a collection of dictionaries and add a row for each one"""
-	for entry in entities:
-		add_row(builder, entry)
 
 def add_material_to_collection(code, collection):
 	material_id = MaterialIdentifier.tryParseIdentifier(code)
@@ -154,15 +178,7 @@ def samples_to_dict(samples, material_by_perm_id):
 	result = [sample_to_dict(sample, material_by_perm_id) for sample in samples]
 	return result
 
-def aggregate(parameters, builder):
-	add_headers(builder)
-
-	# Get the data and add a row for each data item
-	samples = searchService.searchForSamples("DESC", "*", "5HT_PROBE")
-	material_identifiers = gather_materials(samples)
-	materials = searchService.listMaterials(material_identifiers)
-	material_dict_array = materials_to_dict(materials)
-	material_by_perm_id = dict([(material.getMaterialIdentifier(), material) for material in materials])
-	add_rows(builder, material_dict_array)
-	add_rows(builder, samples_to_dict(samples, material_by_perm_id))
 
+def aggregate(parameters, builder):
+	handler = AllDataRequestHandler(parameters, builder)
+	handler.process_request()
-- 
GitLab