Exemplo n.º 1
0
jni_result
jni_participantFree(
    jni_participant p)
{
    jni_result r;
    jni_partition partition;
    
    r = JNI_RESULT_OK;
    
    if(p != NULL){
        if((p->publishers != NULL) && (c_iterLength(p->publishers) != 0)){
            r = JNI_RESULT_PRECONDITION_NOT_MET;
        }
        else if((p->subscribers != NULL) && (c_iterLength(p->subscribers) != 0)){
            r = JNI_RESULT_PRECONDITION_NOT_MET;
        }
        else if((p->topics != NULL) && (c_iterLength(p->topics) != 0)){
            r = JNI_RESULT_PRECONDITION_NOT_MET;
        }
        else if((p->partitions != NULL) && (c_iterLength(p->partitions) != 0)){
            partition = jni_partition(c_iterTakeFirst(p->partitions));
            
            while((partition != NULL) && (r == JNI_RESULT_OK)){
                r = jni_partitionFree(partition);
                partition = jni_partition(c_iterTakeFirst(p->partitions));
            }
        }
        else{
          /*DO NOTHING.*/
        }
        
        if(r == JNI_RESULT_OK){
            if(p->publishers != NULL){
                c_iterFree(p->publishers);
            }
            if(p->subscribers != NULL){
                c_iterFree(p->subscribers);
            }
            if(p->topics != NULL){
                c_iterFree(p->topics);
            }
            if(p->partitions != NULL){
                c_iterFree(p->partitions);
            }
            if(p->uparticipant != NULL){
                r = jni_convertResult(u_participantFree(p->uparticipant));
            }
            else{
                r = JNI_RESULT_OK;
            }
            os_free(p);
        }        
    }
    else{
        r = JNI_RESULT_BAD_PARAMETER;
    }
    return r;
}
Exemplo n.º 2
0
jni_result
jni_participantAddPartition(
    jni_participant p,
    const c_char* partitionName)
{
    jni_result r;
    c_iter partCopy;
    jni_partition partition, partNew;
    int found;
    
    r = JNI_RESULT_OK;
    
    if((p == NULL) || (partitionName == NULL)){
        r = JNI_RESULT_BAD_PARAMETER;
    }
    else if((strcmp(partitionName, "*") == 0) ||
            (strcmp(partitionName, "") == 0)){
        /*DO NOTHING*/
    } 
    else{
        /*Check if the partitionName already exists.*/
        partCopy = c_iterCopy(p->partitions);
        partition = jni_partition(c_iterTakeFirst(partCopy));
        found = 0;
        
        while((partition != NULL) && (!found)){
            if(strcmp(partition->name, partitionName) == 0){
                found = 1;
            }
            partition = jni_partition(c_iterTakeFirst(partCopy));
        }    
        c_iterFree(partCopy);
        
        if(!found){
            partNew = jni_partitionNew(p, partitionName, NULL);
            
            if(partNew == NULL){
                r = JNI_RESULT_ERROR;
            }
            else{
                p->partitions = c_iterInsert(p->partitions, partNew);
            }
        }
    }
    return r;
}
Exemplo n.º 3
0
jni_partition
jni_partitionNew(
    jni_participant p, 
    const c_char* name,
    v_partitionQos qos)
{
    jni_partition _this;
    u_partition upartition;
    
    _this = NULL;
    
    if((p != NULL) && (p->uparticipant != NULL) && (name != NULL)){
        upartition = u_partitionNew(p->uparticipant, name, qos);

        if(upartition != NULL){            
            _this = jni_partition(os_malloc((size_t)(C_SIZEOF(jni_partition))));
            _this->name = name;
            _this->upartition = upartition;
        }
    }
    return _this;
}
Exemplo n.º 4
0
jni_result
jni_deleteParticipantEntities(
    jni_participant p)
{
    jni_result r;
    c_iter pubCopy, subCopy, topCopy, partCopy;
    jni_publisher pub;
    jni_subscriber sub;
    jni_topic top;
    jni_partition partition;
    int proceed;
    
    assert(p != NULL);
    proceed = 1;
    r = JNI_RESULT_OK;
    
    if(p->publishers != NULL){
        pubCopy = c_iterCopy(p->publishers);
        pub = jni_publisher(c_iterTakeFirst(pubCopy));
        
        while( (pub != NULL) && proceed){
            r = jni_deletePublisherEntities(pub);
            
            if(r != JNI_RESULT_OK){
                c_iterFree(pubCopy);
                proceed = 0;
            }
            if(proceed){
                r = jni_deletePublisher(p, pub);
                
                if(r != JNI_RESULT_OK){
                    c_iterFree(pubCopy);
                    proceed = 0;
                }
            }
            pub = jni_publisher(c_iterTakeFirst(pubCopy));
        }
        if(proceed){
            c_iterFree(pubCopy);
            c_iterFree(p->publishers);
            p->publishers = c_iterNew(NULL);
        }
    }
    if((p->subscribers != NULL) && proceed){
        subCopy = c_iterCopy(p->subscribers);
        sub = jni_subscriber(c_iterTakeFirst(subCopy));
        
        while((sub != NULL) && proceed){
            r = jni_deleteSubscriberEntities(sub);
            
            if(r != JNI_RESULT_OK){
                c_iterFree(subCopy);
                proceed = 0;
            }
            if(proceed){
                r = jni_deleteSubscriber(p, sub);
                
                if(r != JNI_RESULT_OK){
                    c_iterFree(subCopy);
                    proceed = 0;
                }
            }
            sub = jni_subscriber(c_iterTakeFirst(subCopy));
        }
        if(proceed){
            c_iterFree(subCopy);
            c_iterFree(p->subscribers);
            p->subscribers = c_iterNew(NULL);
        }
    }
    if((p->topics != NULL) && proceed){
        topCopy = c_iterCopy(p->topics);
        top = jni_topic(c_iterTakeFirst(topCopy));
        
        while((top != NULL) && proceed){
            r = jni_deleteTopic(p, top);
            
            if(r != JNI_RESULT_OK){
                c_iterFree(topCopy);
                proceed = 0;
            }
            
            top = jni_topic(c_iterTakeFirst(topCopy));
        }
        if(proceed){
            c_iterFree(topCopy);
            c_iterFree(p->topics);
            p->topics = c_iterNew(NULL);
        }
    }
    if((p->partitions != NULL) && proceed){
        partCopy = c_iterCopy(p->partitions);
        partition = jni_partition(c_iterTakeFirst(partCopy));
        
        while((partition != NULL) && proceed){
            r = jni_partitionFree(partition);
            
            if(r != JNI_RESULT_OK){
                c_iterFree(partCopy);
                proceed = 0;
            }
            partition = jni_partition(c_iterTakeFirst(partCopy));
        }
        if(proceed){
            c_iterFree(partCopy);
            c_iterFree(p->partitions);
            p->partitions = c_iterNew(NULL);
        }
    }
    return r;
}