/* Modify (add or remove) AVUs */ int modAVUMetadata(char *arg0, char *arg1, char *arg2, char *arg3, char *arg4, char *arg5, char *arg6, char *arg7, char *arg8) { modAVUMetadataInp_t modAVUMetadataInp; int status; char *mySubName; char *myName; char fullName[MAX_NAME_LEN]; strncpy(fullName, cwd, MAX_NAME_LEN); if (strcmp(arg1,"-R")==0 || strcmp(arg1,"-r")==0 || strcmp(arg1,"-G")==0 || strcmp(arg1,"-g")==0 || strcmp(arg1,"-u")==0) { strncpy(fullName, arg2, MAX_NAME_LEN); } else { if (strlen(arg2)>0) { if (*arg2=='/') { strncpy(fullName, arg2, MAX_NAME_LEN); } else { rstrcat(fullName, "/", MAX_NAME_LEN); rstrcat(fullName, arg2, MAX_NAME_LEN); } } } modAVUMetadataInp.arg0 = arg0; modAVUMetadataInp.arg1 = arg1; modAVUMetadataInp.arg2 = fullName; modAVUMetadataInp.arg3 = arg3; modAVUMetadataInp.arg4 = arg4; modAVUMetadataInp.arg5 = arg5; modAVUMetadataInp.arg6 = arg6; modAVUMetadataInp.arg7 = arg7; modAVUMetadataInp.arg8 = arg8; modAVUMetadataInp.arg9 =""; status = rcModAVUMetadata(Conn, &modAVUMetadataInp); lastCommandStatus = status; if (status < 0 ) { if (Conn->rError) { rError_t *Err; rErrMsg_t *ErrMsg; int i, len; Err = Conn->rError; len = Err->len; for (i=0;i<len;i++) { ErrMsg = Err->errMsg[i]; rodsLog(LOG_ERROR, "Level %d: %s",i, ErrMsg->msg); } } myName = rodsErrorName(status, &mySubName); rodsLog (LOG_ERROR, "rcModAVUMetadata failed with error %d %s %s", status, myName, mySubName); } return(status); }
int rsModAVUMetadata (rsComm_t *rsComm, modAVUMetadataInp_t *modAVUMetadataInp ) { rodsServerHost_t *rodsServerHost; int status; char *myHint; if (strcmp(modAVUMetadataInp->arg0,"add")==0) { myHint = modAVUMetadataInp->arg2; } else if (strcmp(modAVUMetadataInp->arg0,"adda")==0) { myHint = modAVUMetadataInp->arg2; } else if (strcmp(modAVUMetadataInp->arg0,"addw")==0) { myHint = modAVUMetadataInp->arg2; } else if (strcmp(modAVUMetadataInp->arg0,"rmw")==0) { myHint = modAVUMetadataInp->arg2; } else if (strcmp(modAVUMetadataInp->arg0,"rmi")==0) { myHint = modAVUMetadataInp->arg2; } else if (strcmp(modAVUMetadataInp->arg0,"rm")==0) { myHint = modAVUMetadataInp->arg2; } else if (strcmp(modAVUMetadataInp->arg0,"cp")==0) { myHint = modAVUMetadataInp->arg3; } else if (strcmp(modAVUMetadataInp->arg0,"mod")==0) { myHint = modAVUMetadataInp->arg2; } else if (strcmp(modAVUMetadataInp->arg0,"set")==0) { myHint = modAVUMetadataInp->arg2; } else { /* assume local */ myHint = NULL; } status = getAndConnRcatHost(rsComm, MASTER_RCAT, myHint, &rodsServerHost); if (status < 0) { return(status); } if (rodsServerHost->localFlag == LOCAL_HOST) { #ifdef RODS_CAT status = _rsModAVUMetadata (rsComm, modAVUMetadataInp); #else status = SYS_NO_RCAT_SERVER_ERR; #endif } else { status = rcModAVUMetadata(rodsServerHost->conn, modAVUMetadataInp); } if (status < 0) { rodsLog (LOG_NOTICE, "rsModAVUMetadata: rcModAVUMetadata failed"); } return (status); }
int rsModAVUMetadata( rsComm_t *rsComm, modAVUMetadataInp_t *modAVUMetadataInp ) { rodsServerHost_t *rodsServerHost; int status; char *myHint; if ( strcmp( modAVUMetadataInp->arg0, "add" ) == 0 ) { myHint = modAVUMetadataInp->arg2; } else if ( strcmp( modAVUMetadataInp->arg0, "adda" ) == 0 ) { myHint = modAVUMetadataInp->arg2; } else if ( strcmp( modAVUMetadataInp->arg0, "addw" ) == 0 ) { myHint = modAVUMetadataInp->arg2; } else if ( strcmp( modAVUMetadataInp->arg0, "rmw" ) == 0 ) { myHint = modAVUMetadataInp->arg2; } else if ( strcmp( modAVUMetadataInp->arg0, "rmi" ) == 0 ) { myHint = modAVUMetadataInp->arg2; } else if ( strcmp( modAVUMetadataInp->arg0, "rm" ) == 0 ) { myHint = modAVUMetadataInp->arg2; } else if ( strcmp( modAVUMetadataInp->arg0, "cp" ) == 0 ) { myHint = modAVUMetadataInp->arg3; } else if ( strcmp( modAVUMetadataInp->arg0, "mod" ) == 0 ) { myHint = modAVUMetadataInp->arg2; } else if ( strcmp( modAVUMetadataInp->arg0, "set" ) == 0 ) { // JMC - backport 4836 myHint = modAVUMetadataInp->arg2; } else { /* assume local */ myHint = NULL; } status = getAndConnRcatHost( rsComm, MASTER_RCAT, ( const char* )myHint, &rodsServerHost ); if ( status < 0 ) { return status; } if ( rodsServerHost->localFlag == LOCAL_HOST ) { std::string svc_role; irods::error ret = get_catalog_service_role(svc_role); if(!ret.ok()) { irods::log(PASS(ret)); return ret.code(); } if( irods::CFG_SERVICE_ROLE_PROVIDER == svc_role ) { status = _rsModAVUMetadata( rsComm, modAVUMetadataInp ); } else if( irods::CFG_SERVICE_ROLE_CONSUMER == svc_role ) { status = SYS_NO_RCAT_SERVER_ERR; } else { rodsLog( LOG_ERROR, "role not supported [%s]", svc_role.c_str() ); status = SYS_SERVICE_ROLE_NOT_SUPPORTED; } } else { status = rcModAVUMetadata( rodsServerHost->conn, modAVUMetadataInp ); } if ( status < 0 ) { rodsLog( LOG_NOTICE, "rsModAVUMetadata: rcModAVUMetadata failed" ); } return status; }
/* Modify (copy) AVUs */ int modCopyAVUMetadata(char *arg0, char *arg1, char *arg2, char *arg3, char *arg4, char *arg5, char *arg6, char *arg7) { modAVUMetadataInp_t modAVUMetadataInp; int status; char *mySubName; char *myName; char fullName1[MAX_NAME_LEN]; char fullName2[MAX_NAME_LEN]; strncpy(fullName1, cwd, MAX_NAME_LEN); if (strcmp(arg1,"-R")==0 || strcmp(arg1,"-r")==0 || strcmp(arg1,"-G")==0 || strcmp(arg1,"-g")==0 || strcmp(arg1,"-u")==0) { strncpy(fullName1, arg3, MAX_NAME_LEN); } else { if (strlen(arg3)>0) { if (*arg3=='/') { strncpy(fullName1, arg3, MAX_NAME_LEN); } else { rstrcat(fullName1, "/", MAX_NAME_LEN); rstrcat(fullName1, arg3, MAX_NAME_LEN); } } } strncpy(fullName2, cwd, MAX_NAME_LEN); if (strcmp(arg2,"-R")==0 || strcmp(arg2,"-r")==0 || strcmp(arg2,"-G")==0 || strcmp(arg2,"-g")==0 || strcmp(arg2,"-u")==0) { strncpy(fullName2, arg4, MAX_NAME_LEN); } else { if (strlen(arg4)>0) { if (*arg4=='/') { strncpy(fullName2, arg4, MAX_NAME_LEN); } else { rstrcat(fullName2, "/", MAX_NAME_LEN); rstrcat(fullName2, arg4, MAX_NAME_LEN); } } } modAVUMetadataInp.arg0 = arg0; modAVUMetadataInp.arg1 = arg1; modAVUMetadataInp.arg2 = arg2; modAVUMetadataInp.arg3 = fullName1; modAVUMetadataInp.arg4 = fullName2; modAVUMetadataInp.arg5 = arg5; modAVUMetadataInp.arg6 = arg6; modAVUMetadataInp.arg7 = arg7; modAVUMetadataInp.arg8 =""; modAVUMetadataInp.arg9 =""; status = rcModAVUMetadata(Conn, &modAVUMetadataInp); lastCommandStatus = status; if (status < 0 ) { if (Conn->rError) { rError_t *Err; rErrMsg_t *ErrMsg; int i, len; Err = Conn->rError; len = Err->len; for (i=0;i<len;i++) { ErrMsg = Err->errMsg[i]; rodsLog(LOG_ERROR, "Level %d: %s",i, ErrMsg->msg); } } myName = rodsErrorName(status, &mySubName); rodsLog (LOG_ERROR, "rcModAVUMetadata failed with error %d %s %s", status, myName, mySubName); } if (status == CAT_UNKNOWN_FILE) { char tempName[MAX_NAME_LEN]="/"; int len; int isRemote=0; strncat(tempName, myEnv.rodsZone, MAX_NAME_LEN); len = strlen(tempName); if (strncmp(tempName, fullName1, len) != 0) { printf("Cannot copy metadata from a remote zone.\n"); isRemote=1; } if (strncmp(tempName, fullName2, len) != 0) { printf("Cannot copy metadata to a remote zone.\n"); isRemote=1; } if (isRemote) { printf("Copying of metadata is done via SQL within each ICAT\n"); printf("for efficiency. Copying metadata between zones is\n"); printf("not implemented.\n"); } } return(status); }