View Javadoc

1   /*
2    *
3    * Licensed to the Apache Software Foundation (ASF) under one
4    * or more contributor license agreements.  See the NOTICE file
5    * distributed with this work for additional information
6    * regarding copyright ownership.  The ASF licenses this file
7    * to you under the Apache License, Version 2.0 (the
8    * "License"); you may not use this file except in compliance
9    * with the License.  You may obtain a copy of the License at
10   *
11   *   http://www.apache.org/licenses/LICENSE-2.0
12   *
13   * Unless required by applicable law or agreed to in writing,
14   * software distributed under the License is distributed on an
15   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16   * KIND, either express or implied.  See the License for the
17   * specific language governing permissions and limitations
18   * under the License.
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   * * CMIS local SPI implementation.
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       * Constructor.
65       */
66      public CmisLocalSpi(BindingSession session) {
67          if (LOG.isDebugEnabled()) {
68              LOG.debug("Session {}: Initializing local SPI...", session.getSessionId());
69          }
70  
71          // get the service factory class name
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              // gather parameters from session
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              // create and initialize factory
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 }