00001
00002
00003
00004
00005
00006 #include "modDataObjMeta.h"
00007 #include "icatHighLevelRoutines.h"
00008 #include "objMetaOpr.h"
00009 #include "dataObjOpr.h"
00010
00011 int
00012 rsModDataObjMeta (rsComm_t *rsComm, modDataObjMeta_t *modDataObjMetaInp)
00013 {
00014 int status;
00015 rodsServerHost_t *rodsServerHost = NULL;
00016 dataObjInfo_t *dataObjInfo;
00017 keyValPair_t *regParam;
00018
00019 regParam = modDataObjMetaInp->regParam;
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,
00077 "_rsModDataObjMeta:acPreProcForModifyDataObjMeta error stat=%d", i);
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,
00091 &dataObjInfoHead);
00092 if (status < 0) return status;
00093 tmpDataObjInfo = dataObjInfoHead;
00094 while (tmpDataObjInfo != NULL) {
00095 if (tmpDataObjInfo->specColl != NULL) break;
00096 status = chlModDataObjMeta (rsComm, tmpDataObjInfo, regParam);
00097 if (status < 0) {
00098 rodsLog (LOG_ERROR,
00099 "_rsModDataObjMeta:chlModDataObjMeta %s error stat=%d",
00100 tmpDataObjInfo->objPath, status);
00101 }
00102 tmpDataObjInfo = tmpDataObjInfo->next;
00103 }
00104 freeAllDataObjInfo (dataObjInfoHead);
00105 } else {
00106 status = chlModDataObjMeta (rsComm, dataObjInfo, regParam);
00107 }
00108
00109
00110 if (status >= 0) {
00111 i = applyRule("acPostProcForModifyDataObjMeta",NULL, &rei2, NO_SAVE_REI);
00112 if (i < 0) {
00113 if (rei2.status < 0) {
00114 i = rei2.status;
00115 }
00116 rodsLog (LOG_ERROR,
00117 "_rsModDataObjMeta:acPostProcForModifyDataObjMeta error stat=%d",i);
00118 return i;
00119 }
00120 }
00121
00122
00123 return (status);
00124 #else
00125 return (SYS_NO_RCAT_SERVER_ERR);
00126 #endif
00127
00128 }
00129
00130