Exemplo n.º 1
0
def createChannel(workspace,
                  name,
                  filter=None,
                  filter_params={},
                  remote_subscription=None):

    # Creating abstract variable
    new_abstract_variable = AbstractVariable(type="WORKSPACE", name=name)
    new_abstract_variable.save()

    # Creating variable value
    new_variable_value = VariableValue(user=workspace.creator,
                                       value="",
                                       abstract_variable=new_abstract_variable)
    new_variable_value.save()

    new_ws_variable = WorkSpaceVariable(
        workspace=workspace,
        abstract_variable=new_abstract_variable,
        aspect="CHANNEL")
    new_ws_variable.save()

    fparam_values = ''
    if filter is not None:
        fparam_values = json_encode(filter_params)

    channel = InOut(name=name,
                    remote_subscription=remote_subscription,
                    workspace_variable=new_ws_variable,
                    filter=filter,
                    filter_param_values=fparam_values,
                    friend_code="")
    channel.save()

    return channel
Exemplo n.º 2
0
def createChannel(workspace, name, filter=None, filter_params={}, remote_subscription=None):

    fparam_values = ""
    if filter is not None:
        fparam_values = json_encode(filter_params)

    channel = InOut(
        workspace=workspace,
        name=name,
        remote_subscription=remote_subscription,
        filter=filter,
        filter_param_values=fparam_values,
        friend_code="",
    )
    channel.save()

    return channel
Exemplo n.º 3
0
def createChannel(workspace, name, filter=None, filter_params={}, remote_subscription=None):

    # Creating abstract variable
    new_abstract_variable = AbstractVariable(type="WORKSPACE", name=name)
    new_abstract_variable.save()

    # Creating variable value
    new_variable_value = VariableValue(user=workspace.creator, value="", abstract_variable=new_abstract_variable)
    new_variable_value.save()

    new_ws_variable = WorkSpaceVariable(workspace=workspace, abstract_variable=new_abstract_variable, aspect="CHANNEL")
    new_ws_variable.save()

    fparam_values = ''
    if filter is not None:
        fparam_values = json_encode(filter_params)

    channel = InOut(name=name, remote_subscription=remote_subscription, workspace_variable=new_ws_variable, filter=filter, filter_param_values=fparam_values, friend_code="")
    channel.save()

    return channel
Exemplo n.º 4
0
    def update(self, request, workspace_id):
        user = get_user_authentication(request)

        # Gets all needed parameters from request
        if 'json' in request.POST:
            json = simplejson.loads(request.POST['json'])
        else:
            return HttpResponseBadRequest(_(u'JSON parameter expected'))

        workspace = get_object_or_404(WorkSpace, id=workspace_id)
        if not user.is_staff and workspace.creator != user:
            return HttpResponseForbidden()

        id_mapping = {}

        # Phase 1: Additions
        channels_to_add = json['channelsToAdd']
        for new_channel in channels_to_add:
            # Creating the abstract variable for this channel
            new_abstract_variable = AbstractVariable(type="WORKSPACE", name=new_channel['name'])
            new_abstract_variable.save()

            # Creating the variable value entry for this channel
            new_variable_value = VariableValue(user=user, value="", abstract_variable=new_abstract_variable)
            new_variable_value.save()

            # And the workspace variable
            new_ws_variable = WorkSpaceVariable(workspace=workspace, abstract_variable=new_abstract_variable, aspect="CHANNEL")
            new_ws_variable.save()

            channel = InOut(name="", workspace_variable=new_ws_variable, filter=None, filter_param_values=None, friend_code="")
            channel.save()

            id_mapping[new_channel['id']] = {'cid': channel.id, 'wvid': new_ws_variable.id}

        # Phase 2: Updates
        channels_to_update = json['channelsToUpdate']
        for current_channel_data in channels_to_update:
            current_channel_id = current_channel_data['id']

            # search final id if needed
            if current_channel_data['provisional_id']:
                current_channel_id = id_mapping[current_channel_id]['cid']

            current_channel = InOut.objects.get(id=current_channel_data['id'])

            for input_to_add in current_channel_data['inputsToRemove']:
                connectable = In.objects.get(id=input_to_add['id'])
                connectable.inouts.add(current_channel)
                connectable.save()

            for input_to_remove in current_channel_data['inputsToRemove']:
                connectable = In.objects.get(id=input_to_add['id'])
                connectable.inouts.remove(current_channel)
                connectable.save()

            for output_to_add in current_channel_data['outputsToRemove']:
                connectable = Out.objects.get(id=output_to_add['id'])
                connectable.inouts.add(current_channel)
                connectable.save()

            for output_to_remove in current_channel_data['outputsToRemove']:
                connectable = Out.objects.get(id=output_to_add['id'])
                connectable.inouts.remove(current_channel)
                connectable.save()

            for inout_to_add in current_channel_data['inoutsToRemove']:
                inout_id = input_to_add['id']

                # search final id if needed
                if inout_to_add['provisional_id']:
                    inout_id = id_mapping[inout_id]['cid']

                relationship = RelatedInOut(in_inout=current_channel, out_inout=InOut.objects.get(id=inout_id))
                relationship.save()

            for output_to_remove in current_channel_data['outputsToRemove']:
                inout_id = input_to_add['id']

                # search final id if needed
                if inout_to_add['provisional_id']:
                    inout_id = id_mapping[inout_id]['cid']

                relationship = RelatedInOut.objects.get(in_inout=current_channel, out_inout=inout_id)
                relationship.delete()

        # Phase 3: Deletions
        channels_to_remove = json['channelsToRemove']
        for current_channel_data in channels_to_remove:
            channel = InOut.objects.get(id=current_channel_data['id'])
            deleteChannel(channel)

        json_result = {'id_mapping': id_mapping}
        return HttpResponse(json_encode(json_result), mimetype='application/json; charset=UTF-8')
Exemplo n.º 5
0
    def create(self, request, user_name, screen_id=None):
        user = user_authentication(user_name)

        # Gets all needed parameters from request
        if request.POST.has_key('json'):
            json = simplejson.loads(request.POST['json'])
        else:
            return HttpResponseBadRequest('json parameter expected')

        #TODO Remove this. Sets user screen by default
        if not screen_id:
            screen_id = 1

        try:
            #Gets current user screen
            screen = Screen.objects.get(user=user, code=screen_id)

            igadgets = json['iGadgetList']
            for igadget in igadgets:
                igadget_object = IGadget.objects.get(screen=screen,
                                                     code=igadget['id'])

                # Save all IGadget connections (in and out variables)
                for var in igadget['list']:
                    var_object = Variable.objects.get(uri=var['uri'],
                                                      vardef__name=var['name'],
                                                      igadget=igadget_object)

                    # Remove existed connections
                    Out.objects.filter(variable=var_object).delete()
                    In.objects.filter(variable=var_object).delete()

                    # Saves IN connection
                    if var['aspect'] == 'EVEN':
                        uri_in = "/user/%s/igadgets/%s/in/%s" % (
                            user_name, igadget_object.code, var['name'])
                        in_object = In(uri=uri_in,
                                       name=var['name'],
                                       variable=var_object)
                        in_object.save()

                    # Saves OUT connection
                    if var['aspect'] == 'SLOT':
                        uri_out = "/user/%s/igadgets/%s/out/%s" % (
                            user_name, igadget_object.code, var['name'])
                        out_object = Out(uri=uri_out,
                                         name=var['name'],
                                         variable=var_object)
                        out_object.save()

            # Delete channels
            InOut.objects.filter(user=user).delete()

            # Saves all channels
            for inout in json['inOutList']:
                inout_object = None
                inout_object = InOut(user=user,
                                     uri=inout['uri'],
                                     name=inout['name'],
                                     friend_code=inout['friend_code'],
                                     value=inout['value'])
                inout_object.save()

                # Saves all channel inputs
                for ins in inout['ins']:
                    igadget_object = IGadget.objects.get(screen=screen,
                                                         code=ins['igadget'])
                    var_object = Variable.objects.get(vardef__name=ins['name'],
                                                      igadget=igadget_object)
                    connected_in = In.objects.get(variable=var_object)
                    connected_in.inout.add(inout_object)

                # Saves all channel outputs
                for out in inout['outs']:
                    igadget_object = IGadget.objects.get(screen=screen,
                                                         code=out['igadget'])
                    var_object = Variable.objects.get(vardef__name=out['name'],
                                                      igadget=igadget_object)
                    connected_out = Out.objects.get(variable=var_object)
                    connected_out.inout.add(inout_object)

            transaction.commit()
            return HttpResponse('ok')
        except Screen.DoesNotExist:
            transaction.rollback()
            return HttpResponseBadRequest('refered screen (' + screen_id +
                                          ') doesn\'t exists.')
        except IGadget.DoesNotExist:
            transaction.rollback()
            return HttpResponseBadRequest('refered igadget doesn\'t exists.')
        except Variable.DoesNotExist:
            transaction.rollback()
            return HttpResponseBadRequest('refered variable doesn\'t exists.')
        except Exception, e:
            transaction.rollback()
            return HttpResponseBadRequest('connectables cannot be save: %s' %
                                          e)
Exemplo n.º 6
0
    def create(self, request, workspace_id):
        user = get_user_authentication(request)

        # Gets all needed parameters from request
        if request.POST.has_key('json'):
            json = simplejson.loads(request.POST['json'])
        else:
            return HttpResponseBadRequest (_(u'JSON parameter expected'))

        try:                        
            workspace = WorkSpace.objects.get(id=workspace_id)
            
            #Mapping between provisional ids and database-generated ids!!!
            ids_mapping = []
            
            
            # Erasing variables associated with channels deleted explicitly by the user
            channelsDeletedByUser = json['channelsForRemoving']
            for deleted_channel_id in channelsDeletedByUser:
                #Removing workspace_variable and abstract_variable of channels deleted explicitly by user
                deleted_channel = InOut.objects.get(id=deleted_channel_id)
                
                deleted_channel.workspace_variable.abstract_variable.delete()
                deleted_channel.workspace_variable.delete()
            
            # Erasing all channels of the workspace!!
            old_channels = InOut.objects.filter(workspace_variable__workspace=workspace)
            if (old_channels):
                old_channels.delete()
                
            # Adding channels recreating JSON structure!
            new_channels = json['inOutList']
            for new_channel_data in new_channels:
                if (new_channel_data['provisional_id']):
                    #It's necessary to create all objects!
                    new_abstract_variable = AbstractVariable(type="WORKSPACE", name=new_channel_data['name'], value="")
                    new_abstract_variable.save()
                    
                    new_ws_variable = WorkSpaceVariable(workspace=workspace, abstract_variable=new_abstract_variable, aspect="CHANNEL")
                    new_ws_variable.save()
                    
                    channel = InOut(name=new_channel_data['name'], workspace_variable=new_ws_variable, friend_code="")
                    channel.save()  
                    
                    #A channel has been generated. It's necessary to correlate provisional and definitive ids!
                    id_mapping = {}
                    
                    id_mapping['id'] = channel.id;
                    id_mapping['provisional_id'] = new_channel_data['id'];
                    id_mapping['var_id'] = new_ws_variable.id;
                    
                    ids_mapping.append(id_mapping);
                else:
                    #WorkSpaceVariable objects is still in database, it's only necessary to link it!
                    workspace_variable = WorkSpaceVariable.objects.get(id=new_channel_data['var_id'])
                    
                    workspace_variable.abstract_variable.name = new_channel_data['name']
                    workspace_variable.abstract_variable.save()
                
                    channel = InOut(id=new_channel_data['id'], name=new_channel_data['name'], workspace_variable=workspace_variable, friend_code="")
                    channel.save()               
                    
                #Setting channel connections!
                
                #In connections
                ins = new_channel_data['ins']
                for input in ins:
                    if input['connectable_type'] == 'in':
                        connectable = In.objects.get(id=input['id'])
                    if input['connectable_type'] == 'inout': 
                        connectable = InOut.objects.get(id=input['id'])
                    
                    connectable.inouts.add(channel);
                    connectable.save()
                
                
                #Out connections
                outs = new_channel_data['outs']
                for output in outs:
                    if output['connectable_type'] == 'out':
                        connectable = Out.objects.get(id=output['id'])
                    if output['connectable_type'] == 'inout': 
                        connectable = InOut.objects.get(id=output['id'])
                    
                    connectable.inouts.add(channel);
                    connectable.save()

            # Saves all channels            
            transaction.commit()
            
            json_result = {'ids': ids_mapping}
            
            return HttpResponse (json_encode(json_result), mimetype='application/json; charset=UTF-8')
        except WorkSpace.DoesNotExist:
            transaction.rollback()

            msg = _('referred workspace %(workspace_name)s does not exist.') % {'workspace_name': workspace_name}
            log(msg, request)
            return HttpResponseBadRequest(get_xml_error(msg));

        except Exception, e:
            transaction.rollback()
            msg = _('connectables cannot be saved: %(exc)s') % {'exc': e}
            log(msg, request)
            return HttpResponseBadRequest(msg)
Exemplo n.º 7
0
    def update(self, request, workspace_id):
        user = get_user_authentication(request)

        # Gets all needed parameters from request
        if 'json' in request.POST:
            json = simplejson.loads(request.POST['json'])
        else:
            return HttpResponseBadRequest(_(u'JSON parameter expected'))

        workspace = get_object_or_404(WorkSpace, id=workspace_id)
        if not user.is_staff and workspace.creator != user:
            return HttpResponseForbidden()

        id_mapping = {}

        # Phase 1: Additions
        channels_to_add = json['channelsToAdd']
        for new_channel in channels_to_add:
            # Creating the abstract variable for this channel
            new_abstract_variable = AbstractVariable(type="WORKSPACE",
                                                     name=new_channel['name'])
            new_abstract_variable.save()

            # Creating the variable value entry for this channel
            new_variable_value = VariableValue(
                user=user, value="", abstract_variable=new_abstract_variable)
            new_variable_value.save()

            # And the workspace variable
            new_ws_variable = WorkSpaceVariable(
                workspace=workspace,
                abstract_variable=new_abstract_variable,
                aspect="CHANNEL")
            new_ws_variable.save()

            channel = InOut(name="",
                            workspace_variable=new_ws_variable,
                            filter=None,
                            filter_param_values=None,
                            friend_code="")
            channel.save()

            id_mapping[new_channel['id']] = {
                'cid': channel.id,
                'wvid': new_ws_variable.id
            }

        # Phase 2: Updates
        channels_to_update = json['channelsToUpdate']
        for current_channel_data in channels_to_update:
            current_channel_id = current_channel_data['id']

            # search final id if needed
            if current_channel_data['provisional_id']:
                current_channel_id = id_mapping[current_channel_id]['cid']

            current_channel = InOut.objects.get(id=current_channel_data['id'])

            for input_to_add in current_channel_data['inputsToRemove']:
                connectable = In.objects.get(id=input_to_add['id'])
                connectable.inouts.add(current_channel)
                connectable.save()

            for input_to_remove in current_channel_data['inputsToRemove']:
                connectable = In.objects.get(id=input_to_add['id'])
                connectable.inouts.remove(current_channel)
                connectable.save()

            for output_to_add in current_channel_data['outputsToRemove']:
                connectable = Out.objects.get(id=output_to_add['id'])
                connectable.inouts.add(current_channel)
                connectable.save()

            for output_to_remove in current_channel_data['outputsToRemove']:
                connectable = Out.objects.get(id=output_to_add['id'])
                connectable.inouts.remove(current_channel)
                connectable.save()

            for inout_to_add in current_channel_data['inoutsToRemove']:
                inout_id = input_to_add['id']

                # search final id if needed
                if inout_to_add['provisional_id']:
                    inout_id = id_mapping[inout_id]['cid']

                relationship = RelatedInOut(
                    in_inout=current_channel,
                    out_inout=InOut.objects.get(id=inout_id))
                relationship.save()

            for output_to_remove in current_channel_data['outputsToRemove']:
                inout_id = input_to_add['id']

                # search final id if needed
                if inout_to_add['provisional_id']:
                    inout_id = id_mapping[inout_id]['cid']

                relationship = RelatedInOut.objects.get(
                    in_inout=current_channel, out_inout=inout_id)
                relationship.delete()

        # Phase 3: Deletions
        channels_to_remove = json['channelsToRemove']
        for current_channel_data in channels_to_remove:
            channel = InOut.objects.get(id=current_channel_data['id'])
            deleteChannel(channel)

        json_result = {'id_mapping': id_mapping}
        return HttpResponse(json_encode(json_result),
                            mimetype='application/json; charset=UTF-8')
Exemplo n.º 8
0
    def create(self, request, workspace_id):
        user = get_user_authentication(request)

        # Gets all needed parameters from request
        if request.POST.has_key('json'):
            json = simplejson.loads(request.POST['json'])
        else:
            return HttpResponseBadRequest (_(u'JSON parameter expected'))

        try:
            workspace = WorkSpace.objects.get(id=workspace_id)

            # Mapping between provisional ids and database-generated ids!!!
            id_mapping = {}

            # Erasing variables associated with channels deleted explicitly by the user
            channelsDeletedByUser = json['channelsForRemoving']
            for deleted_channel_id in channelsDeletedByUser:
                #Removing workspace_variable and abstract_variable of channels deleted explicitly by user
                deleted_channel = InOut.objects.get(id=deleted_channel_id)
                
                #Remove the related In and Out values
                related_ins = deleted_channel.in_set.all()
                for rel_in in related_ins:
                    varValue = VariableValue.objects.get(user=user, abstract_variable=rel_in.variable.abstract_variable)
                    varValue.value = None
                    varValue.save()
                    
                related_outs = deleted_channel.out_set.all()
                for rel_out in related_outs:
                    varValue = VariableValue.objects.get(user=user, abstract_variable=rel_out.abstract_variable)
                    varValue.value = None
                    varValue.save()   

                abstract_variable = deleted_channel.workspace_variable.abstract_variable

                VariableValue.objects.get(user=user, abstract_variable=abstract_variable).delete()

                abstract_variable.delete()
                deleted_channel.workspace_variable.delete()
                
                if deleted_channel.remote_subscription:
                    deleted_channel.remote_subscription.delete()

            # Erasing all channels of the workspace!!
            old_channels = InOut.objects.filter(workspace_variable__workspace=workspace)
            old_channels_info = {}
            for old_channel in old_channels:
                # Deleting the old relationships between channels
                # First delete the relationships where old_channel is the input
                rel_old_channels = RelatedInOut.objects.filter(in_inout=old_channel)
                for channel_delete in rel_old_channels:
                    channel_delete.delete()

                # And then the relationships where old_channel is the output
                rel_old_channels = RelatedInOut.objects.filter(out_inout=old_channel)
                for channel_delete in rel_old_channels:
                    channel_delete.delete()
                    
                if old_channel.remote_subscription:
                    old_channel.remote_subscription.delete()
                
                #adding its info to the list of old channels
                channel_info = {}
                old_ins_aux = old_channel.in_set.all()
                channel_info["ins"] = []
                for in_aux in old_ins_aux:
                    channel_info["ins"].append(in_aux.id)
                old_outs_aux = old_channel.out_set.all()
                
                channel_info["outs"] = []
                for out_aux in old_outs_aux:
                    channel_info["outs"].append(out_aux.id)
                
                old_channels_info[old_channel.id] = channel_info

                # Now delete the current channel
                old_channel.delete()

            # Adding channels recreating JSON structure!
            new_channels = json['inOutList']
            for new_channel_data in new_channels:
                channel_info = None
                # Remote subscriptions!
                remote_subscription = None
                if new_channel_data['remote_subscription']:
                        op_code = unicode(new_channel_data['remote_subscription']['op_code'])
                        url = new_channel_data['remote_subscription']['url']
                        
                        if op_code != '0':
                            remote_subscription = RemoteSubscription(operation_code=op_code, url=url)
                            remote_subscription.save()
                
                if (new_channel_data['provisional_id']):
                    #It's necessary to create all objects!

                    #Creating abstract variable
                    new_abstract_variable = AbstractVariable(type="WORKSPACE", name=new_channel_data['name'])
                    new_abstract_variable.save()

                    #Creating variable value
                    new_variable_value = VariableValue(user=user, value="", abstract_variable=new_abstract_variable)
                    new_variable_value.save()

                    new_ws_variable = WorkSpaceVariable(workspace=workspace, abstract_variable=new_abstract_variable, aspect="CHANNEL")
                    new_ws_variable.save()

                    filter = None
                    fparam_values = None
                    if new_channel_data['filter']:
                        try:
                            filter = Filter.objects.get(id=new_channel_data['filter'])
                            fparam_values = json_encode(new_channel_data['filter_params'])
                        except Filter.DoesNotExist:
                            pass

                    channel = InOut(name=new_channel_data['name'], remote_subscription=remote_subscription, workspace_variable=new_ws_variable, filter=filter, filter_param_values=fparam_values, friend_code="")
                    channel.save()

                    # A channel has been generated. It's necessary to correlate provisional and definitive ids!
                    id_mapping[new_channel_data['id']] = {'new_id': channel.id, 'new_wv_id': new_ws_variable.id}
                    
                    channel_info = None

                else:
                    #WorkSpaceVariable objects is still in database, it's only necessary to link it!
                    workspace_variable = WorkSpaceVariable.objects.get(id=new_channel_data['var_id'])

                    workspace_variable.abstract_variable.name = new_channel_data['name']
                    workspace_variable.abstract_variable.save()

                    try:
                        filter = Filter.objects.get(id=new_channel_data['filter'])
                        fparam_values = json_encode(new_channel_data['filter_params'])
                    except Filter.DoesNotExist:
                        filter = None
                        fparam_values = None

                    channel = InOut(id=new_channel_data['id'], remote_subscription=remote_subscription, name=new_channel_data['name'], workspace_variable=workspace_variable, filter=filter, filter_param_values=fparam_values, friend_code="")
                    channel.save()
                    
                    channel_info = old_channels_info[new_channel_data['id']]

                
                # In connections
                # InOut out connections will be created later
                old_ins = None
                if channel_info:
                        old_ins = channel_info["ins"]
                ins = new_channel_data['ins']
                for inputId in ins:
                    connectable = In.objects.get(id=inputId)
                    connectable.inouts.add(channel);
                    connectable.save()
                    if old_ins:
                        #clean the old_ins list
                        for old_in in old_ins:
                            if old_in == inputId:
                                old_ins.remove(old_in)
                                break
                if old_ins:
                    #check if there is any old In not present now to initialize its value
                    for old_in in old_ins:
                        real_old_in = In.objects.get(id=old_in)
                        varValue = VariableValue.objects.get(user=user, abstract_variable=real_old_in.variable.abstract_variable)
                        varValue.value = None
                        varValue.save()
                        

                # Out connections
                # InOut out connections will be created later
                old_outs = None
                if channel_info:
                        old_outs = channel_info["outs"]
                outs = new_channel_data['outs']
                for outputId in outs:
                    connectable = Out.objects.get(id=outputId)
                    connectable.inouts.add(channel);
                    connectable.save()
                    if old_outs:
                        #clean the old_ins list
                        for old_out in old_outs:
                            if old_out == outputId:
                                old_outs.remove(old_out)
                                break
                if old_outs:
                    #check if there is any old Out not present now to initialize its value
                    for old_out in old_outs:
                        real_old_out = Out.objects.get(id=old_out)
                        varValue = VariableValue.objects.get(user=user, abstract_variable=real_old_out.abstract_variable)
                        varValue.value = ""
                        varValue.save()

            # Now it is time to recreate channel to channel connections
            for new_channel_data in new_channels:
                channel = InOut(id=new_channel_data['id'])
                inouts = new_channel_data['inouts']
                for inout_to_add in inouts:
                    inout_id = inout_to_add['id']

                    # search final id if needed
                    if inout_to_add['provisional_id']:
                        inout_id = id_mapping[inout_id]['new_id']

                    relationship = RelatedInOut(in_inout=channel, out_inout=InOut.objects.get(id=inout_id))
                    relationship.save()

            json_result = {'ids': id_mapping}

            return HttpResponse (json_encode(json_result), mimetype='application/json; charset=UTF-8')
        except WorkSpace.DoesNotExist, e:
            msg = _('referred workspace (id: %(workspace_id)s) does not exist.') % {'workspace_id': workspace_id}
            raise TracedServerError(e, json, request, msg)
Exemplo n.º 9
0
    def update(self, request, workspace_id):
        user = get_user_authentication(request)

        # Gets all needed parameters from request
        if request.POST.has_key('json'):
            json = simplejson.loads(request.POST['json'])
        else:
            return HttpResponseBadRequest (_(u'JSON parameter expected'))

        try:
            workspace = WorkSpace.objects.get(id=workspace_id)
        except WorkSpace.DoesNotExist:
            msg = _('referred workspace %(workspace_name)s does not exist.') % {'workspace_name': workspace_name}
            raise TracedServerError(e, json, request, msg)

        id_mapping = {}

        # Pashe 1: Additions
        channels_to_add = json['channelsToAdd']
        for new_channel in channels_to_add:
            # Creating the abstract variable for this channel
            new_abstract_variable = AbstractVariable(type="WORKSPACE", name=new_channel_data['name'])
            new_abstract_variable.save()

            # Creating the variable value entry for this channel
            new_variable_value = VariableValue(user=user, value="", abstract_variable=new_abstract_variable)
            new_variable_value.save()

            # And the workspace variable
            new_ws_variable = WorkSpaceVariable(workspace=workspace, abstract_variable=new_abstract_variable, aspect="CHANNEL")
            new_ws_variable.save()

            channel = InOut(name="", workspace_variable=new_ws_variable, filter=None, filter_param_values=None, friend_code="")
            channel.save()

            id_mapping[new_channel['id']] = {'cid': channel.id, 'wvid': new_ws_variable.id}

        # Pashe 2: Updates
        channels_to_update = json['channelsToUpdate']
        for current_channel_data in channels_to_update:
            current_channel_id = current_channel_data['id']

            # search final id if needed
            if current_channel_data['provisional_id']:
                current_channel_id = id_mapping[current_channel_id]['cid']

            current_channel = InOut.objects.get(id=current_channel_data['id'])

            for input_to_add in current_channel_data['inputsToRemove']:
                connectable = In.objects.get(id=input_to_add['id'])
                connectable.inouts.add(current_channel);
                connectable.save()

            for input_to_remove in current_channel_data['inputsToRemove']:
                connectable = In.objects.get(id=input_to_add['id'])
                connectable.inouts.remove(current_channel);
                connectable.save()

            for output_to_add in current_channel_data['outputsToRemove']:
                connectable = Out.objects.get(id=output_to_add['id'])
                connectable.inouts.add(current_channel);
                connectable.save()

            for output_to_remove in current_channel_data['outputsToRemove']:
                connectable = Out.objects.get(id=output_to_add['id'])
                connectable.inouts.remove(current_channel);
                connectable.save()

            for inout_to_add in current_channel_data['inoutsToRemove']:
                inout_id = input_to_add['id']

                # search final id if needed
                if inout_to_add['provisional_id']:
                    inout_id = id_mapping[inout_id]['cid']

                relationship = RelatedInOut(in_inout=current_channel, out_inout=InOut.objects.get(id=inout_id))
                relationship.save()

            for output_to_remove in current_channel_data['outputsToRemove']:
                inout_id = input_to_add['id']

                # search final id if needed
                if inout_to_add['provisional_id']:
                    inout_id = id_mapping[inout_id]['cid']

                relationship = RelatedInOut.objects.get(in_inout=current_channel, out_inout=inout_id)
                relationship.delete()

        # Pashe 3: Deletions
        channels_to_remove = json['channelsToRemove']
        for current_channel_data in channels_to_remove:
            channel = InOut.objects.get(id=current_channel_data['id'])

            abstract_variable = channel.workspace_variable.abstract_variable

            VariableValue.objects.get(user=user, abstract_variable=abstract_variable).delete()

            abstract_variable.delete()
            channel.workspace_variable.delete()
            channel.delete()


        json_result = {'id_mapping': id_mapping}
        return HttpResponse (json_encode(json_result), mimetype='application/json; charset=UTF-8')
Exemplo n.º 10
0
    def create(self, request, workspace_id):
        user = get_user_authentication(request)

        # Gets all needed parameters from request
        if request.POST.has_key('json'):
            json = simplejson.loads(request.POST['json'])
        else:
            return HttpResponseBadRequest(_(u'JSON parameter expected'))

        try:
            workspace = WorkSpace.objects.get(id=workspace_id)

            #Mapping between provisional ids and database-generated ids!!!
            ids_mapping = []

            # Erasing variables associated with channels deleted explicitly by the user
            channelsDeletedByUser = json['channelsForRemoving']
            for deleted_channel_id in channelsDeletedByUser:
                #Removing workspace_variable and abstract_variable of channels deleted explicitly by user
                deleted_channel = InOut.objects.get(id=deleted_channel_id)

                abstract_variable = deleted_channel.workspace_variable.abstract_variable

                VariableValue.objects.get(
                    user=user, abstract_variable=abstract_variable).delete()

                abstract_variable.delete()
                deleted_channel.workspace_variable.delete()

            # Erasing all channels of the workspace!!
            old_channels = InOut.objects.filter(
                workspace_variable__workspace=workspace)
            if (old_channels):
                old_channels.delete()

            # Adding channels recreating JSON structure!
            new_channels = json['inOutList']
            for new_channel_data in new_channels:
                if (new_channel_data['provisional_id']):
                    #It's necessary to create all objects!

                    #Creating abstract variable
                    new_abstract_variable = AbstractVariable(
                        type="WORKSPACE", name=new_channel_data['name'])
                    new_abstract_variable.save()

                    #Creating variable value
                    new_variable_value = VariableValue(
                        user=user,
                        value="",
                        abstract_variable=new_abstract_variable)
                    new_variable_value.save()

                    new_ws_variable = WorkSpaceVariable(
                        workspace=workspace,
                        abstract_variable=new_abstract_variable,
                        aspect="CHANNEL")
                    new_ws_variable.save()

                    channel = InOut(name=new_channel_data['name'],
                                    workspace_variable=new_ws_variable,
                                    friend_code="")
                    channel.save()

                    #A channel has been generated. It's necessary to correlate provisional and definitive ids!
                    id_mapping = {}

                    id_mapping['id'] = channel.id
                    id_mapping['provisional_id'] = new_channel_data['id']
                    id_mapping['var_id'] = new_ws_variable.id

                    ids_mapping.append(id_mapping)
                else:
                    #WorkSpaceVariable objects is still in database, it's only necessary to link it!
                    workspace_variable = WorkSpaceVariable.objects.get(
                        id=new_channel_data['var_id'])

                    workspace_variable.abstract_variable.name = new_channel_data[
                        'name']
                    workspace_variable.abstract_variable.save()

                    channel = InOut(id=new_channel_data['id'],
                                    name=new_channel_data['name'],
                                    workspace_variable=workspace_variable,
                                    friend_code="")
                    channel.save()

                #Setting channel connections!

                #In connections
                ins = new_channel_data['ins']
                for input in ins:
                    if input['connectable_type'] == 'in':
                        connectable = In.objects.get(id=input['id'])
                    if input['connectable_type'] == 'inout':
                        connectable = InOut.objects.get(id=input['id'])

                    connectable.inouts.add(channel)
                    connectable.save()

                #Out connections
                outs = new_channel_data['outs']
                for output in outs:
                    if output['connectable_type'] == 'out':
                        connectable = Out.objects.get(id=output['id'])
                    if output['connectable_type'] == 'inout':
                        connectable = InOut.objects.get(id=output['id'])

                    connectable.inouts.add(channel)
                    connectable.save()

            # Saves all channels
            transaction.commit()

            json_result = {'ids': ids_mapping}

            return HttpResponse(json_encode(json_result),
                                mimetype='application/json; charset=UTF-8')
        except WorkSpace.DoesNotExist:
            transaction.rollback()

            msg = _(
                'referred workspace %(workspace_name)s does not exist.') % {
                    'workspace_name': workspace_name
                }
            log(msg, request)
            return HttpResponseBadRequest(get_xml_error(msg))

        except Exception, e:
            transaction.rollback()
            msg = _('connectables cannot be saved: %(exc)s') % {'exc': e}
            log(msg, request)
            return HttpResponseBadRequest(msg)
Exemplo n.º 11
0
    def create(self, request, workspace_id):
        user = get_user_authentication(request)

        # Gets all needed parameters from request
        if request.POST.has_key('json'):
            json = simplejson.loads(request.POST['json'])
        else:
            return HttpResponseBadRequest (_(u'JSON parameter expected'))

        try:
            workspace = WorkSpace.objects.get(id=workspace_id)

            # Mapping between provisional ids and database-generated ids!!!
            id_mapping = {}

            # Erasing variables associated with channels deleted explicitly by the user
            channelsDeletedByUser = json['channelsForRemoving']
            for deleted_channel_id in channelsDeletedByUser:
                #Removing workspace_variable and abstract_variable of channels deleted explicitly by user
                deleted_channel = InOut.objects.get(id=deleted_channel_id)

                abstract_variable = deleted_channel.workspace_variable.abstract_variable

                VariableValue.objects.get(user=user, abstract_variable=abstract_variable).delete()

                abstract_variable.delete()
                deleted_channel.workspace_variable.delete()

            # Erasing all channels of the workspace!!
            old_channels = InOut.objects.filter(workspace_variable__workspace=workspace)
            if old_channels:
                for old_channel in old_channels:
                    # Deleting the old relationships between channels
                    # First delete the relationships where old_channel is the input
                    rel_old_channels = RelatedInOut.objects.filter(in_inout=old_channel)
                    if rel_old_channels:
                        rel_old_channels.delete()

                    # And then the relationships where old_channel is the output
                    rel_old_channels = RelatedInOut.objects.filter(out_inout=old_channel)
                    if rel_old_channels:
                        rel_old_channels.delete()

                old_channels.delete()

            # Adding channels recreating JSON structure!
            new_channels = json['inOutList']
            for new_channel_data in new_channels:
                if (new_channel_data['provisional_id']):
                    #It's necessary to create all objects!

                    #Creating abstract variable
                    new_abstract_variable = AbstractVariable(type="WORKSPACE", name=new_channel_data['name'])
                    new_abstract_variable.save()

                    #Creating variable value
                    new_variable_value = VariableValue(user=user, value="", abstract_variable=new_abstract_variable)
                    new_variable_value.save()

                    new_ws_variable = WorkSpaceVariable(workspace=workspace, abstract_variable=new_abstract_variable, aspect="CHANNEL")
                    new_ws_variable.save()

                    filter = None
                    fparam_values = None
                    if new_channel_data['filter']:
                        try:
                            filter = Filter.objects.get(id=new_channel_data['filter'])
                            fparam_values = new_channel_data['filter_params']
                        except Filter.DoesNotExist:
                            pass

                    channel = InOut(name=new_channel_data['name'], workspace_variable=new_ws_variable, filter=filter, filter_param_values=fparam_values, friend_code="")
                    channel.save()

                    # A channel has been generated. It's necessary to correlate provisional and definitive ids!
                    id_mapping[new_channel_data['id']] = {'new_id': channel.id, 'new_wv_id': new_ws_variable.id}

                else:
                    #WorkSpaceVariable objects is still in database, it's only necessary to link it!
                    workspace_variable = WorkSpaceVariable.objects.get(id=new_channel_data['var_id'])

                    workspace_variable.abstract_variable.name = new_channel_data['name']
                    workspace_variable.abstract_variable.save()

                    try:
                        filter = Filter.objects.get(id=new_channel_data['filter'])
                        fparam_values = new_channel_data['filter_params']
                    except Filter.DoesNotExist:
                        filter = None
                        fparam_values = None

                    channel = InOut(id=new_channel_data['id'], name=new_channel_data['name'], workspace_variable=workspace_variable, filter=filter, filter_param_values=fparam_values, friend_code="")
                    channel.save()

                # In connections
                # InOut out connections will be created later
                ins = new_channel_data['ins']
                for inputId in ins:
                    connectable = In.objects.get(id=inputId)
                    connectable.inouts.add(channel);
                    connectable.save()

                # Out connections
                # InOut out connections will be created later
                outs = new_channel_data['outs']
                for outputId in outs:
                    connectable = Out.objects.get(id=outputId)
                    connectable.inouts.add(channel);
                    connectable.save()

            # Now it is time to recreate channel to channel connections
            for new_channel_data in new_channels:
                inouts = new_channel_data['inouts']
                for inout_to_add in inouts:
                    inout_id = inout_to_add['id']

                    # search final id if needed
                    if inout_to_add['provisional_id']:
                        inout_id = id_mapping[inout_id]['new_id']

                    relationship = RelatedInOut(in_inout=channel, out_inout=InOut.objects.get(id=inout_id))
                    relationship.save()

            # Saves all channels
            #transaction.commit()

            json_result = {'ids': id_mapping}

            return HttpResponse (json_encode(json_result), mimetype='application/json; charset=UTF-8')
        except WorkSpace.DoesNotExist:
            msg = _('referred workspace %(workspace_name)s does not exist.') % {'workspace_name': workspace_name}
            raise TracedServerError(e, json, request, msg)

        except Exception, e:
            msg = _('connectables cannot be saved: %(exc)s') % {'exc': e}
            raise TracedServerError(e, json, request, msg)
Exemplo n.º 12
0
    def create(self, request, user_name, screen_id=None):
        user = user_authentication(user_name)

        # Gets all needed parameters from request
        if request.POST.has_key('json'):
            json = simplejson.loads(request.POST['json'])
        else:
            return HttpResponseBadRequest (_(u'JSON parameter expected'))
        
        #TODO Remove this. Sets user screen by default 
        if not screen_id:
        		screen_id = 1

        try:
            #Gets current user screen
            screen = Screen.objects.get(user=user, code=screen_id)
            
            igadgets = json['iGadgetList']
            for igadget in igadgets:
                igadget_object = IGadget.objects.get(screen=screen, code=igadget['id'])

                # Save all IGadget connections (in and out variables)
                for var in igadget['list']:
                    var_object = Variable.objects.get(uri=var['uri'], vardef__name=var['name'], igadget=igadget_object)

                    # Remove existed connections
                    Out.objects.filter(variable=var_object).delete()
                    In.objects.filter(variable=var_object).delete()
        
                    # Saves IN connection
                    if var['aspect'] == 'EVEN':
                        uri_in = "/user/%s/igadgets/%s/in/%s" % (user_name, igadget_object.code, var['name'])
                        in_object = In(uri=uri_in, name=var['name'], variable=var_object)
                        in_object.save()

                    # Saves OUT connection
                    if var['aspect'] == 'SLOT':
                        uri_out = "/user/%s/igadgets/%s/out/%s" % (user_name, igadget_object.code, var['name'])
                        out_object = Out(uri=uri_out, name=var['name'], variable=var_object)
                        out_object.save()
            
            # Delete channels
            InOut.objects.filter(user=user).delete()

            # Saves all channels
            for inout in json['inOutList']:
                inout_object = None
                inout_object = InOut(user=user, uri=inout['uri'], name=inout['name'], friend_code=inout['friend_code'], value=inout['value'])
                inout_object.save()
                
                # Saves all channel inputs
                for ins in inout['ins']:            
                    igadget_object = IGadget.objects.get(screen=screen, code=ins['igadget'])
                    var_object = Variable.objects.get(vardef__name=ins['name'], igadget=igadget_object)
                    connected_in = In.objects.get(variable=var_object)
                    connected_in.inout.add(inout_object)
                    
                # Saves all channel outputs
                for out in inout['outs']:            
                    igadget_object = IGadget.objects.get(screen=screen, code=out['igadget'])
                    var_object = Variable.objects.get(vardef__name=out['name'], igadget=igadget_object)
                    connected_out = Out.objects.get(variable=var_object)
                    connected_out.inout.add(inout_object)
                                          
            transaction.commit()
            return HttpResponse ('ok')
        except Screen.DoesNotExist:
            transaction.rollback()
            return HttpResponseBadRequest(_('refered screen %(screen_id)s doesn\'t exists.') % {'screen_id': screen_id})
        except IGadget.DoesNotExist:
            transaction.rollback()
            return HttpResponseBadRequest(_('refered igadget doesn\'t exists.'))
        except Variable.DoesNotExist:
            transaction.rollback()
            return HttpResponseBadRequest(_('refered variable doesn\'t exists.'))
        except Exception, e:
            transaction.rollback()
            return HttpResponseBadRequest(_('connectables cannot be save: %(exc)s') % {'exc': e})
Exemplo n.º 13
0
    def create(self, request, workspace_id):
        user = get_user_authentication(request)

        # Gets all needed parameters from request
        if request.POST.has_key('json'):
            json = simplejson.loads(request.POST['json'])
        else:
            return HttpResponseBadRequest(_(u'JSON parameter expected'))

        try:
            workspace = WorkSpace.objects.get(id=workspace_id)

            # Mapping between provisional ids and database-generated ids!!!
            id_mapping = {}

            # Erasing variables associated with channels deleted explicitly by the user
            channelsDeletedByUser = json['channelsForRemoving']
            for deleted_channel_id in channelsDeletedByUser:
                #Removing workspace_variable and abstract_variable of channels deleted explicitly by user
                deleted_channel = InOut.objects.get(id=deleted_channel_id)

                abstract_variable = deleted_channel.workspace_variable.abstract_variable

                VariableValue.objects.get(
                    user=user, abstract_variable=abstract_variable).delete()

                abstract_variable.delete()
                deleted_channel.workspace_variable.delete()

            # Erasing all channels of the workspace!!
            old_channels = InOut.objects.filter(
                workspace_variable__workspace=workspace)
            if old_channels:
                for old_channel in old_channels:
                    # Deleting the old relationships between channels
                    # First delete the relationships where old_channel is the input
                    rel_old_channels = RelatedInOut.objects.filter(
                        in_inout=old_channel)
                    if rel_old_channels:
                        rel_old_channels.delete()

                    # And then the relationships where old_channel is the output
                    rel_old_channels = RelatedInOut.objects.filter(
                        out_inout=old_channel)
                    if rel_old_channels:
                        rel_old_channels.delete()

                old_channels.delete()

            # Adding channels recreating JSON structure!
            new_channels = json['inOutList']
            for new_channel_data in new_channels:
                if (new_channel_data['provisional_id']):
                    #It's necessary to create all objects!

                    #Creating abstract variable
                    new_abstract_variable = AbstractVariable(
                        type="WORKSPACE", name=new_channel_data['name'])
                    new_abstract_variable.save()

                    #Creating variable value
                    new_variable_value = VariableValue(
                        user=user,
                        value="",
                        abstract_variable=new_abstract_variable)
                    new_variable_value.save()

                    new_ws_variable = WorkSpaceVariable(
                        workspace=workspace,
                        abstract_variable=new_abstract_variable,
                        aspect="CHANNEL")
                    new_ws_variable.save()

                    filter = None
                    fparam_values = None
                    if new_channel_data['filter']:
                        try:
                            filter = Filter.objects.get(
                                id=new_channel_data['filter'])
                            fparam_values = new_channel_data['filter_params']
                        except Filter.DoesNotExist:
                            pass

                    channel = InOut(name=new_channel_data['name'],
                                    workspace_variable=new_ws_variable,
                                    filter=filter,
                                    filter_param_values=fparam_values,
                                    friend_code="")
                    channel.save()

                    # A channel has been generated. It's necessary to correlate provisional and definitive ids!
                    id_mapping[new_channel_data['id']] = {
                        'new_id': channel.id,
                        'new_wv_id': new_ws_variable.id
                    }

                else:
                    #WorkSpaceVariable objects is still in database, it's only necessary to link it!
                    workspace_variable = WorkSpaceVariable.objects.get(
                        id=new_channel_data['var_id'])

                    workspace_variable.abstract_variable.name = new_channel_data[
                        'name']
                    workspace_variable.abstract_variable.save()

                    try:
                        filter = Filter.objects.get(
                            id=new_channel_data['filter'])
                        fparam_values = new_channel_data['filter_params']
                    except Filter.DoesNotExist:
                        filter = None
                        fparam_values = None

                    channel = InOut(id=new_channel_data['id'],
                                    name=new_channel_data['name'],
                                    workspace_variable=workspace_variable,
                                    filter=filter,
                                    filter_param_values=fparam_values,
                                    friend_code="")
                    channel.save()

                # In connections
                # InOut out connections will be created later
                ins = new_channel_data['ins']
                for inputId in ins:
                    connectable = In.objects.get(id=inputId)
                    connectable.inouts.add(channel)
                    connectable.save()

                # Out connections
                # InOut out connections will be created later
                outs = new_channel_data['outs']
                for outputId in outs:
                    connectable = Out.objects.get(id=outputId)
                    connectable.inouts.add(channel)
                    connectable.save()

            # Now it is time to recreate channel to channel connections
            for new_channel_data in new_channels:
                inouts = new_channel_data['inouts']
                for inout_to_add in inouts:
                    inout_id = inout_to_add['id']

                    # search final id if needed
                    if inout_to_add['provisional_id']:
                        inout_id = id_mapping[inout_id]['new_id']

                    relationship = RelatedInOut(
                        in_inout=channel,
                        out_inout=InOut.objects.get(id=inout_id))
                    relationship.save()

            # Saves all channels
            #transaction.commit()

            json_result = {'ids': id_mapping}

            return HttpResponse(json_encode(json_result),
                                mimetype='application/json; charset=UTF-8')
        except WorkSpace.DoesNotExist:
            msg = _(
                'referred workspace %(workspace_name)s does not exist.') % {
                    'workspace_name': workspace_name
                }
            raise TracedServerError(e, json, request, msg)

        except Exception, e:
            msg = _('connectables cannot be saved: %(exc)s') % {'exc': e}
            raise TracedServerError(e, json, request, msg)