/******************************************************************************* * 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; import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.resource.ResourceSet; import org.reuseware.sokan.ID; import org.reuseware.sokan.IndexMetaData; import org.reuseware.sokan.index.DependencyMap; import org.reuseware.sokan.index.indexer.Indexer; import org.reuseware.sokan.index.util.ResourceUtil; import org.reuseware.sokan.index.util.SokanConst; import org.reuseware.sokan.test.index.indexer.util.DependencyTestUtil; public class DependencyIndexer implements Indexer { private ID id; public void createIndex(URI artifactURI, IndexMetaData part, ResourceSet resourceSet) { part.putSingle("name", artifactURI.lastSegment()); part.putSingle("time", DependencyTestUtil.now()); } public void getDependent(ID artifactID, DependencyMap depMap) { id = artifactID; // 0 if (id == null || id.equals("")) return; Map<ID, Set<String>> dep = trivial(); if (dep == null) dep = list(); if (dep == null) dep = binarList(); if (dep == null) dep = binarTree(); if (dep == null) dep = complexPositive(); if (dep == null) dep = complexNegative(); if (dep == null) dep = dualTrivial(); if (dep == null) dep = dualNormal(); if (dep == null) dep = dualComplex(); if (dep == null) dep = multi(); depMap.putAll(dep); } private Map<ID, Set<String>> trivial() { // 1 if (equal("A1")) return dependsOn(null); // 2 if (equal("A2")) return dependsOn("A2"); return null; } private Map<ID, Set<String>> list() { // 3 if (equal("A3")) return dependsOn("B3"); // 4 if (equal("A4")) return dependsOn("B4"); if (equal("B4")) return dependsOn("B4"); // 5 if (equal("A5")) return dependsOn("B5"); if (equal("B5")) return dependsOn("A5"); // 6 if (equal("A6")) return dependsOn("B6"); if (equal("B6")) return dependsOn("C6"); // 7 if (equal("A7")) return dependsOn("B7"); if (equal("B7")) return dependsOn("C7"); if (equal("C7")) return dependsOn("C7"); // 8 if (equal("A8")) return dependsOn("B8"); if (equal("B8")) return dependsOn("C8"); if (equal("C8")) return dependsOn("A8"); // 9 if (equal("A9")) return dependsOn("B9"); if (equal("B9")) return dependsOn("C9"); if (equal("C9")) return dependsOn("B9"); return null; } private Map<ID, Set<String>> binarList() { // 10 if (equal("A10")) return dependsOn("A10,A10"); // 11 if (equal("A11")) return dependsOn("A11,B11"); // 12 if (equal("A12")) return dependsOn("B12,B12"); // 13 if (equal("A13")) return dependsOn("B13,B13"); if (equal("B13")) return dependsOn("B13"); // 14 if (equal("A14")) return dependsOn("B14,B14"); if (equal("B14")) return dependsOn("B14,B14"); // 15 if (equal("A15")) return dependsOn("B15,B15"); if (equal("B15")) return dependsOn("A15"); // 16 if (equal("A16")) return dependsOn("B16,B16"); if (equal("B16")) return dependsOn("A16,A16"); return null; } private Map<ID, Set<String>> binarTree() { // 17 if (equal("A17")) return dependsOn("B17,C17"); // 18 if (equal("A18")) return dependsOn("B18,C18"); if (equal("B18")) return dependsOn("B18"); // 19 if (equal("A19")) return dependsOn("B19,C19"); if (equal("B19")) return dependsOn("B19"); if (equal("C19")) return dependsOn("C19"); // 20 if (equal("A20")) return dependsOn("B20,C20"); if (equal("B20")) return dependsOn("A20"); // 21 if (equal("A21")) return dependsOn("B21,C21"); if (equal("B21")) return dependsOn("A21"); if (equal("C21")) return dependsOn("A21"); // 22 if (equal("A22")) return dependsOn("B22,C22"); if (equal("B22")) return dependsOn("C22"); // 23 if (equal("A23")) return dependsOn("B23,C23"); if (equal("B23")) return dependsOn("C23"); if (equal("C23")) return dependsOn("C23"); // 24 if (equal("A24")) return dependsOn("B24,C24"); if (equal("B24")) return dependsOn("C24"); if (equal("C24")) return dependsOn("B24"); return null; } private Map<ID, Set<String>> complexPositive() { // 25 if (equal("A25")) return dependsOn("B25,C25,D25"); // 26 if (equal("A26")) return dependsOn("B26,C26,D26"); if (equal("B26")) return dependsOn("C26"); if (equal("C26")) return dependsOn("D26"); // 27 if (equal("A27")) return dependsOn("B27,C27,D27"); if (equal("B27")) return dependsOn("E27"); if (equal("C27")) return dependsOn("E27"); if (equal("D27")) return dependsOn("E27"); // 28 if (equal("A28")) return dependsOn("B28,C28"); if (equal("B28")) return dependsOn("D28,E28"); if (equal("C28")) return dependsOn("E28,F28"); // 29 if (equal("A29")) return dependsOn("B29,C29"); if (equal("B29")) return dependsOn("D29,E29"); if (equal("C29")) return dependsOn("E29,F29"); if (equal("D29")) return dependsOn("E29"); if (equal("E29")) return dependsOn("F29"); // 30 if (equal("A30")) return dependsOn("B30,C30"); if (equal("B30")) return dependsOn("D30,E30"); if (equal("E30")) return dependsOn("G30,F30"); // 31 if (equal("A31")) return dependsOn("B31,C31,D31"); if (equal("B31")) return dependsOn("E31,F31"); if (equal("C31")) return dependsOn("F31"); if (equal("F31")) return dependsOn("D31"); return null; } private Map<ID, Set<String>> complexNegative() { // 32 if (equal("A32")) return dependsOn("B32,C32,D32"); if (equal("B32")) return dependsOn("A32"); // 33 if (equal("A33")) return dependsOn("B33,C33,D33"); if (equal("B33")) return dependsOn("E33"); if (equal("C33")) return dependsOn("E33"); if (equal("D33")) return dependsOn("E33"); if (equal("E33")) return dependsOn("A33"); // 34 if (equal("A34")) return dependsOn("B34,C34"); if (equal("B34")) return dependsOn("D34,E34"); if (equal("E34")) return dependsOn("F34"); if (equal("F34")) return dependsOn("A34"); // 35 if (equal("A35")) return dependsOn("B35,C35"); if (equal("B35")) return dependsOn("D35,E35"); if (equal("D35")) return dependsOn("E35"); if (equal("E35")) return dependsOn("F35,D35"); return null; } private Map<ID, Set<String>> dualTrivial() { // 36 if (equal("A36_1")) return dependsOn(null); if (equal("A36_2")) return dependsOn(null); // 37 if (equal("A37_1")) return dependsOn("A37_2"); if (equal("A37_2")) return dependsOn(null); // 38 if (equal("A38_1")) return dependsOn("A38_2"); if (equal("A38_2")) return dependsOn("A38_1"); return null; } private Map<ID, Set<String>> dualNormal() { // 39 if (equal("A39_1")) return dependsOn("A39_2"); if (equal("A39_2")) return dependsOn("B39"); // 40 if (equal("A40_1")) return dependsOn("B40"); if (equal("A40_2")) return dependsOn("B40"); // 41 if (equal("A41_1")) return dependsOn("B41"); if (equal("A41_2")) return dependsOn("C41"); // 42 if (equal("A42_1")) return dependsOn("B42"); if (equal("A42_2")) return dependsOn("C42"); if (equal("B42")) return dependsOn("C42"); // 43 if (equal("A43_1")) return dependsOn("B43"); if (equal("A43_2")) return dependsOn("C43"); if (equal("B43")) return dependsOn("A43_2"); // 44 if (equal("A44_1")) return dependsOn("B44"); if (equal("A44_2")) return dependsOn("C44"); if (equal("B44")) return dependsOn("C44"); if (equal("C44")) return dependsOn("B44"); // 45 if (equal("A45_1")) return dependsOn("B45"); if (equal("A45_2")) return dependsOn("C45"); if (equal("B45")) return dependsOn("C45"); if (equal("C45")) return dependsOn("A45_1"); return null; } private Map<ID, Set<String>> dualComplex() { // 46 if (equal("A46_1")) return dependsOn("B46"); if (equal("A46_2")) return dependsOn("C46"); if (equal("B46")) return dependsOn("D46,E46"); if (equal("E46")) return dependsOn("C46"); // 47 if (equal("A47_1")) return dependsOn("B47"); if (equal("A47_2")) return dependsOn("C47"); if (equal("B47")) return dependsOn("D47,E47"); if (equal("E47")) return dependsOn("A47_2"); // 48 if (equal("A48_1")) return dependsOn("B48"); if (equal("A48_2")) return dependsOn("C48"); if (equal("B48")) return dependsOn("D48,E48"); if (equal("D48")) return dependsOn("A48_1"); if (equal("C48")) return dependsOn("B48"); return null; } private Map<ID, Set<String>> multi() { // 49 if (equal("A49_1")) return dependsOn("A49_3,B49"); if (equal("A49_2")) return dependsOn("C49,D49"); if (equal("A49_3")) return dependsOn("E49"); if (equal("C49")) return dependsOn("F49,G49,H49"); if (equal("E49")) return dependsOn("I49"); if (equal("F49")) return dependsOn("A49_1"); if (equal("I49")) return dependsOn("A49_2"); // 50 if (equal("A50_1")) return dependsOn(null); if (equal("A50_2")) return dependsOn("B50"); if (equal("A50_3")) return dependsOn("C50"); if (equal("A50_4")) return dependsOn("D50"); if (equal("B50")) return dependsOn("F50,E50"); if (equal("C50")) return dependsOn("A50_2"); if (equal("D50")) return dependsOn("G50,H50"); if (equal("E50")) return dependsOn("B50,F50"); if (equal("F50")) return dependsOn("C50"); if (equal("G50")) return dependsOn("C50"); if (equal("H50")) return dependsOn("G50"); return null; } private Map<ID, Set<String>> dependsOn(String fileName) { Map<ID, Set<String>> depMap = new LinkedHashMap<ID, Set<String>>(); Map<ID, List<Indexer>> d = DependencyTestUtil.dependsOn(fileName); for (ID depID : d.keySet()) { depMap.put(depID, Collections.singleton( DependencyIndexer.class.getCanonicalName())); } return depMap; } private boolean equal(String string) { return ResourceUtil.idString(id).equals(SokanConst.SEPERATOR + string); } }