root / hci / trunk / eneraptor-web-app / grails-app / controllers / com / eneraptor / hci / ActionsController.groovy @ 66
History | View | Annotate | Download (5.32 KB)
1 | 3 | alexbesir | package com.eneraptor.hci
|
---|---|---|---|
2 | |||
3 | 58 | alexbesir | import grails.converters.* |
4 | |||
5 | 3 | alexbesir | class ActionsController { |
6 | 58 | alexbesir | |
7 | def hciLogicCommService
|
||
8 | |||
9 | 3 | alexbesir | def main = { }
|
10 | 42 | alexbesir | |
11 | 58 | alexbesir | def view = {
|
12 | |||
13 | [includeToOnLoadDo: true] |
||
14 | |||
15 | } |
||
16 | 42 | alexbesir | |
17 | 58 | alexbesir | def getActions = {
|
18 | |||
19 | String reqStr = "<?xml version=\"1.0\"?><hci-request type=\"getScenarios\"></hci-request>" |
||
20 | 66 | alexbesir | Map reply = hciLogicCommService.getReplyToRequest(reqStr,session.hwSet.IPaddress,session.hwSet.portNumber)
|
21 | 58 | alexbesir | |
22 | if(reply['status'] == 'error' || reply['content'] == null) { |
||
23 | return [replyError: reply['content']] |
||
24 | } else {
|
||
25 | def filteredResponse = reply['content'].minus("<?xml version=\"1.0\"?>") |
||
26 | //System.out.println("[eneraptor-hci] Recieved reply (filtered): " + filteredResponse)
|
||
27 | def rootNode = XML.parse(filteredResponse)
|
||
28 | if(rootNode.@type == "getScenarios") { |
||
29 | List scenarios = new ArrayList() |
||
30 | rootNode.scenariotree.scenario.each { |
||
31 | scenarios << [it.@id.text(),it.@name.text(),it.inDevice.@id.text(),it.outDevice.@id.text()] |
||
32 | } |
||
33 | [scenarios:scenarios]
|
||
34 | } else {
|
||
35 | return [replyError: "The response is invalid. Check logic's IP and port numbers."] |
||
36 | } |
||
37 | } |
||
38 | |||
39 | } |
||
40 | |||
41 | 42 | alexbesir | def add = { }
|
42 | 58 | alexbesir | |
43 | def viewAction = {
|
||
44 | |||
45 | String reqStr = "<?xml version=\"1.0\"?><hci-request type=\"getScenarios\"></hci-request>" |
||
46 | 66 | alexbesir | Map reply = hciLogicCommService.getReplyToRequest(reqStr,session.hwSet.IPaddress,session.hwSet.portNumber)
|
47 | 58 | alexbesir | |
48 | if(reply['status'] == 'error' || reply['content'] == null) { |
||
49 | flash['errors'] = "<p>Error connecting with logic: " + reply['content'] + "</p>" |
||
50 | redirect(action:'view') |
||
51 | return false |
||
52 | } else {
|
||
53 | def filteredResponse = reply['content'].minus("<?xml version=\"1.0\"?>") |
||
54 | def rootNode = XML.parse(filteredResponse)
|
||
55 | if(rootNode.@type == "getScenarios") { |
||
56 | def scenarioNode = rootNode.scenariotree[0].scenario.find { |
||
57 | it.@id.text() == params['actionId'] |
||
58 | } |
||
59 | if(scenarioNode == null) { |
||
60 | flash['errors'] = "<p>Could not find a scanario with the id " + params['actionId'] + ".</p>" |
||
61 | redirect(action:'view') |
||
62 | return false |
||
63 | } else {
|
||
64 | Map scenario = new HashMap() |
||
65 | scenario['id'] = scenarioNode.@id.text()
|
||
66 | scenario['name'] = scenarioNode.@name.text()
|
||
67 | scenario['inDevice'] = scenarioNode.inDevice.@id.text()
|
||
68 | scenario['outDevice'] = scenarioNode.outDevice.@id.text()
|
||
69 | scenario['reaction'] = scenarioNode.reaction.@func.text()
|
||
70 | scenario['check_idle'] = scenarioNode.check_idle.@val.text()
|
||
71 | scenario['check_active'] = scenarioNode.check_active.@val.text()
|
||
72 | scenario['alpha'] = scenarioNode.alpha.@val.text()
|
||
73 | scenario['params'] = scenarioNode.params.@val.text()
|
||
74 | scenario['minVal'] = scenarioNode.inDevAalues.@minval.text()
|
||
75 | scenario['maxVal'] = scenarioNode.inDevAalues.@maxval.text()
|
||
76 | scenario['optVal'] = scenarioNode.inDevAalues.@optval.text()
|
||
77 | scenario['tolerance'] = scenarioNode.inDevAalues.@tolerance.text()
|
||
78 | scenario['action'] = scenarioNode.action.@act.text()
|
||
79 | scenario['param'] = scenarioNode.param.@par.text()
|
||
80 | |||
81 | return [scenario:scenario] |
||
82 | } |
||
83 | } else {
|
||
84 | flash['errors'] = "<p>Error connecting with logic: The response is invalid. Check logic's IP and port numbers.</p>" |
||
85 | redirect(action:'view') |
||
86 | return false |
||
87 | } |
||
88 | } |
||
89 | |||
90 | } |
||
91 | |||
92 | def deleteAction = {
|
||
93 | |||
94 | // First part: get XML from logic and modify
|
||
95 | |||
96 | String reqStr = "<?xml version=\"1.0\"?><hci-request type=\"getScenarios\"></hci-request>" |
||
97 | 66 | alexbesir | Map reply = hciLogicCommService.getReplyToRequest(reqStr,session.hwSet.IPaddress,session.hwSet.portNumber)
|
98 | 58 | alexbesir | |
99 | if(reply['status'] == 'error' || reply['content'] == null) { |
||
100 | flash['errors'] = "<p>Error connecting with logic: " + reply['content'] + "</p>" |
||
101 | redirect(action:'view') |
||
102 | return false |
||
103 | } else {
|
||
104 | def filteredResponse = reply['content'].minus("<?xml version=\"1.0\"?>") |
||
105 | def rootNode = new groovy.util.XmlParser().parseText(filteredResponse) |
||
106 | if(rootNode.@type == "getScenarios") { |
||
107 | def scenarioTree = rootNode.scenariotree[0] |
||
108 | def nodeToRemove = scenarioTree.scenario.find {
|
||
109 | it.@id == params['actionId'] |
||
110 | } |
||
111 | scenarioTree.remove(nodeToRemove) |
||
112 | |||
113 | def writer = new StringWriter() |
||
114 | new XmlNodePrinter(new PrintWriter(writer)).print(scenarioTree) |
||
115 | def result = writer.toString()
|
||
116 | |||
117 | result = "<?xml version=\"1.0\"?><hci-request type=\"setScenarios\">" + result + "</hci-request>" |
||
118 | |||
119 | // Second part: give modified XML to logic
|
||
120 | |||
121 | 66 | alexbesir | Map reply2 = hciLogicCommService.getReplyToRequest(result,session.hwSet.IPaddress,session.hwSet.portNumber)
|
122 | 58 | alexbesir | |
123 | if(reply2['status'] == 'error' || reply2['content'] == null) { |
||
124 | flash['errors'] = "<p>Error connecting with logic: " + reply2['content'] + "</p>" |
||
125 | redirect(action:'view') |
||
126 | return false |
||
127 | } else {
|
||
128 | def rootNode2 = XML.parse(reply2['content']) |
||
129 | if(rootNode2.@type.text() == "setScenarios") { |
||
130 | flash['confirms'] = "<p>Scenario deleted successfully.</p>" |
||
131 | redirect(action:'view') |
||
132 | return true |
||
133 | } else {
|
||
134 | flash['errors'] = "<p>Error connecting with logic: The response is invalid. Check logic's IP and port numbers.</p>" |
||
135 | redirect(action:'view') |
||
136 | return false |
||
137 | } |
||
138 | } |
||
139 | |||
140 | } else {
|
||
141 | flash['errors'] = "<p>Error connecting with logic: The response is invalid. Check logic's IP and port numbers.</p>" |
||
142 | redirect(action:'view') |
||
143 | return false |
||
144 | } |
||
145 | } |
||
146 | } |
||
147 | 3 | alexbesir | |
148 | } |