1 package org.modeshape.web.jcr.rest;
2
3 import java.io.IOException;
4 import java.io.InputStream;
5 import javax.jcr.PropertyType;
6 import javax.jcr.RepositoryException;
7 import javax.jcr.Session;
8 import javax.jcr.Value;
9 import javax.servlet.http.HttpServletRequest;
10 import org.modeshape.common.text.UrlEncoder;
11 import org.modeshape.common.util.Base64;
12 import org.modeshape.web.jcr.RepositoryFactory;
13
14 abstract class AbstractHandler {
15
16 protected static final String BASE64_ENCODING_SUFFIX = "/base64/";
17
18 protected static final UrlEncoder URL_ENCODER = new UrlEncoder();
19
20
21 public static final String EMPTY_REPOSITORY_NAME = "<default>";
22
23 public static final String EMPTY_WORKSPACE_NAME = "<default>";
24
25
26
27
28
29
30
31
32
33
34
35 protected Session getSession( HttpServletRequest request,
36 String rawRepositoryName,
37 String rawWorkspaceName ) throws RepositoryException {
38 assert request != null;
39
40 return RepositoryFactory.getSession(request, repositoryNameFor(rawRepositoryName), workspaceNameFor(rawWorkspaceName));
41 }
42
43 private String workspaceNameFor( String rawWorkspaceName ) {
44 String workspaceName = URL_ENCODER.decode(rawWorkspaceName);
45
46 if (EMPTY_WORKSPACE_NAME.equals(workspaceName)) {
47 workspaceName = "";
48 }
49
50 return workspaceName;
51 }
52
53 private String repositoryNameFor( String rawRepositoryName ) {
54 String repositoryName = URL_ENCODER.decode(rawRepositoryName);
55
56 if (EMPTY_REPOSITORY_NAME.equals(repositoryName)) {
57 repositoryName = "";
58 }
59
60 return repositoryName;
61 }
62
63
64
65
66
67
68
69
70
71
72 protected String jsonEncodedStringFor( Value value ) throws RepositoryException {
73
74 InputStream stream = value.getBinary().getStream();
75 try {
76 return Base64.encode(stream);
77 } finally {
78 if (stream != null) {
79 try {
80 stream.close();
81 } catch (IOException e) {
82
83 throw new RepositoryException(e);
84 }
85 }
86 }
87 }
88
89 }