00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #include "fileRename.h"
00011 #include "miscServerFunct.h"
00012 #include "fileOpr.h"
00013 #include "dataObjOpr.h"
00014 #include "physPath.h"
00015
00016
00017
00018 #include "eirods_log.h"
00019 #include "eirods_file_object.h"
00020 #include "eirods_stacktrace.h"
00021 #include "eirods_resource_backport.h"
00022
00023 int
00024 rsFileRename (rsComm_t *rsComm, fileRenameInp_t *fileRenameInp)
00025 {
00026 rodsServerHost_t *rodsServerHost;
00027 int remoteFlag;
00028 int status;
00029
00030
00031 eirods::error ret = eirods::get_host_for_hier_string( fileRenameInp->rescHier, remoteFlag, rodsServerHost );
00032 if( !ret.ok() ) {
00033 eirods::log( PASSMSG( "rsFileRename - failed in call to eirods::get_host_for_hier_string", ret ) );
00034 return -1;
00035 }
00036
00037 if (remoteFlag == LOCAL_HOST) {
00038 status = _rsFileRename (rsComm, fileRenameInp, rodsServerHost);
00039 } else if (remoteFlag == REMOTE_HOST) {
00040 status = remoteFileRename (rsComm, fileRenameInp, rodsServerHost);
00041 } else {
00042 if (remoteFlag < 0) {
00043 return (remoteFlag);
00044 } else {
00045 rodsLog( LOG_NOTICE, "rsFileRename: resolveHost returned unrecognized value %d",
00046 remoteFlag );
00047 return (SYS_UNRECOGNIZED_REMOTE_FLAG);
00048 }
00049 }
00050
00051 return (status);
00052 }
00053
00054 int
00055 remoteFileRename (rsComm_t *rsComm, fileRenameInp_t *fileRenameInp,
00056 rodsServerHost_t *rodsServerHost)
00057 {
00058 int status;
00059
00060 if (rodsServerHost == NULL) {
00061 rodsLog (LOG_NOTICE,
00062 "remoteFileRename: Invalid rodsServerHost");
00063 return SYS_INVALID_SERVER_HOST;
00064 }
00065
00066 if ((status = svrToSvrConnect (rsComm, rodsServerHost)) < 0) {
00067 return status;
00068 }
00069
00070 status = rcFileRename (rodsServerHost->conn, fileRenameInp);
00071
00072 if (status < 0) {
00073 rodsLog (LOG_NOTICE,
00074 "remoteFileRename: rcFileRename failed for %s",
00075 fileRenameInp->newFileName);
00076 }
00077
00078 return status;
00079 }
00080
00081
00082
00083 int _rsFileRename (rsComm_t *rsComm, fileRenameInp_t *fileRenameInp, rodsServerHost_t *rodsServerHost) {
00084
00085
00086
00087
00088
00089
00090 if(fileRenameInp->objPath[0] == '\0') {
00091 std::stringstream msg;
00092 msg << __FUNCTION__;
00093 msg << " - Empty logical path.";
00094 eirods::log(LOG_ERROR, msg.str());
00095 return -1;
00096 }
00097
00098
00099
00100 eirods::file_object file_obj( rsComm, fileRenameInp->objPath, fileRenameInp->oldFileName, fileRenameInp->rescHier, 0, 0, 0 );
00101 eirods::error rename_err = fileRename( rsComm, file_obj, fileRenameInp->newFileName );
00102
00103
00104
00105 if( !rename_err.ok() ) {
00106 std::stringstream msg;
00107 msg << "_rsFileRename: fileRename for ";
00108 msg << fileRenameInp->oldFileName;
00109 msg << " to ";
00110 msg << fileRenameInp->newFileName;
00111 msg << ", status = ";
00112 msg << rename_err.code();
00113 eirods::error err = PASS( false, rename_err.code(), msg.str(), rename_err );
00114 eirods::log ( err );
00115 }
00116
00117 return rename_err.code();
00118
00119 }
00120