/*
* Copyright (c) 2016 Eike Stepper (Berlin, Germany) 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
*
* Contributors:
* Eike Stepper - initial API and implementation
*/
package org.eclipse.emf.cdo.server.internal.embedded;
import org.eclipse.emf.cdo.common.branch.CDOBranchManager;
import org.eclipse.emf.cdo.common.revision.CDORevisionManager;
import org.eclipse.emf.cdo.internal.server.Repository;
import org.eclipse.emf.cdo.net4j.CDONet4jSession;
import org.eclipse.emf.cdo.net4j.CDONet4jSessionConfiguration;
import org.eclipse.emf.cdo.server.embedded.CDOEmbeddedRepositoryConfig;
import org.eclipse.emf.cdo.server.net4j.CDONet4jServerUtil;
import org.eclipse.emf.cdo.spi.common.branch.InternalCDOBranchManager;
import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionManager;
import org.eclipse.emf.cdo.spi.server.InternalStore;
import org.eclipse.emf.cdo.spi.server.RepositoryFactory;
import org.eclipse.net4j.Net4jUtil;
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.lifecycle.LifecycleUtil;
import org.eclipse.net4j.util.om.OMPlatform;
import org.eclipse.emf.ecore.EPackage;
import java.util.ArrayList;
import java.util.List;
/**
* @author Eike Stepper
*/
public class EmbeddedRepository extends Repository.Default
{
private CDOEmbeddedRepositoryConfig config;
private IAcceptor acceptor;
private IConnector connector;
public EmbeddedRepository(CDOEmbeddedRepositoryConfig config)
{
this.config = config;
}
public CDONet4jSession openClientSession()
{
CDOBranchManager branchManager = new ClientBranchManager(getBranchManager());
CDORevisionManager revisionManager = new ClientRevisionManager(getRevisionManager());
CDONet4jSessionConfiguration configuration = config.createSessionConfiguration(connector, branchManager, revisionManager);
CDONet4jSession session = configuration.openNet4jSession();
config.modifySession(this, session);
return session;
}
@Override
public void initSystemPackages(boolean firstStart)
{
if (firstStart)
{
// Initialize packages.
List<EPackage> packages = new ArrayList<EPackage>();
config.initPackages(this, packages);
if (!packages.isEmpty())
{
setInitialPackages(packages.toArray(new EPackage[packages.size()]));
}
}
super.initSystemPackages(firstStart);
}
@Override
protected void doBeforeActivate() throws Exception
{
if (!OMPlatform.INSTANCE.isExtensionRegistryAvailable())
{
IManagedContainer container = getContainer();
Net4jUtil.prepareContainer(container);
JVMUtil.prepareContainer(container);
CDONet4jServerUtil.prepareContainer(container);
}
super.doBeforeActivate();
InternalCDOBranchManager branchManager = getBranchManager();
branchManager.setBranchLoader(new ServerBranchLoader(this));
InternalCDORevisionManager revisionManager = getRevisionManager();
revisionManager.setRevisionLoader(new ServerRevisionLoader(this));
}
@Override
protected void doAfterActivate() throws Exception
{
super.doAfterActivate();
IManagedContainer container = getContainer();
container.putElement(RepositoryFactory.PRODUCT_GROUP, RepositoryFactory.TYPE, getName(), this);
acceptor = config.createAcceptor(container);
connector = config.createConnector(container);
InternalStore store = getStore();
if (store.isFirstStart())
{
config.afterFirstStart(this);
}
else
{
config.afterReStart(this);
}
}
@Override
protected void doDeactivate() throws Exception
{
LifecycleUtil.deactivate(connector);
connector = null;
LifecycleUtil.deactivate(acceptor);
acceptor = null;
super.doDeactivate();
}
}