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