package betsy.common.model.engine;
import java.time.LocalDate;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Objects;
import pebl.HasId;
import pebl.HasName;
import pebl.ProcessLanguage;
import pebl.result.engine.Engine;
public final class EngineExtended implements HasId, HasName {
public static final String DELIMITER = "--";
private final Engine engine;
private final LocalDate releaseDate;
private final ProcessLanguage processLanguage;
/**
* http://spdx.org/licenses/
*/
private final String license;
private final String programmingLanguage = "Java";
public EngineExtended(ProcessLanguage language, String name, String version, LocalDate releaseDate, String license) {
this(language, name, version, releaseDate, Collections.emptyList(), license);
}
public EngineExtended(ProcessLanguage language, String name, String version, String configuration, LocalDate releaseDate, String license) {
this(language, name, version, releaseDate, Collections.singletonList(configuration), license);
}
public EngineExtended(ProcessLanguage language, String name, String version, LocalDate releaseDate, List<String> configuration, String license) {
List<String> values = new LinkedList<>();
values.addAll(configuration);
this.engine = new Engine(language.getId(), name, version, Collections.unmodifiableList(values));
this.processLanguage = language;
this.releaseDate = releaseDate;
this.license = license;
engine.addExtension("programmingLanguage", "Java");
engine.addExtension("releaseDate", releaseDate.toString());
engine.addExtension("license", license);
engine.addExtension("licenseURL", getLicenseURL());
engine.addExtension("url", getURL());
}
public String getURL() {
return EngineDetails.getEngineToURL().getOrDefault(this.getName(), "");
}
public String toString() {
return getNormalizedId();
}
public String getNormalizedId() {
return getInternalId().replaceAll(DELIMITER, "__").replaceAll("\\.", "_");
}
@Override
public boolean equals(Object o) {
if (this == o)
return true;
if (o == null || getClass() != o.getClass())
return false;
EngineExtended engineExtended = (EngineExtended) o;
return Objects.equals(toString(), engineExtended.toString());
}
public ProcessLanguage getLanguage() {
return processLanguage;
}
@Override
public int hashCode() {
return Objects.hashCode(toString());
}
private String getInternalId() {
return engine.getId();
}
public String getName() {
return engine.getName();
}
public String getVersion() {
return engine.getVersion();
}
public List<String> getConfiguration() {
return engine.getConfiguration();
}
@Override
public String getId() {
return getNormalizedId();
}
public LocalDate getReleaseDate() {
return releaseDate;
}
public String getProgrammingLanguage() {
return programmingLanguage;
}
public String getLicense() {
return license;
}
public String getLicenseURL() {
return String.format("http://spdx.org/licenses/%s.html", getLicense());
}
public Engine getEngine() {
return engine;
}
}