Java tutorial
/* * Copyright 2015 Jose Carrizo * Licensed under the Apache License, Version 2.0 * See accompanying file LICENSE or get a copy at http://www.apache.org/licenses/LICENSE-2.0 */ package org.automagic.deps.doctor.editor; import java.util.List; import org.automagic.deps.doctor.TransitiveDependency; import org.automagic.deps.doctor.spy.PomSpy; import com.google.common.base.Optional; public class PomEditor { private final PomSpy pomSpy; private final PomWriter pomWriter; public PomEditor(PomSpy pomSpy, PomWriter pomWriter) { this.pomSpy = pomSpy; this.pomWriter = pomWriter; } public Result updateDependencies(List<TransitiveDependency> depsToUpdate) { final Result result = new Result(); for (TransitiveDependency dependency : depsToUpdate) { final boolean isNewDependency; boolean isBrandNew = pomSpy.isBrandNew(dependency); boolean canBeManaged = isBrandNew || !pomSpy.getVersion(dependency).isPresent(); if (canBeManaged && pomSpy.isParentAvailable()) { PomSpy parentSpy = pomSpy.getParentSpy(); if (parentSpy.isLowerThanCurrent(dependency)) { // needed because maybe a sibling project already updated // the parent pom and the current value in memory doesn't // reflect this change continue; } PomWriter parentWriter = pomWriter.getParentWriter(); isNewDependency = updateParentProjectDep(dependency, isBrandNew, parentSpy, parentWriter); result.setParentProjectModified(true); result.setProjectModified(true); } else { isNewDependency = updateProjectDep(dependency); result.setProjectModified(true); } if (isNewDependency) { result.addNewDependency(dependency); } else { result.addModifiedDependency(dependency); } } return result; } private boolean updateProjectDep(TransitiveDependency dependency) { if (pomSpy.isBrandNew(dependency)) { pomWriter.writeFullDependency(dependency); return true; } Optional<String> version = pomSpy.getVersion(dependency); if (version.isPresent()) { updateVersion(pomSpy, pomWriter, dependency, version.get()); } else { pomWriter.addExplicitDependencyVersion(dependency); } return false; } private boolean updateParentProjectDep(TransitiveDependency dependency, boolean isBrandNew, PomSpy parentSpy, PomWriter parentWriter) { if (!parentSpy.isBrandNew(dependency) && parentSpy.getVersion(dependency).isPresent()) { updateVersion(parentSpy, parentWriter, dependency, parentSpy.getVersion(dependency).get()); return false; } else if (parentSpy.isManaged(dependency)) { String managedVersion = parentSpy.getManagedVersion(dependency); Optional<String> propertyName = parentSpy.getVersionPropertyName(managedVersion); if (propertyName.isPresent()) { parentWriter.setVersionProperty(propertyName.get(), dependency.getVersion()); } else { parentWriter.setManagedDependencyVersion(dependency); } if (isBrandNew) { pomWriter.writeDependencyWithoutVersion(dependency); } return false; } else { if (!parentSpy.hasDepsManagement()) { parentWriter.addDepsMamagement(); } parentWriter.writeFullManagedDependency(dependency); if (isBrandNew) { pomWriter.writeDependencyWithoutVersion(dependency); } return true; } } private static void updateVersion(PomSpy spy, PomWriter writer, TransitiveDependency dependency, String version) { Optional<String> propertyName = spy.getVersionPropertyName(version); if (propertyName.isPresent()) { writer.setVersionProperty(propertyName.get(), dependency.getVersion()); } else { writer.setDependencyVersion(dependency); } } }