00001
00002
00003
00004 #include "XrdClientAdminJNI.h"
00005 #include "XrdClient/XrdClientAdmin.hh"
00006 #include "XrdClient/XrdClientEnv.hh"
00007 #include "XrdOuc/XrdOucString.hh"
00008
00009 #define DBGLVL 3
00010 #define SETDEBUG EnvPutInt("DebugLevel", DBGLVL);
00011
00012 extern "C" JNIEXPORT jobject JNICALL Java_XrdClientAdminJNI_locate(JNIEnv *env,
00013 jobject jobj,
00014 jstring pathfile,
00015 jstring hostname) {
00016
00017 SETDEBUG
00018
00019
00020 jclass cls = env->GetObjectClass(jobj);
00021 jfieldID fid;
00022 jstring jstr;
00023
00024 fid = env->GetFieldID(cls, "firsturl", "Ljava/lang/String;");
00025 if (fid == 0) {
00026 return (jobject )(new jboolean(false));
00027 }
00028
00029 jstr = (jstring)env->GetObjectField(jobj, fid);
00030 const char *fu = env->GetStringUTFChars(jstr, 0);
00031
00032 printf("firsturl: %s\n", fu);
00033 XrdClientAdmin *xrda = new XrdClientAdmin(fu);
00034
00035 env->ReleaseStringUTFChars(jstr, fu);
00036
00037
00038 kXR_char *filename = (kXR_char *)env->GetStringUTFChars(pathfile, 0);
00039 XrdClientUrlInfo finalloc;
00040
00041
00042
00043 bool r = false;
00044 if (xrda->Connect()) {
00045 r = xrda->Locate(filename, finalloc);
00046 }
00047
00048 env->ReleaseStringUTFChars(pathfile, (const char *)filename);
00049
00050 delete xrda;
00051
00052 if (r)
00053 hostname = env->NewStringUTF(finalloc.Host.c_str());
00054
00055 return (jobject)(new jboolean(r));
00056 }
00057
00058 extern "C" JNIEXPORT jobject JNICALL Java_XrdClientAdminJNI_stat(JNIEnv *env,
00059 jobject jobj,
00060 jstring pathfile,
00061 jint id,
00062 jlong size,
00063 jint flags,
00064 jint modtime) {
00065
00066 SETDEBUG
00067
00068
00069 jclass cls = env->GetObjectClass(jobj);
00070 jfieldID fid;
00071 jstring jstr;
00072
00073 fid = env->GetFieldID(cls, "firsturl", "Ljava/lang/String;");
00074 if (fid == 0) {
00075 return (jobject)(new jboolean(false));
00076 }
00077
00078 jstr = (jstring)env->GetObjectField(jobj, fid);
00079 const char *fu = env->GetStringUTFChars(jstr, 0);
00080
00081 printf("firsturl: %s\n", fu);
00082 XrdClientAdmin *xrda = new XrdClientAdmin(fu);
00083
00084 env->ReleaseStringUTFChars(jstr, fu);
00085
00086
00087 kXR_char *filename = (kXR_char *)env->GetStringUTFChars(pathfile, 0);
00088
00089
00090 bool r = false;
00091 long myid, myflags, mymodtime;
00092 long long mysize;
00093 if (xrda->Connect()) {
00094 r = xrda->Stat((const char*)filename, myid, mysize, myflags, mymodtime);
00095 }
00096
00097 env->ReleaseStringUTFChars(pathfile, (const char *)filename);
00098
00099 delete xrda;
00100
00101
00102 if (r) {
00103
00104 id = myid;
00105 size = mysize;
00106 flags = myflags;
00107 modtime = mymodtime;
00108 }
00109
00110 return (jobject)(new jboolean(r));
00111
00112
00113 }
00114
00115 JNIEXPORT jobject JNICALL Java_XrdClientAdminJNI_chmod(JNIEnv *env,
00116 jobject jobj,
00117 jstring pathfile,
00118 jint user,
00119 jint group,
00120 jint other) {
00121
00122
00123 SETDEBUG
00124
00125
00126 jclass cls = env->GetObjectClass(jobj);
00127 jfieldID fid;
00128 jstring jstr;
00129
00130 fid = env->GetFieldID(cls, "firsturl", "Ljava/lang/String;");
00131 if (fid == 0) {
00132 return (jobject)(new jboolean(false));
00133 }
00134
00135 jstr = (jstring)env->GetObjectField(jobj, fid);
00136 const char *fu = env->GetStringUTFChars(jstr, 0);
00137
00138 printf("firsturl: %s\n", fu);
00139 XrdClientAdmin *xrda = new XrdClientAdmin(fu);
00140
00141 env->ReleaseStringUTFChars(jstr, fu);
00142
00143
00144 kXR_char *filename = (kXR_char *)env->GetStringUTFChars(pathfile, 0);
00145
00146
00147 bool r = false;
00148 if (xrda->Connect()) {
00149 r = xrda->Chmod((const char*)filename, user, group, other);
00150 }
00151
00152 env->ReleaseStringUTFChars(pathfile, (const char *)filename);
00153
00154 delete xrda;
00155
00156
00157 return (jobject)(new jboolean(r));
00158
00159 }
00160
00161
00162 JNIEXPORT jobject JNICALL Java_XrdClientAdminJNI_dirlist(JNIEnv *env,
00163 jobject jobj,
00164 jstring path,
00165 jobjectArray result) {
00166
00167
00168
00169
00170 SETDEBUG
00171
00172
00173 jclass cls = env->GetObjectClass(jobj);
00174 jfieldID fid;
00175 jstring jstr;
00176
00177 fid = env->GetFieldID(cls, "firsturl", "Ljava/lang/String;");
00178 if (fid == 0) {
00179 return (jobject)(new jboolean(false));
00180 }
00181
00182 jstr = (jstring)env->GetObjectField(jobj, fid);
00183 const char *fu = env->GetStringUTFChars(jstr, 0);
00184
00185 printf("firsturl: %s\n", fu);
00186 XrdClientAdmin *xrda = new XrdClientAdmin(fu);
00187
00188 env->ReleaseStringUTFChars(jstr, fu);
00189
00190
00191 kXR_char *filename = (kXR_char *)env->GetStringUTFChars(path, 0);
00192
00193
00194 bool r = false;
00195 vecString vs;
00196 if (xrda->Connect()) {
00197 r = xrda->DirList((const char*)filename, vs);
00198 }
00199
00200 env->ReleaseStringUTFChars(path, (const char *)filename);
00201
00202 delete xrda;
00203
00204 if (r && vs.GetSize()) {
00205
00206 result = (jobjectArray)env->NewObjectArray( vs.GetSize(), env->FindClass("java/lang/String"),
00207 env->NewStringUTF("") );
00208
00209 for(int i = 0; i < vs.GetSize(); i++)
00210 env->SetObjectArrayElement(
00211 result, i, env->NewStringUTF(vs[i].c_str()) );
00212 }
00213
00214 return (jobject)(new jboolean(r));
00215
00216 }
00217
00218 JNIEXPORT jobject JNICALL Java_XrdClientAdminJNI_existfiles(JNIEnv *env,
00219 jobject jobj,
00220 jobjectArray filez,
00221 jobjectArray xstfilez) {
00222
00223
00224 SETDEBUG
00225
00226
00227 jclass cls = env->GetObjectClass(jobj);
00228 jfieldID fid;
00229 jstring jstr;
00230
00231 fid = env->GetFieldID(cls, "firsturl", "Ljava/lang/String;");
00232 if (fid == 0) {
00233 return (jobject)(new jboolean(false));
00234 }
00235
00236 jstr = (jstring)env->GetObjectField(jobj, fid);
00237 const char *fu = env->GetStringUTFChars(jstr, 0);
00238
00239 printf("firsturl: %s\n", fu);
00240 XrdClientAdmin *xrda = new XrdClientAdmin(fu);
00241
00242 env->ReleaseStringUTFChars(jstr, fu);
00243
00244
00245 vecString vs;
00246 for (int i = 0; i < env->GetArrayLength(filez); i++) {
00247 jstring jstr;
00248 const char *str;
00249 XrdOucString s;
00250
00251 jstr = (jstring)env->GetObjectArrayElement(filez, i);
00252 str = env->GetStringUTFChars(jstr, 0);
00253 s = str;
00254 env->ReleaseStringUTFChars(jstr, str);
00255
00256 vs.Push_back(s);
00257
00258 }
00259
00260
00261
00262 bool r = false;
00263 vecBool vb;
00264 if (xrda->Connect()) {
00265 r = xrda->ExistFiles(vs, vb);
00266 }
00267
00268 delete xrda;
00269
00270 if (r && vb.GetSize()) {
00271
00272 xstfilez = (jobjectArray)env->NewBooleanArray( vb.GetSize() );
00273
00274 jboolean jb;
00275 for(int i = 0; i < vb.GetSize(); i++) {
00276 jb = vb[i];
00277 env->SetObjectArrayElement(
00278 xstfilez, i, (jobject)(new jboolean(jb)) );
00279 }
00280
00281
00282 }
00283
00284 return (jobject)(new jboolean(r));
00285
00286 }
00287
00288
00289 JNIEXPORT jobject JNICALL Java_XrdClientAdminJNI_existdirs(JNIEnv *env,
00290 jobject jobj,
00291 jobjectArray dirz,
00292 jobjectArray xstdirz) {
00293
00294
00295 SETDEBUG
00296
00297
00298 jclass cls = env->GetObjectClass(jobj);
00299 jfieldID fid;
00300 jstring jstr;
00301
00302 fid = env->GetFieldID(cls, "firsturl", "Ljava/lang/String;");
00303 if (fid == 0) {
00304 return (jobject)(new jboolean(false));
00305 }
00306
00307 jstr = (jstring)env->GetObjectField(jobj, fid);
00308 const char *fu = env->GetStringUTFChars(jstr, 0);
00309
00310 printf("firsturl: %s\n", fu);
00311 XrdClientAdmin *xrda = new XrdClientAdmin(fu);
00312
00313 env->ReleaseStringUTFChars(jstr, fu);
00314
00315
00316 vecString vs;
00317 for (int i = 0; i < env->GetArrayLength(dirz); i++) {
00318 jstring jstr;
00319 const char *str;
00320 XrdOucString s;
00321
00322 jstr = (jstring)env->GetObjectArrayElement(dirz, i);
00323 str = env->GetStringUTFChars(jstr, 0);
00324 s = str;
00325 env->ReleaseStringUTFChars(jstr, str);
00326
00327 vs.Push_back(s);
00328
00329 }
00330
00331
00332
00333 bool r = false;
00334 vecBool vb;
00335 if (xrda->Connect()) {
00336 r = xrda->ExistDirs(vs, vb);
00337 }
00338
00339 delete xrda;
00340
00341 if (r && vb.GetSize()) {
00342
00343 xstdirz = (jobjectArray)env->NewBooleanArray( vb.GetSize() );
00344
00345 jboolean jb;
00346 for(int i = 0; i < vb.GetSize(); i++) {
00347 jb = vb[i];
00348 env->SetObjectArrayElement(
00349 xstdirz, i, (jobject )(new jboolean(jb)) );
00350 }
00351
00352
00353 }
00354
00355 return (jobject)(new jboolean(r));
00356
00357 }
00358
00359 JNIEXPORT jobject JNICALL Java_XrdClientAdminJNI_getchecksum(JNIEnv *env,
00360 jobject jobj,
00361 jstring pathfile,
00362 jstring chksum) {
00363
00364 SETDEBUG
00365
00366
00367 jclass cls = env->GetObjectClass(jobj);
00368 jfieldID fid;
00369 jstring jstr;
00370
00371 fid = env->GetFieldID(cls, "firsturl", "Ljava/lang/String;");
00372 if (fid == 0) {
00373 return (jobject)(new jboolean(false));
00374 }
00375
00376 jstr = (jstring)env->GetObjectField(jobj, fid);
00377 const char *fu = env->GetStringUTFChars(jstr, 0);
00378
00379 printf("firsturl: %s\n", fu);
00380 XrdClientAdmin *xrda = new XrdClientAdmin(fu);
00381
00382 env->ReleaseStringUTFChars(jstr, fu);
00383
00384
00385 kXR_char *filename = (kXR_char *)env->GetStringUTFChars(pathfile, 0);
00386
00387
00388 bool r = false;
00389 kXR_char *chksumbuf = 0;
00390
00391 if (xrda->Connect()) {
00392 r = xrda->GetChecksum((kXR_char *)filename, &chksumbuf);
00393 }
00394
00395 env->ReleaseStringUTFChars(pathfile, (const char *)filename);
00396
00397 delete xrda;
00398
00399
00400 if (r) {
00401 chksum = env->NewStringUTF( (const char *)chksumbuf );
00402 delete chksumbuf;
00403 }
00404
00405 return (jobject)(new jboolean(r));
00406
00407 }
00408
00409 JNIEXPORT jobject JNICALL Java_XrdClientAdminJNI_isfileonline(JNIEnv *env,
00410 jobject jobj,
00411 jobjectArray filez,
00412 jobjectArray flzonline) {
00413
00414
00415
00416 SETDEBUG
00417
00418
00419 jclass cls = env->GetObjectClass(jobj);
00420 jfieldID fid;
00421 jstring jstr;
00422
00423 fid = env->GetFieldID(cls, "firsturl", "Ljava/lang/String;");
00424 if (fid == 0) {
00425 return (jobject)(new jboolean(false));
00426 }
00427
00428 jstr = (jstring)env->GetObjectField(jobj, fid);
00429 const char *fu = env->GetStringUTFChars(jstr, 0);
00430
00431 printf("firsturl: %s\n", fu);
00432 XrdClientAdmin *xrda = new XrdClientAdmin(fu);
00433
00434 env->ReleaseStringUTFChars(jstr, fu);
00435
00436
00437 vecString vs;
00438 for (int i = 0; i < env->GetArrayLength(filez); i++) {
00439 jstring jstr;
00440 const char *str;
00441 XrdOucString s;
00442
00443 jstr = (jstring)env->GetObjectArrayElement(filez, i);
00444 str = env->GetStringUTFChars(jstr, 0);
00445 s = str;
00446 env->ReleaseStringUTFChars(jstr, str);
00447
00448 vs.Push_back(s);
00449
00450 }
00451
00452
00453 bool r = false;
00454 vecBool vb;
00455 if (xrda->Connect()) {
00456 r = xrda->IsFileOnline(vs, vb);
00457 }
00458
00459 delete xrda;
00460
00461 if (r && vb.GetSize()) {
00462
00463 flzonline = (jobjectArray)env->NewBooleanArray( vb.GetSize() );
00464
00465 jboolean jb;
00466 for(int i = 0; i < vb.GetSize(); i++) {
00467 jb = vb[i];
00468 env->SetObjectArrayElement(
00469 flzonline, i, (jobject )(new jboolean(jb)) );
00470 }
00471
00472 }
00473
00474 return (jobject)(new jboolean(r));
00475
00476 }
00477
00478
00479
00480 JNIEXPORT jobject JNICALL Java_XrdClientAdminJNI_mv(JNIEnv *env,
00481 jobject jobj,
00482 jstring pathname1,
00483 jstring pathname2) {
00484
00485
00486 SETDEBUG
00487
00488
00489 jclass cls = env->GetObjectClass(jobj);
00490 jfieldID fid;
00491 jstring jstr;
00492
00493 fid = env->GetFieldID(cls, "firsturl", "Ljava/lang/String;");
00494 if (fid == 0) {
00495 return (jobject)(new jboolean(false));
00496 }
00497
00498 jstr = (jstring)env->GetObjectField(jobj, fid);
00499 const char *fu = env->GetStringUTFChars(jstr, 0);
00500
00501 printf("firsturl: %s\n", fu);
00502 XrdClientAdmin *xrda = new XrdClientAdmin(fu);
00503
00504 env->ReleaseStringUTFChars(jstr, fu);
00505
00506
00507 kXR_char *filename1 = (kXR_char *)env->GetStringUTFChars(pathname1, 0);
00508 kXR_char *filename2 = (kXR_char *)env->GetStringUTFChars(pathname2, 0);
00509
00510
00511 bool r = false;
00512 if (xrda->Connect()) {
00513 r = xrda->Mv((const char*)filename1, (const char*)filename2);
00514 }
00515
00516 env->ReleaseStringUTFChars(pathname1, (const char *)filename1);
00517 env->ReleaseStringUTFChars(pathname2, (const char *)filename2);
00518
00519 delete xrda;
00520
00521 return (jobject)(new jboolean(r));
00522
00523
00524
00525 };
00526
00527
00528
00529 JNIEXPORT jobject JNICALL Java_XrdClientAdminJNI_mkdir(JNIEnv *env,
00530 jobject jobj,
00531 jstring pathname,
00532 jint user, jint group, jint other) {
00533
00534
00535 SETDEBUG
00536
00537
00538 jclass cls = env->GetObjectClass(jobj);
00539 jfieldID fid;
00540 jstring jstr;
00541
00542 fid = env->GetFieldID(cls, "firsturl", "Ljava/lang/String;");
00543 if (fid == 0) {
00544 return (jobject)(new jboolean(false));
00545 }
00546
00547 jstr = (jstring)env->GetObjectField(jobj, fid);
00548 const char *fu = env->GetStringUTFChars(jstr, 0);
00549
00550 printf("firsturl: %s\n", fu);
00551 XrdClientAdmin *xrda = new XrdClientAdmin(fu);
00552
00553 env->ReleaseStringUTFChars(jstr, fu);
00554
00555
00556 kXR_char *filename = (kXR_char *)env->GetStringUTFChars(pathname, 0);
00557
00558
00559 bool r = false;
00560 if (xrda->Connect()) {
00561 r = xrda->Mkdir((const char*)filename, user, group, other);
00562 }
00563
00564 env->ReleaseStringUTFChars(pathname, (const char *)filename);
00565
00566 delete xrda;
00567
00568
00569 return (jobject)(new jboolean(r));
00570
00571
00572
00573
00574 }
00575
00576
00577
00578
00579 JNIEXPORT jobject JNICALL Java_XrdClientAdminJNI_rm(JNIEnv *env,
00580 jobject jobj,
00581 jstring fname) {
00582
00583
00584
00585
00586 SETDEBUG
00587
00588
00589 jclass cls = env->GetObjectClass(jobj);
00590 jfieldID fid;
00591 jstring jstr;
00592
00593 fid = env->GetFieldID(cls, "firsturl", "Ljava/lang/String;");
00594 if (fid == 0) {
00595 return (jobject)(new jboolean(false));
00596 }
00597
00598 jstr = (jstring)env->GetObjectField(jobj, fid);
00599 const char *fu = env->GetStringUTFChars(jstr, 0);
00600
00601 printf("firsturl: %s\n", fu);
00602 XrdClientAdmin *xrda = new XrdClientAdmin(fu);
00603
00604 env->ReleaseStringUTFChars(jstr, fu);
00605
00606
00607 kXR_char *filename = (kXR_char *)env->GetStringUTFChars(fname, 0);
00608
00609
00610 bool r = false;
00611 if (xrda->Connect()) {
00612 r = xrda->Rm((const char*)filename);
00613 }
00614
00615 env->ReleaseStringUTFChars(fname, (const char *)filename);
00616
00617 delete xrda;
00618
00619
00620 return (jobject)(new jboolean(r));
00621
00622
00623
00624 }
00625
00626
00627
00628
00629 JNIEXPORT jobject JNICALL Java_XrdClientAdminJNI_rmdir(JNIEnv *env,
00630 jobject jobj,
00631 jstring pathname) {
00632
00633 SETDEBUG
00634
00635
00636 jclass cls = env->GetObjectClass(jobj);
00637 jfieldID fid;
00638 jstring jstr;
00639
00640 fid = env->GetFieldID(cls, "firsturl", "Ljava/lang/String;");
00641 if (fid == 0) {
00642 return (jobject)(new jboolean(false));
00643 }
00644
00645 jstr = (jstring)env->GetObjectField(jobj, fid);
00646 const char *fu = env->GetStringUTFChars(jstr, 0);
00647
00648 printf("firsturl: %s\n", fu);
00649 XrdClientAdmin *xrda = new XrdClientAdmin(fu);
00650
00651 env->ReleaseStringUTFChars(jstr, fu);
00652
00653
00654 kXR_char *filename = (kXR_char *)env->GetStringUTFChars(pathname, 0);
00655
00656
00657 bool r = false;
00658 if (xrda->Connect()) {
00659 r = xrda->Rmdir((const char*)filename);
00660 }
00661
00662 env->ReleaseStringUTFChars(pathname, (const char *)filename);
00663
00664 delete xrda;
00665
00666
00667 return (jobject)(new jboolean(r));
00668
00669
00670 }
00671
00672 JNIEXPORT jobject JNICALL Java_XrdClientAdminJNI_prepare(JNIEnv *env,
00673 jobject jobj,
00674 jobjectArray filez,
00675 jchar opts, jchar prio) {
00676
00677
00678
00679 SETDEBUG
00680
00681
00682 jclass cls = env->GetObjectClass(jobj);
00683 jfieldID fid;
00684 jstring jstr;
00685
00686 fid = env->GetFieldID(cls, "firsturl", "Ljava/lang/String;");
00687 if (fid == 0) {
00688 return (jobject)(new jboolean(false));
00689 }
00690
00691 jstr = (jstring)env->GetObjectField(jobj, fid);
00692 const char *fu = env->GetStringUTFChars(jstr, 0);
00693
00694 printf("firsturl: %s\n", fu);
00695 XrdClientAdmin *xrda = new XrdClientAdmin(fu);
00696
00697 env->ReleaseStringUTFChars(jstr, fu);
00698
00699
00700 vecString vs;
00701 for (int i = 0; i < env->GetArrayLength(filez); i++) {
00702 jstring jstr;
00703 const char *str;
00704 XrdOucString s;
00705
00706 jstr = (jstring)env->GetObjectArrayElement(filez, i);
00707 str = env->GetStringUTFChars(jstr, 0);
00708 s = str;
00709 env->ReleaseStringUTFChars(jstr, str);
00710
00711 vs.Push_back(s);
00712
00713 }
00714
00715
00716
00717 bool r = false;
00718 if (xrda->Connect()) {
00719 r = xrda->Prepare(vs, opts, prio);
00720 }
00721
00722 delete xrda;
00723
00724 return (jobject)(new jboolean(r));
00725
00726 }
00727
00728