/*
* ******************************************************************************
* MontiCore Language Workbench
* Copyright (c) 2015, MontiCore, All rights reserved.
*
* This project is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3.0 of the License, or (at your option) any later version.
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this project. If not, see <http://www.gnu.org/licenses/>.
* ******************************************************************************
*/
package de.monticore.generating.templateengine.reporting.commons;
import java.nio.file.Path;
import java.util.Collection;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import de.monticore.ast.ASTNode;
import de.monticore.generating.templateengine.HookPoint;
import de.monticore.generating.templateengine.reporting.artifacts.ReportingNameHelper;
import de.monticore.symboltable.Scope;
import de.se_rwth.commons.logging.Log;
/**
* TODO: Write me!
*
* @author (last commit) $Author$
* @version $Revision$, $Date$
* @since TODO: add version number
*/
public class ReportManager implements IReportEventHandler {
private Set<IReportEventHandler> reportEventHandlers = new LinkedHashSet<IReportEventHandler>();
private String outputDir;
public ReportManager(String outputDir) {
this.outputDir = outputDir;
}
public String getOutputDir() {
return this.outputDir;
}
public void addReportEventHandler(IReportEventHandler handler) {
Log.errorIfNull(handler);
this.reportEventHandlers.add(handler);
}
public void removeReportEventHandler(IReportEventHandler handler) {
this.reportEventHandlers.remove(handler);
}
@Override
public void reportModelStart(ASTNode ast, String modelName, String fileName) {
for (IReportEventHandler handler : this.reportEventHandlers) {
handler.reportModelStart(ast, modelName, fileName);
}
}
@Override
public void reportTemplateStart(String templateName, ASTNode ast) {
for (IReportEventHandler handler : this.reportEventHandlers) {
handler.reportTemplateStart(templateName, ast);
}
}
@Override
public void reportExecuteStandardTemplate(String templateName, ASTNode ast) {
for (IReportEventHandler handler : this.reportEventHandlers) {
handler.reportExecuteStandardTemplate(templateName, ast);
}
}
public void reportFileCreation(String templateName, Path path, ASTNode ast) {
String qualifiedName = ReportingNameHelper.getQualifiedName(
this.getOutputDir(), path);
String fileExtension = ReportingNameHelper.getFileextension(path);
this.reportFileCreation(templateName, qualifiedName, fileExtension, ast);
}
public void reportFileFinalization(String templateName, Path path,
ASTNode ast) {
String qualifiedName = ReportingNameHelper.getQualifiedName(
this.getOutputDir(), path);
String fileExtension = ReportingNameHelper.getFileextension(path);
this.reportFileFinalization(templateName, qualifiedName, fileExtension,
ast);
}
@Override
public void reportFileCreation(String templateName,
String qualifiedFilename, String fileExtension, ASTNode ast) {
for (IReportEventHandler handler : this.reportEventHandlers) {
handler.reportFileCreation(templateName, qualifiedFilename,
fileExtension, ast);
}
}
@Override
public void reportFileFinalization(String templateName,
String qualifiedFilename, String fileExtension, ASTNode ast) {
for (IReportEventHandler handler : this.reportEventHandlers) {
handler.reportFileFinalization(templateName, qualifiedFilename,
fileExtension, ast);
}
}
@Override
public void reportTemplateEnd(String templateName, ASTNode ast) {
for (IReportEventHandler handler : this.reportEventHandlers) {
handler.reportTemplateEnd(templateName, ast);
}
}
@Override
public void reportModelEnd(String modelName, String fileName) {
for (IReportEventHandler handler : this.reportEventHandlers) {
handler.reportModelEnd(modelName, fileName);
}
}
@Override
public void reportModelLoad(String qualifiedName) {
for (IReportEventHandler handler : this.reportEventHandlers) {
handler.reportModelLoad(qualifiedName);
}
}
@Override
public void reportSetValue(String name, Object value) {
for (IReportEventHandler handler : this.reportEventHandlers) {
handler.reportSetValue(name, value);
}
}
@Override
public void reportAddValue(String name, Object value, int size) {
for (IReportEventHandler handler : this.reportEventHandlers) {
handler.reportAddValue(name, value, size);
}
}
@Override
public void reportInstantiate(String className, List<Object> params) {
for (IReportEventHandler handler : this.reportEventHandlers) {
handler.reportInstantiate(className, params);
}
}
@Override
public void reportTemplateInclude(String templateName, ASTNode ast) {
for (IReportEventHandler handler : this.reportEventHandlers) {
handler.reportTemplateInclude(templateName, ast);
}
}
@Override
public void reportTemplateWrite(String templateName, ASTNode ast) {
for (IReportEventHandler handler : this.reportEventHandlers) {
handler.reportTemplateWrite(templateName, ast);
}
}
@Override
public void reportSetHookPoint(String hookName, HookPoint hp) {
for (IReportEventHandler handler : this.reportEventHandlers) {
handler.reportSetHookPoint(hookName, hp);
}
}
@Override
public void reportCallHookPointStart(String hookName, HookPoint hp,
ASTNode ast) {
for (IReportEventHandler handler : this.reportEventHandlers) {
handler.reportCallHookPointStart(hookName, hp, ast);
}
}
@Override
public void reportCallHookPointEnd(String hookName) {
for (IReportEventHandler handler : this.reportEventHandlers) {
handler.reportCallHookPointEnd(hookName);
}
}
@Override
public void reportTemplateReplacement(String oldTemplate,
List<? extends HookPoint> newHps) {
for (IReportEventHandler handler : this.reportEventHandlers) {
handler.reportTemplateReplacement(oldTemplate, newHps);
}
}
@Override
public void reportASTSpecificTemplateReplacement(String oldTemplate,
ASTNode node, HookPoint newHp) {
for (IReportEventHandler handler : this.reportEventHandlers) {
handler.reportASTSpecificTemplateReplacement(oldTemplate, node,
newHp);
}
}
@Override
public void reportSetBeforeTemplate(String template,
List<? extends HookPoint> beforeHps) {
for (IReportEventHandler handler : this.reportEventHandlers) {
handler.reportSetBeforeTemplate(template, beforeHps);
}
}
@Override
public void reportCallBeforeHookPoint(String oldTemplate,
Collection<HookPoint> beforeHPs, ASTNode ast) {
for (IReportEventHandler handler : this.reportEventHandlers) {
handler.reportCallBeforeHookPoint(oldTemplate, beforeHPs, ast);
}
}
@Override
public void reportCallAfterHookPoint(String oldTemplate,
Collection<HookPoint> afterHPs, ASTNode ast) {
for (IReportEventHandler handler : this.reportEventHandlers) {
handler.reportCallAfterHookPoint(oldTemplate, afterHPs, ast);
}
}
@Override
public void reportCallReplacementHookPoint(String oldTemplate,
List<HookPoint> hps, ASTNode ast) {
for (IReportEventHandler handler : this.reportEventHandlers) {
handler.reportCallReplacementHookPoint(oldTemplate, hps, ast);
}
}
@Override
public void reportCallSpecificReplacementHookPoint(String oldTemplate,
List<HookPoint> hps, ASTNode ast) {
for (IReportEventHandler handler : this.reportEventHandlers) {
handler.reportCallSpecificReplacementHookPoint(oldTemplate,
hps, ast);
}
}
@Override
public void reportSetAfterTemplate(String template,
List<? extends HookPoint> afterHps) {
for (IReportEventHandler handler : this.reportEventHandlers) {
handler.reportSetAfterTemplate(template, afterHps);
}
}
@Override
public void reportUseHandwrittenCodeFile(Path parentDir, Path fileName) {
for (IReportEventHandler handler : this.reportEventHandlers) {
handler.reportUseHandwrittenCodeFile(parentDir, fileName);
}
}
@Override
public void reportTransformationStart(String transformationName) {
for (IReportEventHandler handler : this.reportEventHandlers) {
handler.reportTransformationStart(transformationName);
}
}
@Override
public void reportTransformationObjectChange(String transformationName,
ASTNode ast, String attributeName) {
for (IReportEventHandler handler : this.reportEventHandlers) {
handler.reportTransformationObjectChange(transformationName,
ast, attributeName);
}
}
@Override
public void reportTransformationObjectCreation(String transformationName,
ASTNode ast) {
for (IReportEventHandler handler : this.reportEventHandlers) {
handler.reportTransformationObjectCreation(transformationName,
ast);
}
}
@Override
public void reportTransformationObjectDeletion(String transformationName,
ASTNode ast) {
for (IReportEventHandler handler : this.reportEventHandlers) {
handler.reportTransformationObjectDeletion(transformationName,
ast);
}
}
@Override
public void reportTransformationObjectMatch(String transformationName, ASTNode ast) {
for (IReportEventHandler handler : this.reportEventHandlers) {
handler.reportTransformationObjectMatch(transformationName,
ast);
}
}
@Override
public void reportTransformationOldValue(String transformationName, ASTNode ast) {
for (IReportEventHandler handler : this.reportEventHandlers) {
handler.reportTransformationOldValue(transformationName,
ast);
}
}
@Override
public void reportTransformationOldValue(String transformationName, String value) {
for (IReportEventHandler handler : this.reportEventHandlers) {
handler.reportTransformationOldValue(transformationName,
value);
}
}
@Override
public void reportTransformationNewValue(String transformationName, ASTNode ast) {
for (IReportEventHandler handler : this.reportEventHandlers) {
handler.reportTransformationNewValue(transformationName,
ast);
}
}
@Override
public void reportTransformationNewValue(String transformationName, String value) {
for (IReportEventHandler handler : this.reportEventHandlers) {
handler.reportTransformationNewValue(transformationName,
value);
}
}
@Override
public void reportTransformationOldValue(String transformationName, boolean value) {
for (IReportEventHandler handler : this.reportEventHandlers) {
handler.reportTransformationOldValue(transformationName,
value);
}
}
@Override
public void reportTransformationNewValue(String transformationName, boolean value) {
for (IReportEventHandler handler : this.reportEventHandlers) {
handler.reportTransformationNewValue(transformationName,
value);
}
}
@Override
public void flush(ASTNode ast) {
for (IReportEventHandler handler : this.reportEventHandlers) {
handler.flush(ast);
}
}
@Override
public void reportWarning(String message) {
for (IReportEventHandler handler : this.reportEventHandlers) {
handler.reportWarning(message);
}
}
@Override
public void reportError(String msg) {
for (IReportEventHandler handler : this.reportEventHandlers) {
handler.reportError(msg);
}
}
@Override
public void reportDetailed(String value) {
for (IReportEventHandler handler : this.reportEventHandlers) {
handler.reportDetailed(value);
}
}
@Override
public void reportOpenInputFile(Path parentPath, Path file) {
for (IReportEventHandler handler : this.reportEventHandlers) {
handler.reportOpenInputFile(parentPath, file);
}
}
@Override
public void reportParseInputFile(Path inputFilePath, String modelName) {
for (IReportEventHandler handler : this.reportEventHandlers) {
handler.reportParseInputFile(inputFilePath, modelName);
}
}
@Override
public void reportSymbolTableScope(Scope scope) {
for (IReportEventHandler handler : this.reportEventHandlers) {
handler.reportSymbolTableScope(scope);
}
}
/**
* A factory for providing tool specific report managers.
*
* @author (last commit) $Author$
* @version $Revision$, $Date$
*/
public static interface ReportManagerFactory {
/**
* Implementations of this method are responsible for providing an
* appropriately configured report manager for a potentially given model
* name (reporting is <b>mainly</b> per model). Implementors must take care
* of possible <b>null</b> values or provide special constants for dealing
* with model agnostic reporting etc.
*
* @param modelName the model to which provide a report manager
* configuration for (use special constants for entirely global, i.e., model
* agnostic configurations)
* @return a tool specific configuration/instance of a report manager.
*/
ReportManager provide(String modelName);
}
/**
* @param className
* @param methodName
* @param params
*/
public void reportMethodCall(String className, String methodName, List<Object> params) {
for (IReportEventHandler handler : this.reportEventHandlers) {
handler.reportMethodCall(className, methodName, params);
}
}
}