Alien-SVN
view release on metacpan or search on metacpan
src/subversion/subversion/bindings/javahl/native/ProplistCallback.cpp view on Meta::CPAN
apr_hash_t *prop_hash,
apr_array_header_t *inherited_props,
apr_pool_t *pool)
{
if (baton)
{
ProplistCallback *cb = static_cast<ProplistCallback *>(baton);
if (cb->inherited())
return cb->singlePath(path, prop_hash, inherited_props, pool);
else
return cb->singlePath(path, prop_hash, pool);
}
return SVN_NO_ERROR;
}
/**
* Callback called for a single path
* @param path the path name
* @param prop_hash the hash of properties on this path
* @param pool memory pool for the use of this function
*/
svn_error_t *ProplistCallback::singlePath(const char *path,
apr_hash_t *prop_hash,
apr_pool_t *pool)
{
JNIEnv *env = JNIUtil::getEnv();
// Create a local frame for our references
env->PushLocalFrame(LOCAL_FRAME_SIZE);
if (JNIUtil::isJavaExceptionThrown())
return NULL;
// The method id will not change during the time this library is
// loaded, so it can be cached.
static volatile jmethodID mid = 0;
if (mid == 0)
{
jclass clazz = env->FindClass(JAVA_PACKAGE"/callback/ProplistCallback");
if (JNIUtil::isJavaExceptionThrown())
return SVN_NO_ERROR;
mid = env->GetMethodID(clazz, "singlePath",
"(Ljava/lang/String;Ljava/util/Map;)V");
if (JNIUtil::isJavaExceptionThrown() || mid == 0)
POP_AND_RETURN(SVN_NO_ERROR);
}
// convert the parameters to their Java relatives
jstring jpath = JNIUtil::makeJString(path);
if (JNIUtil::isJavaExceptionThrown())
POP_AND_RETURN(SVN_NO_ERROR);
jobject jmap = CreateJ::PropertyMap(prop_hash);
if (JNIUtil::isJavaExceptionThrown())
POP_AND_RETURN(SVN_NO_ERROR);
// call the Java method
env->CallVoidMethod(m_callback, mid, jpath, jmap);
// We return whether an exception was thrown or not.
env->PopLocalFrame(NULL);
return SVN_NO_ERROR;
}
/**
* Callback called for a single path
* @param path the path name
* @param prop_hash the hash of properties on this path
* @param inherited_props list of inherited props
* @param pool memory pool for the use of this function
*/
svn_error_t *ProplistCallback::singlePath(
const char *path,
apr_hash_t *prop_hash,
apr_array_header_t *inherited_props,
apr_pool_t *pool)
{
JNIEnv *env = JNIUtil::getEnv();
// Create a local frame for our references
env->PushLocalFrame(LOCAL_FRAME_SIZE);
if (JNIUtil::isJavaExceptionThrown())
return NULL;
// The method id will not change during the time this library is
// loaded, so it can be cached.
static jmethodID mid = 0;
if (mid == 0)
{
jclass clazz = env->FindClass(JAVA_PACKAGE"/callback/InheritedProplistCallback");
if (JNIUtil::isJavaExceptionThrown())
return SVN_NO_ERROR;
mid = env->GetMethodID(clazz, "singlePath",
"(Ljava/lang/String;Ljava/util/Map;Ljava/util/Collection;)V");
if (JNIUtil::isJavaExceptionThrown() || mid == 0)
POP_AND_RETURN(SVN_NO_ERROR);
}
// convert the parameters to their Java relatives
jstring jpath = JNIUtil::makeJString(path);
if (JNIUtil::isJavaExceptionThrown())
POP_AND_RETURN(SVN_NO_ERROR);
jobject jmap = CreateJ::PropertyMap(prop_hash);
if (JNIUtil::isJavaExceptionThrown())
POP_AND_RETURN(SVN_NO_ERROR);
jobject jiprops = CreateJ::InheritedProps(inherited_props);
if (JNIUtil::isJavaExceptionThrown())
POP_AND_RETURN(SVN_NO_ERROR);
// call the Java method
env->CallVoidMethod(m_callback, mid, jpath, jmap, jiprops);
// We return whether an exception was thrown or not.
env->PopLocalFrame(NULL);
return SVN_NO_ERROR;
}
( run in 0.463 second using v1.01-cache-2.11-cpan-3d66aa2751a )