001 /* 002 * Licensed under the Apache License, Version 2.0 (the "License"); 003 * you may not use this file except in compliance with the License. 004 * You may obtain a copy of the License at 005 * 006 * http://www.apache.org/licenses/LICENSE-2.0 007 * 008 * Unless required by applicable law or agreed to in writing, software 009 * distributed under the License is distributed on an "AS IS" BASIS, 010 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 011 * See the License for the specific language governing permissions and 012 * limitations under the License. 013 */ 014 /* 015 * This file has been modified by Chris Pheby in accordance with Section 4.2 016 * of the Apache Software License 017 */ 018 package org.jadira.dependencynavigator.controller.model; 019 020 import java.util.ArrayList; 021 import java.util.Collections; 022 import java.util.Comparator; 023 import java.util.HashMap; 024 import java.util.List; 025 import java.util.Map; 026 027 import org.jadira.dependencynavigator.model.Artifact; 028 import org.jadira.dependencynavigator.model.ArtifactInstanceMap; 029 import org.jadira.dependencynavigator.model.Duplicate; 030 031 public class DuplicatesListManager { 032 private Duplicate selected; 033 private Map<String, Duplicate> artifactVersions; 034 private List<Duplicate> duplicates; 035 private List<Duplicate> ordered; 036 private ArtifactVersionsListManager artifactVersionsListManager; 037 private DuplicatesComparator duplicatesComparator; 038 039 public DuplicatesListManager() { 040 reset(); 041 } 042 043 public void reset() { 044 this.artifactVersionsListManager = new ArtifactVersionsListManager(); 045 artifactVersions = new HashMap<String, Duplicate>(); 046 duplicates = new ArrayList<Duplicate>(); 047 ordered = new ArrayList<Duplicate>(); 048 duplicatesComparator = new DuplicatesComparator(); 049 } 050 051 /** 052 * Add artifact to existing duplicate or create new duplicate instance 053 * @param instance of artifact 054 */ 055 public void add(Artifact instance) { 056 // check artifact agains duplicate version map 057 ArtifactInstanceMap map = artifactVersionsListManager.add(instance); 058 String artifactKey = instance.getGroupId() + ":" + instance.getArtifactId(); 059 Duplicate duplicate = artifactVersions.get(artifactKey); 060 if (duplicate == null) { 061 duplicate = new Duplicate(map, duplicates); 062 artifactVersions.put(artifactKey, duplicate); 063 ordered.add(duplicate); 064 Collections.sort(ordered, duplicatesComparator); 065 } else { 066 duplicate.addVersion(map); 067 } 068 } 069 070 public void setOrderByIdentifier() { 071 duplicatesComparator.setOrderBy(); 072 Collections.sort(ordered, duplicatesComparator); 073 } 074 075 public ArtifactVersionsListManager getVersionsListManager() { 076 return artifactVersionsListManager; 077 } 078 079 public Duplicate get(int index) { 080 return ordered.get(index); 081 } 082 083 public int size() { 084 return ordered.size(); 085 } 086 087 public void select(int index) { 088 deselect(); 089 selected = get(index); 090 selected.select(true, artifactVersionsListManager); 091 } 092 093 public void deselect() { 094 if (selected != null) { 095 selected.select(false, artifactVersionsListManager); 096 } 097 } 098 099 public static class DuplicatesComparator implements Comparator<Duplicate> { 100 private boolean reversed; 101 102 DuplicatesComparator() { 103 reversed = false; 104 } 105 106 private int implementReversed(int comparison) { 107 if (reversed) { 108 return comparison * -1; 109 } 110 return comparison; 111 } 112 113 public void setOrderBy() { 114 reversed = !reversed; 115 } 116 117 public int compare(Duplicate o1, Duplicate o2) { 118 return implementReversed(o1.getIdentifier().compareToIgnoreCase(o2.getIdentifier())); 119 } 120 } 121 }