/*****************************************************************************
* Copyright (c) 2010 Atos Origin.
*
*
* 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:
* Mathieu Velten (Atos Origin) mathieu.velten@atosorigin.com - Initial API and implementation
*
*****************************************************************************/
package org.eclipse.papyrus.views.documentation;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.eclipse.emf.common.command.Command;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.papyrus.views.documentation.eannotation.EAnnotationDocumentationManager;
/**
* Helper class to access and modify documentation independently from the meta-model.
* It also provides an easy way to be notified of documentation change.
* The default implementation {@link EAnnotationDocumentationManager} uses an EAnnotation if it is available.
*
* @author mvelten
*
*/
public class DocumentationManager extends DocumentationManagerRegistry implements IDocumentationManager {
private static class DocumentationManagerHolder {
public static final DocumentationManager instance = new DocumentationManager();
}
public static DocumentationManager getInstance() {
return DocumentationManagerHolder.instance;
}
private static Set<IDocumentationChangedListener> documentationChangedListeners = new HashSet<IDocumentationChangedListener>();
/**
* {@inheritDoc}
*/
public String getDocumentation(EObject eObject) throws DocumentationUnsupportedException {
if (eObject != null) {
IDocumentationManager documentationManager = getDocumentationManager(eObject.eClass().getEPackage().getNsURI());
if(documentationManager != null) {
return documentationManager.getDocumentation(eObject);
}
}
throw new DocumentationUnsupportedException(Messages.DocumentationManager_UnsupportedModelType);
}
/**
* {@inheritDoc}
*/
public Command getChangeDocumentationCommand(EObject eObject, String newDocumentation) {
IDocumentationManager documentationManager = getDocumentationManager(eObject.eClass().getEPackage().getNsURI());
if(documentationManager != null) {
return documentationManager.getChangeDocumentationCommand(eObject, newDocumentation);
}
return null;
}
/**
* {@inheritDoc}
*/
public Command getAddAssociatedResourceCommand(EObject eObject, URI resourceURI) {
IDocumentationManager documentationManager = getDocumentationManager(eObject.eClass().getEPackage().getNsURI());
if(documentationManager != null) {
return documentationManager.getAddAssociatedResourceCommand(eObject, resourceURI);
}
return null;
}
/**
* {@inheritDoc}
*/
public Command getRemoveAssociatedResourceCommand(EObject eObject, URI resourceURI) {
IDocumentationManager documentationManager = getDocumentationManager(eObject.eClass().getEPackage().getNsURI());
if(documentationManager != null) {
return documentationManager.getRemoveAssociatedResourceCommand(eObject, resourceURI);
}
return null;
}
/**
* {@inheritDoc}
*/
public List<URI> getAssociatedResources(EObject eObject) throws DocumentationUnsupportedException {
IDocumentationManager documentationManager = getDocumentationManager(eObject.eClass().getEPackage().getNsURI());
if(documentationManager != null) {
return documentationManager.getAssociatedResources(eObject);
} else {
throw new DocumentationUnsupportedException(Messages.DocumentationManager_UnsupportedModelType);
}
}
/**
* {@inheritDoc}
*/
public void registerDocumentationChangedListener(IDocumentationChangedListener listener) {
documentationChangedListeners.add(listener);
}
/**
* {@inheritDoc}
*/
public void unregisterDocumentationChangedListener(IDocumentationChangedListener listener) {
documentationChangedListeners.remove(listener);
}
/**
* {@inheritDoc}
*/
public Set<IDocumentationChangedListener> getRegisteredDocumentationChangedListeners() {
return documentationChangedListeners;
}
public void documentationChanged(EObject eObject) {
for(IDocumentationChangedListener listener : documentationChangedListeners) {
listener.documentationChanged(eObject);
}
}
}