| 1 | # Create your views here. |
|---|
| 2 | |
|---|
| 3 | from django.http import HttpResponse |
|---|
| 4 | from django.core.context_processors import csrf |
|---|
| 5 | from django.shortcuts import render_to_response |
|---|
| 6 | from django.template import RequestContext |
|---|
| 7 | from wavedash.src.WavedashController import Controller |
|---|
| 8 | from BaseHTTPServer import HTTPServer |
|---|
| 9 | import wavedash.src.WaveformModel |
|---|
| 10 | import omniORB |
|---|
| 11 | |
|---|
| 12 | def buildController(request, address=None): |
|---|
| 13 | ctrlr = Controller(False) |
|---|
| 14 | ctrlr.createWidgetContainer() |
|---|
| 15 | if address is not None: |
|---|
| 16 | request.session['namingService'] = address |
|---|
| 17 | ctrlr.CORBAutils.setNamingService(str(address)) |
|---|
| 18 | else: |
|---|
| 19 | namingService = request.session.get('namingService') |
|---|
| 20 | if namingService: |
|---|
| 21 | ctrlr.CORBAutils.setNamingService(str(namingService)) |
|---|
| 22 | |
|---|
| 23 | result = ctrlr.CORBAutils.init_CORBA(False) |
|---|
| 24 | print 'result in buildController: ' + str(result) |
|---|
| 25 | if result == 0: |
|---|
| 26 | ctrlr.buildModel() |
|---|
| 27 | return (ctrlr, result) |
|---|
| 28 | else: |
|---|
| 29 | message = 'Error connecting to naming service. Error code: ' + str(ctrlr) |
|---|
| 30 | return (None, result) |
|---|
| 31 | result = ctrlr.CORBAutils.init_CORBA(False) |
|---|
| 32 | if result == -1: |
|---|
| 33 | return None |
|---|
| 34 | ctrlr.buildModel() |
|---|
| 35 | return ctrlr |
|---|
| 36 | |
|---|
| 37 | def updateNamingService(request): |
|---|
| 38 | newAddress = request.POST['namingServiceText'] |
|---|
| 39 | request.session['namingService'] = newAddress |
|---|
| 40 | |
|---|
| 41 | message = "Naming Service Update successful!" |
|---|
| 42 | link = '/~webdemo/django/WebDash/' |
|---|
| 43 | return render_to_response('WebDash/message.html', |
|---|
| 44 | {'message' : message, 'link' : link}, context_instance=RequestContext(request)) |
|---|
| 45 | |
|---|
| 46 | |
|---|
| 47 | def waveforms(request): |
|---|
| 48 | (ctrlr, result) = buildController(request) |
|---|
| 49 | availableList = ctrlr.model.getSystemWaveforms() |
|---|
| 50 | return render_to_response("WebDash/waveforms.html", locals(), context_instance=RequestContext(request)) |
|---|
| 51 | |
|---|
| 52 | def index(request): |
|---|
| 53 | (ctrlr, result) = buildController(request) |
|---|
| 54 | print 'result: ' + str(result) |
|---|
| 55 | |
|---|
| 56 | if ctrlr == None: |
|---|
| 57 | error = "Error creating controller" |
|---|
| 58 | return render_to_response('WebDash/error.html', {'error' : error}, context_instance=RequestContext(request)) |
|---|
| 59 | |
|---|
| 60 | if ctrlr: |
|---|
| 61 | availableList = ctrlr.model.getSystemWaveforms() |
|---|
| 62 | instancesList = [] |
|---|
| 63 | instances = [] |
|---|
| 64 | for waveform in availableList: |
|---|
| 65 | instances = ctrlr.model.getInstanceWaveforms(waveform.getName()) |
|---|
| 66 | if instances: |
|---|
| 67 | for instance in instances: |
|---|
| 68 | instancesList.append(instance) |
|---|
| 69 | |
|---|
| 70 | return render_to_response('WebDash/index.html', |
|---|
| 71 | {'availableList' : availableList, 'instancesList' : instancesList, 'address' : request.session.get('namingService')}, context_instance=RequestContext(request)) |
|---|
| 72 | else: |
|---|
| 73 | message = 'Error connecting to naming service. Error code: ' + str(result) |
|---|
| 74 | return render_to_response('WebDash/message2.html', {'message' : message}) |
|---|
| 75 | |
|---|
| 76 | def index2(request, address): |
|---|
| 77 | ctrlr = buildController(request, address) |
|---|
| 78 | if ctrlr == None: |
|---|
| 79 | error = "Error creating controller" |
|---|
| 80 | return render_to_response('WebDash/error.html', {'error' : error}, context_instance=RequestContext(request)) |
|---|
| 81 | if ctrlr: |
|---|
| 82 | availableList = ctrlr.model.getSystemWaveforms() |
|---|
| 83 | instancesList = [] |
|---|
| 84 | instances = [] |
|---|
| 85 | for waveform in availableList: |
|---|
| 86 | instances = ctrlr.model.getInstanceWaveforms(waveform.getName()) |
|---|
| 87 | if instances: |
|---|
| 88 | for instance in instances: |
|---|
| 89 | instancesList.append(instance) |
|---|
| 90 | |
|---|
| 91 | |
|---|
| 92 | return render_to_response('WebDash/index.html', |
|---|
| 93 | {'availableList' : availableList, 'instancesList' : instancesList}, context_instance=RequestContext(request)) |
|---|
| 94 | else: |
|---|
| 95 | message = 'Error connecting to naming service. Error code: ' + str(result) |
|---|
| 96 | return render_to_response('WebDash/message2.html', {'message' : message}) |
|---|
| 97 | def running_page(request): |
|---|
| 98 | (ctrlr, result) = buildController(request) |
|---|
| 99 | if ctrlr == None: |
|---|
| 100 | error = "Error creating controller" |
|---|
| 101 | return render_to_response('WebDash/error.html', {'error' : error}, context_instance=RequestContext(request)) |
|---|
| 102 | |
|---|
| 103 | availableList = ctrlr.model.getSystemWaveforms() |
|---|
| 104 | instancesList = [] |
|---|
| 105 | instances = [] |
|---|
| 106 | for waveform in availableList: |
|---|
| 107 | instances = ctrlr.model.getInstanceWaveforms(waveform.getName()) |
|---|
| 108 | if instances: |
|---|
| 109 | for instance in instances: |
|---|
| 110 | instancesList.append(instance) |
|---|
| 111 | |
|---|
| 112 | return render_to_response('WebDash/running.html', {'instancesList' : instancesList}) |
|---|
| 113 | |
|---|
| 114 | def install(request, waveform_to_install): |
|---|
| 115 | (ctrlr, result) = buildController(request) |
|---|
| 116 | |
|---|
| 117 | instance = ctrlr.installWaveform(waveform_to_install, True) |
|---|
| 118 | if instance: |
|---|
| 119 | message = 'Install Successful' |
|---|
| 120 | else: |
|---|
| 121 | message = 'Install Unsuccessful' |
|---|
| 122 | |
|---|
| 123 | #link = '/WebDash/' |
|---|
| 124 | #return render_to_response('WebDash/message.html', {'message' : message, 'link' : link}) |
|---|
| 125 | return running_page(request) |
|---|
| 126 | |
|---|
| 127 | |
|---|
| 128 | def display(request, instance): |
|---|
| 129 | ctrlr = buildController(request) |
|---|
| 130 | |
|---|
| 131 | instance = ctrlr.model.getWaveform(instance, wavedash.src.WaveformModel.INSTANCE_WAVEFORM) |
|---|
| 132 | |
|---|
| 133 | map = getControlMap(request) |
|---|
| 134 | propMap = {} |
|---|
| 135 | components = instance.components |
|---|
| 136 | for comp in components: |
|---|
| 137 | properties = comp.properties |
|---|
| 138 | for prop in properties: |
|---|
| 139 | propMap[prop.name] = ctrlr.getOptionalWidgets(prop.type) |
|---|
| 140 | |
|---|
| 141 | |
|---|
| 142 | |
|---|
| 143 | |
|---|
| 144 | return render_to_response('WebDash/display.html', |
|---|
| 145 | {'instance' : instance, 'map' : map, 'propMap' : propMap}, context_instance=RequestContext(request)) |
|---|
| 146 | |
|---|
| 147 | def uninstall(request, instance_to_uninstall): |
|---|
| 148 | (ctrlr, result) = buildController(request) |
|---|
| 149 | |
|---|
| 150 | uninstall = ctrlr.uninstallWaveform(instance_to_uninstall) |
|---|
| 151 | if uninstall: |
|---|
| 152 | message = 'Uninstall Successful' |
|---|
| 153 | else: |
|---|
| 154 | message = 'Uninstall Not Successful' |
|---|
| 155 | |
|---|
| 156 | #link = '/WebDash/' |
|---|
| 157 | #return render_to_response('WebDash/message.html', {'message' : message, 'link' : link}) |
|---|
| 158 | return running_page(request) |
|---|
| 159 | |
|---|
| 160 | def configure(request): |
|---|
| 161 | (ctrlr, result) = buildController(request) |
|---|
| 162 | if request.method == 'POST': |
|---|
| 163 | waveName = request.POST['waveform'] |
|---|
| 164 | compName = request.POST['component'] |
|---|
| 165 | propName = request.POST['property'] |
|---|
| 166 | newValue = request.POST['propValue'] |
|---|
| 167 | |
|---|
| 168 | |
|---|
| 169 | wave = ctrlr.model.getWaveform(waveName, wavedash.src.WaveformModel.INSTANCE_WAVEFORM) |
|---|
| 170 | comp = wave.getComponent(compName) |
|---|
| 171 | prop = comp.findPropertyByName(propName) |
|---|
| 172 | |
|---|
| 173 | propType = prop.getType()[1] |
|---|
| 174 | if propType in ['short', 'ushort', 'int', 'uint'] : |
|---|
| 175 | ctrlr.model.configure(waveName, compName, propName, int(newValue)) |
|---|
| 176 | elif propType in ['long', 'ulong']: |
|---|
| 177 | ctrlr.model.configure(waveName, compName, propName, long(newValue)) |
|---|
| 178 | elif propType in ['double', 'float']: |
|---|
| 179 | ctrlr.model.configure(waveName, compName, propName, float(newValue)) |
|---|
| 180 | elif propType in ['char', 'string']: |
|---|
| 181 | ctrlr.model.configure(waveName, compName, propName, str(newValue)) |
|---|
| 182 | elif propType in ['boolean']: |
|---|
| 183 | if str(newValue).lower() in trueValues: |
|---|
| 184 | ctrlr.model.configure(waveName, compName, propName, True) |
|---|
| 185 | else: |
|---|
| 186 | ctrlr.model.configure(waveName, compName, propName, False) |
|---|
| 187 | |
|---|
| 188 | message = "Configure successful!" |
|---|
| 189 | link = '/WebDash/' + waveName + '/display/' |
|---|
| 190 | return render_to_response('WebDash/message.html', |
|---|
| 191 | {'message' : message, 'link' : link}, context_instance=RequestContext(request)) |
|---|
| 192 | |
|---|
| 193 | |
|---|
| 194 | |
|---|
| 195 | def updateControls(request): |
|---|
| 196 | (ctrlr, result) = buildController(request) |
|---|
| 197 | if request.method == 'POST': |
|---|
| 198 | waveName = request.POST['waveform'] |
|---|
| 199 | compName = request.POST['component'] |
|---|
| 200 | propName = request.POST['property'] |
|---|
| 201 | |
|---|
| 202 | widgetType = request.POST['control'] |
|---|
| 203 | |
|---|
| 204 | wave = ctrlr.model.getWaveform(waveName, wavedash.src.WaveformModel.INSTANCE_WAVEFORM) |
|---|
| 205 | comp = wave.getComponent(compName) |
|---|
| 206 | prop = comp.findPropertyByName(propName) |
|---|
| 207 | map = getControlMap(request) |
|---|
| 208 | key = wave.getName() + comp.getName() + prop.getName() |
|---|
| 209 | map[key] = widgetType |
|---|
| 210 | request.session['controlMap'] = map |
|---|
| 211 | |
|---|
| 212 | |
|---|
| 213 | message = "Update successful!" |
|---|
| 214 | link = '/WebDash/' + waveName + '/display/' |
|---|
| 215 | return render_to_response('WebDash/message.html', |
|---|
| 216 | {'message' : message, 'link' : link}, context_instance=RequestContext(request)) |
|---|
| 217 | |
|---|
| 218 | |
|---|
| 219 | |
|---|
| 220 | def getControlMap(request): |
|---|
| 221 | map = request.session.get('controlMap') |
|---|
| 222 | if map: |
|---|
| 223 | return map |
|---|
| 224 | else: |
|---|
| 225 | map = {} |
|---|
| 226 | return map |
|---|
| 227 | |
|---|