/* * Copyright (c) 2011-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.tests.db; import org.eclipse.emf.cdo.common.CDOCommonRepository.IDGenerationLocation; 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.db.mapping.ITypeMapping; import org.eclipse.emf.cdo.server.internal.db.mapping.TypeMappingRegistry; import org.eclipse.emf.cdo.tests.config.impl.RepositoryConfig; import org.eclipse.net4j.db.IDBAdapter; import org.eclipse.net4j.db.IDBConnectionProvider; import org.eclipse.net4j.util.container.IPluginContainer; import javax.sql.DataSource; import java.util.HashMap; import java.util.Map; import java.util.Set; /** * @author Eike Stepper */ public abstract class DBConfig extends RepositoryConfig { public static final String CAPABILITY = "DB"; public static final String CAPABILITY_RANGES = "DB.ranges"; public static final String CAPABILITY_COPY_ON_BRANCH = "DB.copy.on.branch"; public static final String PROP_TEST_MAPPING_STRATEGY = "test.repository.MappingStrategy"; private static final long serialVersionUID = 1L; private boolean withRanges; private boolean copyOnBranch; private transient IDBAdapter dbAdapter; public DBConfig(String name, boolean supportingAudits, boolean supportingBranches, boolean withRanges, boolean copyOnBranch, IDGenerationLocation idGenerationLocation) { super(name, supportingAudits, supportingBranches, idGenerationLocation); this.withRanges = withRanges; this.copyOnBranch = copyOnBranch; } @Override public void initCapabilities(Set<String> capabilities) { super.initCapabilities(capabilities); capabilities.add(CAPABILITY); capabilities.add(getDBAdapterName()); if (isWithRanges()) { capabilities.add(CAPABILITY_RANGES); } if (isCopyOnBranch()) { capabilities.add(CAPABILITY_COPY_ON_BRANCH); } } protected IDBAdapter getDBAdapter() { if (dbAdapter == null) { dbAdapter = createDBAdapter(); } return dbAdapter; } protected abstract String getDBAdapterName(); @Override protected String getStoreName() { return "DB"; } public boolean isWithRanges() { return withRanges; } public boolean isCopyOnBranch() { return copyOnBranch; } @Override public void setUp() throws Exception { CDODBUtil.prepareContainer(IPluginContainer.INSTANCE); super.setUp(); ((TypeMappingRegistry)ITypeMapping.Registry.INSTANCE).init(); } @Override protected boolean isOptimizing() { return true; } public IStore createStore(String repoName) { IMappingStrategy mappingStrategy = createMappingStrategy(); mappingStrategy.setProperties(createMappingStrategyProperties()); IDBAdapter dbAdapter = getDBAdapter(); DataSource dataSource = createDataSource(repoName); IDBConnectionProvider connectionProvider = dbAdapter.createConnectionProvider(dataSource); Map<String, String> props = new HashMap<String, String>(); // props.put(IDBStore.Props.ID_COLUMN_LENGTH, "66"); return CDODBUtil.createStore(mappingStrategy, dbAdapter, connectionProvider, props); } protected Map<String, String> createMappingStrategyProperties() { Map<String, String> props = new HashMap<String, String>(); props.put(IMappingStrategy.Props.QUALIFIED_NAMES, "true"); props.put(IMappingStrategy.Props.FORCE_INDEXES, "XREF"); props.put(CDODBUtil.PROP_COPY_ON_BRANCH, Boolean.toString(copyOnBranch)); return props; } protected IMappingStrategy createMappingStrategy() { IMappingStrategy mappingStrategy = getTestMappingStrategy(); if (mappingStrategy != null) { return mappingStrategy; } return CDODBUtil.createHorizontalMappingStrategy(isSupportingAudits(), isSupportingBranches(), withRanges); } protected IMappingStrategy getTestMappingStrategy() { return (IMappingStrategy)getTestProperty(PROP_TEST_MAPPING_STRATEGY); } @Override protected String getMappingStrategySpecialization() { return (withRanges ? "-ranges" : "") + (copyOnBranch ? "-copy" : ""); } protected abstract IDBAdapter createDBAdapter(); protected abstract DataSource createDataSource(String repoName); }