001    package org.hackystat.telemetry.analyzer.evaluator;
002    
003    import org.hackystat.telemetry.analyzer.configuration.TelemetryChartDefinitionInfo;
004    import org.hackystat.telemetry.analyzer.configuration.TelemetryChartYAxisDefinitionInfo;
005    import org.hackystat.telemetry.analyzer.configuration.TelemetryDefinitionInfo;
006    import org.hackystat.telemetry.analyzer.configuration.TelemetryDefinitionManager;
007    import org.hackystat.telemetry.analyzer.configuration.TelemetryDefinitionType;
008    import org.hackystat.telemetry.analyzer.configuration.TelemetryStreamsDefinitionInfo;
009    import org.hackystat.telemetry.analyzer.language.ast.TelemetryChartDefinition;
010    import org.hackystat.telemetry.analyzer.language.ast.TelemetryChartYAxisDefinition;
011    import org.hackystat.telemetry.analyzer.language.ast.TelemetryStreamsDefinition;
012    import org.hackystat.sensorbase.resource.users.jaxb.User;
013    
014    /**
015     * Telemetry definition resolver. It finds telemetry definition objects by name.
016     * 
017     * @author (Cedric) Qin ZHANG
018     * @version $Id$
019     */
020    public class TelemetryDefinitionResolver {
021    
022      private User user;
023      private TelemetryDefinitionManager manager;
024      
025      /**
026       * Constructs this instance.
027       * 
028       * @param manager A telemetry definition manager.
029       * @param currentUser The user who makes request.
030       */
031      public TelemetryDefinitionResolver(TelemetryDefinitionManager manager, User currentUser) {
032        this.manager = manager;
033        this.user = currentUser;
034      }
035      
036      /**
037       * Resolves telemetry streams definition by name.
038       * 
039       * @param name Telemetry streams definition name.
040       * @return The telemetry streams object.
041       * @throws TelemetryEvaluationException If the telemetry streams object does not exist.
042       */
043      public TelemetryStreamsDefinition resolveStreamsDefinition(String name)
044          throws TelemetryEvaluationException {
045        TelemetryDefinitionInfo defInfo = this.manager.get(this.user, name, true,
046            TelemetryDefinitionType.STREAMS);
047        if (defInfo == null) {
048          throw new TelemetryEvaluationException("Unable to find definition for telemetry streams '"
049              + name + "'.");
050        }
051        else {
052          return ((TelemetryStreamsDefinitionInfo) defInfo).getStreamsDefinitionObject();
053        }
054      }
055      
056      /**
057       * Resolves telemetry chart definition by name.
058       * 
059       * @param name Telemetry chart definition name.
060       * @return The telemetry chart object.
061       * @throws TelemetryEvaluationException If the telemetry chart object does not exist.
062       */
063      public TelemetryChartDefinition resolveChartDefinition(String name)
064          throws TelemetryEvaluationException {
065        TelemetryDefinitionInfo defInfo = this.manager.get(this.user, name, true,
066            TelemetryDefinitionType.CHART);
067        if (defInfo == null) {
068          throw new TelemetryEvaluationException("Unable to find definition for telemetry chart '"
069              + name + "'.");
070        }
071        else {
072          return ((TelemetryChartDefinitionInfo) defInfo).getChartDefinitionObject();
073        }
074      }  
075    
076      /**
077       * Resolves telemetry chart y-axis definition by name.
078       * 
079       * @param name Telemetry chart y-axis definition name.
080       * @return The telemetry chart y-axis object.
081       * @throws TelemetryEvaluationException If the telemetry chart y-axis object does not exist.
082       */
083      public TelemetryChartYAxisDefinition resolveYAxisDefinition(String name)
084          throws TelemetryEvaluationException {
085        TelemetryDefinitionInfo defInfo = this.manager.get(this.user, name, true,
086            TelemetryDefinitionType.YAXIS);
087        if (defInfo == null) {
088          throw new TelemetryEvaluationException(
089              "Unable to find definition for telemetry chart y-axis '" + name + "'.");
090        }
091        else {
092          return ((TelemetryChartYAxisDefinitionInfo) defInfo).getChartYAxisDefinitionObject();
093        }
094      } 
095    }