X-Git-Url: http://git.sourceforge.jp/view?p=stigmata%2Fstigmata-plugins.git;a=blobdiff_plain;f=wsp%2Fsrc%2Fmain%2Fjava%2Fjp%2Fsourceforge%2Fstigmata%2Fbirthmarks%2Fwsp%2FStackPatternBasedBirthmarkComparator.java;h=ea9089bef0f949ebceef25ca5c70c811e91cca75;hp=d47b2e451920c1ab6e2a1a65131d4b3c7b711822;hb=0f81aaf05ae75d6fd2840cedfe1a4dcee010ae1a;hpb=2fe49940fb4af3f9b5227b96f2600ac9b7affcda diff --git a/wsp/src/main/java/jp/sourceforge/stigmata/birthmarks/wsp/StackPatternBasedBirthmarkComparator.java b/wsp/src/main/java/jp/sourceforge/stigmata/birthmarks/wsp/StackPatternBasedBirthmarkComparator.java index d47b2e4..ea9089b 100644 --- a/wsp/src/main/java/jp/sourceforge/stigmata/birthmarks/wsp/StackPatternBasedBirthmarkComparator.java +++ b/wsp/src/main/java/jp/sourceforge/stigmata/birthmarks/wsp/StackPatternBasedBirthmarkComparator.java @@ -1,28 +1,49 @@ package jp.sourceforge.stigmata.birthmarks.wsp; -/* - * $Id$ - */ - import jp.sourceforge.stigmata.Birthmark; import jp.sourceforge.stigmata.BirthmarkContext; +import jp.sourceforge.stigmata.BirthmarkElement; import jp.sourceforge.stigmata.birthmarks.comparators.AbstractBirthmarkComparator; -import jp.sourceforge.stigmata.spi.BirthmarkSpi; +import jp.sourceforge.stigmata.spi.BirthmarkService; /** * * @author Haruaki Tamada - * @version $Revision$ */ -public class StackPatternBasedBirthmarkComparator extends AbstractBirthmarkComparator{ - public StackPatternBasedBirthmarkComparator(BirthmarkSpi spi){ +public class StackPatternBasedBirthmarkComparator + extends AbstractBirthmarkComparator{ + public StackPatternBasedBirthmarkComparator(BirthmarkService spi){ super(spi); } @Override - public double compare(Birthmark b1, Birthmark b2, BirthmarkContext context){ - // TODO implement this method. - return 0; + public double compare(Birthmark b1, Birthmark b2, + BirthmarkContext context){ + int[][] wcs = createMatrix(b1, b2); + int weightOfWcs = new WeightCalculator().calculateWeight(wcs); + int weightOfBirthmark1 = 0; + for(BirthmarkElement element: b1){ + weightOfBirthmark1 += + ((StackPatternBasedBirthmarkElement)element).getWeight(); + } + + return (double)weightOfWcs / (double)weightOfBirthmark1; } + private int[][] createMatrix(Birthmark b1, Birthmark b2){ + BirthmarkElement[] elementsA = b1.getElements(); + BirthmarkElement[] elementsB = b2.getElements(); + + int[][] matrix = new int[elementsA.length][elementsB.length]; + for(int i = 0; i < elementsA.length; i++){ + for(int j = 0; j < elementsB.length; j++){ + StackPatternBasedBirthmarkElement wsp1 = + (StackPatternBasedBirthmarkElement)elementsA[i]; + StackPatternBasedBirthmarkElement wsp2 = + (StackPatternBasedBirthmarkElement)elementsB[j]; + matrix[i][j] = wsp1.getWeight(wsp2); + } + } + return matrix; + } }