/* * 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.qi4j.library.alarm; import java.util.List; import java.util.Locale; import org.qi4j.api.common.Optional; /** * Definition of the behaviour of the alarm model. * <p> * The AlarmModel is basically the state machine of the AlarmPoint system, * and it is possible to define different <code>AlarmModel</code>s * for each and every alarm. Alarms that are assigned the default * <code>AlarmModel</code> of the <code>AlarmSystem</code> can be * re-assigned another <code>AlarmModel</code> in runtime, just by * changing the default <code>AlarmModel</code> in the * <code>AlarmSystem</code>. Alarms can also change the * <code>AlarmModel</code> by calling the <code>setAlarmModel</code> * in each alarm individually. * </p> * * @see AlarmSystem */ public interface AlarmModel { String MODEL_BUNDLE_NAME = "org.qi4j.library.alarm.AlarmResources"; /** * Execute the required changes upon an AlarmTrigger. * The AlarmSystem calls this method. The AlarmModel must NOT update the AlarmPoint itself, and only return the * resulting event, and the AlarmSystem will update the AlarmStatus accordingly. * * @param alarm The AlarmPoint the trigger is for. * @param trigger the AlarmTrigger that was used. * * @return An AlarmEvent representing the state change for the given trigger. * * @throws IllegalArgumentException If the trigger given is not supported by this alarm model. */ AlarmEvent evaluate( AlarmPoint alarm, String trigger ) throws IllegalArgumentException; List<String> statusList(); /** * Returns an array of alarm triggers valid for this AlarmModel. * Alarms are triggered by alarm triggers, which are predefined * java.lang.Strings. The AlarmModel advertise which alarm trigger * strings it supports with this method. * * @return an array of alarm triggers valid for this AlarmModel. */ List<String> alarmTriggers(); // /** // * Adds a new <i>Property</i> to <strong>all</strong> <code>Alarms</code>. // * The <code>defaultvalue</code> will be added to all present and future // * <code>Alarms</code> created through this AlarmModel. In case any existing // * <code>Alarms</code> already have this property defined, the existing value // * should not be overwritten. // * // * @param name The name of the global property to add. // * @param defaultvalue the default value of the global property. // */ // void addProperty( String name, String defaultvalue ); // // /** // * Removes the <i>Property</i> from all <code>Alarms</code>. // * // * @param name the name of the global property to remove. // */ // void removeProperty( String name ); // // /** // * Returns a <code>java.util.Map</code> of all global default <i>Properties</i>. // * // * @return a <code>java.util.Map</code> of all global default <i>Properties</i>. // */ // Map<String,String> defaultProperties(); String computeTrigger( AlarmStatus status, boolean condition ); boolean computeCondition( AlarmStatus status ); /** * Returns the Name of the AlarmModel. * This normally returns the human readable technical name of * the AlarmModel. * * @return The system name of this alarm model. */ String modelName(); /** * Returns a Description of the AlarmModel in the default Locale. * This normally returns a full Description of the AlarmModel in the * default Locale. * * @return the description of the ModelProvider, in the default locale. */ String modelDescription(); /** * Returns a Description of the AlarmModel. * This normally returns a full Description of the AlarmModel in the * Locale. If Locale is <code><b>null</b></code>, then the * default Locale is used. * * @param locale The locale that should be used for the description, or null for the default locale. * * @return The human readable, in the given locale, description of this alarm model. */ String modelDescription( @Optional Locale locale ); }