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('?');
132 for (String qpName : queryParams.keySet()) {
133 urlBuffer.append(qpName);
134 urlBuffer.append('=');
135 urlBuffer.append(queryParams.get(qpName).replaceAll(" ", "%20"));
136 urlBuffer.append('&');
140 String completeURL = urlBuffer.toString();
142 Request request = new Request(Method.POST, completeURL);
145 setupCookies(request);
146 final InputStream in = istream;
147 request.setEntity(new OutputRepresentation(
148 MediaType.MULTIPART_FORM_DATA) {
151 public void write(OutputStream outputStream) throws IOException {
152 byte[] buffer = new byte[1024 * 64];
154 while ((read = in.read(buffer)) != -1) {
155 outputStream.write(buffer, 0, read);
161 return getRestClient().handle(request).getEntity();
164 public Representation get(List<String> pathParams,
165 Map<String, String> queryParams) {
167 StringBuffer pathBuffer = new StringBuffer();
169 if (pathParams != null) {
170 for (String p : pathParams) {
171 pathBuffer.append(p);
172 pathBuffer.append('/');
174 path = pathBuffer.toString();
177 return get(path, queryParams);
180 public Representation get(String subPath,
181 Map<String, String> queryParams) {
182 StringBuffer urlBuffer = new StringBuffer();
184 if (subPath.startsWith("/")) {
185 subPath = subPath.substring(1);
187 if (subPath.endsWith("/")) {
188 subPath = subPath.substring(0, subPath.length() - 1);
191 urlBuffer.append(baseURL);
192 urlBuffer.append('/');
193 urlBuffer.append(restPrefix);
194 urlBuffer.append('/');
195 urlBuffer.append(subPath);
197 if (queryParams != null) {
198 urlBuffer.append('?');
199 for (String qpName : queryParams.keySet()) {
200 urlBuffer.append(qpName);
201 urlBuffer.append('=');
202 urlBuffer.append(queryParams.get(qpName).replaceAll(" ", "%20"));
203 urlBuffer.append('&');
207 String completeURL = urlBuffer.toString();
208 System.out.println("\nNuxeoRESTClient: calling " + completeURL);
209 Request request = new Request(Method.GET, completeURL);
211 setupCookies(request);
213 return getRestClient().handle(request).getEntity();
216 protected void setupAuth(Request request) {
218 if (authType == AUTH_TYPE_BASIC) {
219 ChallengeScheme scheme = ChallengeScheme.HTTP_BASIC;
220 ChallengeResponse authentication = new ChallengeResponse(scheme,
222 request.setChallengeResponse(authentication);
224 } else if (authType == AUTH_TYPE_SECRET) {
225 Series<Parameter> additionnalHeaders = new Form();
227 Map<String, String> securityHeaders = PortalSSOAuthenticationProvider.getHeaders(
228 secretToken, userName);
230 for (String hn : securityHeaders.keySet()) {
231 additionnalHeaders.add(hn, securityHeaders.get(hn));
234 request.getAttributes().put("org.restlet.http.headers",
239 protected void setupCookies(Request request) {
240 if (cookies != null) {
241 request.getCookies().clear();
242 for (Cookie cookie : cookies) {
243 request.getCookies().add(cookie);
249 protected Client getRestClient() {
250 if (restClient == null) {
251 if (baseURL.startsWith("https")) {
252 restClient = new Client(Protocol.HTTPS);
254 restClient = new Client(Protocol.HTTP);
261 public int getAuthType() {
265 public void setAuthType(int authType) {
266 this.authType = authType;
269 public String getDavPrefix() {
273 public void setDavPrefix(String davPrefix) {
274 this.davPrefix = davPrefix;
277 public String getPassword() {
281 public void setPassword(String password) {
282 this.password = password;
285 public String getRestPrefix() {
289 public void setRestPrefix(String restPrefix) {
290 this.restPrefix = restPrefix;
293 public String getSecretToken() {
297 public void setSecretToken(String secretToken) {
298 this.secretToken = secretToken;
301 public String getUserName() {
305 public void setUserName(String userName) {
306 this.userName = userName;