/**
* (C) Copyright 2013 Jabylon (http://www.jabylon.org) and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*/
package org.jabylon.cdo.connector.internal;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Deactivate;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.Service;
import org.eclipse.emf.cdo.common.revision.CDORevision;
import org.eclipse.emf.cdo.net4j.CDONet4jSession;
import org.eclipse.emf.cdo.net4j.CDONet4jSessionConfiguration;
import org.eclipse.emf.cdo.net4j.CDONet4jUtil;
import org.eclipse.emf.cdo.transaction.CDOTransaction;
import org.eclipse.emf.cdo.util.CDOUtil;
import org.eclipse.emf.cdo.view.CDOView;
import org.eclipse.net4j.acceptor.IAcceptor;
import org.eclipse.net4j.connector.IConnector;
import org.eclipse.net4j.jvm.JVMUtil;
import org.eclipse.net4j.util.container.IManagedContainer;
import org.eclipse.net4j.util.container.IPluginContainer;
import org.eclipse.net4j.util.lifecycle.LifecycleUtil;
import org.jabylon.cdo.connector.RepositoryConnector;
import org.jabylon.cdo.connector.TransactionUtil;
import org.jabylon.properties.PropertiesPackage;
import org.jabylon.users.UsersPackage;
@Component
@Service(RepositoryConnector.class)
public class RepositoryConnectorImpl implements RepositoryConnector {
private IConnector connector = null;
private CDONet4jSession session = null;
@Reference
private IAcceptor acceptor;
/**
* The repository name
*/
private static final String REPOSITORY_NAME = "jabylon";
@Deactivate
@Override
public void close() {
if (session != null)
LifecycleUtil.deactivate(session);
if (connector != null)
LifecycleUtil.deactivate(connector);
}
public void bindAcceptor(IAcceptor acceptor)
{
this.acceptor = acceptor;
}
public void unbindAcceptor(IAcceptor acceptor)
{
this.acceptor = null;
}
/**
* Getter for session including lazy initialization
*
* @return the CDO session
*/
public CDONet4jSession getSession() {
if (session == null) {
session = createSession();
}
return session;
}
/**
* Getter for transaction including lazy initialization
*
* @return the transaction
*/
public CDOTransaction openTransaction() {
return configureView(getSession().openTransaction());
}
@Override
public CDOView openView() {
return configureView(getSession().openView());
}
@Override
public CDONet4jSession createSession() {
IManagedContainer container = IPluginContainer.INSTANCE;
if (connector == null)
connector = JVMUtil.getConnector(container, "default");
CDONet4jSessionConfiguration config = CDONet4jUtil.createNet4jSessionConfiguration();
config.setConnector(connector);
config.setRepositoryName(REPOSITORY_NAME);
CDONet4jSession theSession = config.openNet4jSession();
theSession.options().setCollectionLoadingPolicy (CDOUtil.createCollectionLoadingPolicy(CDORevision.UNCHUNKED, CDORevision.UNCHUNKED));
theSession.getPackageRegistry().putEPackage(PropertiesPackage.eINSTANCE);
theSession.getPackageRegistry().putEPackage(UsersPackage.eINSTANCE);
return theSession;
}
public CDOView openView(CDONet4jSession session) {
return configureView(session.openView());
}
public <T extends CDOView> T configureView(T view){
return TransactionUtil.configureView(view);
}
}