class PomModel extends TransformationUtility<PomModel> {

    @Override
    protected TUExecutionResult execution(File transformedAppFolder, TransformationContext transformationContext) {
        Model model;
        try {
            URL mavenArtifactUrl;
            if (StringUtils.isNotBlank(groupId) && StringUtils.isNotBlank(artifactId) && StringUtils.isNotBlank(version)) {
                mavenArtifactUrl = new URL(String.format("%s/%s/%s/%s/%s-%s.pom", repoURI, groupId, artifactId, version, artifactId, version));
            } else if (wasFileExplicitlySet()) {
                File localPomFile = getAbsoluteFile(transformedAppFolder, transformationContext);
                mavenArtifactUrl = localPomFile.toURI().toURL();
            } else {
                return TUExecutionResult.error(this, new TransformationUtilityException("Maven coordinates are missing and local file was not set"));
            }
            try (BufferedInputStream inputStream = new BufferedInputStream(mavenArtifactUrl.openStream())) {
                model = new MavenXpp3Reader().read(inputStream);
            }

            if (model == null) {
                return TUExecutionResult.error(this, new TransformationUtilityException("Returned maven model is null"));
            }
        } catch (IOException | XmlPullParserException e) {
            return TUExecutionResult.error(this, new TransformationUtilityException("The specified file could not be found or read and parsed as valid Maven pom file", e));
        }
        return TUExecutionResult.value(this, model);
    }

    public  PomModel();
    public  PomModel(String groupId, String artifactId, String version);
    public  PomModel(String groupId, String artifactId, String version, String repoURI);

}