138
137
if (version == NULL)
140
// Create a local frame for our references
141
env->PushLocalFrame(LOCAL_FRAME_SIZE);
142
if (JNIUtil::isJavaExceptionThrown())
141
145
// Create an instance of the conflict version.
142
static jmethodID ctor = 0;
143
jclass clazz = env->FindClass(JAVA_PACKAGE "/ConflictVersion");
146
jclass clazz = env->FindClass(JAVA_PACKAGE "/types/ConflictVersion");
144
147
if (JNIUtil::isJavaExceptionThrown())
150
static jmethodID ctor = 0;
149
153
ctor = env->GetMethodID(clazz, "<init>", "(Ljava/lang/String;J"
150
"Ljava/lang/String;I)V");
155
"L"JAVA_PACKAGE"/types/NodeKind;"
151
157
if (JNIUtil::isJavaExceptionThrown() || ctor == 0)
155
161
jstring jreposURL = JNIUtil::makeJString(version->repos_url);
156
162
if (JNIUtil::isJavaExceptionThrown())
158
164
jstring jpathInRepos = JNIUtil::makeJString(version->path_in_repos);
159
165
if (JNIUtil::isJavaExceptionThrown())
167
jobject jnodeKind = EnumMapper::mapNodeKind(version->node_kind);
168
if (JNIUtil::isJavaExceptionThrown())
162
171
jobject jversion = env->NewObject(clazz, ctor, jreposURL,
163
(jlong)version->peg_rev, jpathInRepos,
164
EnumMapper::mapNodeKind(version->node_kind));
165
if (JNIUtil::isJavaExceptionThrown())
168
env->DeleteLocalRef(clazz);
169
if (JNIUtil::isJavaExceptionThrown())
172
env->DeleteLocalRef(jreposURL);
173
if (JNIUtil::isJavaExceptionThrown())
175
env->DeleteLocalRef(jpathInRepos);
176
if (JNIUtil::isJavaExceptionThrown())
183
CreateJ::Info(const svn_wc_entry_t *entry)
188
JNIEnv *env = JNIUtil::getEnv();
190
jclass clazz = env->FindClass(JAVA_PACKAGE"/Info");
191
if (JNIUtil::isJavaExceptionThrown())
194
static jmethodID mid = 0;
197
mid = env->GetMethodID(clazz, "<init>",
198
"(Ljava/lang/String;Ljava/lang/String;"
172
(jlong)version->peg_rev, jpathInRepos,
174
if (JNIUtil::isJavaExceptionThrown())
177
return env->PopLocalFrame(jversion);
181
CreateJ::Checksum(const svn_checksum_t *checksum)
186
JNIEnv *env = JNIUtil::getEnv();
188
// Create a local frame for our references
189
env->PushLocalFrame(LOCAL_FRAME_SIZE);
190
if (JNIUtil::isJavaExceptionThrown())
193
jclass clazz = env->FindClass(JAVA_PACKAGE"/types/Checksum");
194
if (JNIUtil::isExceptionThrown())
197
// Get the method id for the CommitItem constructor.
198
static jmethodID midConstructor = 0;
199
if (midConstructor == 0)
201
midConstructor = env->GetMethodID(clazz, "<init>",
203
"L"JAVA_PACKAGE"/types/Checksum$Kind;"
205
if (JNIUtil::isExceptionThrown())
209
jbyteArray jdigest = JNIUtil::makeJByteArray(
210
(const signed char *)checksum->digest,
211
svn_checksum_size(checksum));
212
if (JNIUtil::isExceptionThrown())
215
jobject jkind = EnumMapper::mapChecksumKind(checksum->kind);
216
if (JNIUtil::isExceptionThrown())
219
// create the Java object
220
jobject jchecksum = env->NewObject(clazz, midConstructor, jdigest, jkind);
221
if (JNIUtil::isExceptionThrown())
224
return env->PopLocalFrame(jchecksum);
228
CreateJ::Info(const char *path, const svn_client_info2_t *info)
230
JNIEnv *env = JNIUtil::getEnv();
232
// Create a local frame for our references
233
env->PushLocalFrame(LOCAL_FRAME_SIZE);
234
if (JNIUtil::isJavaExceptionThrown())
237
jclass clazz = env->FindClass(JAVA_PACKAGE "/types/Info");
238
if (JNIUtil::isJavaExceptionThrown())
241
static jmethodID mid = 0;
244
mid = env->GetMethodID(clazz, "<init>",
245
"(Ljava/lang/String;Ljava/lang/String;"
246
"Ljava/lang/String;J"
247
"L"JAVA_PACKAGE"/types/NodeKind;"
248
"Ljava/lang/String;Ljava/lang/String;"
249
"JJLjava/lang/String;"
250
"L"JAVA_PACKAGE"/types/Lock;Z"
251
"L"JAVA_PACKAGE"/types/Info$ScheduleKind;"
252
"Ljava/lang/String;JJ"
253
"L"JAVA_PACKAGE"/types/Checksum;"
254
"Ljava/lang/String;JJ"
255
"L"JAVA_PACKAGE"/types/Depth;Ljava/util/Set;)V");
256
if (mid == 0 || JNIUtil::isJavaExceptionThrown())
260
jstring jpath = JNIUtil::makeJString(path);
261
if (JNIUtil::isJavaExceptionThrown())
264
jstring jwcroot = NULL;
265
jstring jcopyFromUrl = NULL;
266
jobject jchecksum = NULL;
267
jstring jchangelist = NULL;
268
jobject jconflicts = NULL;
269
jobject jscheduleKind = NULL;
270
jobject jdepth = NULL;
271
jlong jworkingSize = -1;
272
jlong jcopyfrom_rev = -1;
273
jlong jtext_time = -1;
276
jwcroot = JNIUtil::makeJString(info->wc_info->wcroot_abspath);
277
if (JNIUtil::isJavaExceptionThrown())
280
jcopyFromUrl = JNIUtil::makeJString(info->wc_info->copyfrom_url);
281
if (JNIUtil::isJavaExceptionThrown())
284
jchecksum = Checksum(info->wc_info->checksum);
285
if (JNIUtil::isJavaExceptionThrown())
288
jchangelist = JNIUtil::makeJString(info->wc_info->changelist);
289
if (JNIUtil::isJavaExceptionThrown())
292
jscheduleKind = EnumMapper::mapScheduleKind(info->wc_info->schedule);
293
if (JNIUtil::isJavaExceptionThrown())
296
jdepth = EnumMapper::mapDepth(info->wc_info->depth);
297
if (JNIUtil::isJavaExceptionThrown())
300
/* ### Maybe rename the java fields while we can */
301
jworkingSize = info->wc_info->recorded_size;
302
jtext_time = info->wc_info->recorded_time;
304
jcopyfrom_rev = info->wc_info->copyfrom_rev;
306
if (info->wc_info->conflicts && info->wc_info->conflicts->nelts > 0)
308
std::vector<jobject> jconflict_vec;
310
for (int i = 0; i < info->wc_info->conflicts->nelts; i++)
312
const svn_wc_conflict_description2_t *conflict = APR_ARRAY_IDX(
313
info->wc_info->conflicts, i,
314
const svn_wc_conflict_description2_t *);
316
jobject jconflict = ConflictDescriptor(conflict);
317
if (JNIUtil::isJavaExceptionThrown())
320
jconflict_vec.push_back(jconflict);
323
jconflicts = Set(jconflict_vec);
324
if (JNIUtil::isJavaExceptionThrown())
329
jstring jurl = JNIUtil::makeJString(info->URL);
330
if (JNIUtil::isJavaExceptionThrown())
333
jstring jreposRootUrl = JNIUtil::makeJString(info->repos_root_URL);
334
if (JNIUtil::isJavaExceptionThrown())
337
jstring jreportUUID = JNIUtil::makeJString(info->repos_UUID);
338
if (JNIUtil::isJavaExceptionThrown())
341
jstring jlastChangedAuthor =
342
JNIUtil::makeJString(info->last_changed_author);
343
if (JNIUtil::isJavaExceptionThrown())
346
jobject jlock = CreateJ::Lock(info->lock);
347
if (JNIUtil::isJavaExceptionThrown())
350
jobject jnodeKind = EnumMapper::mapNodeKind(info->kind);
351
if (JNIUtil::isJavaExceptionThrown())
354
jobject jinfo2 = env->NewObject(clazz, mid, jpath, jwcroot, jurl,
356
jnodeKind, jreposRootUrl, jreportUUID,
357
(jlong) info->last_changed_rev,
358
(jlong) info->last_changed_date,
359
jlastChangedAuthor, jlock,
360
info->wc_info ? JNI_TRUE : JNI_FALSE,
361
jscheduleKind, jcopyFromUrl,
362
jcopyfrom_rev, jtext_time, jchecksum,
363
jchangelist, jworkingSize,
364
(jlong) info->size, jdepth, jconflicts);
366
return env->PopLocalFrame(jinfo2);
370
CreateJ::Lock(const svn_lock_t *lock)
375
JNIEnv *env = JNIUtil::getEnv();
377
// Create a local frame for our references
378
env->PushLocalFrame(LOCAL_FRAME_SIZE);
379
if (JNIUtil::isJavaExceptionThrown())
382
jclass clazz = env->FindClass(JAVA_PACKAGE"/types/Lock");
383
if (JNIUtil::isJavaExceptionThrown())
386
static jmethodID mid = 0;
389
mid = env->GetMethodID(clazz, "<init>",
390
"(Ljava/lang/String;Ljava/lang/String;"
392
"Ljava/lang/String;JJ)V");
393
if (JNIUtil::isJavaExceptionThrown())
397
jstring jOwner = JNIUtil::makeJString(lock->owner);
398
if (JNIUtil::isJavaExceptionThrown())
400
jstring jPath = JNIUtil::makeJString(lock->path);
401
if (JNIUtil::isJavaExceptionThrown())
403
jstring jToken = JNIUtil::makeJString(lock->token);
404
if (JNIUtil::isJavaExceptionThrown())
406
jstring jComment = JNIUtil::makeJString(lock->comment);
407
if (JNIUtil::isJavaExceptionThrown())
410
jlong jCreationDate = lock->creation_date;
411
jlong jExpirationDate = lock->expiration_date;
412
jobject jlock = env->NewObject(clazz, mid, jOwner, jPath, jToken, jComment,
413
jCreationDate, jExpirationDate);
414
if (JNIUtil::isJavaExceptionThrown())
417
return env->PopLocalFrame(jlock);
421
CreateJ::ChangedPath(const char *path, svn_log_changed_path2_t *log_item)
423
JNIEnv *env = JNIUtil::getEnv();
425
// Create a local frame for our references
426
env->PushLocalFrame(LOCAL_FRAME_SIZE);
427
if (JNIUtil::isJavaExceptionThrown())
430
jclass clazzCP = env->FindClass(JAVA_PACKAGE"/types/ChangePath");
431
if (JNIUtil::isJavaExceptionThrown())
432
POP_AND_RETURN(SVN_NO_ERROR);
434
static jmethodID midCP = 0;
437
midCP = env->GetMethodID(clazzCP,
439
"(Ljava/lang/String;JLjava/lang/String;"
440
"L"JAVA_PACKAGE"/types/ChangePath$Action;"
441
"L"JAVA_PACKAGE"/types/NodeKind;"
442
"L"JAVA_PACKAGE"/types/Tristate;"
443
"L"JAVA_PACKAGE"/types/Tristate;)V");
444
if (JNIUtil::isJavaExceptionThrown())
445
POP_AND_RETURN(SVN_NO_ERROR);
448
jstring jpath = JNIUtil::makeJString(path);
449
if (JNIUtil::isJavaExceptionThrown())
452
jstring jcopyFromPath = JNIUtil::makeJString(log_item->copyfrom_path);
453
if (JNIUtil::isJavaExceptionThrown())
456
jobject jaction = EnumMapper::mapChangePathAction(log_item->action);
457
if (JNIUtil::isJavaExceptionThrown())
460
jobject jnodeKind = EnumMapper::mapNodeKind(log_item->node_kind);
461
if (JNIUtil::isJavaExceptionThrown())
464
jlong jcopyFromRev = log_item->copyfrom_rev;
466
jobject jcp = env->NewObject(clazzCP, midCP, jpath, jcopyFromRev,
467
jcopyFromPath, jaction, jnodeKind,
468
EnumMapper::mapTristate(log_item->text_modified),
469
EnumMapper::mapTristate(log_item->props_modified));
470
if (JNIUtil::isJavaExceptionThrown())
473
return env->PopLocalFrame(jcp);
477
CreateJ::Status(svn_wc_context_t *wc_ctx,
478
const svn_client_status_t *status,
484
JNIEnv *env = JNIUtil::getEnv();
486
// Create a local frame for our references
487
env->PushLocalFrame(LOCAL_FRAME_SIZE);
488
if (JNIUtil::isJavaExceptionThrown())
491
jclass clazz = env->FindClass(JAVA_PACKAGE"/types/Status");
492
if (JNIUtil::isJavaExceptionThrown())
495
static jmethodID mid = 0;
498
mid = env->GetMethodID(clazz, "<init>",
499
"(Ljava/lang/String;Ljava/lang/String;"
500
"L"JAVA_PACKAGE"/types/NodeKind;"
501
"JJJLjava/lang/String;"
502
"L"JAVA_PACKAGE"/types/Status$Kind;"
503
"L"JAVA_PACKAGE"/types/Status$Kind;"
504
"L"JAVA_PACKAGE"/types/Status$Kind;"
505
"L"JAVA_PACKAGE"/types/Status$Kind;"
506
"ZZZZZL"JAVA_PACKAGE"/types/Lock;"
507
"L"JAVA_PACKAGE"/types/Lock;"
508
"JJL"JAVA_PACKAGE"/types/NodeKind;"
509
"Ljava/lang/String;Ljava/lang/String;)V");
510
if (JNIUtil::isJavaExceptionThrown())
514
/* ### Calculate the old style text_status value to make
515
### the tests pass. It is probably better to do this in
516
### the tigris package and then switch the apache package
517
### to three statuses. */
519
jobject jNodeKind = NULL;
521
org_apache_subversion_javahl_types_Revision_SVN_INVALID_REVNUM;
522
jlong jLastChangedRevision =
523
org_apache_subversion_javahl_types_Revision_SVN_INVALID_REVNUM;
524
jlong jLastChangedDate = 0;
525
jstring jLastCommitAuthor = NULL;
526
jobject jLocalLock = NULL;
527
jstring jChangelist = NULL;
529
enum svn_wc_status_kind text_status = status->node_status;
531
/* Avoid using values that might come from prop changes */
532
if (text_status == svn_wc_status_modified
533
|| text_status == svn_wc_status_conflicted)
534
text_status = status->text_status;
536
enum svn_wc_status_kind repos_text_status = status->repos_node_status;
538
if (repos_text_status == svn_wc_status_modified
539
|| repos_text_status == svn_wc_status_conflicted)
540
repos_text_status = status->repos_text_status;
542
jboolean jIsConflicted = (status->conflicted == 1) ? JNI_TRUE : JNI_FALSE;
543
jobject jTextType = EnumMapper::mapStatusKind(text_status);
544
jobject jPropType = EnumMapper::mapStatusKind(status->prop_status);
545
jobject jRepositoryTextType = EnumMapper::mapStatusKind(repos_text_status);
546
jobject jRepositoryPropType = EnumMapper::mapStatusKind(
547
status->repos_prop_status);
548
jboolean jIsCopied = (status->copied == 1) ? JNI_TRUE: JNI_FALSE;
549
jboolean jIsLocked = (status->wc_is_locked == 1) ? JNI_TRUE: JNI_FALSE;
550
jboolean jIsSwitched = (status->switched == 1) ? JNI_TRUE: JNI_FALSE;
551
jboolean jIsFileExternal = (status->file_external == 1) ? JNI_TRUE
554
jstring jPath = JNIUtil::makeJString(status->local_abspath);
555
if (JNIUtil::isJavaExceptionThrown())
558
jobject jReposLock = CreateJ::Lock(status->repos_lock);
559
if (JNIUtil::isJavaExceptionThrown())
562
if (status->repos_root_url)
564
jUrl = JNIUtil::makeJString(svn_path_url_add_component2(
565
status->repos_root_url,
566
status->repos_relpath,
568
if (JNIUtil::isJavaExceptionThrown())
572
jlong jOODLastCmtRevision = status->ood_changed_rev;
573
jlong jOODLastCmtDate = status->ood_changed_date;
574
jobject jOODKind = EnumMapper::mapNodeKind(status->ood_kind);
575
jstring jOODLastCmtAuthor = JNIUtil::makeJString(status->ood_changed_author);
576
if (JNIUtil::isJavaExceptionThrown())
579
if (status->versioned)
581
jNodeKind = EnumMapper::mapNodeKind(status->kind);
582
jRevision = status->revision;
583
jLastChangedRevision = status->changed_rev;
584
jLastChangedDate = status->changed_date;
585
jLastCommitAuthor = JNIUtil::makeJString(status->changed_author);
587
if (JNIUtil::isJavaExceptionThrown())
590
jLocalLock = Lock(status->lock);
591
if (JNIUtil::isJavaExceptionThrown())
594
jChangelist = JNIUtil::makeJString(status->changelist);
595
if (JNIUtil::isJavaExceptionThrown())
599
jobject ret = env->NewObject(clazz, mid, jPath, jUrl, jNodeKind, jRevision,
600
jLastChangedRevision, jLastChangedDate,
601
jLastCommitAuthor, jTextType, jPropType,
602
jRepositoryTextType, jRepositoryPropType,
603
jIsLocked, jIsCopied, jIsConflicted,
604
jIsSwitched, jIsFileExternal, jLocalLock,
606
jOODLastCmtRevision, jOODLastCmtDate,
607
jOODKind, jOODLastCmtAuthor, jChangelist);
609
return env->PopLocalFrame(ret);
613
CreateJ::ClientNotifyInformation(const svn_wc_notify_t *wcNotify)
615
JNIEnv *env = JNIUtil::getEnv();
617
// Create a local frame for our references
618
env->PushLocalFrame(LOCAL_FRAME_SIZE);
619
if (JNIUtil::isJavaExceptionThrown())
622
static jmethodID midCT = 0;
623
jclass clazz = env->FindClass(JAVA_PACKAGE"/ClientNotifyInformation");
624
if (JNIUtil::isJavaExceptionThrown())
629
midCT = env->GetMethodID(clazz, "<init>",
630
"(Ljava/lang/String;"
631
"L"JAVA_PACKAGE"/ClientNotifyInformation$Action;"
632
"L"JAVA_PACKAGE"/types/NodeKind;"
634
"L"JAVA_PACKAGE"/types/Lock;"
636
"L"JAVA_PACKAGE"/ClientNotifyInformation$Status;"
637
"L"JAVA_PACKAGE"/ClientNotifyInformation$Status;"
638
"L"JAVA_PACKAGE"/ClientNotifyInformation$LockStatus;"
639
"JLjava/lang/String;"
640
"L"JAVA_PACKAGE"/types/RevisionRange;"
199
641
"Ljava/lang/String;Ljava/lang/String;"
200
"IILjava/lang/String;JJLjava/util/Date;"
201
"Ljava/util/Date;Ljava/util/Date;"
202
"ZZZZJLjava/lang/String;)V");
203
if (JNIUtil::isJavaExceptionThrown())
207
jstring jName = JNIUtil::makeJString(entry->name);
208
if (JNIUtil::isJavaExceptionThrown())
210
jstring jUrl = JNIUtil::makeJString(entry->url);
211
if (JNIUtil::isJavaExceptionThrown())
213
jstring jUuid = JNIUtil::makeJString(entry->uuid);
214
if (JNIUtil::isJavaExceptionThrown())
216
jstring jRepository = JNIUtil::makeJString(entry->repos);
217
if (JNIUtil::isJavaExceptionThrown())
219
jint jSchedule = EnumMapper::mapScheduleKind(entry->schedule);
220
jint jNodeKind = EnumMapper::mapNodeKind(entry->kind);
221
jstring jAuthor = JNIUtil::makeJString(entry->cmt_author);
222
if (JNIUtil::isJavaExceptionThrown())
224
jlong jRevision = entry->revision;
225
jlong jLastChangedRevision = entry->cmt_rev;
226
jobject jLastChangedDate = JNIUtil::createDate(entry->cmt_date);
227
if (JNIUtil::isJavaExceptionThrown())
229
jobject jLastDateTextUpdate = JNIUtil::createDate(entry->text_time);
230
if (JNIUtil::isJavaExceptionThrown())
232
jobject jLastDatePropsUpdate = JNIUtil::createDate(entry->prop_time);
233
if (JNIUtil::isJavaExceptionThrown())
235
jboolean jCopied = entry->copied ? JNI_TRUE : JNI_FALSE;
236
jboolean jDeleted = entry->deleted ? JNI_TRUE : JNI_FALSE;
237
jboolean jAbsent = entry->absent ? JNI_TRUE : JNI_FALSE;
238
jboolean jIncomplete = entry->incomplete ? JNI_TRUE : JNI_FALSE;
239
jlong jCopyRev = entry->copyfrom_rev;
240
jstring jCopyUrl = JNIUtil::makeJString(entry->copyfrom_url);
241
if (JNIUtil::isJavaExceptionThrown())
244
jobject jinfo = env->NewObject(clazz, mid, jName, jUrl, jUuid, jRepository,
245
jSchedule, jNodeKind, jAuthor, jRevision,
246
jLastChangedRevision, jLastChangedDate,
247
jLastDateTextUpdate, jLastDatePropsUpdate,
248
jCopied, jDeleted, jAbsent, jIncomplete,
250
if (JNIUtil::isJavaExceptionThrown())
253
env->DeleteLocalRef(clazz);
254
if (JNIUtil::isJavaExceptionThrown())
257
env->DeleteLocalRef(jName);
258
if (JNIUtil::isJavaExceptionThrown())
260
env->DeleteLocalRef(jUrl);
261
if (JNIUtil::isJavaExceptionThrown())
263
env->DeleteLocalRef(jUuid);
264
if (JNIUtil::isJavaExceptionThrown())
266
env->DeleteLocalRef(jRepository);
267
if (JNIUtil::isJavaExceptionThrown())
269
env->DeleteLocalRef(jAuthor);
270
if (JNIUtil::isJavaExceptionThrown())
272
env->DeleteLocalRef(jLastChangedDate);
273
if (JNIUtil::isJavaExceptionThrown())
275
env->DeleteLocalRef(jLastDateTextUpdate);
276
if (JNIUtil::isJavaExceptionThrown())
278
env->DeleteLocalRef(jLastDatePropsUpdate);
279
if (JNIUtil::isJavaExceptionThrown())
281
env->DeleteLocalRef(jCopyUrl);
282
if (JNIUtil::isJavaExceptionThrown())
290
CreateJ::Lock(const svn_lock_t *lock)
294
JNIEnv *env = JNIUtil::getEnv();
296
jclass clazz = env->FindClass(JAVA_PACKAGE"/Lock");
297
if (JNIUtil::isJavaExceptionThrown())
300
static jmethodID mid = 0;
303
mid = env->GetMethodID(clazz, "<init>",
304
"(Ljava/lang/String;Ljava/lang/String;"
306
"Ljava/lang/String;JJ)V");
307
if (JNIUtil::isJavaExceptionThrown())
311
jstring jOwner = JNIUtil::makeJString(lock->owner);
312
if (JNIUtil::isJavaExceptionThrown())
314
jstring jPath = JNIUtil::makeJString(lock->path);
315
if (JNIUtil::isJavaExceptionThrown())
317
jstring jToken = JNIUtil::makeJString(lock->token);
318
if (JNIUtil::isJavaExceptionThrown())
320
jstring jComment = JNIUtil::makeJString(lock->comment);
321
if (JNIUtil::isJavaExceptionThrown())
324
jlong jCreationDate = lock->creation_date;
325
jlong jExpirationDate = lock->expiration_date;
326
jobject jlock = env->NewObject(clazz, mid, jOwner, jPath, jToken, jComment,
327
jCreationDate, jExpirationDate);
328
if (JNIUtil::isJavaExceptionThrown())
331
env->DeleteLocalRef(clazz);
332
if (JNIUtil::isJavaExceptionThrown())
335
env->DeleteLocalRef(jOwner);
336
if (JNIUtil::isJavaExceptionThrown())
338
env->DeleteLocalRef(jPath);
339
if (JNIUtil::isJavaExceptionThrown())
341
env->DeleteLocalRef(jToken);
342
if (JNIUtil::isJavaExceptionThrown())
344
env->DeleteLocalRef(jComment);
345
if (JNIUtil::isJavaExceptionThrown())
352
CreateJ::Property(jobject jthis, const char *path, const char *name,
355
JNIEnv *env = JNIUtil::getEnv();
356
jclass clazz = env->FindClass(JAVA_PACKAGE"/PropertyData");
357
if (JNIUtil::isJavaExceptionThrown())
360
static jmethodID mid = 0;
363
mid = env->GetMethodID(clazz, "<init>",
364
"(L"JAVA_PACKAGE"/SVNClient;Ljava/lang/String;"
365
"Ljava/lang/String;Ljava/lang/String;[B)V");
366
if (JNIUtil::isJavaExceptionThrown())
370
jstring jPath = JNIUtil::makeJString(path);
371
if (JNIUtil::isJavaExceptionThrown())
373
jstring jName = JNIUtil::makeJString(name);
374
if (JNIUtil::isJavaExceptionThrown())
376
jstring jValue = JNIUtil::makeJString(value->data);
377
if (JNIUtil::isJavaExceptionThrown())
379
jbyteArray jData = JNIUtil::makeJByteArray((const signed char *)value->data,
381
if (JNIUtil::isJavaExceptionThrown())
384
jobject jprop = env->NewObject(clazz, mid, jthis, jPath, jName, jValue,
386
if (JNIUtil::isJavaExceptionThrown())
389
env->DeleteLocalRef(clazz);
390
if (JNIUtil::isJavaExceptionThrown())
392
env->DeleteLocalRef(jPath);
393
if (JNIUtil::isJavaExceptionThrown())
395
env->DeleteLocalRef(jName);
396
if (JNIUtil::isJavaExceptionThrown())
398
env->DeleteLocalRef(jValue);
399
if (JNIUtil::isJavaExceptionThrown())
401
env->DeleteLocalRef(jData);
402
if (JNIUtil::isJavaExceptionThrown())
410
CreateJ::RevisionRangeArray(apr_array_header_t *ranges)
412
JNIEnv *env = JNIUtil::getEnv();
414
jclass clazz = env->FindClass(JAVA_PACKAGE "/RevisionRange");
415
if (JNIUtil::isJavaExceptionThrown())
418
jobjectArray jranges = env->NewObjectArray(ranges->nelts, clazz, NULL);
420
for (int i = 0; i < ranges->nelts; ++i)
422
// Convert svn_merge_range_t *'s to Java RevisionRange objects.
423
svn_merge_range_t *range =
424
APR_ARRAY_IDX(ranges, i, svn_merge_range_t *);
425
jobject jrange = RevisionRange::makeJRevisionRange(range);
429
env->SetObjectArrayElement(jranges, i, jrange);
430
if (JNIUtil::isJavaExceptionThrown())
433
env->DeleteLocalRef(jrange);
434
if (JNIUtil::isJavaExceptionThrown())
642
"Ljava/util/Map;JJJJJJI)V");
643
if (JNIUtil::isJavaExceptionThrown() || midCT == 0)
647
// convert the parameter to their Java relatives
648
jstring jPath = JNIUtil::makeJString(wcNotify->path);
649
if (JNIUtil::isJavaExceptionThrown())
652
jobject jAction = EnumMapper::mapNotifyAction(wcNotify->action);
653
if (JNIUtil::isJavaExceptionThrown())
656
jobject jKind = EnumMapper::mapNodeKind(wcNotify->kind);
657
if (JNIUtil::isJavaExceptionThrown())
660
jstring jMimeType = JNIUtil::makeJString(wcNotify->mime_type);
661
if (JNIUtil::isJavaExceptionThrown())
664
jobject jLock = CreateJ::Lock(wcNotify->lock);
665
if (JNIUtil::isJavaExceptionThrown())
668
jstring jErr = JNIUtil::makeSVNErrorMessage(wcNotify->err);
669
if (JNIUtil::isJavaExceptionThrown())
672
jobject jContentState = EnumMapper::mapNotifyState(wcNotify->content_state);
673
if (JNIUtil::isJavaExceptionThrown())
676
jobject jPropState = EnumMapper::mapNotifyState(wcNotify->prop_state);
677
if (JNIUtil::isJavaExceptionThrown())
680
jobject jLockState = EnumMapper::mapNotifyLockState(wcNotify->lock_state);
681
if (JNIUtil::isJavaExceptionThrown())
684
jstring jChangelistName = JNIUtil::makeJString(wcNotify->changelist_name);
685
if (JNIUtil::isJavaExceptionThrown())
688
jobject jMergeRange = NULL;
689
if (wcNotify->merge_range)
691
jMergeRange = RevisionRange::makeJRevisionRange(wcNotify->merge_range);
692
if (jMergeRange == NULL)
696
jstring jpathPrefix = JNIUtil::makeJString(wcNotify->path_prefix);
697
if (JNIUtil::isJavaExceptionThrown())
700
jstring jpropName = JNIUtil::makeJString(wcNotify->prop_name);
701
if (JNIUtil::isJavaExceptionThrown())
704
jobject jrevProps = CreateJ::PropertyMap(wcNotify->rev_props);
705
if (JNIUtil::isJavaExceptionThrown())
708
jlong joldRevision = wcNotify->old_revision;
709
jlong jhunkOriginalStart = wcNotify->hunk_original_start;
710
jlong jhunkOriginalLength = wcNotify->hunk_original_length;
711
jlong jhunkModifiedStart = wcNotify->hunk_modified_start;
712
jlong jhunkModifiedLength = wcNotify->hunk_modified_length;
713
jlong jhunkMatchedLine = wcNotify->hunk_matched_line;
714
jint jhunkFuzz = wcNotify->hunk_fuzz;
716
// call the Java method
717
jobject jInfo = env->NewObject(clazz, midCT, jPath, jAction,
718
jKind, jMimeType, jLock, jErr,
719
jContentState, jPropState, jLockState,
720
(jlong) wcNotify->revision, jChangelistName,
721
jMergeRange, jpathPrefix, jpropName,
722
jrevProps, joldRevision,
723
jhunkOriginalStart, jhunkOriginalLength,
724
jhunkModifiedStart, jhunkModifiedLength,
725
jhunkMatchedLine, jhunkFuzz);
726
if (JNIUtil::isJavaExceptionThrown())
729
return env->PopLocalFrame(jInfo);
733
CreateJ::ReposNotifyInformation(const svn_repos_notify_t *reposNotify)
735
JNIEnv *env = JNIUtil::getEnv();
737
// Create a local frame for our references
738
env->PushLocalFrame(LOCAL_FRAME_SIZE);
739
if (JNIUtil::isJavaExceptionThrown())
742
static jmethodID midCT = 0;
743
jclass clazz = env->FindClass(JAVA_PACKAGE"/ReposNotifyInformation");
744
if (JNIUtil::isJavaExceptionThrown())
749
midCT = env->GetMethodID(clazz, "<init>",
750
"(L"JAVA_PACKAGE"/ReposNotifyInformation$Action;"
751
"JLjava/lang/String;JJJ"
752
"L"JAVA_PACKAGE"/ReposNotifyInformation$NodeAction;"
753
"Ljava/lang/String;)V");
754
if (JNIUtil::isJavaExceptionThrown() || midCT == 0)
758
// convert the parameters to their Java relatives
759
jobject jAction = EnumMapper::mapReposNotifyAction(reposNotify->action);
760
if (JNIUtil::isJavaExceptionThrown())
763
jstring jWarning = JNIUtil::makeJString(reposNotify->warning_str);
764
if (JNIUtil::isJavaExceptionThrown())
767
jlong jRevision = (jlong)reposNotify->revision;
768
jlong jShard = (jlong)reposNotify->shard;
769
jlong jnewRevision = (jlong)reposNotify->new_revision;
770
jlong joldRevision = (jlong)reposNotify->old_revision;
772
jobject jnodeAction = EnumMapper::mapReposNotifyNodeAction(
773
reposNotify->node_action);
774
if (JNIUtil::isJavaExceptionThrown())
777
jstring jpath = JNIUtil::makeJString(reposNotify->path);
778
if (JNIUtil::isJavaExceptionThrown())
781
// call the Java method
782
jobject jInfo = env->NewObject(clazz, midCT, jAction, jRevision, jWarning,
783
jShard, jnewRevision, joldRevision,
785
if (JNIUtil::isJavaExceptionThrown())
788
return env->PopLocalFrame(jInfo);
792
CreateJ::CommitItem(svn_client_commit_item3_t *item)
794
JNIEnv *env = JNIUtil::getEnv();
796
// Create a local frame for our references
797
env->PushLocalFrame(LOCAL_FRAME_SIZE);
798
if (JNIUtil::isJavaExceptionThrown())
801
jclass clazz = env->FindClass(JAVA_PACKAGE"/CommitItem");
802
if (JNIUtil::isExceptionThrown())
805
// Get the method id for the CommitItem constructor.
806
static jmethodID midConstructor = 0;
807
if (midConstructor == 0)
809
midConstructor = env->GetMethodID(clazz, "<init>",
810
"(Ljava/lang/String;"
811
"L"JAVA_PACKAGE"/types/NodeKind;"
812
"ILjava/lang/String;"
813
"Ljava/lang/String;J)V");
814
if (JNIUtil::isExceptionThrown())
818
jstring jpath = JNIUtil::makeJString(item->path);
820
jobject jnodeKind = EnumMapper::mapNodeKind(item->kind);
821
if (JNIUtil::isJavaExceptionThrown())
824
jint jstateFlags = 0;
825
if (item->state_flags & SVN_CLIENT_COMMIT_ITEM_ADD)
827
org_apache_subversion_javahl_CommitItemStateFlags_Add;
828
if (item->state_flags & SVN_CLIENT_COMMIT_ITEM_DELETE)
830
org_apache_subversion_javahl_CommitItemStateFlags_Delete;
831
if (item->state_flags & SVN_CLIENT_COMMIT_ITEM_TEXT_MODS)
833
org_apache_subversion_javahl_CommitItemStateFlags_TextMods;
834
if (item->state_flags & SVN_CLIENT_COMMIT_ITEM_PROP_MODS)
836
org_apache_subversion_javahl_CommitItemStateFlags_PropMods;
837
if (item->state_flags & SVN_CLIENT_COMMIT_ITEM_IS_COPY)
839
org_apache_subversion_javahl_CommitItemStateFlags_IsCopy;
841
jstring jurl = JNIUtil::makeJString(item->url);
842
if (JNIUtil::isJavaExceptionThrown())
845
jstring jcopyUrl = JNIUtil::makeJString(item->copyfrom_url);
846
if (JNIUtil::isJavaExceptionThrown())
849
jlong jcopyRevision = item->revision;
851
// create the Java object
852
jobject jitem = env->NewObject(clazz, midConstructor, jpath,
853
jnodeKind, jstateFlags, jurl,
854
jcopyUrl, jcopyRevision);
855
if (JNIUtil::isJavaExceptionThrown())
858
return env->PopLocalFrame(jitem);
862
CreateJ::CommitInfo(const svn_commit_info_t *commit_info)
864
JNIEnv *env = JNIUtil::getEnv();
866
// Create a local frame for our references
867
env->PushLocalFrame(LOCAL_FRAME_SIZE);
868
if (JNIUtil::isJavaExceptionThrown())
871
static jmethodID midCT = 0;
872
jclass clazz = env->FindClass(JAVA_PACKAGE"/CommitInfo");
873
if (JNIUtil::isJavaExceptionThrown())
878
midCT = env->GetMethodID(clazz, "<init>",
879
"(JLjava/lang/String;Ljava/lang/String;"
880
"Ljava/lang/String;Ljava/lang/String;)V");
881
if (JNIUtil::isJavaExceptionThrown() || midCT == 0)
885
jstring jAuthor = JNIUtil::makeJString(commit_info->author);
886
if (JNIUtil::isJavaExceptionThrown())
889
jstring jDate = JNIUtil::makeJString(commit_info->date);
890
if (JNIUtil::isJavaExceptionThrown())
893
jlong jRevision = commit_info->revision;
895
jstring jPostCommitError = JNIUtil::makeJString(
896
commit_info->post_commit_err);
897
if (JNIUtil::isJavaExceptionThrown())
900
jstring jReposRoot = JNIUtil::makeJString(commit_info->repos_root);
901
if (JNIUtil::isJavaExceptionThrown())
904
// call the Java method
905
jobject jInfo = env->NewObject(clazz, midCT, jRevision, jDate, jAuthor,
906
jPostCommitError, jReposRoot);
907
if (JNIUtil::isJavaExceptionThrown())
910
return env->PopLocalFrame(jInfo);
914
CreateJ::RevisionRangeList(apr_array_header_t *ranges)
916
JNIEnv *env = JNIUtil::getEnv();
918
// Create a local frame for our references
919
env->PushLocalFrame(LOCAL_FRAME_SIZE);
920
if (JNIUtil::isJavaExceptionThrown())
923
jclass clazz = env->FindClass("java/util/ArrayList");
924
if (JNIUtil::isJavaExceptionThrown())
927
static jmethodID init_mid = 0;
930
init_mid = env->GetMethodID(clazz, "<init>", "()V");
931
if (JNIUtil::isJavaExceptionThrown())
935
static jmethodID add_mid = 0;
938
add_mid = env->GetMethodID(clazz, "add", "(Ljava/lang/Object;)Z");
939
if (JNIUtil::isJavaExceptionThrown())
943
jobject jranges = env->NewObject(clazz, init_mid);
945
for (int i = 0; i < ranges->nelts; ++i)
947
// Convert svn_merge_range_t *'s to Java RevisionRange objects.
948
svn_merge_range_t *range =
949
APR_ARRAY_IDX(ranges, i, svn_merge_range_t *);
951
jobject jrange = RevisionRange::makeJRevisionRange(range);
952
if (JNIUtil::isJavaExceptionThrown())
955
env->CallBooleanMethod(jranges, add_mid, jrange);
956
if (JNIUtil::isJavaExceptionThrown())
959
env->DeleteLocalRef(jrange);
962
return env->PopLocalFrame(jranges);
966
CreateJ::StringSet(apr_array_header_t *strings)
968
std::vector<jobject> jstrs;
970
for (int i = 0; i < strings->nelts; ++i)
972
const char *str = APR_ARRAY_IDX(strings, i, const char *);
973
jstring jstr = JNIUtil::makeJString(str);
974
if (JNIUtil::isJavaExceptionThrown())
977
jstrs.push_back(jstr);
980
return CreateJ::Set(jstrs);
983
jobject CreateJ::PropertyMap(apr_hash_t *prop_hash)
985
JNIEnv *env = JNIUtil::getEnv();
987
if (prop_hash == NULL)
990
// Create a local frame for our references
991
env->PushLocalFrame(LOCAL_FRAME_SIZE);
992
if (JNIUtil::isJavaExceptionThrown())
995
jclass clazz = env->FindClass("java/util/HashMap");
996
if (JNIUtil::isJavaExceptionThrown())
999
static jmethodID init_mid = 0;
1002
init_mid = env->GetMethodID(clazz, "<init>", "()V");
1003
if (JNIUtil::isJavaExceptionThrown())
1004
POP_AND_RETURN_NULL;
1007
static jmethodID put_mid = 0;
1010
put_mid = env->GetMethodID(clazz, "put",
1011
"(Ljava/lang/Object;Ljava/lang/Object;)"
1012
"Ljava/lang/Object;");
1013
if (JNIUtil::isJavaExceptionThrown())
1014
POP_AND_RETURN_NULL;
1017
jobject map = env->NewObject(clazz, init_mid);
1018
if (JNIUtil::isJavaExceptionThrown())
1019
POP_AND_RETURN_NULL;
1021
apr_hash_index_t *hi;
1023
for (hi = apr_hash_first(apr_hash_pool_get(prop_hash), prop_hash);
1024
hi; hi = apr_hash_next(hi), ++i)
1029
apr_hash_this(hi, (const void **)&key, NULL, (void **)&val);
1031
jstring jpropName = JNIUtil::makeJString(key);
1032
if (JNIUtil::isJavaExceptionThrown())
1033
POP_AND_RETURN_NULL;
1035
jbyteArray jpropVal = JNIUtil::makeJByteArray(
1036
(const signed char *)val->data, val->len);
1037
if (JNIUtil::isJavaExceptionThrown())
1038
POP_AND_RETURN_NULL;
1040
env->CallObjectMethod(map, put_mid, jpropName, jpropVal);
1041
if (JNIUtil::isJavaExceptionThrown())
1042
POP_AND_RETURN_NULL;
1044
env->DeleteLocalRef(jpropName);
1045
env->DeleteLocalRef(jpropVal);
1048
return env->PopLocalFrame(map);
1051
jobject CreateJ::Set(std::vector<jobject> &objects)
1053
JNIEnv *env = JNIUtil::getEnv();
1055
// Create a local frame for our references
1056
env->PushLocalFrame(LOCAL_FRAME_SIZE);
1057
if (JNIUtil::isJavaExceptionThrown())
1060
jclass clazz = env->FindClass("java/util/HashSet");
1061
if (JNIUtil::isJavaExceptionThrown())
1062
POP_AND_RETURN_NULL;
1064
static jmethodID init_mid = 0;
1067
init_mid = env->GetMethodID(clazz, "<init>", "()V");
1068
if (JNIUtil::isJavaExceptionThrown())
1069
POP_AND_RETURN_NULL;
1072
static jmethodID add_mid = 0;
1075
add_mid = env->GetMethodID(clazz, "add", "(Ljava/lang/Object;)Z");
1076
if (JNIUtil::isJavaExceptionThrown())
1077
POP_AND_RETURN_NULL;
1080
jobject set = env->NewObject(clazz, init_mid);
1081
if (JNIUtil::isJavaExceptionThrown())
1082
POP_AND_RETURN_NULL;
1084
std::vector<jobject>::const_iterator it;
1085
for (it = objects.begin(); it < objects.end(); ++it)
1087
jobject jthing = *it;
1089
env->CallBooleanMethod(set, add_mid, jthing);
1090
if (JNIUtil::isJavaExceptionThrown())
1091
POP_AND_RETURN_NULL;
1093
env->DeleteLocalRef(jthing);
1096
return env->PopLocalFrame(set);