From 9cfdb65e38b589c280ca195863779463fd218695 Mon Sep 17 00:00:00 2001 From: Frida Tveit Date: Tue, 20 Dec 2016 23:10:16 +0000 Subject: [PATCH 1/3] Fixed TODO: enum in Parser.java. Changed SyntaxAnalysisMode from int to enum. --- .../javaanpr/intelligence/Intelligence.java | 10 +--- .../net/sf/javaanpr/intelligence/Parser.java | 55 +++++++++++++------ 2 files changed, 40 insertions(+), 25 deletions(-) diff --git a/src/main/java/net/sf/javaanpr/intelligence/Intelligence.java b/src/main/java/net/sf/javaanpr/intelligence/Intelligence.java index 40e5c00..39c396e 100644 --- a/src/main/java/net/sf/javaanpr/intelligence/Intelligence.java +++ b/src/main/java/net/sf/javaanpr/intelligence/Intelligence.java @@ -18,12 +18,7 @@ import net.sf.javaanpr.configurator.Configurator; import net.sf.javaanpr.gui.TimeMeter; -import net.sf.javaanpr.imageanalysis.Band; -import net.sf.javaanpr.imageanalysis.CarSnapshot; -import net.sf.javaanpr.imageanalysis.Char; -import net.sf.javaanpr.imageanalysis.HoughTransformation; -import net.sf.javaanpr.imageanalysis.Photo; -import net.sf.javaanpr.imageanalysis.Plate; +import net.sf.javaanpr.imageanalysis.*; import net.sf.javaanpr.jar.Main; import net.sf.javaanpr.recognizer.CharacterRecognizer; import net.sf.javaanpr.recognizer.RecognizedChar; @@ -66,7 +61,8 @@ public long getLastProcessDuration() { public String recognize(CarSnapshot carSnapshot, final boolean enableReportGeneration) throws IllegalArgumentException, IOException { TimeMeter time = new TimeMeter(); - int syntaxAnalysisMode = configurator.getIntProperty("intelligence_syntaxanalysis"); + int syntaxAnalysisModeInt = configurator.getIntProperty("intelligence_syntaxanalysis"); + Parser.SyntaxAnalysisMode syntaxAnalysisMode = Parser.getSyntaxAnalysisModeFromInt(syntaxAnalysisModeInt); int skewDetectionMode = configurator.getIntProperty("intelligence_skewdetection"); if (enableReportGeneration) { Main.rg.insertText("

Automatic Number Plate Recognition Report

"); diff --git a/src/main/java/net/sf/javaanpr/intelligence/Parser.java b/src/main/java/net/sf/javaanpr/intelligence/Parser.java index 8bb625a..285ccd0 100644 --- a/src/main/java/net/sf/javaanpr/intelligence/Parser.java +++ b/src/main/java/net/sf/javaanpr/intelligence/Parser.java @@ -162,30 +162,31 @@ public void invertFlags() { /** * Syntactically parses text from the given {@link RecognizedPlate} in the specified analysis mode. *

- * Syntax analysis mode:

* * @param recognizedPlate the plate to parse * @param syntaxAnalysisMode the mode in which to parse * @return the parsed recognized plate text */ - public String parse(RecognizedPlate recognizedPlate, int syntaxAnalysisMode) { // TODO enum - if (syntaxAnalysisMode == 0) { - Main.rg.insertText( - " result : " + recognizedPlate.getString() + " --> " + recognizedPlate.getString() - + "

"); - return recognizedPlate.getString(); - } - + public String parse(RecognizedPlate recognizedPlate, SyntaxAnalysisMode syntaxAnalysisMode) { int length = recognizedPlate.getChars().size(); - this.unFlagAll(); - if (syntaxAnalysisMode == 1) { - this.flagEqualLength(length); - } else { - this.flagEqualOrShorterLength(length); + + switch (syntaxAnalysisMode) { + case DO_NOT_PARSE: + Main.rg.insertText( + " result : " + recognizedPlate.getString() + " --> " + recognizedPlate.getString() + + "

"); + return recognizedPlate.getString(); + case ONLY_EQUAL_LENGTH: + this.unFlagAll(); + this.flagEqualLength(length); + break; + case EQUAL_OR_SHORTER_LENGTH: + this.unFlagAll(); + this.flagEqualOrShorterLength(length); + break; + default: + throw new IllegalArgumentException("Expected SyntaxAnalysisMode.DO_NOT_PARSE, " + + "SyntaxAnalysisMode.ONLY_EQUAL_LENGTH or SyntaxAnalysisMode.EQUAL_OR_SHORTER_LENGTH."); } Vector finalPlates = new Vector(); @@ -294,4 +295,22 @@ public void addChar(char chr) { } } + public enum SyntaxAnalysisMode { + DO_NOT_PARSE, + ONLY_EQUAL_LENGTH, + EQUAL_OR_SHORTER_LENGTH + } + + public static SyntaxAnalysisMode getSyntaxAnalysisModeFromInt(int syntaxAnalysisModeInt) { + switch (syntaxAnalysisModeInt) { + case 0: + return SyntaxAnalysisMode.DO_NOT_PARSE; + case 1: + return SyntaxAnalysisMode.ONLY_EQUAL_LENGTH; + case 2: + return SyntaxAnalysisMode.EQUAL_OR_SHORTER_LENGTH; + default: + throw new IllegalArgumentException("Expected: 0, 1, or 2. Got: " + syntaxAnalysisModeInt); + } + } } From 70e48eb207cf3808bc4c26e786129645ff89d877 Mon Sep 17 00:00:00 2001 From: Frida Tveit Date: Wed, 21 Dec 2016 11:02:47 +0000 Subject: [PATCH 2/3] Added unit tests for getSyntaxAnalysisModeFromInt. --- .../sf/javaanpr/intelligence/ParserTest.java | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 src/test/java/net/sf/javaanpr/intelligence/ParserTest.java diff --git a/src/test/java/net/sf/javaanpr/intelligence/ParserTest.java b/src/test/java/net/sf/javaanpr/intelligence/ParserTest.java new file mode 100644 index 0000000..032a35b --- /dev/null +++ b/src/test/java/net/sf/javaanpr/intelligence/ParserTest.java @@ -0,0 +1,44 @@ +/* + * Copyright 2013 JavaANPR contributors + * Copyright 2006 Ondrej Martinsky + * Licensed under the Educational Community License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.osedu.org/licenses/ECL-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an "AS IS" + * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package net.sf.javaanpr.intelligence; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class ParserTest { + + @Test + public void testGetSyntaxAnalysisModeFromIntReturnsDoNotParseWhenIntIsZero() { + assertEquals(Parser.getSyntaxAnalysisModeFromInt(0), Parser.SyntaxAnalysisMode.DO_NOT_PARSE); + } + + @Test + public void testGetSyntaxAnalysisModeFromIntReturnsOnlyEqualLengthWhenIntIsOne() { + assertEquals(Parser.getSyntaxAnalysisModeFromInt(1), Parser.SyntaxAnalysisMode.ONLY_EQUAL_LENGTH); + } + + @Test + public void testGetSyntaxAnalysisModeFromIntReturnsEqualOrShorterLengthWhenIntIsTwo() { + assertEquals(Parser.getSyntaxAnalysisModeFromInt(2), Parser.SyntaxAnalysisMode.EQUAL_OR_SHORTER_LENGTH); + } + + @Test(expected = IllegalArgumentException.class) + public void testGetSyntaxAnalysisModeThrowsIllegalArgumentExceptionWhenGivenIntNotEqualToOneTwoOrThree() { + Parser.getSyntaxAnalysisModeFromInt(3); + } +} From 9feccd270a13472de680625597a3099f01d9a86a Mon Sep 17 00:00:00 2001 From: Frida Tveit Date: Wed, 21 Dec 2016 21:59:48 +0000 Subject: [PATCH 3/3] Added documentation in docs/upgradeRecipies/upgradeRecipe-2.0.0.adoc for the change to Parser.parse. Pulled SyntaxAnalysisMode into its own file and moved getSyntaxAnalysisModeFromInt into this file. Renamed ParserTest to SyntaxAnalysisModeTest to reflect this change. --- docs/upgradeRecipes/upgradeRecipe-2.0.0.adoc | 5 +++ .../javaanpr/intelligence/Intelligence.java | 2 +- .../net/sf/javaanpr/intelligence/Parser.java | 19 ---------- .../intelligence/SyntaxAnalysisMode.java | 36 +++++++++++++++++++ ...rTest.java => SyntaxAnalysisModeTest.java} | 10 +++--- 5 files changed, 47 insertions(+), 25 deletions(-) create mode 100644 src/main/java/net/sf/javaanpr/intelligence/SyntaxAnalysisMode.java rename src/test/java/net/sf/javaanpr/intelligence/{ParserTest.java => SyntaxAnalysisModeTest.java} (74%) diff --git a/docs/upgradeRecipes/upgradeRecipe-2.0.0.adoc b/docs/upgradeRecipes/upgradeRecipe-2.0.0.adoc index 94e16ad..04ecf04 100644 --- a/docs/upgradeRecipes/upgradeRecipe-2.0.0.adoc +++ b/docs/upgradeRecipes/upgradeRecipe-2.0.0.adoc @@ -4,3 +4,8 @@ JavaANPR Contributors == Major API changes == Minor API changes +=== `Parser.parse` method parameters + +The method `String Parser.parse(RecognizedPlate, int)` changed to `String Parser.parse(RecognizedPlate, SyntaxAnalysisMode)`. + +Workaround: `parse(plate, syntaxAnalysisModeInt)` -> `parse(plate, SyntaxAnalysisMode.getSyntaxAnalysisModeFromInt(syntaxAnalysisModeInt))` diff --git a/src/main/java/net/sf/javaanpr/intelligence/Intelligence.java b/src/main/java/net/sf/javaanpr/intelligence/Intelligence.java index 39c396e..d4c18c0 100644 --- a/src/main/java/net/sf/javaanpr/intelligence/Intelligence.java +++ b/src/main/java/net/sf/javaanpr/intelligence/Intelligence.java @@ -62,7 +62,7 @@ public String recognize(CarSnapshot carSnapshot, final boolean enableReportGener throws IllegalArgumentException, IOException { TimeMeter time = new TimeMeter(); int syntaxAnalysisModeInt = configurator.getIntProperty("intelligence_syntaxanalysis"); - Parser.SyntaxAnalysisMode syntaxAnalysisMode = Parser.getSyntaxAnalysisModeFromInt(syntaxAnalysisModeInt); + SyntaxAnalysisMode syntaxAnalysisMode = SyntaxAnalysisMode.getSyntaxAnalysisModeFromInt(syntaxAnalysisModeInt); int skewDetectionMode = configurator.getIntProperty("intelligence_skewdetection"); if (enableReportGeneration) { Main.rg.insertText("

Automatic Number Plate Recognition Report

"); diff --git a/src/main/java/net/sf/javaanpr/intelligence/Parser.java b/src/main/java/net/sf/javaanpr/intelligence/Parser.java index 285ccd0..11372b2 100644 --- a/src/main/java/net/sf/javaanpr/intelligence/Parser.java +++ b/src/main/java/net/sf/javaanpr/intelligence/Parser.java @@ -294,23 +294,4 @@ public void addChar(char chr) { this.plate = this.plate + chr; } } - - public enum SyntaxAnalysisMode { - DO_NOT_PARSE, - ONLY_EQUAL_LENGTH, - EQUAL_OR_SHORTER_LENGTH - } - - public static SyntaxAnalysisMode getSyntaxAnalysisModeFromInt(int syntaxAnalysisModeInt) { - switch (syntaxAnalysisModeInt) { - case 0: - return SyntaxAnalysisMode.DO_NOT_PARSE; - case 1: - return SyntaxAnalysisMode.ONLY_EQUAL_LENGTH; - case 2: - return SyntaxAnalysisMode.EQUAL_OR_SHORTER_LENGTH; - default: - throw new IllegalArgumentException("Expected: 0, 1, or 2. Got: " + syntaxAnalysisModeInt); - } - } } diff --git a/src/main/java/net/sf/javaanpr/intelligence/SyntaxAnalysisMode.java b/src/main/java/net/sf/javaanpr/intelligence/SyntaxAnalysisMode.java new file mode 100644 index 0000000..5d100fc --- /dev/null +++ b/src/main/java/net/sf/javaanpr/intelligence/SyntaxAnalysisMode.java @@ -0,0 +1,36 @@ +/* + * Copyright 2013 JavaANPR contributors + * Copyright 2006 Ondrej Martinsky + * Licensed under the Educational Community License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.osedu.org/licenses/ECL-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an "AS IS" + * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package net.sf.javaanpr.intelligence; + +public enum SyntaxAnalysisMode { + DO_NOT_PARSE, + ONLY_EQUAL_LENGTH, + EQUAL_OR_SHORTER_LENGTH; + + public static SyntaxAnalysisMode getSyntaxAnalysisModeFromInt(int syntaxAnalysisModeInt) { + switch (syntaxAnalysisModeInt) { + case 0: + return SyntaxAnalysisMode.DO_NOT_PARSE; + case 1: + return SyntaxAnalysisMode.ONLY_EQUAL_LENGTH; + case 2: + return SyntaxAnalysisMode.EQUAL_OR_SHORTER_LENGTH; + default: + throw new IllegalArgumentException("Expected: 0, 1, or 2. Got: " + syntaxAnalysisModeInt); + } + } +} diff --git a/src/test/java/net/sf/javaanpr/intelligence/ParserTest.java b/src/test/java/net/sf/javaanpr/intelligence/SyntaxAnalysisModeTest.java similarity index 74% rename from src/test/java/net/sf/javaanpr/intelligence/ParserTest.java rename to src/test/java/net/sf/javaanpr/intelligence/SyntaxAnalysisModeTest.java index 032a35b..b54dbf8 100644 --- a/src/test/java/net/sf/javaanpr/intelligence/ParserTest.java +++ b/src/test/java/net/sf/javaanpr/intelligence/SyntaxAnalysisModeTest.java @@ -20,25 +20,25 @@ import static org.junit.Assert.assertEquals; -public class ParserTest { +public class SyntaxAnalysisModeTest { @Test public void testGetSyntaxAnalysisModeFromIntReturnsDoNotParseWhenIntIsZero() { - assertEquals(Parser.getSyntaxAnalysisModeFromInt(0), Parser.SyntaxAnalysisMode.DO_NOT_PARSE); + assertEquals(SyntaxAnalysisMode.getSyntaxAnalysisModeFromInt(0), SyntaxAnalysisMode.DO_NOT_PARSE); } @Test public void testGetSyntaxAnalysisModeFromIntReturnsOnlyEqualLengthWhenIntIsOne() { - assertEquals(Parser.getSyntaxAnalysisModeFromInt(1), Parser.SyntaxAnalysisMode.ONLY_EQUAL_LENGTH); + assertEquals(SyntaxAnalysisMode.getSyntaxAnalysisModeFromInt(1), SyntaxAnalysisMode.ONLY_EQUAL_LENGTH); } @Test public void testGetSyntaxAnalysisModeFromIntReturnsEqualOrShorterLengthWhenIntIsTwo() { - assertEquals(Parser.getSyntaxAnalysisModeFromInt(2), Parser.SyntaxAnalysisMode.EQUAL_OR_SHORTER_LENGTH); + assertEquals(SyntaxAnalysisMode.getSyntaxAnalysisModeFromInt(2), SyntaxAnalysisMode.EQUAL_OR_SHORTER_LENGTH); } @Test(expected = IllegalArgumentException.class) public void testGetSyntaxAnalysisModeThrowsIllegalArgumentExceptionWhenGivenIntNotEqualToOneTwoOrThree() { - Parser.getSyntaxAnalysisModeFromInt(3); + SyntaxAnalysisMode.getSyntaxAnalysisModeFromInt(3); } }