/*******************************************************************************
* Copyright (c) 2010 Martin Schnabel <mb0@mb0.org>.
* 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
******************************************************************************/
package org.axdt.asdoc.ui.hyperlink;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URL;
import org.apache.log4j.Logger;
import org.axdt.asdoc.model.AsdocElement;
import org.axdt.asdoc.model.AsdocPackage;
import org.axdt.asdoc.model.AsdocRoot;
import org.axdt.asdoc.model.ParseType;
import org.axdt.asdoc.util.AsdocUrlHelper;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.browser.IWebBrowser;
import org.eclipse.ui.browser.IWorkbenchBrowserSupport;
import org.eclipse.xtext.ui.editor.hyperlinking.AbstractHyperlink;
public class AsdocHyperlink extends AbstractHyperlink {
private static final Logger logger = Logger.getLogger(AsdocHyperlink.class);
private AsdocElement asdocElement;
public void open() {
IWorkbenchBrowserSupport browserSupport = PlatformUI.getWorkbench().getBrowserSupport();
int style = IWorkbenchBrowserSupport.NAVIGATION_BAR
| IWorkbenchBrowserSupport.LOCATION_BAR
| IWorkbenchBrowserSupport.AS_EDITOR;
try {
AsdocRoot root = asdocElement.getRoot();
String base = null;
AsdocUrlHelper urlHelper = ParseType.HTML.getUrlHelper();
ParseType parseType = root.getParseType();
if (ParseType.DITA.equals(parseType)) {
base = root.getAsdoc();
} else if (ParseType.HTML.equals(parseType)) {
base = root.getBaseUri();
}
if (base != null) {
String name = asdocElement.getName();
String fullUri = base + urlHelper.url(asdocElement);
if (asdocElement instanceof AsdocPackage)
fullUri += "package-detail.html";
IWebBrowser browser = browserSupport.createBrowser(style, name, name, name);
URL url = URI.create(fullUri).toURL();
browser.openURL(url);
}
} catch (PartInitException e) {
logger.error("creating browser", e);
} catch (MalformedURLException e) {
logger.error("creating browser", e);
}
}
public void setElement(AsdocElement element) {
this.asdocElement = element;
}
public AsdocElement getElement() {
return asdocElement;
}
}