/* * (C) Copyright 2006-2014 Nuxeo SA (http://nuxeo.com/) and others. * * Licensed 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. * * Contributors: * Florent Guillaume */ package org.nuxeo.ecm.core.opencmis.impl; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.chemistry.opencmis.client.api.Session; import org.apache.chemistry.opencmis.commons.enums.CmisVersion; import org.apache.chemistry.opencmis.commons.server.CallContext; import org.apache.chemistry.opencmis.commons.server.CmisService; import org.apache.chemistry.opencmis.server.impl.CallContextImpl; import org.apache.chemistry.opencmis.server.shared.TempStoreOutputStreamFactory; import org.nuxeo.common.Environment; import org.nuxeo.ecm.core.opencmis.bindings.NuxeoCmisServiceFactory; import org.nuxeo.ecm.core.opencmis.bindings.NuxeoCmisServiceFactoryManager; import org.nuxeo.ecm.core.opencmis.impl.client.NuxeoBinding; import org.nuxeo.ecm.core.opencmis.impl.client.NuxeoSession; import org.nuxeo.ecm.core.test.CoreFeature; import org.nuxeo.ecm.core.test.CoreScope; import org.nuxeo.runtime.api.Framework; import org.nuxeo.runtime.test.runner.FeaturesRunner; import com.google.inject.Binder; import com.google.inject.Provider; /** * Feature that starts an CMIS local session. */ public class CmisFeatureSessionLocal extends CmisFeatureSession { private static final int THRESHOLD = 4 * 1024 * 1024; private static final int MAX_SIZE = -1; public Session session; public class SessionProvider implements Provider<Session> { @Override public Session get() { return session; } } @Override public void configure(FeaturesRunner runner, Binder binder) { super.configure(runner, binder); Provider<Session> sessionProvider = new SessionProvider(); binder.bind(Session.class).toProvider(sessionProvider).in(CoreScope.INSTANCE); setLocal(); } @Override public void beforeSetup(FeaturesRunner runner) throws Exception { String repositoryName = runner.getFeature(CoreFeature.class).getRepositoryName(); setUpCmisSession(repositoryName); } @Override public void afterTeardown(FeaturesRunner runner) throws Exception { tearDownCmisSession(); } @Override public Session setUpCmisSession(String repositoryName) { NuxeoCmisServiceFactoryManager manager = Framework.getService(NuxeoCmisServiceFactoryManager.class); NuxeoCmisServiceFactory serviceFactory = manager.getNuxeoCmisServiceFactory(); TempStoreOutputStreamFactory streamFactory = TempStoreOutputStreamFactory.newInstance( // Environment.getDefault().getTemp(), THRESHOLD, MAX_SIZE, false); HttpServletRequest request = null; HttpServletResponse response = null; CallContextImpl context = new CallContextImpl(CallContext.BINDING_LOCAL, CmisVersion.CMIS_1_1, repositoryName, FakeServletContext.getServletContext(), request, response, serviceFactory, streamFactory); context.put(CallContext.USERNAME, USERNAME); context.put(CallContext.PASSWORD, PASSWORD); CmisService service = serviceFactory.getService(context); NuxeoBinding binding = new NuxeoBinding(service); session = new NuxeoSession(binding, context); return session; } @Override public void tearDownCmisSession() { if (session != null) { session.getBinding().close(); session.clear(); session = null; } } }