sventon subversion web client - http://www.sventon.org
[show recent changes]
 
  Help
Rev: HEAD (53458) - http://anonsvn.icesoft.org/repo / bridge-support / patches / bridge-support-sf-12692 / src / main / javascript / configuration.js
Show File - configuration.js  [show properties]
spinner
/*
 * Copyright 2004-2013 ICEsoft Technologies Canada Corp.
 *
 * Licensed 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
 *
10   * Unless required by applicable law or agreed to in writing,
11   * software distributed under the License is distributed on an "AS
12   * IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
13   * express or implied. See the License for the specific language
14   * governing permissions and limitations under the License.
15   */
16 
17  var attributeAsString = operator();
18  var attributeAsBoolean = operator();
19  var attributeAsNumber = operator();
20  var valueAsStrings = operator();
21  var valueAsBooleans = operator();
22  var valueAsNumbers = operator();
23  var attributeNames = operator();
24  var childConfiguration = operator();
25 
26  function XMLDynamicConfiguration(lookupElement) {
27      function asBoolean(s) {
28          return 'true' == toLowerCase(s);
29      }
30 
31      function lookupAttribute(name) {
32          var a = lookupElement().getAttribute(name);
33          if (a) {
34              return a;
35          } else {
36              throw 'unknown attribute: ' + name;
37          }
38      }
39 
40      function lookupValues(name) {
41          return collect(asArray(lookupElement().getElementsByTagName(name)), function(e) {
42              var valueNode = e.firstChild;
43              return valueNode ? valueNode.nodeValue : '';
44          });
45      }
46 
47      return object(function(method) {
48          method(attributeAsString, function(self, name, defaultValue) {
49              try {
50                  return lookupAttribute(name);
51              } catch (e) {
52                  if (isString(defaultValue)) {
53                      return defaultValue;
54                  } else {
55                      throw e;
56                  }
57              }
58          });
59 
60          method(attributeAsNumber, function(self, name, defaultValue) {
61              try {
62                  return Number(lookupAttribute(name));
63              } catch (e) {
64                  if (isNumber(defaultValue)) {
65                      return defaultValue;
66                  } else {
67                      throw e;
68                  }
69              }
70          });
71 
72          method(attributeAsBoolean, function(self, name, defaultValue) {
73              try {
74                  return asBoolean(lookupAttribute(name));
75              } catch (e) {
76                  if (isBoolean(defaultValue)) {
77                      return defaultValue;
78                  } else {
79                      throw e;
80                  }
81              }
82          });
83 
84          method(childConfiguration, function(self, name) {
85              var elements = lookupElement().getElementsByTagName(name);
86              if (isEmpty(elements)) {
87                  throw 'unknown configuration: ' + name;
88              } else {
89                  return XMLDynamicConfiguration(function() {
90                      return lookupElement().getElementsByTagName(name)[0];
91                  });
92              }
93          });
94 
95          method(valueAsStrings, function(self, name, defaultValues) {
96              var values = lookupValues(name);
97              return isEmpty(values) && defaultValues ? defaultValues : values;
98          });
99 
100          method(valueAsNumbers, function(self, name, defaultValues) {
101              var values = lookupValues(name);
102              return isEmpty(values) && defaultValues ? defaultValues : collect(values, Number);
103          });
104 
105          method(valueAsBooleans, function(self, name, defaultValues) {
106              var values = lookupValues(name);
107              return isEmpty(values) && defaultValues ? defaultValues : collect(values, asBoolean);
108          });
109      });
110  }


feed icon

sventon 2.5.1