| /******************************************************************************* |
| * Copyright (c) 2010, 2011 Obeo. |
| * 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: |
| * Obeo - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.mylyn.docs.intent.test.server; |
| |
| import java.util.HashMap; |
| import java.util.LinkedHashMap; |
| import java.util.Map; |
| |
| import org.eclipse.emf.cdo.server.CDOServerUtil; |
| import org.eclipse.emf.cdo.server.IRepository; |
| import org.eclipse.emf.cdo.server.IStore; |
| import org.eclipse.emf.cdo.server.db.CDODBUtil; |
| import org.eclipse.emf.cdo.server.db.mapping.IMappingStrategy; |
| import org.eclipse.emf.cdo.server.internal.db.mapping.horizontal.AbstractHorizontalMappingStrategy; |
| import org.eclipse.emf.cdo.server.net4j.CDONet4jServerUtil; |
| import org.eclipse.net4j.acceptor.IAcceptor; |
| import org.eclipse.net4j.db.DBUtil; |
| import org.eclipse.net4j.db.IDBAdapter; |
| import org.eclipse.net4j.db.IDBConnectionProvider; |
| import org.eclipse.net4j.db.h2.H2Adapter; |
| import org.eclipse.net4j.util.container.IPluginContainer; |
| import org.eclipse.net4j.util.lifecycle.LifecycleUtil; |
| import org.h2.jdbcx.JdbcDataSource; |
| |
| /** |
| * A CDO repository used to test Intent. |
| * |
| * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a> |
| */ |
| public final class IntentCDORepository { |
| |
| /** |
| * The actual CDO repository. |
| */ |
| private static IRepository repository; |
| |
| /** |
| * The acceptor used to accept requests on this repository. |
| */ |
| private static IAcceptor acceptor; |
| |
| /** |
| * The server location. |
| */ |
| private static final String SERVER_LOCATION = "localhost"; |
| |
| /** |
| * The server port number. |
| */ |
| private static final String SERVER_PORT_NUMBER = "1027"; |
| |
| /** |
| * Private constructor. |
| */ |
| private IntentCDORepository() { |
| |
| } |
| |
| /** |
| * Starts the Intent test Server (if not already launched). |
| * |
| * @param cleanStore |
| * true if the store must be clean (i.e. database should be dropped) |
| * @param repositoryName |
| * the name of the repository to launch |
| */ |
| public static void start(boolean cleanStore, String repositoryName) { |
| if (acceptor == null) { |
| // Step 1 : setting up the db |
| // Step 1.1 : defining the datasource |
| JdbcDataSource dataSource = new JdbcDataSource(); |
| dataSource.setURL("jdbc:h2:_database/" + repositoryName); |
| |
| // Step 1.2 : defining the mapping strategy |
| IMappingStrategy mappingStrategy = CDODBUtil.createHorizontalMappingStrategy(true); |
| Map<String, String> mappingProperties = new LinkedHashMap<String, String>(); |
| mappingProperties.put(AbstractHorizontalMappingStrategy.PROP_OBJECT_TYPE_CACHE_SIZE, "1000"); |
| mappingProperties.put(AbstractHorizontalMappingStrategy.PROP_QUALIFIED_NAMES, |
| Boolean.TRUE.toString()); |
| mappingStrategy.setProperties(mappingProperties); |
| |
| // Step 1.3 : use a H2 database |
| IDBAdapter dbAdapter = new H2Adapter(); |
| IDBConnectionProvider dbConnectionProvider = DBUtil.createConnectionProvider(dataSource); |
| |
| // Clean the store if needed |
| if (cleanStore) { |
| DBUtil.dropAllTables(dbConnectionProvider.getConnection(), repositoryName); |
| } |
| |
| // Step 1.4 : creating the IStore from the specified DB |
| IStore store = CDODBUtil.createStore(mappingStrategy, dbAdapter, dbConnectionProvider); |
| |
| // Step 2 : creating the repository |
| Map<String, String> props = new HashMap<String, String>(); |
| props.put(IRepository.Props.OVERRIDE_UUID, repositoryName); |
| props.put(IRepository.Props.SUPPORTING_AUDITS, "false"); |
| props.put(IRepository.Props.SUPPORTING_BRANCHES, "false"); |
| props.put(IRepository.Props.SUPPORTING_ECORE, "true"); |
| |
| repository = CDOServerUtil.createRepository(repositoryName, store, props); |
| |
| CDOServerUtil.addRepository(IPluginContainer.INSTANCE, repository); |
| CDONet4jServerUtil.prepareContainer(IPluginContainer.INSTANCE); |
| |
| // Step 3 : creating an acceptor on the server side |
| acceptor = (IAcceptor)IPluginContainer.INSTANCE.getElement("org.eclipse.net4j.acceptors", "tcp", |
| SERVER_LOCATION + ":" + SERVER_PORT_NUMBER); |
| } |
| } |
| |
| /** |
| * Stops the currently running Intent test server. |
| */ |
| public static void stop() { |
| if (acceptor != null) { |
| LifecycleUtil.deactivate(acceptor); |
| LifecycleUtil.deactivate(repository); |
| acceptor = null; |
| repository = null; |
| } |
| } |
| |
| /** |
| * Returns the server location. |
| * |
| * @return the server location (e.g. localhost:2037) |
| */ |
| public static String getServerLocation() { |
| return SERVER_LOCATION + ":" + SERVER_PORT_NUMBER; |
| } |
| } |