| /** |
| * <copyright> |
| * |
| * Copyright (c) 2009-2010 Thales Corporate Services S.A.S. |
| * 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 |
| * https://www.eclipse.org/legal/epl-v2.0 |
| * |
| * SPDX-License-Identifier: EPL-2.0 |
| * |
| * Contributors: |
| * Thales Corporate Services S.A.S - initial API and implementation |
| * |
| * </copyright> |
| */ |
| |
| package org.eclipse.egf.emf.pattern.codegen; |
| |
| import static org.eclipse.egf.emf.pattern.codegen.CodegenFcoreUtil.N; |
| |
| import java.io.IOException; |
| import java.util.List; |
| import java.util.regex.Matcher; |
| import java.util.regex.Pattern; |
| |
| import org.eclipse.core.resources.IProject; |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.egf.emf.pattern.codegen.model.GIFPatternInfo; |
| import org.eclipse.egf.emf.pattern.codegen.model.JetAbstractPatternInfo; |
| import org.eclipse.egf.emf.pattern.codegen.model.JetPatternInfo; |
| import org.eclipse.egf.emf.pattern.codegen.model.JetSubPatternInfo; |
| import org.eclipse.egf.emf.pattern.codegen.model.MethodInfo; |
| import org.eclipse.egf.emf.pattern.codegen.model.PatternInfo; |
| import org.eclipse.egf.pattern.jet.JetTagsConstants; |
| |
| /** |
| * @author Matthieu Helleboid |
| * |
| */ |
| public class CodegenPatternDescriptionHandler { |
| |
| private static final Pattern EGF_REGEX = Pattern.compile(".fcore#" + JetTagsConstants.LOGICAL_NAME + "=([^\\\"]*)\\\""); //$NON-NLS-1$ //$NON-NLS-2$ |
| |
| protected IProject codegenProject; |
| |
| protected String codegenEMFVersion; |
| |
| public CodegenPatternDescriptionHandler(IProject codegenProject) { |
| this.codegenProject = codegenProject; |
| } |
| |
| public void addCodegenEMFVersion(StringBuilder builder, CodegenVersionHelper codegenVersionHelper) throws Exception { |
| if (codegenEMFVersion == null) { |
| StringBuilder codegenEMFVersionBuilder = new StringBuilder(); |
| |
| codegenEMFVersionBuilder.append(codegenVersionHelper.getEMFCodegenEcoreVersion()); |
| |
| String emfEcoreVersion = codegenVersionHelper.getEMFEcoreVersion(); |
| if (emfEcoreVersion != null) { |
| codegenEMFVersionBuilder.append(" from EMF "); //$NON-NLS-1$ |
| codegenEMFVersionBuilder.append(emfEcoreVersion); |
| } |
| |
| codegenEMFVersion = codegenEMFVersionBuilder.toString(); |
| } |
| |
| builder.append(codegenEMFVersion); |
| } |
| |
| |
| |
| public void computeDescription(List<PatternInfo> patternInfos, CodegenVersionHelper codegenVersionHelper) throws Exception { |
| for (PatternInfo patternInfo : patternInfos) { |
| computeDescription(patternInfo, codegenVersionHelper); |
| } |
| } |
| |
| protected void computeDescription(PatternInfo patternInfo, CodegenVersionHelper codegenVersionHelper) throws Exception { |
| StringBuilder builder = new StringBuilder(); |
| addGeneratedFrom(patternInfo, builder, codegenVersionHelper); |
| builder.append(N); |
| addCalls(patternInfo, builder); |
| |
| patternInfo.setDescription(builder.toString()); |
| } |
| |
| protected void addCalls(PatternInfo patternInfo, StringBuilder builder) { |
| boolean calls = false; |
| if (patternInfo instanceof JetAbstractPatternInfo) { |
| for (MethodInfo methodInfo : patternInfo.getMethods()) { |
| if (CodegenPatternMethodContentResolver.DO_GENERATE.equals(methodInfo.getName())) { |
| Matcher matcher = EGF_REGEX.matcher(methodInfo.getContent()); |
| while (matcher.find()) { |
| String name = matcher.group(1); |
| if (!calls) { |
| builder.append("This pattern calls:"); //$NON-NLS-1$ |
| builder.append(N); |
| calls = true; |
| } |
| |
| builder.append(" * "); //$NON-NLS-1$ |
| builder.append(name); |
| builder.append(N); |
| } |
| } |
| } |
| } |
| } |
| |
| protected void addGeneratedFrom(PatternInfo patternInfo, StringBuilder builder, CodegenVersionHelper codegenVersionHelper) throws Exception { |
| builder.append("This pattern was generated from : "); //$NON-NLS-1$ |
| |
| builder.append("\n"); //$NON-NLS-1$ |
| builder.append(" * Bundle "); //$NON-NLS-1$ |
| builder.append(codegenProject.getName()); |
| builder.append(" "); //$NON-NLS-1$ |
| addCodegenEMFVersion(builder, codegenVersionHelper); |
| |
| builder.append("\n"); //$NON-NLS-1$ |
| builder.append(" * "); //$NON-NLS-1$ |
| addTemplatePath(builder, patternInfo); |
| |
| addTemplateVersion(builder, patternInfo, codegenVersionHelper); |
| } |
| |
| protected void addTemplateVersion(StringBuilder builder, PatternInfo patternInfo, CodegenVersionHelper codegenVersionHelper) throws IOException, CoreException { |
| String templateVersion = null; |
| if (patternInfo instanceof JetPatternInfo) { |
| JetPatternInfo jetPatternInfo = (JetPatternInfo) patternInfo; |
| templateVersion = codegenVersionHelper.getTemplateVersion(jetPatternInfo.getJetTemplatePath()); |
| } else if (patternInfo instanceof JetSubPatternInfo) { |
| JetSubPatternInfo jetSubPatternInfo = (JetSubPatternInfo) patternInfo; |
| JetPatternInfo jetPatternInfo = (JetPatternInfo) jetSubPatternInfo.getSection().getRoot().getPatternInfo(); |
| templateVersion = codegenVersionHelper.getTemplateVersion(jetPatternInfo.getJetTemplatePath()); |
| } |
| |
| if (templateVersion != null) { |
| builder.append("\n"); //$NON-NLS-1$ |
| builder.append(" * Version "); //$NON-NLS-1$ |
| builder.append(templateVersion); |
| } |
| } |
| |
| protected void addTemplatePath(StringBuilder builder, PatternInfo patternInfo) { |
| if (patternInfo instanceof GIFPatternInfo) |
| return; |
| |
| if (patternInfo instanceof JetPatternInfo) { |
| builder.append("Template \"templates/"); //$NON-NLS-1$ |
| builder.append(((JetPatternInfo) patternInfo).getJetTemplatePath()); |
| builder.append("\""); //$NON-NLS-1$ |
| } else if (patternInfo instanceof JetSubPatternInfo) { |
| JetSubPatternInfo jetSubPatternInfo = (JetSubPatternInfo) patternInfo; |
| JetAbstractPatternInfo rootPatternInfo = jetSubPatternInfo.getSection().getRoot().getPatternInfo(); |
| addTemplatePath(builder, rootPatternInfo); |
| } |
| |
| } |
| |
| } |