00001
00002
00003
00004
00005
00006
00007
00008 #include "modDataObjMeta.h"
00009 #include "icatHighLevelRoutines.h"
00010 #include "objMetaOpr.h"
00011 #include "dataObjOpr.h"
00012
00013 int
00014 rsModDataObjMeta (rsComm_t *rsComm, modDataObjMeta_t *modDataObjMetaInp)
00015 {
00016 int status;
00017 rodsServerHost_t *rodsServerHost = NULL;
00018 dataObjInfo_t *dataObjInfo;
00019
00020 dataObjInfo = modDataObjMetaInp->dataObjInfo;
00021
00022 status = getAndConnRcatHost (rsComm, MASTER_RCAT, dataObjInfo->objPath,
00023 &rodsServerHost);
00024 if (status < 0 || NULL == rodsServerHost ) {
00025 return(status);
00026 }
00027 if (rodsServerHost->localFlag == LOCAL_HOST) {
00028 #ifdef RODS_CAT
00029 status = _rsModDataObjMeta (rsComm, modDataObjMetaInp);
00030 #else
00031 status = SYS_NO_RCAT_SERVER_ERR;
00032 #endif
00033 } else {
00034 status = rcModDataObjMeta (rodsServerHost->conn, modDataObjMetaInp);
00035 }
00036
00037 return (status);
00038 }
00039
00040 int
00041 _rsModDataObjMeta (rsComm_t *rsComm, modDataObjMeta_t *modDataObjMetaInp)
00042 {
00043 #ifdef RODS_CAT
00044 int status;
00045 dataObjInfo_t *dataObjInfo;
00046 keyValPair_t *regParam;
00047 int i;
00048 ruleExecInfo_t rei2;
00049
00050 memset ((char*)&rei2, 0, sizeof (ruleExecInfo_t));
00051 rei2.rsComm = rsComm;
00052 if (rsComm != NULL) {
00053 rei2.uoic = &rsComm->clientUser;
00054 rei2.uoip = &rsComm->proxyUser;
00055 }
00056 rei2.doi = modDataObjMetaInp->dataObjInfo;
00057 rei2.condInputData = modDataObjMetaInp->regParam;
00058 regParam = modDataObjMetaInp->regParam;
00059 dataObjInfo = modDataObjMetaInp->dataObjInfo;
00060
00061 if (regParam->len == 0) {
00062 return (0);
00063 }
00064
00065
00066
00067
00068
00069
00070 rei2.doi = dataObjInfo;
00071 i = applyRule("acPreProcForModifyDataObjMeta",NULL, &rei2, NO_SAVE_REI);
00072 if (i < 0) {
00073 if (rei2.status < 0) {
00074 i = rei2.status;
00075 }
00076 rodsLog (LOG_ERROR,"_rsModDataObjMeta:acPreProcForModifyDataObjMeta error stat=%d", i);
00077
00078 return i;
00079 }
00080
00081
00082 if (getValByKey (regParam, ALL_KW) != NULL) {
00083
00084 dataObjInfo_t *dataObjInfoHead = NULL;
00085 dataObjInfo_t *tmpDataObjInfo;
00086 dataObjInp_t dataObjInp;
00087
00088 bzero (&dataObjInp, sizeof (dataObjInp));
00089 rstrcpy (dataObjInp.objPath, dataObjInfo->objPath, MAX_NAME_LEN);
00090 status = getDataObjInfoIncSpecColl (rsComm, &dataObjInp,&dataObjInfoHead);
00091
00092 if (status < 0) {
00093 rodsLog(LOG_NOTICE, "%s - Failed to get data objects.", __FUNCTION__);
00094 return status;
00095 }
00096 tmpDataObjInfo = dataObjInfoHead;
00097 while (tmpDataObjInfo != NULL) {
00098 if (tmpDataObjInfo->specColl != NULL)
00099 break;
00100 status = chlModDataObjMeta (rsComm, tmpDataObjInfo, regParam);
00101 if (status < 0) {
00102 rodsLog (LOG_ERROR,
00103 "_rsModDataObjMeta:chlModDataObjMeta %s error stat=%d",
00104 tmpDataObjInfo->objPath, status);
00105 }
00106 tmpDataObjInfo = tmpDataObjInfo->next;
00107 }
00108 freeAllDataObjInfo (dataObjInfoHead);
00109 } else {
00110 status = chlModDataObjMeta (rsComm, dataObjInfo, regParam);
00111 }
00112
00113
00114 if (status >= 0) {
00115 i = applyRule("acPostProcForModifyDataObjMeta",NULL, &rei2, NO_SAVE_REI);
00116 if (i < 0) {
00117 if (rei2.status < 0) {
00118 i = rei2.status;
00119 }
00120 rodsLog (LOG_ERROR,
00121 "_rsModDataObjMeta:acPostProcForModifyDataObjMeta error stat=%d",i);
00122 return i;
00123 }
00124 } else {
00125 rodsLog(LOG_NOTICE, "%s - Failed updating the database with object info.", __FUNCTION__);
00126 return status;
00127 }
00128
00129
00130 return (status);
00131 #else
00132 return (SYS_NO_RCAT_SERVER_ERR);
00133 #endif
00134
00135 }
00136
00137