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( "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(
00084 rsComm_t* _comm,
00085 fileRenameInp_t* _rename_inp,
00086 rodsServerHost_t* _server_host ) {
00087
00088
00089
00090
00091
00092
00093 if(_rename_inp->objPath[0] == '\0') {
00094 std::stringstream msg;
00095 msg << __FUNCTION__;
00096 msg << " - Empty logical path.";
00097 eirods::log(LOG_ERROR, msg.str());
00098 return -1;
00099 }
00100
00101
00102
00103 eirods::file_object_ptr file_obj(
00104 new eirods::file_object(
00105 _comm,
00106 _rename_inp->objPath,
00107 _rename_inp->oldFileName,
00108 _rename_inp->rescHier,
00109 0, 0, 0 ) );
00110 eirods::error rename_err = fileRename( _comm, file_obj, _rename_inp->newFileName );
00111
00112
00113
00114 if( !rename_err.ok() ) {
00115 std::stringstream msg;
00116 msg << "fileRename failed for [";
00117 msg << _rename_inp->oldFileName;
00118 msg << "] to [";
00119 msg << _rename_inp->newFileName;
00120 msg << "]";
00121 eirods::error err = PASSMSG( msg.str(), rename_err );
00122 eirods::log ( err );
00123 }
00124
00125 return rename_err.code();
00126
00127 }
00128