| /******************************************************************************* |
| * 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(); |
| } |
| } |