diff -r 94f586daa623 -r 8ca7f2cea729 alcatel/controller/DocumentAnnotation.py --- /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