3
* ====================================================================
4
* Licensed to the Apache Software Foundation (ASF) under one
5
* or more contributor license agreements. See the NOTICE file
6
* distributed with this work for additional information
7
* regarding copyright ownership. The ASF licenses this file
8
* to you under the Apache License, Version 2.0 (the
9
* "License"); you may not use this file except in compliance
10
* with the License. You may obtain a copy of the License at
12
* http://www.apache.org/licenses/LICENSE-2.0
14
* Unless required by applicable law or agreed to in writing,
15
* software distributed under the License is distributed on an
16
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17
* KIND, either express or implied. See the License for the
18
* specific language governing permissions and limitations
20
* ====================================================================
24
#include "jniwrapper/jni_stack.hpp"
26
#include "ExternalItem.hpp"
31
const char* const ExternalItem::m_class_name =
32
JAVAHL_CLASS("/types/ExternalItem");
34
ExternalItem::ClassImpl::ClassImpl(::Java::Env env, jclass cls)
35
: ::Java::Object::ClassImpl(env, cls),
37
env.GetMethodID(cls, "<init>",
38
"(ZLjava/lang/String;Ljava/lang/String;"
39
JAVAHL_ARG("/types/Revision;")
40
JAVAHL_ARG("/types/Revision;")
42
m_fid_target_dir(env.GetFieldID(cls, "targetDir", "Ljava/lang/String;")),
43
m_fid_url(env.GetFieldID(cls, "url", "Ljava/lang/String;")),
44
m_fid_revision(env.GetFieldID(cls, "revision",
45
JAVAHL_ARG("/types/Revision;"))),
46
m_fid_peg_revision(env.GetFieldID(cls, "pegRevision",
47
JAVAHL_ARG("/types/Revision;")))
50
ExternalItem::ClassImpl::~ClassImpl() {}
54
get_string_field(::Java::Env env, jobject jthis,
55
const ::Java::FieldID& fid)
57
return jstring(env.GetObjectField(jthis, fid));
60
inline svn_opt_revision_t
61
get_revision_field(::Java::Env env, jobject jthis,
62
const ::Java::FieldID& fid)
64
const jobject rev = env.GetObjectField(jthis, fid);
65
return *Revision(rev).revision();
69
make_external_item(::Java::Env env,
70
jclass cls, const ::Java::MethodID& mid_ctor,
71
const char* target_dir,
73
const svn_opt_revision_t* revision,
74
const svn_opt_revision_t* peg_revision)
76
return env.NewObject(cls, mid_ctor,
78
env.NewStringUTF(target_dir),
79
env.NewStringUTF(url),
80
Revision::makeJRevision(*revision),
81
Revision::makeJRevision(*peg_revision));
83
} // anonymous namespace
85
ExternalItem::ExternalItem(::Java::Env env, jobject jthis)
86
: Object(env, ::Java::ClassCache::get_external_item(env), jthis),
87
m_target_dir(env, get_string_field(env, jthis, impl().m_fid_target_dir)),
88
m_url(env, get_string_field(env, jthis, impl().m_fid_url)),
89
m_revision(get_revision_field(env, jthis, impl().m_fid_revision)),
90
m_peg_revision(get_revision_field(env, jthis, impl().m_fid_peg_revision))
93
ExternalItem::ExternalItem(::Java::Env env,
94
const char* target_dir,
96
const svn_opt_revision_t* revision,
97
const svn_opt_revision_t* peg_revision)
98
: Object(env, ::Java::ClassCache::get_external_item(env)),
99
m_target_dir(env, target_dir),
101
m_revision(*revision),
102
m_peg_revision(*peg_revision)
104
set_this(make_external_item(env, get_class(), impl().m_mid_ctor,
105
target_dir, url, revision, peg_revision));
108
svn_wc_external_item2_t*
109
ExternalItem::get_external_item(SVN::Pool& svnpool) const
111
svn_wc_external_item2_t* item;
112
apr_pool_t* const pool = svnpool.getPool();
113
SVN_JAVAHL_CHECK(m_env, svn_wc_external_item2_create(&item, pool));
115
item->target_dir = apr_pstrdup(
116
pool, Java::String::Contents(m_target_dir).c_str());
117
item->url = apr_pstrdup(
118
pool, Java::String::Contents(m_url).c_str());
119
item->revision = m_revision;
120
item->peg_revision = m_peg_revision;
124
} // namespace JavaHL
127
// FIXME: Should be in another source file, but Revision.cpp is
128
// old-style, so we'll put this implementation here for now.
130
inline jobject get_static_revision(::Java::Env env, jclass cls,
131
const char* field_name)
133
return env.GetStaticObjectField(
134
cls, env.GetStaticFieldID(cls, field_name,
135
JAVAHL_ARG("/types/Revision;")));
137
} // anonymous namespace
139
jobject Revision::makeJRevision(const svn_opt_revision_t& rev)
141
if (rev.kind == svn_opt_revision_number)
142
return Revision::makeJRevision(rev.value.number);
144
const ::Java::Env env;
146
if (rev.kind == svn_opt_revision_date)
148
const jclass cls = env.FindClass(
149
JAVAHL_CLASS("/types/Revision$DateSpec"));
150
return env.NewObject(cls, env.GetMethodID(cls, "<init>", "(J)V"),
151
jlong(rev.value.date / 1000));
154
const jclass cls = env.FindClass(JAVAHL_CLASS("/types/Revision"));
157
case svn_opt_revision_committed:
158
return get_static_revision(env, cls, "COMMITTED");
160
case svn_opt_revision_previous:
161
return get_static_revision(env, cls, "PREVIOUS");
163
case svn_opt_revision_base:
164
return get_static_revision(env, cls, "BASE");
166
case svn_opt_revision_working:
167
return get_static_revision(env, cls, "WORKING");
169
case svn_opt_revision_head:
170
return get_static_revision(env, cls, "HEAD");
172
case svn_opt_revision_unspecified:
174
return get_static_revision(env, cls, "UNSPECIFIED");