Project

General

Profile

1
/*
2
Author:       Mike Adair mike.adairATccrs.nrcan.gc.ca
3
License:      LGPL as per: http://www.gnu.org/copyleft/lesser.html
4

    
5
$Id$
6
*/
7

    
8
// Ensure this object's dependancies are loaded.
9
mapbuilder.loadScript(baseDir+"/widget/WidgetBaseXSL.js");
10
mapbuilder.loadScript(baseDir+"/model/Proj.js");
11

    
12
/**
13
 * Widget to display the AOI box coordinates in a form.
14
 *
15
 * @constructor
16
 * @base WidgetBaseXSL
17
 * @param widgetNode This widget's object node from the configuration document.
18
 * @param model The model that this widget is a view of.
19
 */
20

    
21
function ProcessArgumentsForm(widgetNode, model) {
22
  WidgetBaseXSL.apply(this, new Array(widgetNode, model));
23

    
24
  this.executeProcess = function(processName) {
25
    var webServiceUrl = this.argsForm.action
26
    if (this.argsForm.action.indexOf("?")<0) webServiceUrl += "?";
27
    var queryString = "";
28
    for (var i=0; i<this.argsForm.elements.length; ++i) {
29
      var element = this.argsForm.elements[i];
30
      if (element.name.indexOf("_dataSelector")>0) continue;
31
      queryString += element.name + "=" + encodeURIComponent(element.value) + "&";
32
    }
33
    if (this.targetModel.method == "get") {
34
      webServiceUrl += queryString;
35
      this.targetModel.postData = null;
36
      if (this.debug) alert(webServiceUrl);
37
    } else {
38
      this.targetModel.postData = queryString;
39
      if (this.debug) alert(webServiceUrl+" posting:"+queryString);
40
    }
41
    config.loadModel( this.targetModel.id, webServiceUrl);
42
  }
43

    
44
  /**
45
   * Initialize dynamic properties.
46
   * @param toolRef Pointer to this object.
47
   */
48
  this.initMapModel = function(objRef) {
49
    //set the map model
50
    var mapModel = objRef.widgetNode.selectSingleNode("mb:mapModel");
51
    if (mapModel) {
52
      objRef.mapModel = eval("config.objects."+mapModel.firstChild.nodeValue);
53
      if ( !objRef.mapModel ) {
54
        alert("error finding mapModel:" + mapModel.firstChild.nodeValue + " for:" + objRef.id);
55
      }
56
    }
57
    objRef.stylesheet.setParameter("mapModelId", objRef.mapModel.id );
58
  }
59
  this.model.addListener("init", this.initMapModel, this);
60

    
61
  /**
62
   * Output the AOI coordinates to the associated form input elements.  This
63
   * method is registered as an AOI listener on the context doc.
64
   * @param objRef Pointer to this argsForm object.
65
   */
66
  this.displayAoiCoords = function(objRef) {
67
    objRef.argsForm = document.getElementById(objRef.formName);
68
    var aoi = objRef.mapModel.getParam("aoi");
69
    objRef.argsForm.westCoord.value = aoi[0][0];
70
    objRef.argsForm.northCoord.value = aoi[0][1];
71
    objRef.argsForm.eastCoord.value = aoi[1][0];
72
    objRef.argsForm.southCoord.value = aoi[1][1];
73
  }
74

    
75
  /**
76
   * Set the argument value as a param on the model
77
   * @param objRef Pointer to this argsForm object.
78
   */
79
  this.setArgument = function(event) {
80
    this.model.setParam(this.name,this.value);
81
  }
82

    
83
  /**
84
   * Handles user input from the form element.  This is an onblur handler for 
85
   * the input elements.
86
   * @param objRef Pointer to this CurorTrack object.
87
   */
88
  this.setAoi = function(event) {
89
    var aoi = this.mapModel.getParam("aoi");
90
    if (aoi) {
91
      var ul = aoi[0];
92
      var lr = aoi[1];
93
      switch(this.name) {
94
        case 'westCoord':
95
          ul[0] = this.value;
96
          break;
97
        case 'northCoord':
98
          ul[1] = this.value;
99
          break;
100
        case 'eastCoord':
101
          lr[0] = this.value;
102
          break;
103
        case 'southCoord':
104
          lr[1] = this.value;
105
          break;
106
      }
107
      this.mapModel.setParam("aoi",new Array(ul,lr) );
108
    }
109
  }
110

    
111
  /**
112
   * Refreshes the form onblur handlers when this widget is painted.
113
   * @param objRef Pointer to this argsForm object.
114
   */
115
  this.prePaint = function(objRef) {
116
    var serviceUrl = objRef.model.parentModel.getServerUrl("wps:Execute", "get");
117
    if (serviceUrl) {
118
      objRef.stylesheet.setParameter("webServiceUrl",serviceUrl);
119
      objRef.stylesheet.setParameter("webServiceMethod","get");
120
      objRef.targetModel.method = "get";
121
    } else {
122
      serviceUrl = objRef.model.parentModel.getServerUrl("wps:Execute", "post");
123
      objRef.stylesheet.setParameter("webServiceUrl",serviceUrl);
124
      objRef.stylesheet.setParameter("webServiceMethod","post");
125
      objRef.targetModel.method = "post";
126
    }
127
  }
128

    
129
  /**
130
   * Refreshes the form onblur handlers when this widget is painted.
131
   * @param objRef Pointer to this argsForm object.
132
   */
133
  this.postPaint = function(objRef) {
134
    objRef.argsForm = document.getElementById(objRef.formName);
135
    var argsArray = objRef.model.doc.selectNodes("/wps:ProcessDescription/wps:ProcessMember/wps:Process/wps:Input");
136
    var selectorIndex=0;
137
    for (var i=0; i<argsArray.length; ++i) {
138
      var input= argsArray[i];
139
      var argType = input.selectSingleNode("wps:Parameter/wps:Datatype/*").nodeName;
140
      var argName = input.selectSingleNode("wps:Parameter/wps:Name").firstChild.nodeValue;
141
      switch (argType) {
142
        case "Reference":
143
        case "wps:Reference":
144
          if (selectorIndex<2) {
145
            var selector = config.objects["dataSelector"+selectorIndex];
146
            ++selectorIndex;
147
            selector.stylesheet.setParameter("selectName",objRef.id+"_"+argName+"_dataSelector");
148
            selector.node = document.getElementById(objRef.id+"_"+argName+"_dataSelectorWidget");
149
            selector.outputNodeId = objRef.id+"_"+argName+"_dataSelectorWidget_outputNode";
150
            selector.paint(selector);
151
            selector.targetInput = objRef.argsForm[argName];
152
          }
153
          objRef.argsForm[argName].model = objRef.model;
154
          objRef.argsForm[argName].onblur = objRef.setArgument;
155
          objRef.argsForm[argName].onchange = objRef.setArgument;
156
          if (objRef.model.getParam(argName)) objRef.argsForm[argName].value = objRef.model.getParam(argName);
157
          break;
158
        case "BoundingBox":
159
        case "wps:BoundingBox":
160
          objRef.argsForm.westCoord.onblur = objRef.setAoi;
161
          objRef.argsForm.northCoord.onblur = objRef.setAoi;
162
          objRef.argsForm.eastCoord.onblur = objRef.setAoi;
163
          objRef.argsForm.southCoord.onblur = objRef.setAoi;
164
          objRef.argsForm.westCoord.model = objRef.model;
165
          objRef.argsForm.northCoord.model = objRef.model;
166
          objRef.argsForm.eastCoord.model = objRef.model;
167
          objRef.argsForm.southCoord.model = objRef.model;
168
          if (objRef.mapModel) objRef.mapModel.addListener('aoi', objRef.displayAoiCoords, objRef);
169
          break;
170
        case "LiteralValue":
171
        case "wps:LiteralValue":
172
          objRef.argsForm[argName].model = objRef.model;
173
          objRef.argsForm[argName].onblur = objRef.setArgument;
174
          if (objRef.model.getParam(argName)) objRef.argsForm[argName].value = objRef.model.getParam(argName);
175
          break;
176
        case "ComplexValue":
177
        case "wps:ComplexValue":
178
          objRef.argsForm[argName].model = objRef.model;
179
          objRef.argsForm[argName].onblur = objRef.setArgument;
180
          if (objRef.model.getParam(argName)) objRef.argsForm[argName].value = objRef.model.getParam(argName);
181
          break;
182
        default:
183
          alert("invalid argument datatype:"+argType);
184
          break;
185
      }
186
    }
187
  }
188

    
189
  //set some properties for the form output
190
  this.formName = "ProcessArgsForm_";// + mbIds.getId();
191
  this.stylesheet.setParameter("formName", this.formName);
192
}
193

    
(8-8/21)