[bugzilla 404624] Improving HTML export for external content references
diff --git a/plugins/org.eclipse.mylyn.docs.intent.exporter/src/org/eclipse/mylyn/docs/intent/exporter/main/generateHTMLContent.mtl b/plugins/org.eclipse.mylyn.docs.intent.exporter/src/org/eclipse/mylyn/docs/intent/exporter/main/generateHTMLContent.mtl
index 08a0487..c8a7425 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.exporter/src/org/eclipse/mylyn/docs/intent/exporter/main/generateHTMLContent.mtl
+++ b/plugins/org.eclipse.mylyn.docs.intent.exporter/src/org/eclipse/mylyn/docs/intent/exporter/main/generateHTMLContent.mtl
@@ -133,6 +133,18 @@
 </li>
 [/template]
 
+[template public generateHTMLContent(externalContent : ExternalContentReference)]
+<li class="jstree-open">
+	[if (externalContent.externalContent->size() >0)]
+	<img src="[getQualifiedImageId(externalContent.externalContent)/]"/>
+	[/if]
+
+	[if externalContent.uri->isEmpty()._not()]
+		(<i>Reference to</i> <code style="color:blue; border:0px solid black;">[externalContent.uri.toString()/])</code>
+	[/if]
+</li>
+[/template]
+
 [template public generateHTMLContent(resourceDeclaration : ResourceDeclaration)]
 <li class="jstree-open">
 	<img src="../icons/modelingunit_resource.gif"/>
diff --git a/plugins/org.eclipse.mylyn.docs.intent.exporter/src/org/eclipse/mylyn/docs/intent/exporter/services/CopyImageUtils.java b/plugins/org.eclipse.mylyn.docs.intent.exporter/src/org/eclipse/mylyn/docs/intent/exporter/services/CopyImageUtils.java
index afcae1d..c1c8e66 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.exporter/src/org/eclipse/mylyn/docs/intent/exporter/services/CopyImageUtils.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.exporter/src/org/eclipse/mylyn/docs/intent/exporter/services/CopyImageUtils.java
@@ -16,7 +16,6 @@
 import java.io.InputStream;
 import java.net.MalformedURLException;
 import java.net.URL;
-import java.nio.channels.FileChannel;
 
 import org.eclipse.core.resources.IFolder;
 import org.eclipse.core.resources.ResourcesPlugin;
@@ -68,21 +67,28 @@
 		// Step 1: getting the image URL thanks to the item delegator
 		Object imageURL = getImageURL(any);
 
-		if (imageURL instanceof URL && any instanceof EClassifier) {
+		if (imageURL instanceof URL) {
 			try {
 				// Step 2: resolve URL
 				URL resolvedURL = FileLocator.resolve((URL)imageURL);
+				EClassifier classifier = null;
+				if (any instanceof EClassifier) {
+					classifier = (EClassifier)any;
+				} else {
+					classifier = any.eClass();
+				}
+
 				// If default "Item" image has been
 				if (resolvedURL.toString().contains("org.eclipse.emf.edit")
 						&& resolvedURL.toString().endsWith("/icons/full/obj16/Item.gif")) {
 					// we search for an "edit" plugin in the workspace
-					if ((imageURL = getImageFromWorkspace((EClassifier)any, repositoryAdapter)) != null) {
+					if ((imageURL = getImageFromWorkspace(classifier, repositoryAdapter)) != null) {
 						resolvedURL = (URL)imageURL;
 					}
 				}
 
 				// Step 3: copy image in the exported documentation
-				qualifiedImageID = copyImageIfNeeded((EClassifier)any, outputFolder, resolvedURL,
+				qualifiedImageID = copyImageIfNeeded(classifier, outputFolder, resolvedURL,
 						resolvedURL.openStream());
 			} catch (IOException e) {
 				IntentUiLogger.logError(e);
@@ -155,7 +161,7 @@
 		if (any instanceof EClass) {
 			EObject instance = ((EClassifier)any).getEPackage().getEFactoryInstance().create((EClass)any);
 			imageURL = getItemDelegator(any).getImage(instance);
-		} else if (any instanceof EClassifier) {
+		} else {
 			imageURL = getItemDelegator(any).getImage(any);
 		}
 
diff --git a/plugins/org.eclipse.mylyn.docs.intent.exporter/src/org/eclipse/mylyn/docs/intent/exporter/services/IntentAcceleoServices.java b/plugins/org.eclipse.mylyn.docs.intent.exporter/src/org/eclipse/mylyn/docs/intent/exporter/services/IntentAcceleoServices.java
index 33cb03a..6482d0c 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.exporter/src/org/eclipse/mylyn/docs/intent/exporter/services/IntentAcceleoServices.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.exporter/src/org/eclipse/mylyn/docs/intent/exporter/services/IntentAcceleoServices.java
@@ -106,7 +106,10 @@
 	}
 
 	public static String getIndex(IntentStructuredElement structuredElement) {
-		String index = structuredElement.getCompleteLevel().replace(".", "_");
+		String index = "";
+		if (structuredElement.getCompleteLevel() != null) {
+			index = structuredElement.getCompleteLevel().replace(".", "_");
+		}
 		return index;
 	}