| /******************************************************************************* |
| * Copyright (c) 2010, 2011 Obeo. |
| * 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: |
| * Obeo - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.mylyn.docs.intent.client.ui.ide.repository; |
| |
| import org.eclipse.core.resources.IProject; |
| import org.eclipse.emf.cdo.eresource.EresourcePackage; |
| import org.eclipse.emf.ecore.EPackage; |
| import org.eclipse.mylyn.docs.intent.collab.common.location.IntentLocations; |
| import org.eclipse.mylyn.docs.intent.collab.handlers.adapters.RepositoryStructurer; |
| import org.eclipse.mylyn.docs.intent.collab.handlers.notification.RepositoryChangeNotificationFactoryHolder; |
| import org.eclipse.mylyn.docs.intent.collab.ide.notification.WorkspaceRepositoryChangeNotificationFactory; |
| import org.eclipse.mylyn.docs.intent.collab.ide.repository.WorkspaceConfig; |
| import org.eclipse.mylyn.docs.intent.collab.ide.repository.WorkspaceRepository; |
| import org.eclipse.mylyn.docs.intent.collab.repository.Repository; |
| import org.eclipse.mylyn.docs.intent.collab.repository.RepositoryConnectionException; |
| import org.eclipse.mylyn.docs.intent.collab.repository.RepositoryCreator; |
| import org.eclipse.mylyn.docs.intent.core.compiler.CompilerPackage; |
| import org.eclipse.mylyn.docs.intent.core.document.IntentDocumentPackage; |
| import org.eclipse.mylyn.docs.intent.core.document.descriptionunit.DescriptionUnitPackage; |
| import org.eclipse.mylyn.docs.intent.core.indexer.IntentIndexerPackage; |
| import org.eclipse.mylyn.docs.intent.core.modelingunit.ModelingUnitPackage; |
| |
| /** |
| * Construct Repository according to configuration files. |
| * |
| * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a> |
| */ |
| public class IntentWorkspaceRepositoryCreator implements RepositoryCreator { |
| |
| /** |
| * {@inheritDoc} |
| * |
| * @see org.eclipse.mylyn.docs.intent.collab.repository.RepositoryCreator#createRepository(java.lang.Object, |
| * org.eclipse.mylyn.docs.intent.collab.handlers.adapters.RepositoryStructurer) |
| */ |
| public Repository createRepository(final Object artifact, RepositoryStructurer structurer) |
| throws RepositoryConnectionException { |
| if (artifact instanceof IProject) { |
| // Step 1: create Workspace repository |
| WorkspaceConfig configurationInformations = new WorkspaceConfig((IProject)artifact, |
| IntentLocations.INDEXES_LIST); |
| Repository repository = new WorkspaceRepository((WorkspaceConfig)configurationInformations, |
| IntentIndexerPackage.eINSTANCE.getIntentIndex()) { |
| @Override |
| public boolean shouldHaveWorkspaceResourceExtension(String path) { |
| return super.shouldHaveWorkspaceResourceExtension(path) |
| && (!path.contains(IntentLocations.GENERATED_RESOURCES_FOLDER_PATH)); |
| } |
| }; |
| |
| // Step 2: Initialize the Notification Factory |
| if (RepositoryChangeNotificationFactoryHolder.getChangeNotificationFactory() == null) { |
| RepositoryChangeNotificationFactoryHolder |
| .setChangeNotificationFactory(new WorkspaceRepositoryChangeNotificationFactory()); |
| } |
| initializePackageRegistry(repository); |
| repository.setRepositoryStructurer(structurer); |
| return repository; |
| } else { |
| throw new RepositoryConnectionException("The given configuration artifact are invalid."); |
| } |
| } |
| |
| /** |
| * Initializes the package registry of the given repository ; subClass should override this method. |
| * |
| * @param repository |
| * the repository containing the package registry to initialize |
| * @throws RepositoryConnectionException |
| * if the repository connection cannot be established |
| */ |
| protected void initializePackageRegistry(Repository repository) throws RepositoryConnectionException { |
| // Getting all registered EPackages and add them to the repository package registry |
| for (String epackageURI : EPackage.Registry.INSTANCE.keySet()) { |
| repository.getPackageRegistry().put(epackageURI, EPackage.Registry.INSTANCE.get(epackageURI)); |
| } |
| // Step 5 : initialize the Repository's Package registry |
| repository.getPackageRegistry().put(IntentIndexerPackage.eNS_URI, IntentIndexerPackage.eINSTANCE); |
| repository.getPackageRegistry().put(CompilerPackage.eNS_URI, CompilerPackage.eINSTANCE); |
| repository.getPackageRegistry().put(IntentDocumentPackage.eNS_URI, IntentDocumentPackage.eINSTANCE); |
| repository.getPackageRegistry().put(ModelingUnitPackage.eNS_URI, ModelingUnitPackage.eINSTANCE); |
| repository.getPackageRegistry().put(DescriptionUnitPackage.eNS_URI, DescriptionUnitPackage.eINSTANCE); |
| repository.getPackageRegistry().put(EresourcePackage.eNS_URI, EresourcePackage.eINSTANCE); |
| } |
| } |