/*******************************************************************************
* Copyright (c) 2006-2012
* Software Technology Group, Dresden University of Technology
* DevBoost GmbH, Berlin, Amtsgericht Charlottenburg, HRB 140026
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Software Technology Group - TU Dresden, Germany;
* DevBoost GmbH - Berlin, Germany
* - initial API and implementation
******************************************************************************/
package org.reuseware.sokan.test.index.indexer.util;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.reuseware.sokan.ID;
import org.reuseware.sokan.index.CommitCache;
import org.reuseware.sokan.index.indexer.DependencyManager;
import org.reuseware.sokan.index.indexer.Indexer;
import org.reuseware.sokan.index.indexer.IndexerManager;
import org.reuseware.sokan.index.persister.PersistencyManager;
import org.reuseware.sokan.index.util.CoreUtil;
import org.reuseware.sokan.index.util.ResourceUtil;
import org.reuseware.sokan.test.index.indexer.DependencyIndexer;
import org.reuseware.sokan.test.util.TestData;
import org.reuseware.sokan.test.util.TestUtil;
public class DependencyTestUtil extends TestUtil{
private static Indexer dependencyIndexer = new DependencyIndexer();
public static void fillDependencies(TestData data) {
// trivial
data.fLvlDep0 = invokeDependencyCalculator(null);
data.fLvlDep1 = invokeDependencyCalculator("A1");
data.fLvlDep2 = invokeDependencyCalculator("A2");
// list
data.fLvlDep3 = invokeDependencyCalculator("A3");
data.fLvlDep4 = invokeDependencyCalculator("A4");
data.fLvlDep5 = invokeDependencyCalculator("A5");
data.fLvlDep6 = invokeDependencyCalculator("A6");
data.fLvlDep7 = invokeDependencyCalculator("A7");
data.fLvlDep8 = invokeDependencyCalculator("A8");
data.fLvlDep9 = invokeDependencyCalculator("A9");
// binaryList
data.fLvlDep10 = invokeDependencyCalculator("A10");
data.fLvlDep11 = invokeDependencyCalculator("A11");
data.fLvlDep12 = invokeDependencyCalculator("A12");
data.fLvlDep13 = invokeDependencyCalculator("A13");
data.fLvlDep14 = invokeDependencyCalculator("A14");
data.fLvlDep15 = invokeDependencyCalculator("A15");
data.fLvlDep16 = invokeDependencyCalculator("A16");
// binaryTree
data.fLvlDep17 = invokeDependencyCalculator("A17");
data.fLvlDep18 = invokeDependencyCalculator("A18");
data.fLvlDep19 = invokeDependencyCalculator("A19");
data.fLvlDep20 = invokeDependencyCalculator("A20");
data.fLvlDep21 = invokeDependencyCalculator("A21");
data.fLvlDep22 = invokeDependencyCalculator("A22");
data.fLvlDep23 = invokeDependencyCalculator("A23");
data.fLvlDep24 = invokeDependencyCalculator("A24");
// complexPositive
data.fLvlDep25 = invokeDependencyCalculator("A25");
data.fLvlDep26 = invokeDependencyCalculator("A26");
data.fLvlDep27 = invokeDependencyCalculator("A27");
data.fLvlDep28 = invokeDependencyCalculator("A28");
data.fLvlDep29 = invokeDependencyCalculator("A29");
data.fLvlDep30 = invokeDependencyCalculator("A30");
data.fLvlDep31 = invokeDependencyCalculator("A31");
// complexNegative
data.fLvlDep32 = invokeDependencyCalculator("A32");
data.fLvlDep33 = invokeDependencyCalculator("A33");
data.fLvlDep34 = invokeDependencyCalculator("A34");
data.fLvlDep35 = invokeDependencyCalculator("A35");
// dualTrivial
data.fLvlDep36 = invokeDependencyCalculator("A36_1,A36_2");
data.fLvlDep37 = invokeDependencyCalculator("A37_1,A37_2");
data.fLvlDep38 = invokeDependencyCalculator("A38_1,A38_2");
// dualNormal
data.fLvlDep39 = invokeDependencyCalculator("A39_1,A39_2");
data.fLvlDep40 = invokeDependencyCalculator("A40_1,A40_2");
data.fLvlDep41 = invokeDependencyCalculator("A41_1,A41_2");
data.fLvlDep42 = invokeDependencyCalculator("A42_1,A42_2");
data.fLvlDep43 = invokeDependencyCalculator("A43_1,A43_2");
data.fLvlDep44 = invokeDependencyCalculator("A44_1,A44_2");
data.fLvlDep45 = invokeDependencyCalculator("A45_1,A45_2");
// dualComplex
data.fLvlDep46 = invokeDependencyCalculator("A46_1,A46_2");
data.fLvlDep47 = invokeDependencyCalculator("A47_1,A47_2");
data.fLvlDep48 = invokeDependencyCalculator("A48_1,A48_2");
// multi
data.fLvlDep49 = invokeDependencyCalculator("A49_1,A49_2,A49_3");
data.fLvlDep50 = invokeDependencyCalculator("A50_1,A50_2,A50_3,A50_4");
}
public static CommitCache invokeDependencyCalculator(String idListString) {
IndexerManager tempIndexerManager = new IndexerManager(
new PersistencyManager());
DependencyManager tempDependencyManager = new DependencyManager(tempIndexerManager);
List<ID> artifactIDs = TestUtil.toIDList(idListString);
CommitCache tempCache = new CommitCache();
List<Indexer> indexerList = Collections.singletonList(dependencyIndexer);
for(ID updatedID : artifactIDs) {
tempCache.getUpdateMap().put(updatedID, indexerList);
}
tempDependencyManager.calculateDependenciesOfUpdatedArtifacts(
indexerList, tempCache);
return tempCache;
}
public static Map<ID, List<Indexer>> dependsOn(String dependecyString) {
if (dependecyString == null || dependecyString.equals(""))
return Collections.emptyMap();
if (dependecyString.contains(SEPERATOR))
return moreDeps(CoreUtil.toList(dependecyString, SEPERATOR));
ID childID = ResourceUtil.idFrom(dependecyString);
List<Indexer> cleaningIndexer = new ArrayList<Indexer>();
cleaningIndexer.add(dependencyIndexer);
Map<ID, List<Indexer>> dependencies = new HashMap<ID, List<Indexer>>();
dependencies.put(childID, cleaningIndexer);
return dependencies;
}
private static Map<ID, List<Indexer>> moreDeps(List<String> dependencyList) {
Map<ID, List<Indexer>> dependencies = new HashMap<ID, List<Indexer>>(
dependencyList.size());
ID childID;
List<Indexer> cleaningIndexer;
for (String string : dependencyList) {
childID = ResourceUtil.idFrom(string);
cleaningIndexer = new ArrayList<Indexer>();
cleaningIndexer.add(dependencyIndexer);
dependencies.put(childID, cleaningIndexer);
}
return dependencies;
}
public static CommitCache childrenOutput(
Map<String, String> dependencyMap) {
if (dependencyMap == null)
return null;
CommitCache cache = new CommitCache();
for (Entry<String, String> dep : dependencyMap.entrySet()) {
cache.getUpdateMap().putAll(childrenOutput(dep.getKey(), dep.getValue()).getUpdateMap());
}
return cache;
}
public static CommitCache childrenOutput(String parent,
String dependecyString) {
CommitCache cache = new CommitCache();
cache.getUpdateMap().put(ResourceUtil.idFrom(parent),
Collections.singletonList(dependencyIndexer));
if (dependecyString == null || dependecyString.equals(""))
return cache;
if (dependecyString.contains(SEPERATOR))
cache.getUpdateMap().putAll(moreDeps(CoreUtil.toList(
dependecyString, SEPERATOR)));
else
cache.getUpdateMap().putAll(dependsOn(dependecyString));
return cache;
}
}