alcatel/controller/DocumentAnnotation.py
changeset 27 8ca7f2cea729
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/alcatel/controller/DocumentAnnotation.py	Thu Jan 24 16:58:55 2013 +0100
@@ -0,0 +1,156 @@
+'''
+Created on 09 Aout. 2012
+
+@author: Corinne
+'''
+import logging
+import simplejson
+
+from dataparser.ClientDocumentAnnotationDeleteAttributes import ClientDocumentAnnotationDeleteAttributes
+from dataparser.ClientDocumentAnnotationCreateAttributes import ClientDocumentAnnotationCreateAttributes
+from dataparser.AnnotationsGetAttributes import AnnotationsGetAttributes
+from document.models import Document
+from django.contrib.auth.models import User
+from document.models import Tag
+from document.models import Documentaryfile
+from document.models import Annotationdocument
+
+logger = logging.getLogger('document')
+
+class DocumentAnnotation(object):
+
+    def __init__(self, request):
+        logger.info('DocumentAnnotation init')
+        self.request = request
+           
+    def create(self):
+        logger.info('create DocumentAnnotation')
+        attr = ClientDocumentAnnotationCreateAttributes(self.request)
+        logger.info('get_user = ' + str(attr.get_user()))
+        logger.info('get_documentary_file = ' + str(attr.get_documentary_file()))
+        logger.info('get_annotation_id = ' + str(attr.get_annotation_id()))
+        logger.info('get_document = ' + str(attr.get_document()))
+        logger.info('get_tags = ' + str(attr.get_tags()))
+        logger.info('get_annotated_text = ' + str(attr.get_annotated_text()))
+        logger.info('get_annotated_text_page = ' + str(attr.get_annotated_text_page()))
+        logger.info('get_annotated_text_offset = ' + str(attr.get_annotated_text_offset()))
+
+        tags_attr = attr.get_tags()
+        try:
+            if attr.get_document() == '':
+                json = '{"error": "No document_id attribute in the http post request"}'
+                logger.info(json)
+                return json
+                
+            document = Document.objects.get(pk=attr.get_document())
+            try:
+                user_attr = User.objects.get(username=attr.get_user())
+                try:
+                    if attr.get_documentary_file() == '':
+                        json = '{"error": "No documentary_file_id attribute in the http post request" } '
+                        logger.info(json)
+                        return json
+                    documentaryfile = Documentaryfile.objects.get(pk=attr.get_documentary_file())
+                except Documentaryfile.DoesNotExist:
+                    json = '{"error": "Invalid DocumentaryFile Id"}'
+                    logger.info(json)
+                    return json
+                
+                logger.info('documentaryfile.user.name = ' + str(documentaryfile.user.username))
+                logger.info('user_attr.name = ' + str(user_attr.username))
+                
+                if documentaryfile.user.username == user_attr.username:
+                    annotationDocument = Annotationdocument(description=attr.get_annotation_id(),user=user_attr, document=document,visibility=documentaryfile.visibility,annoted_text=attr.get_annotated_text(),annoted_text_page=attr.get_annotated_text_page(),annoted_text_offset=attr.get_annotated_text_offset(),documentaryfile=documentaryfile )
+                    annotationDocument.save()
+                else:
+                    json= '{"error": "User does not matched"}'
+                    logger.info(json)
+            except User.DoesNotExist:
+                json= '{"error": "Invalid User Id"}'
+                logger.info(json)
+                return json
+           
+            if tags_attr: 
+                logger.info('tags associated to annotation')
+                for tag in tags_attr:
+                    logger.info('annotation_tag = ' + str(tag))
+                    tag_attr = Tag(value=tag,annotationdocument=annotationDocument)
+                    tag_attr.save()
+                                                  
+            json= '{"annotation_document_created":'  + str(annotationDocument.id) + '}'
+            logger.info(json)
+        except Document.DoesNotExist:
+            json= '{"error": "Invalid Document Id"}'
+            logger.info(json)
+            return json
+        
+        return json
+
+    def delete(self):
+        logger.info('delete DocumentAnnotation')
+        attr = ClientDocumentAnnotationDeleteAttributes(self.request)
+        logger.info('get_user = ' + str(attr.get_user()))
+        logger.info('get_annotation_id = ' + str(attr.get_annotation_id()))
+
+        annotationId= attr.get_annotation_id()
+        try:
+            annotationdocument = Annotationdocument.objects.get(pk=annotationId)
+            if attr.get_user() == annotationdocument.user.username:
+                annotationdocument.delete()
+                json= '{"annotation_document_deleted" :'  + str(annotationId) + '}'
+                logger.info(json)
+            else:
+                json= '{"Error": "User does not matched"}'
+                logger.info(json)
+        except Annotationdocument.DoesNotExist:
+            json= '{"error": "Annotationdocument Id not valid"}'
+            logger.info(json)
+       
+        return json
+    
+    def get_annotations(self):
+        attr = AnnotationsGetAttributes(self.request)
+        
+        if not attr.get_article():
+            json = '{"error msg": "document_id is not defined"}'
+            return json
+        
+        if attr.get_offset()=='' :
+            json = '{"error msg": "no offset defined"}'
+            return json
+        
+        if attr.get_count() == '' :
+            json = '{"error msg": "no count defined"}'
+            return json
+        
+        json = {}
+        json['document_id'] = int(attr.get_article())
+        json['offset'] = int(attr.get_offset())
+        json['count'] = int(attr.get_count())
+        total_count = 0
+        json['annotations'] = []
+        annotations = Annotationdocument.objects.filter(document_id=attr.get_article())
+        for annotation in annotations:
+            total_count += 1
+            if total_count-1 >= int(attr.get_offset()) and total_count-1 < int(attr.get_offset()) + int(attr.get_count()) :
+                jsonannotation = {'id':annotation.id}
+                jsonannotation['user'] = annotation.user.username
+                jsonannotation['annotated_text'] = annotation.annoted_text
+                jsonannotation['annotated_text_page'] = annotation.annoted_text_page
+                jsonannotation['annotated_text_offset'] = annotation.annoted_text_offset
+                jsonannotation['user_text'] = annotation.description
+                
+                jsonannotation['tags'] = []
+                tags = Tag.objects.filter(annotationdocument_id=annotation.id)
+
+                for tag in tags:
+                    jsontag = {'id': tag.value}
+                    jsontag = {'title':str(tag.value)}
+                    #TO DO URL ?
+                    jsonannotation['tags'].append(jsontag)
+                    
+                json['annotations'].append(jsonannotation)
+        json['total_count'] = total_count
+        result = simplejson.dumps(json)
+        logger.debug(result)
+        return result
\ No newline at end of file