in spring-quartz/src/main/java/org/apache/archiva/redback/components/scheduler/CronExpressionValidator.java [263:359]
private boolean checkFieldWithLetter( String value, String letter, int minimalBefore, int maximalBefore,
int minimalAfter, int maximalAfter )
{
boolean canBeAlone = false;
boolean canHaveIntBefore = false;
boolean canHaveIntAfter = false;
boolean mustHaveIntBefore = false;
boolean mustHaveIntAfter = false;
if ( "L".equals( letter ) )
{
canBeAlone = true;
canHaveIntBefore = true;
canHaveIntAfter = false;
mustHaveIntBefore = false;
mustHaveIntAfter = false;
}
if ( "W".equals( letter ) || "C".equals( letter ) )
{
canBeAlone = false;
canHaveIntBefore = true;
canHaveIntAfter = false;
mustHaveIntBefore = true;
mustHaveIntAfter = false;
}
if ( "#".equals( letter ) )
{
canBeAlone = false;
canHaveIntBefore = true;
canHaveIntAfter = true;
mustHaveIntBefore = true;
mustHaveIntAfter = true;
}
String beforeLetter = "";
String afterLetter = "";
if ( value.indexOf( letter ) >= 0 )
{
beforeLetter = value.substring( 0, value.indexOf( letter ) );
}
if ( !value.endsWith( letter ) )
{
afterLetter = value.substring( value.indexOf( letter ) + 1 );
}
if ( value.indexOf( letter ) >= 0 )
{
if ( letter.equals( value ) )
{
return canBeAlone;
}
if ( canHaveIntBefore )
{
if ( mustHaveIntBefore && beforeLetter.length() == 0 )
{
return false;
}
if ( !checkIntValue( beforeLetter, minimalBefore, maximalBefore, true ) )
{
return false;
}
}
else
{
if ( beforeLetter.length() > 0 )
{
return false;
}
}
if ( canHaveIntAfter )
{
if ( mustHaveIntAfter && afterLetter.length() == 0 )
{
return false;
}
if ( !checkIntValue( afterLetter, minimalAfter, maximalAfter, true ) )
{
return false;
}
}
else
{
if ( afterLetter.length() > 0 )
{
return false;
}
}
}
return true;
}