Skip to main content
aboutsummaryrefslogtreecommitdiffstats
blob: 52ce5665ae1d84601af07ba097a23e435257bac8 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/*****************************************************************************
 * 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);
		}
	}

}

Back to the top