/*
 * Copyright (c) 2011, 2012, 2015 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
 */

/**
 * Server concepts for dealing with repositories and stores.
 *
 * @apiviz.exclude .*\.CDOServerBrowser.*
 * @apiviz.exclude .*\.CommitInfoLoader
 * @apiviz.exclude .*\.BranchLoader
 * @apiviz.exclude .*\.IContainer
 * @apiviz.exclude .*\.INotifier
 * @apiviz.exclude .*Exception
 */
package org.eclipse.emf.cdo.server;
