--- /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