| /******************************************************************************* |
| * 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.exporter.services; |
| |
| import java.io.File; |
| import java.util.Collection; |
| |
| import org.eclipse.emf.common.notify.Adapter; |
| import org.eclipse.emf.ecore.EObject; |
| import org.eclipse.emf.edit.provider.ComposedAdapterFactory; |
| import org.eclipse.emf.edit.provider.IItemLabelProvider; |
| import org.eclipse.mylyn.docs.intent.client.ui.preferences.IntentPreferenceConstants; |
| import org.eclipse.mylyn.docs.intent.client.ui.preferences.IntentPreferenceService; |
| import org.eclipse.mylyn.docs.intent.collab.common.query.TraceabilityInformationsQuery; |
| import org.eclipse.mylyn.docs.intent.collab.handlers.adapters.RepositoryAdapter; |
| import org.eclipse.mylyn.docs.intent.core.compiler.TraceabilityIndex; |
| import org.eclipse.mylyn.docs.intent.core.document.IntentSection; |
| import org.eclipse.mylyn.docs.intent.core.document.IntentStructuredElement; |
| import org.eclipse.mylyn.docs.intent.core.document.UnitInstruction; |
| import org.eclipse.mylyn.docs.intent.core.modelingunit.ContributionInstruction; |
| import org.eclipse.mylyn.docs.intent.core.modelingunit.ExternalContentReference; |
| import org.eclipse.mylyn.docs.intent.markup.gen.services.ImageServices; |
| |
| /** |
| * Regroups all services use during doc export. |
| * |
| * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a> |
| */ |
| public final class IntentAcceleoServices { |
| |
| /** |
| * The export output folder. |
| */ |
| private static File outputFolder; |
| |
| /** |
| * Title to associated to the main export file. |
| */ |
| private static String intentDocumentTitle; |
| |
| /** |
| * The adapter to use to query the documentation. |
| */ |
| private static RepositoryAdapter repositoryAdapter; |
| |
| /** |
| * The traceability index. |
| */ |
| private static TraceabilityIndex traceabilityIndex; |
| |
| /** |
| * Indicates wether table of contents should be displayed by default. |
| */ |
| private static boolean shouldShowTableOfContents; |
| |
| /** |
| * The adapter factory. |
| */ |
| private static ComposedAdapterFactory adapterFactory; |
| |
| /** |
| * Private constructor. |
| */ |
| private IntentAcceleoServices() { |
| } |
| |
| /** |
| * Returns the header size to apply to the section with the given ID. For example, |
| * getHeaderSizeForSection(3_2) will return "2", getHeaderSizeForSection(4_3_2_1) will return "4". |
| * |
| * @param sectionID |
| * the section ID |
| * @return the header size to apply to the section with the given ID |
| */ |
| public static String getHeaderSizeForSection(String sectionID) { |
| return String.valueOf(sectionID.split("_").length); |
| } |
| |
| /** |
| * Returns the title to associate to the given IntentDocument. |
| * |
| * @param any |
| * the intent document |
| * @return the title to associate to the given IntentDocument |
| */ |
| public static String getDocumentTitle(EObject any) { |
| return intentDocumentTitle; |
| } |
| |
| /** |
| * Determines the image associated to the given EObject and copies it inside the exported documentation. |
| * |
| * @param any |
| * the eobject to get the image from |
| * @return the image associated to the given EObject |
| */ |
| public static String getQualifiedImageID(EObject any) { |
| return CopyImageUtils.copyImageAndGetImageID(any, repositoryAdapter, outputFolder); |
| } |
| |
| /** |
| * Returns the {@link IntentSection} containing the given {@link EObject}. |
| * |
| * @param any |
| * the element |
| * @return the {@link IntentSection} containing the given {@link EObject} |
| */ |
| public static IntentSection getContainingSection(EObject any) { |
| EObject container = any; |
| if (any instanceof UnitInstruction) { |
| while (container != null && !(container instanceof IntentSection)) { |
| container = container.eContainer(); |
| } |
| } |
| if (container instanceof IntentSection) { |
| return (IntentSection)container; |
| } |
| return null; |
| } |
| |
| /** |
| * Returns all the {@link ContributionInstruction}s related to the given {@link UnitInstruction}. |
| * |
| * @param instruction |
| * the instruction to consider |
| * @return all the {@link ContributionInstruction}s related to the given {@link UnitInstruction} |
| */ |
| public static Collection<ContributionInstruction> getAllContributions(UnitInstruction instruction) { |
| return new TraceabilityInformationsQuery(repositoryAdapter).getAllRelatedContributions(instruction); |
| } |
| |
| /** |
| * Returns the traceability index. |
| * |
| * @param currentRepositoryAdapter |
| * the repository adapter to use for getting the traceability index |
| * @return the traceability index |
| */ |
| public static TraceabilityIndex getTraceabilityIndex(RepositoryAdapter currentRepositoryAdapter) { |
| if (traceabilityIndex == null) { |
| traceabilityIndex = new TraceabilityInformationsQuery(currentRepositoryAdapter) |
| .getOrCreateTraceabilityIndex(); |
| } |
| return traceabilityIndex; |
| } |
| |
| /** |
| * Indicates whether ExternalContentReference should be displayed inline or not (according to intent |
| * preferences). |
| * |
| * @return true {@link ExternalContentReference} should be displayed inline or not (according to intent |
| * preferences), false otherwise |
| */ |
| public static boolean shouldDisplayExternalRefInline() { |
| return IntentPreferenceService.getBoolean(IntentPreferenceConstants.EXPORT_DISPLAY_REFERENCES_INLINE); |
| } |
| |
| /** |
| * Returns the name to display for an {@link ExternalContentReference}. |
| * |
| * @param ref |
| * the {@link ExternalContentReference} |
| * @return the name to display for an {@link ExternalContentReference} |
| */ |
| public static String getName(ExternalContentReference ref) { |
| String displayedName = ref.getUri().toString(); |
| if (ref.getExternalContent() != null) { |
| Adapter labelProvider = getAdapterFactory().adapt(ref.getExternalContent(), |
| IItemLabelProvider.class); |
| if (labelProvider instanceof IItemLabelProvider) { |
| displayedName = ((IItemLabelProvider)labelProvider).getText(ref.getExternalContent()); |
| } |
| } |
| return displayedName; |
| } |
| |
| /** |
| * Returns the index of the given element. |
| * |
| * @param structuredElement |
| * the element |
| * @return the index of the given element (e.g. 3_2_5) |
| */ |
| public static String getIndex(IntentStructuredElement structuredElement) { |
| String index = ""; |
| if (structuredElement.getCompleteLevel() != null) { |
| index = structuredElement.getCompleteLevel().replace(".", "_"); |
| } |
| return index; |
| } |
| |
| /** |
| * Indicates wether table of content should be displayed by default. |
| * |
| * @return true if table of content should be displayed by default, false otherwise |
| */ |
| public static boolean shouldShowTableOfContents() { |
| return shouldShowTableOfContents; |
| } |
| |
| /** |
| * Initializes the service. |
| * |
| * @param documentTitle |
| * title to associated to the main export file |
| * @param generationOutputFolder |
| * the export output folder |
| * @param showTableOfContents |
| * indicates wether table of contents should be displayed by default |
| * @param adapter |
| * the adapter to use to query the documentation. |
| */ |
| public static void initialize(String documentTitle, File generationOutputFolder, |
| boolean showTableOfContents, RepositoryAdapter adapter) { |
| intentDocumentTitle = documentTitle; |
| outputFolder = generationOutputFolder; |
| shouldShowTableOfContents = showTableOfContents; |
| repositoryAdapter = adapter; |
| ImageServices.setDestinationFolder(outputFolder.getAbsolutePath()); |
| ImageServices.setRelativeURLBase(repositoryAdapter.getRepository().getRepositoryLocation()); |
| ImageServices.setImageFolderRelativePath("images"); |
| } |
| |
| /** |
| * Disposes the service. |
| */ |
| public static void dispose() { |
| CopyImageUtils.dispose(); |
| if (adapterFactory != null) { |
| adapterFactory.dispose(); |
| } |
| adapterFactory = null; |
| outputFolder = null; |
| repositoryAdapter = null; |
| traceabilityIndex = null; |
| repositoryAdapter = null; |
| } |
| |
| /** |
| * Returns the adapter factory to use. |
| * |
| * @return the adapter factory to use |
| */ |
| private static ComposedAdapterFactory getAdapterFactory() { |
| if (adapterFactory == null) { |
| adapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE); |
| } |
| return adapterFactory; |
| } |
| } |