001    package edu.nrao.sss.model.project.scan;
002    
003    import java.util.ArrayList;
004    import java.util.List;
005    
006    import edu.nrao.sss.model.resource.Resource;
007    import edu.nrao.sss.model.source.Source;
008    import edu.nrao.sss.validation.AbstractValidator;
009    import edu.nrao.sss.validation.DataNotEnteredValidation;
010    import edu.nrao.sss.validation.Validation;
011    import edu.nrao.sss.validation.ValidationPurpose;
012    
013    /**
014     * A validator of {@link SwitchSetting switch settings}.
015     * <p>
016     * <u>Validations Performed for All Purposes</u>
017     * <ol>
018     *   <li>Setting has source.</li>
019     *   <li>Setting has resource.</li>
020     *   <li>Time spent at setting is greater than zero.</li>
021     * </ol></p>
022     * <p>
023     * <b>Version Info:</b>
024     * <table style="margin-left:2em">
025     *   <tr><td>$Revision: 1256 $</td></tr>
026     *   <tr><td>$Date: 2008-04-29 15:55:50 -0600 (Tue, 29 Apr 2008) $</td></tr>
027     *   <tr><td>$Author: dharland $</td></tr>
028     * </table></p>
029     * 
030     * @author David M. Harland
031     * @since 2007-02-21
032     */
033    public class SwitchSettingValidator
034      extends AbstractValidator<SwitchSetting>
035    {
036      /** Creates a new instance. */
037      public SwitchSettingValidator()
038      {
039        super(SwitchSettingValidator.class.getName(), SwitchSetting.class);
040      }
041      
042      /* (non-Javadoc)
043       * @see AbstractValidator#makeValidationList(ValidationPurpose)
044       */
045      @Override
046      protected List<Validation<SwitchSetting>>
047        makeValidationList(ValidationPurpose purpose)
048      {
049        List<Validation<SwitchSetting>> validations =
050          new ArrayList<Validation<SwitchSetting>>();
051        
052        validations.add(new HasSource  (this, purpose));
053        validations.add(new HasResource(this, purpose));
054        validations.add(new HasTime    (this, purpose));
055        
056        return validations; 
057      }
058      
059      //============================================================================
060      // UNITIALIZED FIELD VALIDATIONS
061      //============================================================================
062      
063      class HasResource extends DataNotEnteredValidation<SwitchSetting>
064      {
065        protected HasResource(AbstractValidator<SwitchSetting> validationContainer,
066                              ValidationPurpose                reasonForValidation)
067        {
068          super(validationContainer, reasonForValidation,
069                "switch setting", "resource", null);
070        }
071        
072        @Override
073        protected String getCurrentValue()
074        {
075          Resource rsrc = target.getResource();
076          
077          return rsrc == null ? null : rsrc.getName(); 
078        }
079      }
080      
081      
082      class HasSource extends DataNotEnteredValidation<SwitchSetting>
083      {
084        protected HasSource(AbstractValidator<SwitchSetting> validationContainer,
085                            ValidationPurpose                reasonForValidation)
086        {
087          super(validationContainer, reasonForValidation,
088                "switch setting", "source", null);
089        }
090        
091        @Override
092        protected String getCurrentValue()
093        {
094          Source src = target.getSource();
095          
096          return src == null ? null : src.getName(); 
097        }
098      }
099    
100      class HasTime extends DataNotEnteredValidation<SwitchSetting>
101      {
102        protected HasTime(AbstractValidator<SwitchSetting> validationContainer,
103                          ValidationPurpose               reasonForValidation)
104        {
105          super(validationContainer, reasonForValidation,
106                "switch setting", "time at setting", "0.0");
107        }
108        
109        @Override
110        protected String getCurrentValue()
111        {
112          return target.getTimeAtSetting().getValue().toString();
113        }
114      }
115    }