Free cookie consent management tool by TermsFeed Policy Generator

source: branches/OaaS/HeuristicLab.Services.Optimization.Web/Controllers/OptimizationController.cs @ 9215

Last change on this file since 9215 was 9215, checked in by fschoepp, 11 years ago

#1888:

  • Janitor is now working as expected in Windows Azure
  • Added basic support for experiments (draggable experiments)
  • Added methods to save/read experiments from TableStorage
  • The job status can now be retrieved by using the GetTasks/GetTaskData methods
  • Added a class to convert JSON-objects to Algorithm instances
  • Web page: Added experiment button to navigation
File size: 6.2 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Web;
5using System.Web.Mvc;
6using System.ServiceModel;
7using HeuristicLab.Services.Optimization.ControllerService;
8using HeuristicLab.Services.Optimization.ControllerService.Model;
9using System.ServiceModel.Description;
10using System.Web.Security;
11using HeuristicLab.Services.Optimization.Web.Models;
12using HeuristicLab.Services.Optimization.ControllerService.General;
13using HeuristicLab.Services.Optimization.Web.Helpers;
14
15namespace HeuristicLab.Services.Optimization.Web.Controllers
16{
17    [Authorize(Roles="Web User")]
18    public class OptimizationController : Controller
19    {     
20        private ControllerServiceHelper ControllerService {
21          get {
22            var helper = new ControllerServiceHelper(Session["pw"] as string);
23            if (!helper.Valid) {
24              Response.Redirect("/Account/Logon?ReturnUrl=%2fOptimization");
25            }
26            return helper;
27          }
28        }
29
30        //
31        // GET: /Optimization/   
32        public ActionResult Index()
33        {
34          var optModel = ControllerService.withControllerService<OptimizationModel>((service) => {
35            OptimizationModel model = new OptimizationModel();
36            model.Scenarios = service.GetOptimizationScenarios();
37            User u = new User() { Username = Membership.GetUser().UserName, Password = Session["pw"] as string };
38            model.Jobs = service.GetJobs(u);
39            return model;
40          });         
41          return View(optModel);
42        }
43
44        public ActionResult ProblemParameters(string scenario) {
45          var optScenario = ControllerService.withControllerService<OptimizationScenario>((service) => {
46            return service.GetOptimizationScenarioByName(scenario);
47          });
48          Session["scenario"] = optScenario;
49          if (optScenario.FirstAlgorithm.Problem == null)
50            return RedirectToAction("AlgorithmParameters");
51          return View(optScenario.FirstAlgorithm.Problem.Parameters);
52        }
53
54        public ActionResult ProblemParameters2() {                   
55          return View("ProblemParameters", (Session["scenario"] as OptimizationScenario).FirstAlgorithm.Problem.Parameters);
56        }
57
58        public ActionResult JobDetails(string jobId) {
59          Job job = ControllerService.withControllerService<Job>((service) => {
60            User u = new User() { Username = Membership.GetUser().UserName, Password = Session["pw"] as string };
61            return service.GetJob(u, jobId);
62          });
63          var runs = ControllerService.withControllerService<IList<Run>>((service) => {
64            User u = new User() { Username = Membership.GetUser().UserName, Password = Session["pw"] as string };
65            return service.GetJobResults(u, jobId);
66          });
67          JobDetailsModel jdm = new JobDetailsModel() { Job = job, Runs = runs };
68          Session["jobDetails"] = jdm;
69          return View(jdm);
70        }
71
72        [HttpPost]
73        public ActionResult JobDetails(Job job) {
74          ControllerService.withControllerService<bool>((service) => {
75            User u = new User() { Username = Membership.GetUser().UserName, Password = Session["pw"] as string };
76            return service.DeleteJob(u, job.Id);
77          });
78          return RedirectToAction("Index");
79        }
80
81        [HttpPost]
82        public ActionResult ProblemParameters(ProblemParameters parameters) {
83          if (ModelState.IsValid) {
84            return RedirectToAction("AlgorithmParameters", parameters);
85          }
86          return View(parameters);       
87        }
88
89        public ActionResult AlgorithmParameters() {
90          return View((Session["scenario"] as OptimizationScenario).FirstAlgorithm.Parameters);
91        }
92
93        [HttpPost]
94        public ActionResult AlgorithmParameters(AlgorithmParameters parameters) {
95          if (ModelState.IsValid) {
96            return RedirectToAction("ScheduleJob");
97          }
98          return View(parameters);
99        }
100
101        public ActionResult ScheduleJob() {
102          return View(Session["scenario"]);
103        }
104
105        [HttpPost]
106        public ActionResult ScheduleJob(ScheduleJobModel jobModel) {
107          var success = ControllerService.withControllerService<bool>((service) => {
108            User u = new User() { Username = Membership.GetUser().UserName, Password = Session["pw"] as string };
109            var scenario = Session["scenario"] as OptimizationScenario;
110            var details = new JobExecutionDetails() { Group = jobModel.Group, JobTitle = jobModel.Name, Repititions = jobModel.Repetitions };
111            return service.ScheduleOptimizationScenario(u, scenario, details);
112          });
113          return RedirectToAction("Index");
114        }
115        // TODO: Add unique identifier for algorithm / input parameters
116        public ActionResult AddRow(int id, string paramName) {
117          var os = Session["scenario"] as OptimizationScenario;
118          var parameter = os.FirstAlgorithm.Problem.Parameters.FindByName(paramName);
119          bool inputParam = true;
120          if (parameter == null) {
121            parameter = os.FirstAlgorithm.Parameters.FindByName(paramName);
122            inputParam = false;
123          }
124          var dm = parameter.Value as DecimalMatrix;
125          dm.CopyRow(id);
126          return inputParam ? View("ProblemParameters", os.FirstAlgorithm.Problem.Parameters) : View("AlgorithmParameters", os.FirstAlgorithm.Parameters);
127        }
128
129        public ActionResult DeleteRow(int id, string paramName) {
130          var os = Session["scenario"] as OptimizationScenario;
131          var parameter = os.FirstAlgorithm.Problem.Parameters.FindByName(paramName);
132          bool inputParam = true;
133          if (parameter == null) {
134            parameter = os.FirstAlgorithm.Parameters.FindByName(paramName);
135            inputParam = false;
136          }
137          var dm = parameter.Value as DecimalMatrix;
138          dm.DeleteRow(id);
139          return inputParam ? View("ProblemParameters", os.FirstAlgorithm.Problem.Parameters) : View("AlgorithmParameters", os.FirstAlgorithm.Parameters);
140        }
141    }
142}
Note: See TracBrowser for help on using the repository browser.