/* * 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; } }