All Downloads are FREE. Search and download functionalities are using the official Maven repository.
Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
com.reprezen.genflow.api.template.builders.OutputItemBuilder Maven / Gradle / Ivy
/*******************************************************************************
* Copyright © 2013, 2016 Modelsolv, Inc.
* All Rights Reserved.
*
* NOTICE: All information contained herein is, and remains the property
* of ModelSolv, Inc. See the file license.html in the root directory of
* this project for further information.
*******************************************************************************/
package com.reprezen.genflow.api.template.builders;
import java.util.Optional;
import com.reprezen.genflow.api.GenerationException;
import com.reprezen.genflow.api.outputitem.IOutputItem;
public class OutputItemBuilder extends NamedBuilderBase {
private String outputItemClassName;
private String outputFile;
private String condition;
public OutputItemBuilder using(IOutputItem outputItem) throws GenerationException {
@SuppressWarnings("unchecked")
Class> validClass = (Class>) outputItem.getClass();
return using(validClass);
}
public OutputItemBuilder using(Class> outputItemClass) throws GenerationException {
return using(outputItemClass.getName());
}
public OutputItemBuilder using(String className) throws GenerationException {
Optional> outputItemClass = BuilderUtil.getClass(className);
if (outputItemClass.isPresent() && !IOutputItem.class.isAssignableFrom(outputItemClass.get())) {
throw new GenerationException("Output Item class does not implement IOutputItem: " + className);
}
this.outputItemClassName = className;
return this;
}
public OutputItemBuilder writing(String outputFile) {
this.outputFile = outputFile;
return this;
}
public OutputItemBuilder when(String condition) {
this.condition = condition;
return this;
}
public OutputItemSpec build() throws GenerationException {
return new OutputItemSpec(name, outputItemClassName, outputFile, condition, descriptionLines);
}
public static class OutputItemSpec extends NamedSpecBase {
private final String outputItemClassName;
private final String outputFile;
private final String condition;
public OutputItemSpec(String name, String outputItemClassName, String outputFile, String condition,
String[] descriptionLines) throws GenerationException {
super(name, descriptionLines);
this.outputItemClassName = outputItemClassName;
this.outputFile = outputFile;
this.condition = condition;
validate();
}
public String getOutputItemClassName() {
return outputItemClassName;
}
public Optional> getOutputItemInstance(ClassLoader classLoader) {
return BuilderUtil.getInstance(outputItemClassName, classLoader);
}
public String getOutputFile() {
return outputFile;
}
public String getCondition() {
return condition;
}
@Override
protected boolean isNameOptional() {
return true;
}
@Override
public void validate() throws GenerationException {
super.validate();
if (outputItemClassName == null) {
throw new GenerationException("Output item is missing");
}
if (outputFile != null && outputFile.isEmpty()) {
throw new GenerationException("Output file, if specified, must not be empty");
}
if (condition != null && condition.isEmpty()) {
throw new GenerationException("Condition, if specified must not be empty");
}
}
@Override
public String toString() {
String primaryType = "?";
String itemType = "?";
Optional instance = BuilderUtil.getInstance(outputItemClassName, this.getClass().getClassLoader());
if (instance.isPresent()) {
try {
primaryType = ((IOutputItem) instance.get()).getPrimaryType().getName();
itemType = ((IOutputItem) instance.get()).getItemType().getName();
} catch (GenerationException e) {
}
}
return String.format("%s[name: %s, type: %s[%s,%s], outputFile: %s, condition: %s, description: %s]",
BuilderUtil.simpleName(this), name, outputItemClassName, primaryType, itemType, outputFile,
condition, description);
}
}
}