/*******************************************************************************
* Copyright (c) 2013, 2015 Sylvain Lézier.
* 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
*
* Contributors:
* Sylvain Lézier - initial implementation
*******************************************************************************/
package sft.reports.markdown;
import sft.DefaultConfiguration;
import sft.Report;
import sft.decorators.Decorator;
import sft.decorators.DecoratorReportImplementation;
import sft.decorators.NullDecorator;
import sft.environment.TargetFolder;
import sft.reports.markdown.decorators.MdNullDecorator;
import sft.result.UseCaseResult;
import java.io.*;
import java.util.HashMap;
import java.util.Map;
public class MarkdownReport extends Report {
private Map<Class<? extends Decorator>, DecoratorReportImplementation> decorators= new HashMap<Class<? extends Decorator>, DecoratorReportImplementation>();
private TargetFolder folder;
private static final String TARGET_SFT_RESULT = "target/sft-result/";
public static final String MD_DEPENDENCIES_FOLDER = "sft-md-default";
public MarkdownReport(DefaultConfiguration configuration){
super(configuration);
decorators.put(NullDecorator.class,new MdNullDecorator(configuration));
folder=configuration.getProjectFolder().getTargetFolder(TARGET_SFT_RESULT);
}
@Override
public DecoratorReportImplementation getDecoratorImplementation(Decorator decorator) {
DecoratorReportImplementation result = decorators.get(decorator.getClass());
if( result == null ){
result = new MdNullDecorator(configuration);
}
return result;
}
@Override
public void addDecorator(Class<? extends Decorator> decoratorClass, DecoratorReportImplementation decoratorImplementation) {
decorators.put(decoratorClass,decoratorImplementation);
}
@Override
public void report(UseCaseResult useCaseResult) throws Exception {
folder.copyFromResources(MD_DEPENDENCIES_FOLDER);
final Decorator decorator = useCaseResult.useCase.useCaseDecorator;
DecoratorReportImplementation decoratorImplementation = getDecoratorImplementation(decorator);
String useCaseReport = decoratorImplementation.applyOnUseCase(useCaseResult, decorator.parameters);
File mdFile = folder.createFileFromClass(useCaseResult.useCase.classUnderTest, ".md");
Writer html = new OutputStreamWriter(new FileOutputStream(mdFile));
html.write(useCaseReport);
html.close();
System.out.println("Report wrote: " + mdFile.getCanonicalPath());
}
}