alcatel/controller/Clusters.py
changeset 27 8ca7f2cea729
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/alcatel/controller/Clusters.py	Thu Jan 24 16:58:55 2013 +0100
@@ -0,0 +1,89 @@
+'''
+Created on 7 aout 2012
+
+@author: gerard
+'''
+import logging
+import simplejson
+
+from dataparser.ClustersGetAttributes import ClustersGetAttributes
+from document.models import Annotationcluster
+from document.models import Cluster
+from document.models import Clusterdocumentweight
+from document.models import Document
+from document.models import Documentaryfile
+from django.contrib.auth.models import User
+from mediapartdb.MediapartReader import MediapartReader
+
+logger = logging.getLogger('document')
+
+# List of documents of a cluster with annotations
+class Clusters(object):
+
+    def __init__(self, request):
+        self.request = request
+    
+    def get_treemap_of_clusters(self):
+        attr = ClustersGetAttributes(self.request)
+        
+        if not attr.get_user():
+            json = '{"error msg": "user is not defined"}'
+            return json
+        if not attr.get_documentary_file_id():
+            json = '{"error msg": "documentary_file_id is not defined"}'
+            return json
+        
+        the_user = User.objects.get(username=attr.get_user())
+        
+        if the_user:
+            docFiles = Documentaryfile.objects.filter(id=int(attr.get_documentary_file_id()), user_id=the_user.id )
+            if len(docFiles) == 0:
+                json = '{"error msg": "There is no documentary file belonging to the user specified"}'
+                return json
+        
+        reader = MediapartReader()
+        
+        json = {"clusters":[]}
+        clusters = Cluster.objects.filter(documentaryfile=int(attr.get_documentary_file_id()))
+        for cluster in clusters:
+            jsoncluster = {'id':cluster.id}
+            jsoncluster['title'] = cluster.title
+            jsoncluster['abstract'] = cluster.description
+            jsoncluster['weight'] = cluster.weight
+            
+            jsoncluster['annotations'] = []
+            
+            annotations = Annotationcluster.objects.filter(cluster=cluster.id)
+            for annotation in annotations:
+                jsonanno = {'id':annotation.id}
+                jsonanno['user'] = str(annotation.user)
+                jsonanno['text'] = str(annotation.description)
+                jsoncluster['annotations'].append(jsonanno)
+             
+            jsoncluster['documents'] = []
+            
+            doc_weights = Clusterdocumentweight.objects.filter(cluster_id=cluster.id)
+            sorted_doc_weights = sorted(doc_weights, key=lambda a_cluster_doc_weight: a_cluster_doc_weight.weight)
+            
+            for index_doc, doc_weights in enumerate(sorted_doc_weights):
+                if index_doc < 3:
+                    jsondoc = {'id':doc_weights.document.documentId}
+                    doc = Document.objects.get(documentId=doc_weights.document.documentId)
+                    jsondoc['title'] = str(doc.title.encode("utf8"))
+                    url = reader.get_url(str(doc_weights.document.documentId))
+                    jsondoc['url_document'] = url
+                    jsondoc['date'] = str(doc.date.isoformat())
+                    category = reader.get_category(str(doc_weights.document.documentId))
+                    jsondoc['category'] = category
+                    jsondoc['url_image'] = 'TO BE DEFINED'
+                    jsondoc['weight'] = float(doc_weights.weight)
+    
+                    jsoncluster['documents'].append(jsondoc)
+                else:
+                    break
+            jsoncluster['document_number'] = len(sorted_doc_weights)
+            json['clusters'].append(jsoncluster)
+        
+        result = simplejson.dumps(json)
+        logger.debug(result)
+        return result