blob: ed4cb038f4b9b737f79298a622587ccdfcdc94b8 [file] [log] [blame]
/*
* Copyright 1996-2011 Niclas Hedhman.
*
* Licensed under the Apache 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.apache.org/licenses/LICENSE-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 org.apache.zest.library.alarm;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import org.apache.zest.api.constraint.Constraint;
import org.apache.zest.api.constraint.ConstraintDeclaration;
import org.apache.zest.api.constraint.Constraints;
/**
* The definition of the format of AlarmPoint system names.
* <p>
* AlarmPoint Names must contain characters. The default is 5 characters but can possibly be overridden. It must also
* not only contain white spaces.
*
*
* To override the default minimumLength, specify the <b>minimumLength</b> value in the annotation, such as;
* </p>
* <pre><code>
*
* public interface ExpressiveAlarm extends AlarmPoint
* {
* &#64;AlarmNameFormat(minimumLength=25)
* Property&lt;String&gt; systemName();
* }
* </code></pre>
* <p>
* The obvious downside is that the Property become publicly visible to the users of AlarmPoint.
* </p>
*/
@ConstraintDeclaration
@Retention( RetentionPolicy.RUNTIME )
@Constraints( AlarmNameFormat.AlarmNameConstraint.class )
public @interface AlarmNameFormat
{
int minimumLength() default 5;
class AlarmNameConstraint
implements Constraint<AlarmNameFormat, String>
{
@Override
public boolean isValid( AlarmNameFormat annotation, String value )
{
int length = annotation.minimumLength();
if( length < 1 )
{
length = 1;
}
String trimmed = value.trim();
boolean lengthConstraint = trimmed.length() >= length;
boolean whiteSpaceConstraint = trimmed.length() > 0;
return lengthConstraint && whiteSpaceConstraint;
}
}
}