You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@climate.apache.org by jo...@apache.org on 2013/06/13 01:16:08 UTC

svn commit: r1492469 - in /incubator/climate/trunk/rcmet/src/main/ui/app: index.html js/controllers.js js/controllers/ParameterSelectCtrl.js

Author: joyce
Date: Wed Jun 12 23:16:08 2013
New Revision: 1492469

URL: http://svn.apache.org/r1492469
Log:
CLIMATE-95 progress - Moves ParameterSelectCtrl

- Moves ParameterSelectCtrl to js/controllers/ParameterSelectCtrl.js
- Adds new include to index.html for the new file.

Added:
    incubator/climate/trunk/rcmet/src/main/ui/app/js/controllers/ParameterSelectCtrl.js
Modified:
    incubator/climate/trunk/rcmet/src/main/ui/app/index.html
    incubator/climate/trunk/rcmet/src/main/ui/app/js/controllers.js

Modified: incubator/climate/trunk/rcmet/src/main/ui/app/index.html
URL: http://svn.apache.org/viewvc/incubator/climate/trunk/rcmet/src/main/ui/app/index.html?rev=1492469&r1=1492468&r2=1492469&view=diff
==============================================================================
--- incubator/climate/trunk/rcmet/src/main/ui/app/index.html (original)
+++ incubator/climate/trunk/rcmet/src/main/ui/app/index.html Wed Jun 12 23:16:08 2013
@@ -231,6 +231,7 @@
   <script src="js/services.js"></script>
   <script src="js/controllers.js"></script>
   <script src="js/controllers/WorldMapCtrl.js"></script>
+  <script src="js/controllers/ParameterSelectCtrl.js"></script>
   <script src="js/filters.js"></script>
   <script src="js/directives.js"></script>
 </body>

Modified: incubator/climate/trunk/rcmet/src/main/ui/app/js/controllers.js
URL: http://svn.apache.org/viewvc/incubator/climate/trunk/rcmet/src/main/ui/app/js/controllers.js?rev=1492469&r1=1492468&r2=1492469&view=diff
==============================================================================
--- incubator/climate/trunk/rcmet/src/main/ui/app/js/controllers.js (original)
+++ incubator/climate/trunk/rcmet/src/main/ui/app/js/controllers.js Wed Jun 12 23:16:08 2013
@@ -1,245 +1,5 @@
 'use strict';
 
-// Controller for dataset parameter selection/modification
-function ParameterSelectCtrl($rootScope, $scope, $http, $timeout, selectedDatasetInformation, 
-							 regionSelectParams, evaluationSettings) {
-	$scope.datasets = selectedDatasetInformation.getDatasets();
-
-	// The min/max lat/lon values from the selected datasets
-	$scope.latMin = -90;
-	$scope.latMax = 90;
-	$scope.lonMin = -180;
-	$scope.lonMax = 180;
-	$scope.start = "1980-01-01 00:00:00";
-	$scope.end = "2030-01-01 00:00:00";
-
-	// The min/max lat/lon values that are displayed
-	$scope.displayParams = regionSelectParams.getParameters();
-
-	$scope.runningEval = false;
-
-	// Flag for toggling re-grid controls based on whether or not the user has selected a grid
-	// base from the selected datasets. By default we have no datasets so we don't need to show
-	// the controls!
-	$scope.areInUserRegridState = false;
-
-	// Initialization for the lat/lon grid step sliders
-	// TODO There has to be a better way of dealing with this. Perhaps a directive??
-	$scope.latSliderVal = 0;
-	$scope.lonSliderVal = 0;
-
-	$('#latSlider').slider({
-		value: 0,
-		step: 0.25,
-		min: 0.25,
-		max: 180,
-		slide: function(event, ui) {
-			updateLatSliderDisplayValue(ui.value);
-		},
-	});
-
-	$('#lonSlider').slider({
-		value: 0,
-		step: 0.25,
-		min: 0.25,
-		max: 360,
-		slide: function(event, ui) {
-			updateLonSliderDisplayValue(ui.value);
-		},
-	});
-
-	var updateLatSliderDisplayValue = function(value) {
-		$scope.latSliderVal = value;
-		$scope.$apply();
-	}
-
-	var updateLonSliderDisplayValue = function(value) {
-		$scope.lonSliderVal = value;
-		$scope.$apply();
-	}
-
-	// Settings for jQuery datepicker directives!
-	$scope.datepickerSettings = {
-		changeMonth: true,
-		changeYear: true,
-	};
-
-	$scope.shouldDisableControls = function() {
-		return (selectedDatasetInformation.getDatasetCount() < 2);
-	}
-
-	$scope.shouldDisableClearButton = function() {
-		return (selectedDatasetInformation.getDatasetCount() == 0);
-	}
-
-	$scope.shouldDisableResultsView = function() {
-		var res = false;
-
-		if ($rootScope.evalResults == "")
-			res = true;
-
-		return res;
-	}
-
-	$scope.clearDatasets = function() {
-		selectedDatasetInformation.clearDatasets();
-	}
-
-	$scope.runEvaluation = function() {
-		$scope.runningEval = true;
-
-		// TODO
-		// Currently this has the 1 model, 1 observation format hard coded in. This shouldn't
-		// be the long-term case! This needs to be changed!!!!!!!!
-		var obsIndex = -1,
-			modelIndex = -1;
-
-		for (var i = 0; i < $scope.datasets.length; i++) {
-			if ($scope.datasets[i]['isObs'] == 1)
-				obsIndex = i;
-			else
-				modelIndex = i;
-		}
-
-		// TODO At the moment we aren't running all the metrics that the user selected. We're only
-		// running the first available metric that the user provides. If the user un-checks all
-		// metrics then the default of 'bias' is used.
-		var metricToRun = 'bias';
-		var settings = evaluationSettings.getSettings().metrics;
-		for (var i = 0; i < settings.length; i++) {
-			var setting = settings[i];
-
-			if (setting.select) {
-				metricToRun = setting.name;
-				break;
-			}
-		};
-
-		// You might wonder why this is using a jQuery ajax call instead of a built
-		// in $http.post call. The reason would be that it wasn't working with the 
-		// $http.post call but it is with this. So...there you go! This should be
-		// changed eventually!!
-		$.ajax({
-			type: 'POST',
-			url: $rootScope.baseURL + '/rcmes/run/', 
-			data: { 
-				'obsDatasetId'     : $scope.datasets[obsIndex]['id'],
-				'obsParameterId'   : $scope.datasets[obsIndex]['param'],
-				'startTime'        : $scope.displayParams.start + " 00:00:00",
-				'endTime'          : $scope.displayParams.end + " 00:00:00",
-				'latMin'           : $scope.displayParams.latMin,
-				'latMax'           : $scope.displayParams.latMax,
-				'lonMin'           : $scope.displayParams.lonMin,
-				'lonMax'           : $scope.displayParams.lonMax,
-				'filelist'         : $scope.datasets[modelIndex]['id'],
-				'modelVarName'     : $scope.datasets[modelIndex]['param'],
-				'modelTimeVarName' : $scope.datasets[modelIndex]['time'],
-				'modelLatVarName'  : $scope.datasets[modelIndex]['lat'],
-				'modelLonVarName'  : $scope.datasets[modelIndex]['lon'],
-				'regridOption'     : 'model',
-				'timeRegridOption' : evaluationSettings.getSettings().temporal.selected,
-				'metricOption'     : metricToRun,
-			},
-			success: function(data) {
-				var comp = data['comparisonPath'].split('/');
-				var model = data['modelPath'].split('/');
-				var obs = data['obsPath'].split('/');
-
-				$rootScope.evalResults = {};
-				$rootScope.evalResults.comparisonPath = comp[comp.length - 1];
-				$rootScope.evalResults.modelPath = model[model.length - 1];
-				$rootScope.evalResults.obsPath = obs[obs.length - 1];
-
-				$scope.runningEval = false;
-
-				$timeout(function() {
-					$('#evaluationResults').trigger('modalOpen', true, true);
-				}, 100);
-			},
-			error: function(xhr, status, error) {
-				$scope.runningEval = false;
-			},
-		});
-	}
-
-	// Check the Parameter selection boxes after the user has changed input to ensure that valid
-	// values were entered
-	$scope.checkParameters = function() {
-		if (parseFloat($scope.displayParams.latMin) < parseFloat($scope.latMin))
-			$scope.displayParams.latMin = $scope.latMin;
-
-		if (parseFloat($scope.displayParams.latMax) > parseFloat($scope.latMax))
-			$scope.displayParams.latMax = $scope.latMax;
-
-		if (parseFloat($scope.displayParams.lonMin) < parseFloat($scope.lonMin)) 
-			$scope.displayParams.lonMin = $scope.lonMin;
-
-		if (parseFloat($scope.displayParams.lonMax) > parseFloat($scope.lonMax)) 
-			$scope.displayParams.lonMax = $scope.lonMax;
-
-		if ($scope.displayParams.start < $scope.start) 
-			$scope.displayParams.start = $scope.start;
-
-		if ($scope.displayParams.end > $scope.end)
-			$scope.displayParams.end = $scope.end;
-
-		$scope.$apply();
-		$rootScope.$broadcast('redrawOverlays', []);
-	}
-
-	$scope.$watch('datasets', 
-		function() { 
-			var numDatasets = $scope.datasets.length;
-			$scope.displayParams.areValid = false;
-			$scope.areInUserRegridState = false;
-
- 			if (numDatasets) {
-				var latMin        = -90,
-					latMax        = 90,
-					lonMin        = -180,
-					lonMax        = 180,
-					start         = "1980-01-01 00:00:00",
-					end           = "2030-01-01 00:00:00",
-					datasetRegrid = false;
- 				// Get the valid lat/lon range in the selected datasets.
- 				for (var i = 0; i < numDatasets; i++) {
- 					var curDataset = $scope.datasets[i];
- 	
- 					latMin = (curDataset['latlonVals']['latMin'] > latMin) ? curDataset['latlonVals']['latMin'] : latMin;
- 					latMax = (curDataset['latlonVals']['latMax'] < latMax) ? curDataset['latlonVals']['latMax'] : latMax;
- 					lonMin = (curDataset['latlonVals']['lonMin'] > lonMin) ? curDataset['latlonVals']['lonMin'] : lonMin;
- 					lonMax = (curDataset['latlonVals']['lonMax'] < lonMax) ? curDataset['latlonVals']['lonMax'] : lonMax;
- 					start = (curDataset['timeVals']['start'] > start) ? curDataset['timeVals']['start'] : start;
- 					end = (curDataset['timeVals']['end'] < end) ? curDataset['timeVals']['end'] : end;
-
-					datasetRegrid = datasetRegrid || curDataset.regrid;
-
-				}
-
-				$scope.areInUserRegridState = !datasetRegrid
-			}
-
-			// Update the display parameters with the new valid overlap that we've found!
-			$scope.displayParams.latMin = latMin;
-			$scope.displayParams.latMax = latMax;
-			$scope.displayParams.lonMin = lonMin;
-			$scope.displayParams.lonMax = lonMax;
-			$scope.displayParams.start = start.split(" ")[0];
-			$scope.displayParams.end = end.split(" ")[0];
-
-			// Update the local store values!
-			$scope.latMin = latMin;
-			$scope.latMax = latMax;
-			$scope.lonMin = lonMin;
-			$scope.lonMax = lonMax;
-			$scope.start = start.split(" ")[0];
-			$scope.end = end.split(" ")[0];
-
-			$scope.displayParams.areValid = true;
-			$rootScope.$broadcast('redrawOverlays', []);
-		}, true);
-}
-
 // Controller for dataset display
 function DatasetDisplayCtrl($rootScope, $scope, selectedDatasetInformation) {
 	$scope.datasets = selectedDatasetInformation.getDatasets();

Added: incubator/climate/trunk/rcmet/src/main/ui/app/js/controllers/ParameterSelectCtrl.js
URL: http://svn.apache.org/viewvc/incubator/climate/trunk/rcmet/src/main/ui/app/js/controllers/ParameterSelectCtrl.js?rev=1492469&view=auto
==============================================================================
--- incubator/climate/trunk/rcmet/src/main/ui/app/js/controllers/ParameterSelectCtrl.js (added)
+++ incubator/climate/trunk/rcmet/src/main/ui/app/js/controllers/ParameterSelectCtrl.js Wed Jun 12 23:16:08 2013
@@ -0,0 +1,256 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You 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.
+//
+
+// Controller for dataset parameter selection/modification
+function ParameterSelectCtrl($rootScope, $scope, $http, $timeout, selectedDatasetInformation, 
+							 regionSelectParams, evaluationSettings) {
+	$scope.datasets = selectedDatasetInformation.getDatasets();
+
+	// The min/max lat/lon values from the selected datasets
+	$scope.latMin = -90;
+	$scope.latMax = 90;
+	$scope.lonMin = -180;
+	$scope.lonMax = 180;
+	$scope.start = "1980-01-01 00:00:00";
+	$scope.end = "2030-01-01 00:00:00";
+
+	// The min/max lat/lon values that are displayed
+	$scope.displayParams = regionSelectParams.getParameters();
+
+	$scope.runningEval = false;
+
+	// Flag for toggling re-grid controls based on whether or not the user has selected a grid
+	// base from the selected datasets. By default we have no datasets so we don't need to show
+	// the controls!
+	$scope.areInUserRegridState = false;
+
+	// Initialization for the lat/lon grid step sliders
+	// TODO There has to be a better way of dealing with this. Perhaps a directive??
+	$scope.latSliderVal = 0;
+	$scope.lonSliderVal = 0;
+
+	$('#latSlider').slider({
+		value: 0,
+		step: 0.25,
+		min: 0.25,
+		max: 180,
+		slide: function(event, ui) {
+			updateLatSliderDisplayValue(ui.value);
+		},
+	});
+
+	$('#lonSlider').slider({
+		value: 0,
+		step: 0.25,
+		min: 0.25,
+		max: 360,
+		slide: function(event, ui) {
+			updateLonSliderDisplayValue(ui.value);
+		},
+	});
+
+	var updateLatSliderDisplayValue = function(value) {
+		$scope.latSliderVal = value;
+		$scope.$apply();
+	}
+
+	var updateLonSliderDisplayValue = function(value) {
+		$scope.lonSliderVal = value;
+		$scope.$apply();
+	}
+
+	// Settings for jQuery datepicker directives!
+	$scope.datepickerSettings = {
+		changeMonth: true,
+		changeYear: true,
+	};
+
+	$scope.shouldDisableControls = function() {
+		return (selectedDatasetInformation.getDatasetCount() < 2);
+	}
+
+	$scope.shouldDisableClearButton = function() {
+		return (selectedDatasetInformation.getDatasetCount() == 0);
+	}
+
+	$scope.shouldDisableResultsView = function() {
+		var res = false;
+
+		if ($rootScope.evalResults == "")
+			res = true;
+
+		return res;
+	}
+
+	$scope.clearDatasets = function() {
+		selectedDatasetInformation.clearDatasets();
+	}
+
+	$scope.runEvaluation = function() {
+		$scope.runningEval = true;
+
+		// TODO
+		// Currently this has the 1 model, 1 observation format hard coded in. This shouldn't
+		// be the long-term case! This needs to be changed!!!!!!!!
+		var obsIndex = -1,
+			modelIndex = -1;
+
+		for (var i = 0; i < $scope.datasets.length; i++) {
+			if ($scope.datasets[i]['isObs'] == 1)
+				obsIndex = i;
+			else
+				modelIndex = i;
+		}
+
+		// TODO At the moment we aren't running all the metrics that the user selected. We're only
+		// running the first available metric that the user provides. If the user un-checks all
+		// metrics then the default of 'bias' is used.
+		var metricToRun = 'bias';
+		var settings = evaluationSettings.getSettings().metrics;
+		for (var i = 0; i < settings.length; i++) {
+			var setting = settings[i];
+
+			if (setting.select) {
+				metricToRun = setting.name;
+				break;
+			}
+		};
+
+		// You might wonder why this is using a jQuery ajax call instead of a built
+		// in $http.post call. The reason would be that it wasn't working with the 
+		// $http.post call but it is with this. So...there you go! This should be
+		// changed eventually!!
+		$.ajax({
+			type: 'POST',
+			url: $rootScope.baseURL + '/rcmes/run/', 
+			data: { 
+				'obsDatasetId'     : $scope.datasets[obsIndex]['id'],
+				'obsParameterId'   : $scope.datasets[obsIndex]['param'],
+				'startTime'        : $scope.displayParams.start + " 00:00:00",
+				'endTime'          : $scope.displayParams.end + " 00:00:00",
+				'latMin'           : $scope.displayParams.latMin,
+				'latMax'           : $scope.displayParams.latMax,
+				'lonMin'           : $scope.displayParams.lonMin,
+				'lonMax'           : $scope.displayParams.lonMax,
+				'filelist'         : $scope.datasets[modelIndex]['id'],
+				'modelVarName'     : $scope.datasets[modelIndex]['param'],
+				'modelTimeVarName' : $scope.datasets[modelIndex]['time'],
+				'modelLatVarName'  : $scope.datasets[modelIndex]['lat'],
+				'modelLonVarName'  : $scope.datasets[modelIndex]['lon'],
+				'regridOption'     : 'model',
+				'timeRegridOption' : evaluationSettings.getSettings().temporal.selected,
+				'metricOption'     : metricToRun,
+			},
+			success: function(data) {
+				var comp = data['comparisonPath'].split('/');
+				var model = data['modelPath'].split('/');
+				var obs = data['obsPath'].split('/');
+
+				$rootScope.evalResults = {};
+				$rootScope.evalResults.comparisonPath = comp[comp.length - 1];
+				$rootScope.evalResults.modelPath = model[model.length - 1];
+				$rootScope.evalResults.obsPath = obs[obs.length - 1];
+
+				$scope.runningEval = false;
+
+				$timeout(function() {
+					$('#evaluationResults').trigger('modalOpen', true, true);
+				}, 100);
+			},
+			error: function(xhr, status, error) {
+				$scope.runningEval = false;
+			},
+		});
+	}
+
+	// Check the Parameter selection boxes after the user has changed input to ensure that valid
+	// values were entered
+	$scope.checkParameters = function() {
+		if (parseFloat($scope.displayParams.latMin) < parseFloat($scope.latMin))
+			$scope.displayParams.latMin = $scope.latMin;
+
+		if (parseFloat($scope.displayParams.latMax) > parseFloat($scope.latMax))
+			$scope.displayParams.latMax = $scope.latMax;
+
+		if (parseFloat($scope.displayParams.lonMin) < parseFloat($scope.lonMin)) 
+			$scope.displayParams.lonMin = $scope.lonMin;
+
+		if (parseFloat($scope.displayParams.lonMax) > parseFloat($scope.lonMax)) 
+			$scope.displayParams.lonMax = $scope.lonMax;
+
+		if ($scope.displayParams.start < $scope.start) 
+			$scope.displayParams.start = $scope.start;
+
+		if ($scope.displayParams.end > $scope.end)
+			$scope.displayParams.end = $scope.end;
+
+		$scope.$apply();
+		$rootScope.$broadcast('redrawOverlays', []);
+	}
+
+	$scope.$watch('datasets', 
+		function() { 
+			var numDatasets = $scope.datasets.length;
+			$scope.displayParams.areValid = false;
+			$scope.areInUserRegridState = false;
+
+ 			if (numDatasets) {
+				var latMin        = -90,
+					latMax        = 90,
+					lonMin        = -180,
+					lonMax        = 180,
+					start         = "1980-01-01 00:00:00",
+					end           = "2030-01-01 00:00:00",
+					datasetRegrid = false;
+ 				// Get the valid lat/lon range in the selected datasets.
+ 				for (var i = 0; i < numDatasets; i++) {
+ 					var curDataset = $scope.datasets[i];
+ 	
+ 					latMin = (curDataset['latlonVals']['latMin'] > latMin) ? curDataset['latlonVals']['latMin'] : latMin;
+ 					latMax = (curDataset['latlonVals']['latMax'] < latMax) ? curDataset['latlonVals']['latMax'] : latMax;
+ 					lonMin = (curDataset['latlonVals']['lonMin'] > lonMin) ? curDataset['latlonVals']['lonMin'] : lonMin;
+ 					lonMax = (curDataset['latlonVals']['lonMax'] < lonMax) ? curDataset['latlonVals']['lonMax'] : lonMax;
+ 					start = (curDataset['timeVals']['start'] > start) ? curDataset['timeVals']['start'] : start;
+ 					end = (curDataset['timeVals']['end'] < end) ? curDataset['timeVals']['end'] : end;
+
+					datasetRegrid = datasetRegrid || curDataset.regrid;
+
+				}
+
+				$scope.areInUserRegridState = !datasetRegrid
+			}
+
+			// Update the display parameters with the new valid overlap that we've found!
+			$scope.displayParams.latMin = latMin;
+			$scope.displayParams.latMax = latMax;
+			$scope.displayParams.lonMin = lonMin;
+			$scope.displayParams.lonMax = lonMax;
+			$scope.displayParams.start = start.split(" ")[0];
+			$scope.displayParams.end = end.split(" ")[0];
+
+			// Update the local store values!
+			$scope.latMin = latMin;
+			$scope.latMax = latMax;
+			$scope.lonMin = lonMin;
+			$scope.lonMax = lonMax;
+			$scope.start = start.split(" ")[0];
+			$scope.end = end.split(" ")[0];
+
+			$scope.displayParams.areValid = true;
+			$rootScope.$broadcast('redrawOverlays', []);
+		}, true);
+}