1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.apache.chemistry.opencmis.client.bindings.spi.local;
22
23 import java.util.HashMap;
24 import java.util.Map;
25
26 import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
27 import org.apache.chemistry.opencmis.client.bindings.spi.CmisSpi;
28 import org.apache.chemistry.opencmis.commons.SessionParameter;
29 import org.apache.chemistry.opencmis.commons.exceptions.CmisConnectionException;
30 import org.apache.chemistry.opencmis.commons.impl.ClassLoaderUtil;
31 import org.apache.chemistry.opencmis.commons.server.CmisServiceFactory;
32 import org.apache.chemistry.opencmis.commons.spi.AclService;
33 import org.apache.chemistry.opencmis.commons.spi.DiscoveryService;
34 import org.apache.chemistry.opencmis.commons.spi.MultiFilingService;
35 import org.apache.chemistry.opencmis.commons.spi.NavigationService;
36 import org.apache.chemistry.opencmis.commons.spi.ObjectService;
37 import org.apache.chemistry.opencmis.commons.spi.PolicyService;
38 import org.apache.chemistry.opencmis.commons.spi.RelationshipService;
39 import org.apache.chemistry.opencmis.commons.spi.RepositoryService;
40 import org.apache.chemistry.opencmis.commons.spi.VersioningService;
41 import org.slf4j.Logger;
42 import org.slf4j.LoggerFactory;
43
44
45
46
47 public class CmisLocalSpi implements CmisSpi {
48
49 private static final Logger LOG = LoggerFactory.getLogger(CmisLocalSpi.class);
50
51 private final CmisServiceFactory factory;
52
53 private final RepositoryService repositoryService;
54 private final NavigationService navigationService;
55 private final ObjectService objectService;
56 private final VersioningService versioningService;
57 private final DiscoveryService discoveryService;
58 private final MultiFilingService multiFilingService;
59 private final RelationshipService relationshipService;
60 private final PolicyService policyService;
61 private final AclService aclService;
62
63
64
65
66 public CmisLocalSpi(BindingSession session) {
67 if (LOG.isDebugEnabled()) {
68 LOG.debug("Session {}: Initializing local SPI...", session.getSessionId());
69 }
70
71
72 String serviceFactoryClassname = (String) session.get(SessionParameter.LOCAL_FACTORY);
73 if (serviceFactoryClassname == null) {
74 throw new CmisConnectionException("Factory class not set!");
75 }
76
77 try {
78
79 Map<String, String> parameters = new HashMap<String, String>();
80 for (String key : session.getKeys()) {
81 Object value = session.get(key);
82 if (value instanceof String) {
83 parameters.put(key, (String) value);
84 }
85 }
86
87
88 factory = (CmisServiceFactory) ClassLoaderUtil.loadClass(serviceFactoryClassname).newInstance();
89 factory.init(parameters);
90 } catch (Exception e) {
91 throw new CmisConnectionException("Factory cannot be created: " + e.getMessage(), e);
92 }
93
94 repositoryService = new RepositoryServiceImpl(session, factory);
95 navigationService = new NavigationServiceImpl(session, factory);
96 objectService = new ObjectServiceImpl(session, factory);
97 versioningService = new VersioningServiceImpl(session, factory);
98 discoveryService = new DiscoveryServiceImpl(session, factory);
99 multiFilingService = new MultiFilingServiceImpl(session, factory);
100 relationshipService = new RelationshipServiceImpl(session, factory);
101 policyService = new PolicyServiceImpl(session, factory);
102 aclService = new AclServiceImpl(session, factory);
103 }
104
105 @Override
106 public RepositoryService getRepositoryService() {
107 return repositoryService;
108 }
109
110 @Override
111 public NavigationService getNavigationService() {
112 return navigationService;
113 }
114
115 @Override
116 public ObjectService getObjectService() {
117 return objectService;
118 }
119
120 @Override
121 public DiscoveryService getDiscoveryService() {
122 return discoveryService;
123 }
124
125 @Override
126 public VersioningService getVersioningService() {
127 return versioningService;
128 }
129
130 @Override
131 public MultiFilingService getMultiFilingService() {
132 return multiFilingService;
133 }
134
135 @Override
136 public RelationshipService getRelationshipService() {
137 return relationshipService;
138 }
139
140 @Override
141 public PolicyService getPolicyService() {
142 return policyService;
143 }
144
145 @Override
146 public AclService getAclService() {
147 return aclService;
148 }
149
150 @Override
151 public void clearAllCaches() {
152 }
153
154 @Override
155 public void clearRepositoryCache(String repositoryId) {
156 }
157
158 @Override
159 public void close() {
160 factory.destroy();
161 }
162 }