/*
* Copyright (c) 2006-2011 Nuxeo SA (http://nuxeo.com/) 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:
* Nuxeo - initial API and implementation
*
* $Id$
*/
package org.eclipse.ecr.core.api.repository;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import org.eclipse.ecr.runtime.model.ComponentContext;
import org.eclipse.ecr.runtime.model.ComponentInstance;
import org.eclipse.ecr.runtime.model.ComponentName;
import org.eclipse.ecr.runtime.model.DefaultComponent;
/**
*
* @author <a href="mailto:bs@nuxeo.com">Bogdan Stefanescu</a>
*
*/
public class RepositoryManagerImpl extends DefaultComponent implements
RepositoryManager {
public static final ComponentName NAME = new ComponentName(
"org.eclipse.ecr.core.api.repository.RepositoryManager");
private Map<String, Repository> repositories = Collections.synchronizedMap(new LinkedHashMap<String, Repository>());
@Override
public void addRepository(Repository repository) {
repositories.put(repository.getName(), repository);
}
@Override
public Collection<Repository> getRepositories() {
return new ArrayList<Repository>(repositories.values());
}
@Override
public Repository getRepository(String name) {
return repositories.get(name);
}
@Override
public void removeRepository(String name) {
repositories.remove(name);
}
@Override
public void clear() {
repositories.clear();
}
@Override
public Repository getDefaultRepository() {
Iterator<Repository> it = repositories.values().iterator();
Repository defaultRepo = null;
// search for user defined
while (it.hasNext()) {
Repository repo = it.next();
if (repo.isDefault()) {
return repo;
}
if ("default".equals(repo.getName())) {
defaultRepo = repo;
}
}
// "default" fallback
if (defaultRepo != null) {
return defaultRepo;
}
// first in list "fallback"
if (!repositories.isEmpty()) {
return repositories.values().iterator().next();
}
// no repository at all
return null;
}
@Override
public void activate(ComponentContext context) throws Exception {
repositories = new Hashtable<String, Repository>();
}
@Override
public void deactivate(ComponentContext context) throws Exception {
repositories.clear();
repositories = null;
}
@Override
public void registerContribution(Object contribution,
String extensionPoint, ComponentInstance contributor) {
if ("repositories".equals(extensionPoint)) {
addRepository((Repository) contribution);
}
}
@Override
public void unregisterContribution(Object contribution,
String extensionPoint, ComponentInstance contributor) {
if ("repositories".equals(extensionPoint)) {
removeRepository(((Repository) contribution).getName());
}
}
@Override
@SuppressWarnings("unchecked")
public <T> T getAdapter(Class<T> adapter) {
if (RepositoryManager.class.isAssignableFrom(adapter)) {
return (T) this;
}
return null;
}
}