/* * Copyright 2015 Red Hat, Inc. and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.guvnor.common.services.project.backend.server.utils; import java.util.Iterator; import java.util.List; import org.guvnor.common.services.project.model.Dependency; class DependencyUpdater { private final List<org.apache.maven.model.Dependency> dependencies; DependencyUpdater( final List<org.apache.maven.model.Dependency> dependencies ) { this.dependencies = dependencies; } void updateDependencies( final List<Dependency> dependencies ) { removeAllThatDoNotExist(dependencies); addTheOnesThatDoNotExist(dependencies); updateTheRest(dependencies); } private void updateTheRest( final List<Dependency> dependencies ) { for (Dependency dependency : dependencies) { for (org.apache.maven.model.Dependency modelDep : this.dependencies) { if (hasSameID(dependency, modelDep)) { updateDependency(dependency, modelDep); } } } } private void addTheOnesThatDoNotExist( final List<Dependency> dependencies ) { for (Dependency dependency : dependencies) { if ( !depsContains( this.dependencies, dependency ) ) { this.dependencies.add( fromClientModelToPom( dependency ) ); } } } private void removeAllThatDoNotExist( final List<Dependency> dependencies ) { Iterator<org.apache.maven.model.Dependency> iterator = this.dependencies.iterator(); while (iterator.hasNext()) { org.apache.maven.model.Dependency dependency = iterator.next(); if (!depsContains(dependencies, dependency)) { iterator.remove(); } } } private org.apache.maven.model.Dependency fromClientModelToPom( final org.guvnor.common.services.project.model.Dependency from ) { org.apache.maven.model.Dependency dependency = updateDependency(from, new org.apache.maven.model.Dependency()); return dependency; } private org.apache.maven.model.Dependency updateDependency( final org.guvnor.common.services.project.model.Dependency from, final org.apache.maven.model.Dependency dependency ) { dependency.setArtifactId(from.getArtifactId()); dependency.setGroupId(from.getGroupId()); dependency.setVersion(from.getVersion()); dependency.setScope(from.getScope()); return dependency; } private boolean depsContains( final List<org.guvnor.common.services.project.model.Dependency> dependencies, final org.apache.maven.model.Dependency dependency ) { for (org.guvnor.common.services.project.model.Dependency modelDep : dependencies) { if (hasSameID(modelDep, dependency)) { return true; } } return false; } private boolean depsContains( final List<org.apache.maven.model.Dependency> dependencies, final org.guvnor.common.services.project.model.Dependency dependency ) { for (org.apache.maven.model.Dependency modelDep : dependencies) { if (hasSameID(dependency, modelDep)) { return true; } } return false; } private boolean hasSameID( final org.guvnor.common.services.project.model.Dependency dependency, final org.apache.maven.model.Dependency modelDep ) { if ( dependency.getArtifactId() == null || dependency.getGroupId() == null ) { return false; } else { return dependency.getArtifactId().equals( modelDep.getArtifactId() ) && dependency.getGroupId().equals( modelDep.getGroupId() ); } } }