Made a huge optimization in the property check. Added test.
This commit is contained in:
parent
93c06e728a
commit
e44bda8db2
2 changed files with 187 additions and 2 deletions
|
@ -293,12 +293,12 @@ public class PropertyChecker
|
||||||
check = new PropertyCheck(lineIndex, "", Status.OK);
|
check = new PropertyCheck(lineIndex, "", Status.OK);
|
||||||
check.setComment("OK");
|
check.setComment("OK");
|
||||||
}
|
}
|
||||||
else if ((StringUtils.isEmpty(line)) || (line.matches(COMMENT)))
|
else if ((StringUtils.isEmpty(line)) || (isComment(line)))
|
||||||
{
|
{
|
||||||
check = new PropertyCheck(lineIndex, line, Status.OK);
|
check = new PropertyCheck(lineIndex, line, Status.OK);
|
||||||
check.setComment("OK");
|
check.setComment("OK");
|
||||||
}
|
}
|
||||||
else if (!line.matches("^[^#].*[^\\s].*=.*$"))
|
else if (!isProperty(line))
|
||||||
{
|
{
|
||||||
check = new PropertyCheck(lineIndex, line, Status.ERROR);
|
check = new PropertyCheck(lineIndex, line, Status.ERROR);
|
||||||
check.setComment("Ligne malformée");
|
check.setComment("Ligne malformée");
|
||||||
|
@ -458,4 +458,83 @@ public class PropertyChecker
|
||||||
//
|
//
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if is comment.
|
||||||
|
*
|
||||||
|
* @param line
|
||||||
|
* the line
|
||||||
|
* @return true, if is comment
|
||||||
|
*/
|
||||||
|
public static boolean isComment(final String line)
|
||||||
|
{
|
||||||
|
boolean result;
|
||||||
|
|
||||||
|
// Method 1
|
||||||
|
// public static final Pattern COMMENT_PATTERN =
|
||||||
|
// Pattern.compile(COMMENT);
|
||||||
|
// result = COMMENT_PATTERN.matcher(line).matches();
|
||||||
|
|
||||||
|
// Method 2
|
||||||
|
// result = StringUtils.startsWith(line, "#");
|
||||||
|
|
||||||
|
// Method 3
|
||||||
|
if ((line != null) && (line.length() > 0) && (line.charAt(0) == '#'))
|
||||||
|
{
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if is property.
|
||||||
|
*
|
||||||
|
* @param line
|
||||||
|
* the line
|
||||||
|
* @return true, if is property
|
||||||
|
*/
|
||||||
|
public static boolean isProperty(final String line)
|
||||||
|
{
|
||||||
|
boolean result;
|
||||||
|
|
||||||
|
// Method 1, take so much time, > 1000 ms for each property file.
|
||||||
|
// public static final Pattern PROPERTY_PATTERN =
|
||||||
|
// Pattern.compile("^[^#].*[^\\s].*=.*$");
|
||||||
|
// result = PROPERTY_PATTERN.matcher(line).matches();
|
||||||
|
|
||||||
|
// Method 2, well optimized, < 1 ms for each property file.
|
||||||
|
if ((line == null) || (line.length() == 0))
|
||||||
|
{
|
||||||
|
result = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int splitter = line.indexOf('=');
|
||||||
|
if (splitter == -1)
|
||||||
|
{
|
||||||
|
result = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
String path = line.substring(0, splitter);
|
||||||
|
if ((path.length() == 0) || (path.charAt(0) == '#') || (StringUtils.isBlank(path)))
|
||||||
|
{
|
||||||
|
result = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
106
test/fr/devinsy/statoolinfos/checker/PropertyCheckerTest.java
Normal file
106
test/fr/devinsy/statoolinfos/checker/PropertyCheckerTest.java
Normal file
|
@ -0,0 +1,106 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2024 Christian Pierre MOMON <christian@momon.org>
|
||||||
|
*
|
||||||
|
* This file is part of StatoolInfos, simple key value database.
|
||||||
|
*
|
||||||
|
* StatoolInfos is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as
|
||||||
|
* published by the Free Software Foundation, either version 3 of the
|
||||||
|
* License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* StatoolInfos is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with StatoolInfos. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package fr.devinsy.statoolinfos.checker;
|
||||||
|
|
||||||
|
import org.apache.logging.log4j.Level;
|
||||||
|
import org.apache.logging.log4j.core.config.Configurator;
|
||||||
|
import org.apache.logging.log4j.core.config.DefaultConfiguration;
|
||||||
|
import org.junit.AfterClass;
|
||||||
|
import org.junit.Assert;
|
||||||
|
import org.junit.BeforeClass;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import fr.devinsy.statoolinfos.core.StatoolInfosException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Class PropertyCheckerTest.
|
||||||
|
*/
|
||||||
|
public class PropertyCheckerTest
|
||||||
|
{
|
||||||
|
private static org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(PropertyCheckerTest.class);
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void PropertyCheckerIsCommentTest01()
|
||||||
|
{
|
||||||
|
Assert.assertFalse(PropertyChecker.isComment(null));
|
||||||
|
Assert.assertFalse(PropertyChecker.isComment(""));
|
||||||
|
Assert.assertFalse(PropertyChecker.isComment(" "));
|
||||||
|
Assert.assertFalse(PropertyChecker.isComment("foo"));
|
||||||
|
Assert.assertFalse(PropertyChecker.isComment(" foo "));
|
||||||
|
|
||||||
|
Assert.assertTrue(PropertyChecker.isComment("#"));
|
||||||
|
Assert.assertTrue(PropertyChecker.isComment("# "));
|
||||||
|
Assert.assertTrue(PropertyChecker.isComment("# foo"));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void PropertyCheckerIsPropertyTest01()
|
||||||
|
{
|
||||||
|
Assert.assertFalse(PropertyChecker.isProperty(null));
|
||||||
|
Assert.assertFalse(PropertyChecker.isProperty(""));
|
||||||
|
Assert.assertFalse(PropertyChecker.isProperty(" "));
|
||||||
|
Assert.assertFalse(PropertyChecker.isProperty(" foo "));
|
||||||
|
Assert.assertFalse(PropertyChecker.isProperty("foo"));
|
||||||
|
Assert.assertFalse(PropertyChecker.isProperty("#"));
|
||||||
|
Assert.assertFalse(PropertyChecker.isProperty("# "));
|
||||||
|
Assert.assertFalse(PropertyChecker.isProperty("# foo"));
|
||||||
|
Assert.assertFalse(PropertyChecker.isProperty("#foo=bar"));
|
||||||
|
|
||||||
|
Assert.assertTrue(PropertyChecker.isProperty("foo="));
|
||||||
|
Assert.assertTrue(PropertyChecker.isProperty("foo= "));
|
||||||
|
Assert.assertTrue(PropertyChecker.isProperty("foo=bar"));
|
||||||
|
Assert.assertTrue(PropertyChecker.isProperty("foo=bar "));
|
||||||
|
Assert.assertTrue(PropertyChecker.isProperty(" foo="));
|
||||||
|
Assert.assertTrue(PropertyChecker.isProperty(" foo= "));
|
||||||
|
Assert.assertTrue(PropertyChecker.isProperty(" foo=bar"));
|
||||||
|
Assert.assertTrue(PropertyChecker.isProperty(" foo=bar "));
|
||||||
|
Assert.assertTrue(PropertyChecker.isProperty(" foo = bar"));
|
||||||
|
Assert.assertTrue(PropertyChecker.isProperty(" foo = bar "));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* After class.
|
||||||
|
*
|
||||||
|
* @throws StatoolInfosException
|
||||||
|
* the Juga exception
|
||||||
|
*/
|
||||||
|
@AfterClass
|
||||||
|
public static void afterClass() throws StatoolInfosException
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Before class.
|
||||||
|
*
|
||||||
|
* @throws StatoolInfosException
|
||||||
|
* the Juga exception
|
||||||
|
*/
|
||||||
|
@BeforeClass
|
||||||
|
public static void beforeClass() throws StatoolInfosException
|
||||||
|
{
|
||||||
|
Configurator.initialize(new DefaultConfiguration());
|
||||||
|
Configurator.setRootLevel(Level.DEBUG);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue