blob: ce6781a167012d2d1368fd109907adc3300665f4 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2020 Christian Pontesegger and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Christian Pontesegger - initial API and implementation
*******************************************************************************/
package org.eclipse.ease.helpgenerator.documentation.linkcreators;
import java.io.IOException;
import org.eclipse.ease.helpgenerator.AbstractModuleDoclet;
import org.eclipse.ease.helpgenerator.documentation.ReferenceTokenizer;
public class ModuleLinkCreator implements ILinkCreator {
@Override
public String createLink(String reference) throws IOException {
final ReferenceTokenizer tokenizer = new ReferenceTokenizer(reference);
if (tokenizer.isModule()) {
if (tokenizer.isMethod())
return createMethodLink(tokenizer.getQualifiedName(), tokenizer.getMethod(), tokenizer.getParameters());
if (tokenizer.isField())
return createFieldLink(tokenizer.getQualifiedName(), tokenizer.getMethod());
if (tokenizer.isClass())
return createClassLink(tokenizer.getQualifiedName());
}
throw new IOException("Unknown reference: '" + reference + "'");
}
private String createFieldLink(String qualifiedName, String field) {
final StringBuilder builder = new StringBuilder();
builder.append("<a href='");
if (!qualifiedName.isEmpty())
builder.append(createModuleString(qualifiedName));
builder.append('#');
builder.append(field);
builder.append("'>");
if (!qualifiedName.isEmpty()) {
builder.append(ReferenceTokenizer.getSimpleClassName(qualifiedName));
builder.append('.');
}
builder.append(field);
builder.append("</a>");
return builder.toString();
}
private String createMethodLink(String qualifiedName, String method, String parameters) {
final StringBuilder builder = new StringBuilder();
builder.append("<a href='");
if (!qualifiedName.isEmpty())
builder.append(createModuleString(qualifiedName));
builder.append('#');
builder.append(method);
builder.append("'>");
if (!qualifiedName.isEmpty()) {
builder.append(ReferenceTokenizer.getSimpleClassName(qualifiedName));
builder.append('.');
}
builder.append(method);
builder.append("()");
builder.append("</a>");
return builder.toString();
}
private String createClassLink(String qualifiedName) {
final StringBuilder builder = new StringBuilder();
builder.append("<a href='");
builder.append(createModuleString(qualifiedName));
builder.append("'>");
builder.append(ReferenceTokenizer.getSimpleClassName(qualifiedName));
builder.append("</a>");
return builder.toString();
}
private String createModuleString(String qualifiedName) {
final StringBuilder builder = new StringBuilder();
builder.append("../../");
builder.append(ReferenceTokenizer.getPackageName(qualifiedName));
builder.append("/help/");
builder.append(AbstractModuleDoclet.createHTMLFileName(qualifiedName));
return builder.toString();
}
}