2 * (C) Copyright 2006-2007 Nuxeo SAS (http://nuxeo.com/) and contributors.
4 * All rights reserved. This program and the accompanying materials
5 * are made available under the terms of the GNU Lesser General Public License
6 * (LGPL) version 2.1 which accompanies this distribution, and is available at
7 * http://www.gnu.org/licenses/lgpl.html
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
15 * Nuxeo - initial API and implementation
17 * $Id: JOOoConvertPluginImpl.java 18651 2007-05-13 20:28:53Z sfermigier $
19 package org.collectionspace.hello.services.nuxeo;
21 import java.io.IOException;
22 import java.io.InputStream;
23 import java.io.OutputStream;
24 import java.util.List;
28 import org.restlet.Client;
29 import org.restlet.data.ChallengeResponse;
30 import org.restlet.data.ChallengeScheme;
31 import org.restlet.data.Cookie;
32 import org.restlet.data.Form;
33 import org.restlet.data.MediaType;
34 import org.restlet.data.Method;
35 import org.restlet.data.Parameter;
36 import org.restlet.data.Protocol;
37 import org.restlet.data.Request;
38 import org.restlet.resource.OutputRepresentation;
39 import org.restlet.resource.Representation;
40 import org.restlet.util.Series;
42 public class NuxeoRESTClient {
44 public static final int AUTH_TYPE_NONE = 0;
45 public static final int AUTH_TYPE_BASIC = 1;
46 public static final int AUTH_TYPE_SECRET = 2;
47 protected String baseURL = "http://127.0.0.1:8080/nuxeo";
48 protected String restPrefix = "restAPI";
49 protected String davPrefix = "dav";
50 protected List<Cookie> cookies;
51 protected int authType = AUTH_TYPE_NONE;
52 protected String userName;
53 protected String password;
54 protected String secretToken;
55 protected Client restClient;
57 public NuxeoRESTClient(String baseURL) {
58 this.baseURL = baseURL;
61 public NuxeoRESTClient(String protocol, String serverIP, String serverPort) {
62 this(protocol, serverIP, serverPort, "nuxeo");
65 public NuxeoRESTClient(String protocol, String serverIP, String serverPort,
67 StringBuffer sb = new StringBuffer();
71 if (serverPort != null && !serverIP.equals("80")) {
73 sb.append(serverPort);
75 sb.append(servletPath);
77 baseURL = sb.toString();
80 public void setBasicAuthentication(String userName, String password) {
81 authType = AUTH_TYPE_BASIC;
82 this.userName = userName;
83 this.password = password;
86 public void setSharedSecretAuthentication(String userName,
88 authType = AUTH_TYPE_SECRET;
89 this.userName = userName;
90 this.secretToken = secretToken;
93 public void setCookies(List<Cookie> cookies) {
94 this.cookies = cookies;
97 public Representation post(List<String> pathParams,
98 Map<String, String> queryParams, InputStream istream) {
100 StringBuffer pathBuffer = new StringBuffer();
102 if (pathParams != null) {
103 for (String p : pathParams) {
104 pathBuffer.append(p);
105 pathBuffer.append('/');
107 path = pathBuffer.toString();
110 return post(path, queryParams, istream);
113 public Representation post(String subPath,
114 Map<String, String> queryParams, InputStream istream) {
115 StringBuffer urlBuffer = new StringBuffer();
117 if (subPath.startsWith("/")) {
118 subPath = subPath.substring(1);
120 if (subPath.endsWith("/")) {
121 subPath = subPath.substring(0, subPath.length() - 1);
124 urlBuffer.append(baseURL);
125 urlBuffer.append('/');
126 urlBuffer.append(restPrefix);
127 urlBuffer.append('/');
128 urlBuffer.append(subPath);
130 if (queryParams != null) {
131 urlBuffer.append('?');
133 String qpValue = null;
134 for (String qpName : queryParams.keySet()) {
135 urlBuffer.append(qpName);
136 urlBuffer.append('=');
137 qpValue = queryParams.get(qpName);
138 if (qpValue != null) {
139 urlBuffer.append(qpValue.replaceAll(" ", "%20"));
141 urlBuffer.append('&');
145 String completeURL = urlBuffer.toString();
146 // debug statement should be made conditional
147 System.err.println("CollectionSpace: The complete post URL is: " + completeURL);
148 Request request = new Request(Method.POST, completeURL);
151 setupCookies(request);
152 final InputStream in = istream;
153 request.setEntity(new OutputRepresentation(
154 MediaType.MULTIPART_FORM_DATA) {
157 public void write(OutputStream outputStream) throws IOException {
158 byte[] buffer = new byte[1024 * 64];
160 while ((read = in.read(buffer)) != -1) {
161 outputStream.write(buffer, 0, read);
167 return getRestClient().handle(request).getEntity();
170 public Representation get(List<String> pathParams,
171 Map<String, String> queryParams) {
173 StringBuffer pathBuffer = new StringBuffer();
175 if (pathParams != null) {
176 for (String p : pathParams) {
177 pathBuffer.append(p);
178 pathBuffer.append('/');
180 path = pathBuffer.toString();
183 return get(path, queryParams);
186 public Representation get(String subPath,
187 Map<String, String> queryParams) {
188 StringBuffer urlBuffer = new StringBuffer();
190 if (subPath.startsWith("/")) {
191 subPath = subPath.substring(1);
193 if (subPath.endsWith("/")) {
194 subPath = subPath.substring(0, subPath.length() - 1);
197 urlBuffer.append(baseURL);
198 urlBuffer.append('/');
199 urlBuffer.append(restPrefix);
200 urlBuffer.append('/');
201 urlBuffer.append(subPath);
203 if (queryParams != null) {
204 urlBuffer.append('?');
205 for (String qpName : queryParams.keySet()) {
206 urlBuffer.append(qpName);
207 urlBuffer.append('=');
208 urlBuffer.append(queryParams.get(qpName).replaceAll(" ", "%20"));
209 urlBuffer.append('&');
213 String completeURL = urlBuffer.toString();
214 System.out.println("\nNuxeoRESTClient: calling " + completeURL);
215 Request request = new Request(Method.GET, completeURL);
217 setupCookies(request);
219 return getRestClient().handle(request).getEntity();
222 protected void setupAuth(Request request) {
224 if (authType == AUTH_TYPE_BASIC) {
225 ChallengeScheme scheme = ChallengeScheme.HTTP_BASIC;
226 ChallengeResponse authentication = new ChallengeResponse(scheme,
228 request.setChallengeResponse(authentication);
230 } else if (authType == AUTH_TYPE_SECRET) {
231 Series<Parameter> additionnalHeaders = new Form();
233 Map<String, String> securityHeaders = PortalSSOAuthenticationProvider.getHeaders(
234 secretToken, userName);
236 for (String hn : securityHeaders.keySet()) {
237 additionnalHeaders.add(hn, securityHeaders.get(hn));
240 request.getAttributes().put("org.restlet.http.headers",
245 protected void setupCookies(Request request) {
246 if (cookies != null) {
247 request.getCookies().clear();
248 for (Cookie cookie : cookies) {
249 request.getCookies().add(cookie);
255 protected Client getRestClient() {
256 if (restClient == null) {
257 if (baseURL.startsWith("https")) {
258 restClient = new Client(Protocol.HTTPS);
260 restClient = new Client(Protocol.HTTP);
267 public int getAuthType() {
271 public void setAuthType(int authType) {
272 this.authType = authType;
275 public String getDavPrefix() {
279 public void setDavPrefix(String davPrefix) {
280 this.davPrefix = davPrefix;
283 public String getPassword() {
287 public void setPassword(String password) {
288 this.password = password;
291 public String getRestPrefix() {
295 public void setRestPrefix(String restPrefix) {
296 this.restPrefix = restPrefix;
299 public String getSecretToken() {
303 public void setSecretToken(String secretToken) {
304 this.secretToken = secretToken;
307 public String getUserName() {
311 public void setUserName(String userName) {
312 this.userName = userName;