blob: 45fdc20023d3655f0abe108179b9b2c1d8ab4163 [file] [log] [blame]
/*
* Copyright (c) 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
*/
package org.eclipse.emf.cdo.internal.explorer;
import org.eclipse.emf.cdo.common.CDOCommonRepository;
import org.eclipse.emf.cdo.common.branch.CDOBranch;
import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.explorer.CDOExplorerUtil;
import org.eclipse.emf.cdo.explorer.repositories.CDORepository;
import org.eclipse.emf.cdo.explorer.repositories.CDORepositoryElement;
import org.eclipse.emf.cdo.internal.explorer.repositories.CDORepositoryManagerImpl;
import org.eclipse.emf.cdo.session.CDORepositoryInfo;
import org.eclipse.core.runtime.IAdapterFactory;
/**
* @since 4.4
*/
public class CDOExplorerAdapterFactory implements IAdapterFactory
{
private static final Class<CDORepositoryElement> CLASS_CDOREPOSITORYELEMENT = CDORepositoryElement.class;
private static final Class<?>[] CLASSES = { CLASS_CDOREPOSITORYELEMENT };
public CDOExplorerAdapterFactory()
{
}
public Class<?>[] getAdapterList()
{
return CLASSES;
}
@SuppressWarnings("unchecked")
public <T> T getAdapter(Object adaptableObject, Class<T> adapterType)
{
if (adapterType == CLASS_CDOREPOSITORYELEMENT)
{
if (adaptableObject instanceof CDOBranch)
{
adaptableObject = ((CDOBranch)adaptableObject).getHead();
}
if (adaptableObject instanceof CDOBranchPoint)
{
final CDOBranchPoint branchPoint = (CDOBranchPoint)adaptableObject;
final CDOBranch branch = branchPoint.getBranch();
final long timeStamp = branchPoint.getTimeStamp();
CDOCommonRepository commonRepository = branch.getBranchManager().getRepository();
if (commonRepository instanceof CDORepositoryInfo)
{
final CDORepositoryInfo repositoryInfo = (CDORepositoryInfo)commonRepository;
final CDOID objectID = repositoryInfo.getRootResourceID();
CDORepositoryManagerImpl repositoryManager = (CDORepositoryManagerImpl)CDOExplorerUtil.getRepositoryManager();
final CDORepository repository = repositoryManager.getRepository(repositoryInfo.getSession());
if (repository != null)
{
return (T)new CDORepositoryElement()
{
public CDORepository getRepository()
{
return repository;
}
public int getBranchID()
{
return branch.getID();
}
public long getTimeStamp()
{
return timeStamp;
}
public CDOID getObjectID()
{
return objectID;
}
};
}
}
}
}
return null;
}
}