CPD Results

The following document contains the results of PMD's CPD 4.2.2.

Duplications

File Line
com\octo\captcha\component\image\textpaster\glyphsdecorator\BaffleGlyphsDecorator.java 102
com\octo\captcha\component\image\textpaster\textdecorator\BaffleTextDecorator.java 100
            double circleMaxSize = (double) bounds.getWidth() / 2;
            for (int i = 0; i < numberOfHolesPerGlyph.intValue(); i++) {
                double circleSize = circleMaxSize * (1 + myRandom.nextDouble()) / 2;
                double circlex = bounds.getMinX() + bounds.getWidth() * circleXRatio
                        * myRandom.nextDouble();
                double circley = bounds.getMinY() - bounds.getHeight() * circleYRatio
                        * myRandom.nextDouble();
                Ellipse2D circle = new Ellipse2D.Double(circlex, circley, circleSize, circleSize);
                g2.fill(circle);
            }
        }
        g2.setColor(oldColor);
        g2.setComposite(oldComp);
    }
}

File Line
com\octo\captcha\sound\speller\SpellerSoundFactoryTest.java 26
com\octo\captcha\sound\spellfind\SpellFindCaptchaFactoryTest.java 28
public class SpellFindCaptchaFactoryTest extends TestCase {

    public void testSpellerSoundFactory() throws Exception {
        try {
            new SpellerSoundFactory(null, null, null);
            fail("Test is not implemented");
        } catch (CaptchaException e) {
            assertNotNull(e.getMessage());
        }
        try {
            new SpellerSoundFactory(new RandomWordGenerator("a"), null, null);
            fail("Test is not implemented");
        } catch (CaptchaException e) {
            assertNotNull(e.getMessage());
        }

        try {
            new SpellerSoundFactory(null, new WordToSoundMock(), null);
            fail("Test is not implemented");
        } catch (CaptchaException e) {
            assertNotNull(e.getMessage());
        }
    }


    public void testGetSoundCaptcha() throws Exception {

File Line
com\octo\captcha\sound\speller\SoundSpellerFactoryTest.java 27
com\octo\captcha\sound\speller\SpellerSoundFactoryTest.java 26
public class SpellerSoundFactoryTest extends TestCase {

      public void testSpellerSoundFactory() throws Exception {
          try {
              new SpellerSoundFactory(null, null, null);
              fail("Test is not implemented");
          } catch (CaptchaException e) {
              assertNotNull(e.getMessage());
          }
          try {
              new SpellerSoundFactory(new RandomWordGenerator("a"), null, null);
              fail("Test is not implemented");
          } catch (CaptchaException e) {
              assertNotNull(e.getMessage());
          }

          try {
              new SpellerSoundFactory(null, new WordToSoundMock(), null);
              fail("Test is not implemented");
          } catch (CaptchaException e) {
              assertNotNull(e.getMessage());
          }
      }

File Line
com\octo\captcha\component\image\color\RandomRangeColorGeneratorTest.java 38
com\octo\captcha\component\image\color\RandomRangeColorGeneratorTest.java 56
        colorGenerator = new RandomRangeColorGenerator(redRange, greenRange, blueRange);

        // due to the random factor, test is repeated several times
        for (int i = 0; i < 100; i++) {
            Color color = colorGenerator.getNextColor();

            assertTrue(color.getRed() >= redRange[0] && color.getRed() <= redRange[1]);
            assertTrue(color.getGreen() >= greenRange[0] && color.getGreen() <= greenRange[1]);
            assertTrue(color.getBlue() >= blueRange[0] && color.getBlue() <= blueRange[1]);

File Line
com\octo\captcha\sound\gimpy\GimpySoundFactory.java 85
com\octo\captcha\sound\speller\SpellerSoundFactory.java 94
        SoundCaptcha soundCaptcha = new SpellerSound(getQuestion(locale), sound, word);
        return soundCaptcha;
    }

    protected String getQuestion(Locale locale) {
        return CaptchaQuestionHelper.getQuestion(locale, BUNDLE_QUESTION_KEY);
    }

    protected Integer getRandomLength() {
        Integer wordLength;
        int range = getWordToSound().getMaxAcceptedWordLength()
                - getWordToSound().getMinAcceptedWordLength();
        int randomRange = range != 0 ? myRandom.nextInt(range + 1) : 0;
        wordLength = new Integer(randomRange + getWordToSound().getMinAcceptedWordLength());
        return wordLength;
    }

}

File Line
com\octo\captcha\module\web\image\ImageToJpegHelper.java 62
com\octo\captcha\module\web\sound\SoundToWavHelper.java 57
            AudioSystem.write(stream, AudioFileFormat.Type.WAVE, wavOutputStream);
            //AudioSystem.(pAudioInputStream, AudioFileFormat.Type.WAVE, pFile);

        }
        catch (IllegalArgumentException e) {
            //    log a security warning and return a 404...
            if (log != null && log.isWarnEnabled()) {
                log.warn("There was a try from " + theRequest.getRemoteAddr()
                        + " to render an captcha with invalid ID :'" + id + "' or with a too long one");
                theResponse.sendError(HttpServletResponse.SC_NOT_FOUND);
                return;
            }
        }
        catch (CaptchaServiceException e) {
            // log and return a 404 instead of an image...
            if (log != null && log.isWarnEnabled()) {
                log.warn(

                        "Error trying to generate a captcha and " + "render its challenge as JPEG", e);
            }
            theResponse.sendError(HttpServletResponse.SC_NOT_FOUND);
            return;
        }

File Line
com\octo\captcha\sound\gimpy\GimpySound.java 24
com\octo\captcha\sound\spellfind\SpellFindCaptcha.java 23
      public SpellFindCaptcha(String thequestion,
                          AudioInputStream thechallenge, String theresponse) {
          super(thequestion, thechallenge);
          this.response = theresponse;
      }

      public Boolean validateResponse(Object theresponse) {
          if ((theresponse != null) && (theresponse instanceof String)) {
              return this.validateResponse((String) theresponse);
          } else {
              return Boolean.FALSE;
          }
      }

      public Boolean validateResponse(String theresponse) {
          return Boolean.valueOf(this.response.equalsIgnoreCase(theresponse));
      }

}

File Line
com\octo\captcha\sound\gimpy\GimpySoundFactory.java 85
com\octo\captcha\sound\spellfind\SpellFindCaptchaFactory.java 115
        SoundCaptcha soundCaptcha = new SpellerSound(getQuestion(locale), sound, response.toString());
        return soundCaptcha;
    }

    protected String getQuestion(Locale locale) {
        return CaptchaQuestionHelper.getQuestion(locale, BUNDLE_QUESTION_KEY);
    }


    protected Integer getRandomLength() {
        /*Integer wordLength;
        int range = maxWords-minWords;
        int randomRange = range != 0 ? myRandom.nextInt(range + 1) : 0;
        return randomRange + minWords;*/
        Integer wordLength;
        int range = getWordToSound().getMaxAcceptedWordLength()
                - getWordToSound().getMinAcceptedWordLength();
        int randomRange = range != 0 ? myRandom.nextInt(range + 1) : 0;
        wordLength = new Integer(randomRange + getWordToSound().getMinAcceptedWordLength());
        return wordLength;
    }

    /*

private class WordAndPosition{
public WordAndPosition(String word, int position) {
    this.word = word;
    this.position = position;
}

String word;
int position;
}
    */
}

File Line
com\octo\captcha\service\RunableAbstractManageableCaptchaServiceTest.java 254
com\octo\captcha\service\RunableAbstractManageableCaptchaServiceTest.java 288
                    getMService().getNumberOfCorrectResponses());
        }

        for (int i = 0; i < CAPTCHA_STORE_LOAD_BEFORE_GARBAGE_COLLECTION; i++) {
            String id = String.valueOf(i);
            service.generateAndStoreCaptcha(Locale.getDefault(), id);
            try {
                service.validateResponseForID("unknown", "false");
                fail("should have thrown an exception");
            } catch (CaptchaServiceException e) {
            	assertNotNull(e.getMessage());
            }
            assertEquals("should not have been incremented", CAPTCHA_STORE_LOAD_BEFORE_GARBAGE_COLLECTION,
                    getMService().getNumberOfCorrectResponses());

File Line
com\octo\captcha\component\image\textpaster\textdecorator\BaffleTextDecorator.java 85
com\octo\captcha\component\image\textpaster\textdecorator\LineTextDecorator.java 75
        this(numberOfLinesPerGlyph, linesColorGenerator);
        this.alphaCompositeType = alphaCompositeType != null ? alphaCompositeType.intValue() : this.alphaCompositeType;
    }

    public void decorateAttributedString(Graphics2D g2,  MutableAttributedString mutableAttributedString) {
        Color oldColor = g2.getColor();
        Composite oldComp = g2.getComposite();
        g2.setComposite(AlphaComposite.getInstance(alphaCompositeType));
        for (int j = 0; j < mutableAttributedString.length(); j++) {
            g2.setColor(linesColorGenerator.getNextColor());

File Line
com\octo\captcha\component\image\textpaster\DecoratedRandomTextPaster.java 53
com\octo\captcha\component\image\textpaster\VisitedAndDecoratedTextPaster.java 47
    }

    /**
     * Pastes the attributed string on the backround image and return the final image. Implementation must take into
     * account the fact that the text must be readable by human and non by programs
     *
     * @return the final image
     *
     * @throws com.octo.captcha.CaptchaException
     *          if any exception accurs during paste routine.
     */
    public BufferedImage pasteText(BufferedImage background, AttributedString attributedWord)
            throws CaptchaException {
        BufferedImage out = copyBackground(background);
        Graphics2D g2 = pasteBackgroundAndSetTextColor(out, background);
        g2.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS,
                RenderingHints.VALUE_FRACTIONALMETRICS_ON);
        g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
        g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
                RenderingHints.VALUE_TEXT_ANTIALIAS_ON);


        // convert string into a series of glyphs we can work with
        MutableAttributedString mas = new MutableAttributedString(g2,
                      attributedWord, kerning);

File Line
com\octo\captcha\service\image\AbstractManageableImageCaptchaService.java 73
com\octo\captcha\service\multitype\GenericManageableCaptchaService.java 149
        if (ImageCaptcha.class.isAssignableFrom(captchaClass)) {
            BufferedImage challenge = (BufferedImage) captcha.getChallenge();
            BufferedImage clone = new BufferedImage(challenge.getWidth(), challenge.getHeight(), challenge.getType());
            clone.getGraphics().drawImage(challenge, 0, 0, clone.getWidth(), clone.getHeight(), null);
            clone.getGraphics().dispose();
            return clone;
        } else if (SoundCaptcha.class.isAssignableFrom(captchaClass)) {

File Line
com\octo\captcha\engine\image\ImageCaptchaEngine.java 73
com\octo\captcha\engine\sound\SoundCaptchaEngine.java 63
        return getNextSoundCaptcha(locale);
    }

    /**
     * @return captcha factories used by this engine
     */
    public CaptchaFactory[] getFactories() {
        return (CaptchaFactory[]) this.factories.toArray(new CaptchaFactory[factories.size()]);
    }

    /**
     * @param factories new captcha factories for this engine
     */
    public void setFactories(CaptchaFactory[] factories) throws CaptchaEngineException {
        checkNotNullOrEmpty(factories);
        ArrayList tempFactories = new ArrayList();

        for (int i = 0; i < factories.length; i++) {
            if (!SoundCaptchaFactory.class.isAssignableFrom(factories[i].getClass())) {

File Line
com\octo\captcha\service\image\AbstractManageableImageCaptchaService.java 27
com\octo\captcha\service\multitype\GenericManageableCaptchaService.java 48
    										CaptchaEngine captchaEngine,
								            int minGuarantedStorageDelayInSeconds,
								            int maxCaptchaStoreSize,
								            int captchaStoreLoadBeforeGarbageCollection) {
    	super(captchaStore, captchaEngine, minGuarantedStorageDelayInSeconds,
    			maxCaptchaStoreSize, captchaStoreLoadBeforeGarbageCollection);
    }
    
    /**
     * Method to retrive the image challenge corresponding to the given ticket.
     *
     * @param ID the ticket
     *
     * @return the challenge
     *
     * @throws com.octo.captcha.service.CaptchaServiceException
     *          if the ticket is invalid
     */
    public BufferedImage getImageChallengeForID(String ID) throws CaptchaServiceException {
        return (BufferedImage) this.getChallengeForID(ID);
    }

    /**
     * Method to retrive the image challenge corresponding to the given ticket.
     *
     * @param ID the ticket
     *
     * @return the challenge
     *
     * @throws com.octo.captcha.service.CaptchaServiceException
     *          if the ticket is invalid
     */
    public BufferedImage getImageChallengeForID(String ID, Locale locale) throws CaptchaServiceException {
        return (BufferedImage) this.getChallengeForID(ID, locale);
    }

File Line
com\octo\captcha\engine\image\gimpy\HotmailEngine.java 77
com\octo\captcha\engine\image\gimpy\HotmailEngine2008.java 68
                        new TranslateAllToRandomPointVisitor(20,20)
                }
                );
        

        BackgroundGenerator back = new UniColorBackgroundGenerator(
                218, 48, new Color(238, 238,238));

        FontGenerator shearedFont = new RandomFontGenerator(30,
                35,
                new Font[]{
                        new Font("Caslon",Font.BOLD, 30)
                }
        ,false);




        SwimFilter swim= new SwimFilter();



        swim.setScale(30);
        swim.setAmount(10);

File Line
com\octo\captcha\component\image\color\RandomRangeColorGeneratorTest.java 69
com\octo\captcha\component\image\color\RandomRangeColorGeneratorTest.java 82
        int[] redRange = new int[]{-12, 42};
        int[] greenRange = new int[]{57, 62};
        int[] blueRange = new int[]{10, 12};

        try {
            colorGenerator = new RandomRangeColorGenerator(redRange, greenRange, blueRange);
            fail();
        } catch (CaptchaException e) {
        	assertNotNull(e.getMessage());
        }
    }

    public void testClosedRange() {

File Line
com\octo\captcha\component\word\wordgenerator\DictionaryWordGeneratorTest.java 47
com\octo\captcha\component\word\wordgenerator\DictionaryWordGeneratorTest.java 64
            String test = this.dictionaryWordGenerator.getWord(length, Locale.US);
            assertNotNull(test);
            assertTrue(test.length() > 0);
            assertEquals(length.intValue(), test.length());
        }
        try {
            this.dictionaryWordGenerator.getWord(UNKNOWN_LENGTH);
            fail("Should throw a CaptchaException");
        } catch (CaptchaException e) {
            assertNotNull(e.getMessage());
        }
    }

File Line
com\octo\captcha\engine\image\gimpy\HotmailEngine.java 52
com\octo\captcha\engine\image\gimpy\HotmailEngine2008.java 51
public class HotmailEngine2008 extends ListImageCaptchaEngine {

    /**
     * this method should be implemented as folow : <ul> <li>First construct all the factories you want to initialize
     * the gimpy with</li> <li>then call the this.addFactoriy method for each factory</li> </ul>
     */
    protected void buildInitialFactories() {

        //word generator
        com.octo.captcha.component.word.wordgenerator.WordGenerator dictionnaryWords =
                new RandomWordGenerator("ABCDEGHJKLMNRSTUWXY235689");

        //wordtoimage components
        TextPaster randomPaster = new GlyphsPaster(8, 8,
                new SingleColorGenerator(new Color(0, 0, 80))
                ,new GlyphsVisitors[]{
                        new OverlapGlyphsUsingShapeVisitor(3),

File Line
com\octo\captcha\engine\image\gimpy\BaffleListGimpyEngine.java 41
com\octo\captcha\engine\image\gimpy\GmailEngine.java 49
public class GmailEngine extends ListImageCaptchaEngine {

    /**
     * this method should be implemented as folow : <ul> <li>First construct all the factories you want to initialize
     * the gimpy with</li> <li>then call the this.addFactoriy method for each factory</li> </ul>
     */
    protected void buildInitialFactories() {

        //word generator
        com.octo.captcha.component.word.wordgenerator.WordGenerator dictionnaryWords = //new ConstantWordGenerator("gefefi");
                new com.octo.captcha.component.word.wordgenerator.ComposeDictionaryWordGenerator(
                        new com.octo.captcha.component.word.FileDictionary(
                                "toddlist"));
        //wordtoimage components
        TextPaster randomPaster = new GlyphsPaster(7, 7,

File Line
com\octo\captcha\engine\image\fisheye\SimpleFishEyeEngine.java 44
com\octo\captcha\engine\image\gimpy\DeformedBaffleListGimpyEngine.java 56
        com.jhlabs.image.RippleFilter rippleBack = new com.jhlabs.image.RippleFilter();
        com.jhlabs.image.RippleFilter ripple = new com.jhlabs.image.RippleFilter();
        com.jhlabs.image.TwirlFilter twirl = new com.jhlabs.image.TwirlFilter();
        com.jhlabs.image.WaterFilter water = new com.jhlabs.image.WaterFilter();

File Line
com\octo\captcha\engine\image\ImageCaptchaEngine.java 93
com\octo\captcha\engine\sound\SoundCaptchaEngine.java 82
                throw new CaptchaEngineException("This factory is not an sound captcha factory " + factories[i].getClass());
            }
            tempFactories.add(factories[i]);
        }

        this.factories = tempFactories;
    }

  protected void checkNotNullOrEmpty(CaptchaFactory[] factories) {
        if (factories == null || factories.length == 0) {
            throw new CaptchaEngineException("impossible to set null or empty factories");
        }
    }

File Line
com\octo\captcha\sound\gimpy\GimpySoundFactory.java 57
com\octo\captcha\sound\speller\SpellerSoundFactory.java 67
    }

    public WordToSound getWordToSound() {
        return this.word2Sound;
    }

    public WordGenerator getWordGenerator() {
        return this.wordGenerator;
    }

    /**
     * @return a Sound Captcha
     */
    public SoundCaptcha getSoundCaptcha() {
        String word = this.wordGenerator.getWord(getRandomLength(), Locale.getDefault());
        AudioInputStream sound = this.word2Sound.getSound(wordDecorator.decorateWord(word));

File Line
com\octo\captcha\component\image\textpaster\DecoratedRandomTextPaster.java 65
com\octo\captcha\component\image\textpaster\RandomTextPaster.java 65
                                   final AttributedString attributedString) {
        BufferedImage out = copyBackground(background);
        Graphics2D g2 = pasteBackgroundAndSetTextColor(out, background);
        g2.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS,
                RenderingHints.VALUE_FRACTIONALMETRICS_ON);
        g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
        g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
                RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
        // this doesn't do anything in JDK 1.4, but maybe it will in JDK 1.5
        // attributedString.addAttribute(TextAttribute.WIDTH, TextAttribute.WIDTH_EXTENDED);

        // convert string into a series of glyphs we can work with
        MutableAttributedString newAttrString = new MutableAttributedString(g2,

File Line
com\octo\captcha\component\image\wordtoimage\ComposedWordToImageTest.java 43
com\octo\captcha\component\image\wordtoimage\DeformedComposedWordToImageTest.java 46
    private Integer minAcceptedWordLength = new Integer(1);
    private Integer maxAcceptedWordLength = new Integer(10);
    private Integer imageHeight = new Integer(100);
    private Integer imageWidth = new Integer(100);
    private Integer minFontSize = new Integer(10);
    private Integer maxFontSize = new Integer(10);

File Line
com\octo\captcha\service\AbstractCaptchaService.java 71
com\octo\captcha\service\AbstractCaptchaService.java 106
        if (!this.store.hasCaptcha(ID)) {
            //if not generate it
            captcha = generateAndStoreCaptcha(locale, ID);
        } else {
            captcha = this.store.getCaptcha(ID);
            if (captcha == null) {
                captcha = generateAndStoreCaptcha(locale, ID);
            }else if (locale != null) {

File Line
com\octo\captcha\component\image\textpaster\glyphsvisitor\OverlapGlyphsUsingShapeVisitor.java 79
com\octo\captcha\component\image\textpaster\glyphsvisitor\OverlapGlyphsVisitor.java 22
            double tx =gv.getBoundsX(i-1)+gv.getBoundsWidth(i-1)-gv.getBoundsX(i)
                    -Math.abs(gv.getRSB(i-1))
                    -Math.abs(gv.getLSB(i))