Author: ningjiang
Date: Thu Aug 30 02:01:42 2012
New Revision: 1378786

URL: http://svn.apache.org/viewvc?rev=1378786&view=rev
Log:
CAMEL-5552 camel-cmis supports OSGi

Added:
    
camel/trunk/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/SessionFactoryLocator.java
    
camel/trunk/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/osgi/
    
camel/trunk/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/osgi/Activator.java
Modified:
    camel/trunk/components/camel-cmis/pom.xml
    
camel/trunk/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CMISConsumer.java
    
camel/trunk/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CMISSessionFacade.java
    
camel/trunk/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/RecursiveTreeWalker.java
    camel/trunk/platforms/karaf/features/src/main/resources/features.xml

Modified: camel/trunk/components/camel-cmis/pom.xml
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-cmis/pom.xml?rev=1378786&r1=1378785&r2=1378786&view=diff
==============================================================================
--- camel/trunk/components/camel-cmis/pom.xml (original)
+++ camel/trunk/components/camel-cmis/pom.xml Thu Aug 30 02:01:42 2012
@@ -34,7 +34,9 @@
 
     <properties>
         
<camel.osgi.export.pkg>org.apache.camel.component.cmis.*</camel.osgi.export.pkg>
-        
<!--<camel.osgi.import.pkg>!org.apache.chemistry.opencmis.client.runtime</camel.osgi.import.pkg>-->
+        <camel.osgi.activator>
+           org.apache.camel.component.cmis.osgi.Activator
+        </camel.osgi.activator>
     </properties>
 
     <dependencies>
@@ -48,6 +50,14 @@
             <artifactId>chemistry-opencmis-client-impl</artifactId>
             <version>${cmis-version}</version>
         </dependency>
+        
+        <!-- osgi support -->
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>org.osgi.core</artifactId>
+            <scope>provided</scope>
+            <optional>true</optional>
+        </dependency>
 
         <!-- for testing -->
         <dependency>

Modified: 
camel/trunk/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CMISConsumer.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CMISConsumer.java?rev=1378786&r1=1378785&r2=1378786&view=diff
==============================================================================
--- 
camel/trunk/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CMISConsumer.java
 (original)
+++ 
camel/trunk/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CMISConsumer.java
 Thu Aug 30 02:01:42 2012
@@ -22,6 +22,7 @@ import java.util.Map;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.impl.ScheduledPollConsumer;
+import org.apache.chemistry.opencmis.client.api.OperationContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -45,6 +46,10 @@ public class CMISConsumer extends Schedu
     protected int poll() throws Exception {
         return this.sessionFacade.poll(this);
     }
+    
+    public OperationContext createOperationContext() {
+        return sessionFacade.createOperationContext();
+    }
 
     int sendExchangeWithPropsAndBody(Map<String, Object> properties, 
InputStream inputStream)
         throws Exception {

Modified: 
camel/trunk/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CMISSessionFacade.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CMISSessionFacade.java?rev=1378786&r1=1378785&r2=1378786&view=diff
==============================================================================
--- 
camel/trunk/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CMISSessionFacade.java
 (original)
+++ 
camel/trunk/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CMISSessionFacade.java
 Thu Aug 30 02:01:42 2012
@@ -32,9 +32,6 @@ import org.apache.chemistry.opencmis.cli
 import org.apache.chemistry.opencmis.client.api.OperationContext;
 import org.apache.chemistry.opencmis.client.api.QueryResult;
 import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.client.runtime.ObjectIdImpl;
-import org.apache.chemistry.opencmis.client.runtime.OperationContextImpl;
-import org.apache.chemistry.opencmis.client.runtime.SessionFactoryImpl;
 import org.apache.chemistry.opencmis.commons.PropertyIds;
 import org.apache.chemistry.opencmis.commons.SessionParameter;
 import org.apache.chemistry.opencmis.commons.data.ContentStream;
@@ -66,9 +63,9 @@ public class CMISSessionFacade {
         parameter.put(SessionParameter.PASSWORD, this.password);
         if (this.repositoryId != null) {
             parameter.put(SessionParameter.REPOSITORY_ID, this.repositoryId);
-            this.session = 
SessionFactoryImpl.newInstance().createSession(parameter);
+            this.session = 
SessionFactoryLocator.getSessionFactory().createSession(parameter);
         } else {
-            this.session = 
SessionFactoryImpl.newInstance().getRepositories(parameter).get(0).createSession();
+            this.session = 
SessionFactoryLocator.getSessionFactory().getRepositories(parameter).get(0).createSession();
         }
     }
 
@@ -152,7 +149,7 @@ public class CMISSessionFacade {
     }
 
     public ItemIterable<QueryResult> executeQuery(String query) {
-        OperationContext operationContext = new OperationContextImpl();
+        OperationContext operationContext = session.createOperationContext();
         operationContext.setMaxItemsPerPage(pageSize);
         return session.query(query, false, operationContext);
     }
@@ -161,8 +158,7 @@ public class CMISSessionFacade {
         if 
(CamelCMISConstants.CMIS_DOCUMENT.equals(queryResult.getPropertyValueById(PropertyIds.OBJECT_TYPE_ID))
             || 
CamelCMISConstants.CMIS_DOCUMENT.equals(queryResult.getPropertyValueById(PropertyIds.BASE_TYPE_ID)))
 {
             String objectId = 
(String)queryResult.getPropertyById(PropertyIds.OBJECT_ID).getFirstValue();
-            ObjectIdImpl objectIdImpl = new ObjectIdImpl(objectId);
-            return 
(org.apache.chemistry.opencmis.client.api.Document)session.getObject(objectIdImpl);
+            return 
(org.apache.chemistry.opencmis.client.api.Document)session.getObject(objectId);
         }
         return null;
     }
@@ -191,6 +187,10 @@ public class CMISSessionFacade {
         return buf != null ? session.getObjectFactory()
                 .createContentStream(fileName, buf.length, mimeType, new 
ByteArrayInputStream(buf)) : null;
     }
+    
+    public OperationContext createOperationContext() {
+        return session.createOperationContext();
+    }
 
     public void setUsername(String username) {
         this.username = username;

Modified: 
camel/trunk/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/RecursiveTreeWalker.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/RecursiveTreeWalker.java?rev=1378786&r1=1378785&r2=1378786&view=diff
==============================================================================
--- 
camel/trunk/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/RecursiveTreeWalker.java
 (original)
+++ 
camel/trunk/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/RecursiveTreeWalker.java
 Thu Aug 30 02:01:42 2012
@@ -48,7 +48,8 @@ public class RecursiveTreeWalker {
     int processFolderRecursively(Folder folder) throws Exception {
         processFolderNode(folder);
 
-        OperationContext operationContext = new OperationContextImpl();
+        
+        OperationContext operationContext = 
cmisConsumer.createOperationContext();
         operationContext.setMaxItemsPerPage(pageSize);
 
         int count = 0;

Added: 
camel/trunk/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/SessionFactoryLocator.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/SessionFactoryLocator.java?rev=1378786&view=auto
==============================================================================
--- 
camel/trunk/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/SessionFactoryLocator.java
 (added)
+++ 
camel/trunk/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/SessionFactoryLocator.java
 Thu Aug 30 02:01:42 2012
@@ -0,0 +1,64 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.cmis;
+
+import java.lang.reflect.Method;
+
+import org.apache.camel.RuntimeCamelException;
+import org.apache.chemistry.opencmis.client.api.SessionFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public final class SessionFactoryLocator {
+    private static final transient Logger LOG = 
LoggerFactory.getLogger(SessionFactoryLocator.class);
+    private static SessionFactory sessionFactory;
+    
+    private SessionFactoryLocator() {
+        //Utils class
+    }
+    
+    public static void setSessionFactory(SessionFactory factory) {
+        sessionFactory = factory;
+    }
+    
+    public static SessionFactory getSessionFactory() {
+        if (sessionFactory != null) {
+            return sessionFactory;
+        } else {
+            // create the sessionFactory in another way
+            sessionFactory =  loadSessionFactoryFromClassPath();
+            return sessionFactory;
+        }
+    }
+    
+    private static SessionFactory loadSessionFactoryFromClassPath() {
+        try {
+            Class<?> factoryClass = null;
+            factoryClass = 
Class.forName("org.apache.chemistry.opencmis.client.runtime.SessionFactoryImpl");
+            if (factoryClass != null) {
+                Method method = factoryClass.getMethod("newInstance", new 
Class<?>[0]);
+                return (SessionFactory)method.invoke(null, new Object[0]);
+            }
+        } catch (Exception ex) {
+            LOG.error("Cannot create the SessionFactoryImpl due to: {0}", ex);
+            throw new RuntimeCamelException(ex);
+        }
+        return null;
+    }
+    
+
+}

Added: 
camel/trunk/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/osgi/Activator.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/osgi/Activator.java?rev=1378786&view=auto
==============================================================================
--- 
camel/trunk/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/osgi/Activator.java
 (added)
+++ 
camel/trunk/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/osgi/Activator.java
 Thu Aug 30 02:01:42 2012
@@ -0,0 +1,45 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.cmis.osgi;
+
+import org.apache.camel.component.cmis.SessionFactoryLocator;
+import org.apache.chemistry.opencmis.client.api.SessionFactory;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+
+// Locator the SessionFactoryImpl service
+public class Activator implements BundleActivator {
+    private ServiceReference reference;
+
+    @Override
+    public void start(BundleContext context) throws Exception {
+        // get the reference of SessionFactory service
+        reference = 
context.getServiceReference(SessionFactory.class.getName());
+        SessionFactory sessionFactory = 
(SessionFactory)context.getService(reference);
+        SessionFactoryLocator.setSessionFactory(sessionFactory);
+    }
+
+    @Override
+    public void stop(BundleContext context) throws Exception {
+        // release the reference
+        if (reference != null) {
+            context.ungetService(reference);
+        }
+    }
+
+}

Modified: camel/trunk/platforms/karaf/features/src/main/resources/features.xml
URL: 
http://svn.apache.org/viewvc/camel/trunk/platforms/karaf/features/src/main/resources/features.xml?rev=1378786&r1=1378785&r2=1378786&view=diff
==============================================================================
--- camel/trunk/platforms/karaf/features/src/main/resources/features.xml 
(original)
+++ camel/trunk/platforms/karaf/features/src/main/resources/features.xml Thu 
Aug 30 02:01:42 2012
@@ -105,12 +105,12 @@
     <bundle>mvn:org.apache.camel/camel-castor/${project.version}</bundle>
   </feature>
   <!-- camel-cmis doesn't work yet -->
-  <!--feature name='camel-cmis' version='${project.version}' resolver='(obr)' 
start-level='50'>
+  <feature name='camel-cmis' version='${project.version}' resolver='(obr)' 
start-level='50'>
     <feature version='${project.version}'>camel-core</feature>
     <feature version='${cxf-version-range}'>cxf-specs</feature>
     <bundle 
dependency='true'>mvn:org.apache.chemistry.opencmis/chemistry-opencmis-osgi-client/${cmis-bundle-version}</bundle>
     <bundle>mvn:org.apache.camel/camel-cmis/${project.version}</bundle>
-  </feature-->
+  </feature>
   <feature name='camel-crypto' version='${project.version}' resolver='(obr)' 
start-level='50'>
     <feature version='${project.version}'>camel-core</feature>
     <bundle 
dependency='true'>mvn:commons-codec/commons-codec/${commons-codec-version}</bundle>


Reply via email to