openhab-scripting 2.9.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (113) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/workflow.yml +327 -0
  3. data/.gitignore +17 -0
  4. data/.java-version +1 -0
  5. data/.rspec +1 -0
  6. data/.yardopts +1 -0
  7. data/CHANGELOG.md +113 -0
  8. data/Gemfile +28 -0
  9. data/Gemfile.lock +245 -0
  10. data/Guardfile +35 -0
  11. data/LICENSE +277 -0
  12. data/README.md +23 -0
  13. data/Rakefile +406 -0
  14. data/bin/console +15 -0
  15. data/bin/setup +8 -0
  16. data/config/userdata/config/org/openhab/restauth.config +3 -0
  17. data/cucumber.yml +1 -0
  18. data/docs/_config.yml +135 -0
  19. data/docs/contributing/index.md +47 -0
  20. data/docs/examples/conversions.md +123 -0
  21. data/docs/examples/index.md +61 -0
  22. data/docs/index.md +19 -0
  23. data/docs/installation/index.md +26 -0
  24. data/docs/motivation/index.md +27 -0
  25. data/docs/usage/execution.md +9 -0
  26. data/docs/usage/execution/delay.md +48 -0
  27. data/docs/usage/execution/otherwise.md +30 -0
  28. data/docs/usage/execution/run.md +70 -0
  29. data/docs/usage/execution/triggered.md +48 -0
  30. data/docs/usage/guards.md +51 -0
  31. data/docs/usage/guards/between.md +30 -0
  32. data/docs/usage/guards/not_if.md +41 -0
  33. data/docs/usage/guards/only_if.md +40 -0
  34. data/docs/usage/index.md +11 -0
  35. data/docs/usage/items.md +66 -0
  36. data/docs/usage/items/contact.md +84 -0
  37. data/docs/usage/items/dimmer.md +147 -0
  38. data/docs/usage/items/groups.md +76 -0
  39. data/docs/usage/items/number.md +225 -0
  40. data/docs/usage/items/string.md +49 -0
  41. data/docs/usage/items/switch.md +85 -0
  42. data/docs/usage/misc.md +7 -0
  43. data/docs/usage/misc/actions.md +108 -0
  44. data/docs/usage/misc/duration.md +21 -0
  45. data/docs/usage/misc/gems.md +25 -0
  46. data/docs/usage/misc/logging.md +21 -0
  47. data/docs/usage/misc/metadata.md +128 -0
  48. data/docs/usage/misc/store_states.md +42 -0
  49. data/docs/usage/misc/time_of_day.md +69 -0
  50. data/docs/usage/misc/timers.md +67 -0
  51. data/docs/usage/rule.md +43 -0
  52. data/docs/usage/things.md +29 -0
  53. data/docs/usage/triggers.md +8 -0
  54. data/docs/usage/triggers/changed.md +57 -0
  55. data/docs/usage/triggers/channel.md +54 -0
  56. data/docs/usage/triggers/command.md +69 -0
  57. data/docs/usage/triggers/cron.md +19 -0
  58. data/docs/usage/triggers/every.md +76 -0
  59. data/docs/usage/triggers/updated.md +78 -0
  60. data/lib/openhab.rb +39 -0
  61. data/lib/openhab/configuration.rb +16 -0
  62. data/lib/openhab/core/cron.rb +27 -0
  63. data/lib/openhab/core/debug.rb +34 -0
  64. data/lib/openhab/core/dsl.rb +47 -0
  65. data/lib/openhab/core/dsl/actions.rb +107 -0
  66. data/lib/openhab/core/dsl/entities.rb +103 -0
  67. data/lib/openhab/core/dsl/gems.rb +29 -0
  68. data/lib/openhab/core/dsl/group.rb +91 -0
  69. data/lib/openhab/core/dsl/items/items.rb +39 -0
  70. data/lib/openhab/core/dsl/items/number_item.rb +217 -0
  71. data/lib/openhab/core/dsl/items/string_item.rb +102 -0
  72. data/lib/openhab/core/dsl/monkey_patch/actions/actions.rb +4 -0
  73. data/lib/openhab/core/dsl/monkey_patch/actions/script_thing_actions.rb +22 -0
  74. data/lib/openhab/core/dsl/monkey_patch/events.rb +5 -0
  75. data/lib/openhab/core/dsl/monkey_patch/events/item_command.rb +13 -0
  76. data/lib/openhab/core/dsl/monkey_patch/events/item_state_changed.rb +25 -0
  77. data/lib/openhab/core/dsl/monkey_patch/events/thing_status_info.rb +26 -0
  78. data/lib/openhab/core/dsl/monkey_patch/items/contact_item.rb +54 -0
  79. data/lib/openhab/core/dsl/monkey_patch/items/dimmer_item.rb +125 -0
  80. data/lib/openhab/core/dsl/monkey_patch/items/group_item.rb +27 -0
  81. data/lib/openhab/core/dsl/monkey_patch/items/items.rb +130 -0
  82. data/lib/openhab/core/dsl/monkey_patch/items/metadata.rb +259 -0
  83. data/lib/openhab/core/dsl/monkey_patch/items/switch_item.rb +86 -0
  84. data/lib/openhab/core/dsl/monkey_patch/ruby/number.rb +69 -0
  85. data/lib/openhab/core/dsl/monkey_patch/ruby/range.rb +46 -0
  86. data/lib/openhab/core/dsl/monkey_patch/ruby/ruby.rb +5 -0
  87. data/lib/openhab/core/dsl/monkey_patch/types/decimal_type.rb +24 -0
  88. data/lib/openhab/core/dsl/monkey_patch/types/on_off_type.rb +41 -0
  89. data/lib/openhab/core/dsl/monkey_patch/types/open_closed_type.rb +25 -0
  90. data/lib/openhab/core/dsl/monkey_patch/types/percent_type.rb +23 -0
  91. data/lib/openhab/core/dsl/monkey_patch/types/types.rb +7 -0
  92. data/lib/openhab/core/dsl/property.rb +85 -0
  93. data/lib/openhab/core/dsl/rule/channel.rb +41 -0
  94. data/lib/openhab/core/dsl/rule/cron.rb +115 -0
  95. data/lib/openhab/core/dsl/rule/guard.rb +99 -0
  96. data/lib/openhab/core/dsl/rule/item.rb +207 -0
  97. data/lib/openhab/core/dsl/rule/rule.rb +374 -0
  98. data/lib/openhab/core/dsl/rule/triggers.rb +77 -0
  99. data/lib/openhab/core/dsl/states.rb +63 -0
  100. data/lib/openhab/core/dsl/things.rb +93 -0
  101. data/lib/openhab/core/dsl/time_of_day.rb +203 -0
  102. data/lib/openhab/core/dsl/timers.rb +85 -0
  103. data/lib/openhab/core/dsl/types/quantity.rb +255 -0
  104. data/lib/openhab/core/dsl/units.rb +41 -0
  105. data/lib/openhab/core/duration.rb +69 -0
  106. data/lib/openhab/core/log.rb +175 -0
  107. data/lib/openhab/core/patch_load_path.rb +7 -0
  108. data/lib/openhab/core/startup_delay.rb +22 -0
  109. data/lib/openhab/osgi.rb +52 -0
  110. data/lib/openhab/version.rb +9 -0
  111. data/openhab-scripting.gemspec +30 -0
  112. data/openhab_rules/warmup.rb +5 -0
  113. metadata +157 -0
data/Gemfile ADDED
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ # Specify your gem's dependencies in openhab-scripting.gemspec
6
+ gemspec
7
+
8
+ group :test do
9
+ gem 'cucumber'
10
+ gem 'cuke_linter', '~> 1.2'
11
+ gem 'httparty'
12
+ gem 'persistent_httparty'
13
+ gem 'rspec'
14
+ gem 'yaml-lint'
15
+ end
16
+
17
+ group :development do
18
+ gem 'guard-shell'
19
+ gem 'guard-yard'
20
+ gem 'jekyll', '~> 4.2', require: false
21
+ gem 'just-the-docs', '~> 0.3'
22
+ gem 'kramdown-parser-gfm'
23
+ gem 'process_exists'
24
+ gem 'rake', '~> 12.0'
25
+ gem 'rubocop', '~> 1.8', require: false
26
+ gem 'tty-command'
27
+ gem 'yard'
28
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,245 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ openhab-scripting (2.9.0)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ activesupport (6.0.3.4)
10
+ concurrent-ruby (~> 1.0, >= 1.0.2)
11
+ i18n (>= 0.7, < 2)
12
+ minitest (~> 5.1)
13
+ tzinfo (~> 1.1)
14
+ zeitwerk (~> 2.2, >= 2.2.2)
15
+ addressable (2.7.0)
16
+ public_suffix (>= 2.0.2, < 5.0)
17
+ ast (2.4.1)
18
+ builder (3.2.4)
19
+ coderay (1.1.3)
20
+ colorator (1.1.0)
21
+ concurrent-ruby (1.1.7)
22
+ cucumber (5.2.0)
23
+ builder (~> 3.2, >= 3.2.4)
24
+ cucumber-core (~> 8.0, >= 8.0.1)
25
+ cucumber-create-meta (~> 2.0, >= 2.0.2)
26
+ cucumber-cucumber-expressions (~> 10.3, >= 10.3.0)
27
+ cucumber-gherkin (~> 15.0, >= 15.0.2)
28
+ cucumber-html-formatter (~> 9.0, >= 9.0.0)
29
+ cucumber-messages (~> 13.1, >= 13.1.0)
30
+ cucumber-wire (~> 4.0, >= 4.0.1)
31
+ diff-lcs (~> 1.4, >= 1.4.4)
32
+ multi_test (~> 0.1, >= 0.1.2)
33
+ sys-uname (~> 1.2, >= 1.2.1)
34
+ cucumber-core (8.0.1)
35
+ cucumber-gherkin (~> 15.0, >= 15.0.2)
36
+ cucumber-messages (~> 13.0, >= 13.0.1)
37
+ cucumber-tag-expressions (~> 2.0, >= 2.0.4)
38
+ cucumber-create-meta (2.0.4)
39
+ cucumber-messages (~> 13.1, >= 13.1.0)
40
+ sys-uname (~> 1.2, >= 1.2.1)
41
+ cucumber-cucumber-expressions (10.3.0)
42
+ cucumber-gherkin (15.0.2)
43
+ cucumber-messages (~> 13.0, >= 13.0.1)
44
+ cucumber-html-formatter (9.0.0)
45
+ cucumber-messages (~> 13.0, >= 13.0.1)
46
+ cucumber-messages (13.2.1)
47
+ protobuf-cucumber (~> 3.10, >= 3.10.8)
48
+ cucumber-tag-expressions (2.0.4)
49
+ cucumber-wire (4.0.1)
50
+ cucumber-core (~> 8.0, >= 8.0.1)
51
+ cucumber-cucumber-expressions (~> 10.3, >= 10.3.0)
52
+ cucumber-messages (~> 13.0, >= 13.0.1)
53
+ cuke_linter (1.2.0)
54
+ cuke_modeler (>= 1.5, < 4.0)
55
+ cuke_modeler (3.6.0)
56
+ cucumber-gherkin (< 17.0)
57
+ diff-lcs (1.4.4)
58
+ em-websocket (0.5.2)
59
+ eventmachine (>= 0.12.9)
60
+ http_parser.rb (~> 0.6.0)
61
+ eventmachine (1.2.7)
62
+ eventmachine (1.2.7-java)
63
+ ffi (1.13.1)
64
+ ffi (1.13.1-java)
65
+ formatador (0.2.5)
66
+ forwardable-extended (2.6.0)
67
+ gene_pool (1.5.0)
68
+ concurrent-ruby (>= 1.0)
69
+ guard (2.16.2)
70
+ formatador (>= 0.2.4)
71
+ listen (>= 2.7, < 4.0)
72
+ lumberjack (>= 1.0.12, < 2.0)
73
+ nenv (~> 0.1)
74
+ notiffany (~> 0.0)
75
+ pry (>= 0.9.12)
76
+ shellany (~> 0.0)
77
+ thor (>= 0.18.1)
78
+ guard-compat (1.2.1)
79
+ guard-shell (0.7.1)
80
+ guard (>= 2.0.0)
81
+ guard-compat (~> 1.0)
82
+ guard-yard (2.2.1)
83
+ guard (>= 1.1.0)
84
+ yard (>= 0.7.0)
85
+ http_parser.rb (0.6.0)
86
+ http_parser.rb (0.6.0-java)
87
+ httparty (0.18.1)
88
+ mime-types (~> 3.0)
89
+ multi_xml (>= 0.5.2)
90
+ i18n (1.8.5)
91
+ concurrent-ruby (~> 1.0)
92
+ jekyll (4.2.0)
93
+ addressable (~> 2.4)
94
+ colorator (~> 1.0)
95
+ em-websocket (~> 0.5)
96
+ i18n (~> 1.0)
97
+ jekyll-sass-converter (~> 2.0)
98
+ jekyll-watch (~> 2.0)
99
+ kramdown (~> 2.3)
100
+ kramdown-parser-gfm (~> 1.0)
101
+ liquid (~> 4.0)
102
+ mercenary (~> 0.4.0)
103
+ pathutil (~> 0.9)
104
+ rouge (~> 3.0)
105
+ safe_yaml (~> 1.0)
106
+ terminal-table (~> 2.0)
107
+ jekyll-sass-converter (2.1.0)
108
+ sassc (> 2.0.1, < 3.0)
109
+ jekyll-seo-tag (2.7.1)
110
+ jekyll (>= 3.8, < 5.0)
111
+ jekyll-watch (2.2.1)
112
+ listen (~> 3.0)
113
+ just-the-docs (0.3.3)
114
+ jekyll (>= 3.8.5)
115
+ jekyll-seo-tag (~> 2.0)
116
+ rake (>= 12.3.1, < 13.1.0)
117
+ kramdown (2.3.0)
118
+ rexml
119
+ kramdown-parser-gfm (1.1.0)
120
+ kramdown (~> 2.0)
121
+ liquid (4.0.3)
122
+ listen (3.4.1)
123
+ rb-fsevent (~> 0.10, >= 0.10.3)
124
+ rb-inotify (~> 0.9, >= 0.9.10)
125
+ lumberjack (1.2.8)
126
+ mercenary (0.4.0)
127
+ method_source (1.0.0)
128
+ middleware (0.1.0)
129
+ mime-types (3.3.1)
130
+ mime-types-data (~> 3.2015)
131
+ mime-types-data (3.2020.1104)
132
+ minitest (5.14.2)
133
+ multi_test (0.1.2)
134
+ multi_xml (0.6.0)
135
+ nenv (0.3.0)
136
+ notiffany (0.1.3)
137
+ nenv (~> 0.1)
138
+ shellany (~> 0.0)
139
+ parallel (1.20.1)
140
+ parser (3.0.0.0)
141
+ ast (~> 2.4.1)
142
+ pastel (0.8.0)
143
+ tty-color (~> 0.5)
144
+ pathutil (0.16.2)
145
+ forwardable-extended (~> 2.6)
146
+ persistent_http (1.0.6)
147
+ gene_pool (>= 1.3)
148
+ persistent_httparty (0.1.2)
149
+ httparty (~> 0.9)
150
+ persistent_http (< 2)
151
+ process_exists (0.2.0)
152
+ protobuf-cucumber (3.10.8)
153
+ activesupport (>= 3.2)
154
+ middleware
155
+ thor
156
+ thread_safe
157
+ pry (0.13.1)
158
+ coderay (~> 1.1)
159
+ method_source (~> 1.0)
160
+ pry (0.13.1-java)
161
+ coderay (~> 1.1)
162
+ method_source (~> 1.0)
163
+ spoon (~> 0.0)
164
+ public_suffix (4.0.6)
165
+ rainbow (3.0.0)
166
+ rake (12.3.3)
167
+ rb-fsevent (0.10.4)
168
+ rb-inotify (0.10.1)
169
+ ffi (~> 1.0)
170
+ regexp_parser (2.0.3)
171
+ rexml (3.2.4)
172
+ rouge (3.26.0)
173
+ rspec (3.10.0)
174
+ rspec-core (~> 3.10.0)
175
+ rspec-expectations (~> 3.10.0)
176
+ rspec-mocks (~> 3.10.0)
177
+ rspec-core (3.10.0)
178
+ rspec-support (~> 3.10.0)
179
+ rspec-expectations (3.10.0)
180
+ diff-lcs (>= 1.2.0, < 2.0)
181
+ rspec-support (~> 3.10.0)
182
+ rspec-mocks (3.10.0)
183
+ diff-lcs (>= 1.2.0, < 2.0)
184
+ rspec-support (~> 3.10.0)
185
+ rspec-support (3.10.0)
186
+ rubocop (1.8.1)
187
+ parallel (~> 1.10)
188
+ parser (>= 3.0.0.0)
189
+ rainbow (>= 2.2.2, < 4.0)
190
+ regexp_parser (>= 1.8, < 3.0)
191
+ rexml
192
+ rubocop-ast (>= 1.2.0, < 2.0)
193
+ ruby-progressbar (~> 1.7)
194
+ unicode-display_width (>= 1.4.0, < 3.0)
195
+ rubocop-ast (1.4.0)
196
+ parser (>= 2.7.1.5)
197
+ ruby-progressbar (1.11.0)
198
+ safe_yaml (1.0.5)
199
+ sassc (2.4.0)
200
+ ffi (~> 1.9)
201
+ shellany (0.0.1)
202
+ spoon (0.0.6)
203
+ ffi
204
+ sys-uname (1.2.2)
205
+ ffi (~> 1.1)
206
+ terminal-table (2.0.0)
207
+ unicode-display_width (~> 1.1, >= 1.1.1)
208
+ thor (1.0.1)
209
+ thread_safe (0.3.6)
210
+ thread_safe (0.3.6-java)
211
+ tty-color (0.6.0)
212
+ tty-command (0.10.0)
213
+ pastel (~> 0.8)
214
+ tzinfo (1.2.8)
215
+ thread_safe (~> 0.1)
216
+ unicode-display_width (1.7.0)
217
+ yaml-lint (0.0.10)
218
+ yard (0.9.25)
219
+ zeitwerk (2.4.1)
220
+
221
+ PLATFORMS
222
+ java
223
+ ruby
224
+
225
+ DEPENDENCIES
226
+ cucumber
227
+ cuke_linter (~> 1.2)
228
+ guard-shell
229
+ guard-yard
230
+ httparty
231
+ jekyll (~> 4.2)
232
+ just-the-docs (~> 0.3)
233
+ kramdown-parser-gfm
234
+ openhab-scripting!
235
+ persistent_httparty
236
+ process_exists
237
+ rake (~> 12.0)
238
+ rspec
239
+ rubocop (~> 1.8)
240
+ tty-command
241
+ yaml-lint
242
+ yard
243
+
244
+ BUNDLED WITH
245
+ 2.2.4
data/Guardfile ADDED
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ # A sample Guardfile
4
+ # More info at https://github.com/guard/guard#readme
5
+
6
+ ## Uncomment and set this to only include directories you want to watch
7
+ # directories %w(app lib config test spec features) \
8
+ # .select{|d| Dir.exist?(d) ? d : UI.warning("Directory #{d} does not exist")}
9
+
10
+ ## Note: if you are using the `directories` clause above and you are not
11
+ ## watching the project directory ('.'), then you will want to move
12
+ ## the Guardfile to a watched dir and symlink it back, e.g.
13
+ #
14
+ # $ mkdir config
15
+ # $ mv Guardfile config/
16
+ # $ ln -s config/Guardfile .
17
+ #
18
+ # and, you'll have to watch "config/Guardfile" instead of "Guardfile"
19
+
20
+ group :docs do
21
+ guard 'yard' do
22
+ watch(%r{app/.+\.rb})
23
+ watch(%r{lib/.+\.rb})
24
+ watch(%r{ext/.+\.c})
25
+ end
26
+
27
+ # Add files and commands to this file, like the example:
28
+ # watch(%r{file/path}) { `command(s)` }
29
+ #
30
+ guard :shell do
31
+ watch(%r{lib/.+\.rb}) do |_modified|
32
+ `yard stats --list-undoc`
33
+ end
34
+ end
35
+ end
data/LICENSE ADDED
@@ -0,0 +1,277 @@
1
+ Eclipse Public License - v 2.0
2
+
3
+ THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
4
+ PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION
5
+ OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
6
+
7
+ 1. DEFINITIONS
8
+
9
+ "Contribution" means:
10
+
11
+ a) in the case of the initial Contributor, the initial content
12
+ Distributed under this Agreement, and
13
+
14
+ b) in the case of each subsequent Contributor:
15
+ i) changes to the Program, and
16
+ ii) additions to the Program;
17
+ where such changes and/or additions to the Program originate from
18
+ and are Distributed by that particular Contributor. A Contribution
19
+ "originates" from a Contributor if it was added to the Program by
20
+ such Contributor itself or anyone acting on such Contributor's behalf.
21
+ Contributions do not include changes or additions to the Program that
22
+ are not Modified Works.
23
+
24
+ "Contributor" means any person or entity that Distributes the Program.
25
+
26
+ "Licensed Patents" mean patent claims licensable by a Contributor which
27
+ are necessarily infringed by the use or sale of its Contribution alone
28
+ or when combined with the Program.
29
+
30
+ "Program" means the Contributions Distributed in accordance with this
31
+ Agreement.
32
+
33
+ "Recipient" means anyone who receives the Program under this Agreement
34
+ or any Secondary License (as applicable), including Contributors.
35
+
36
+ "Derivative Works" shall mean any work, whether in Source Code or other
37
+ form, that is based on (or derived from) the Program and for which the
38
+ editorial revisions, annotations, elaborations, or other modifications
39
+ represent, as a whole, an original work of authorship.
40
+
41
+ "Modified Works" shall mean any work in Source Code or other form that
42
+ results from an addition to, deletion from, or modification of the
43
+ contents of the Program, including, for purposes of clarity any new file
44
+ in Source Code form that contains any contents of the Program. Modified
45
+ Works shall not include works that contain only declarations,
46
+ interfaces, types, classes, structures, or files of the Program solely
47
+ in each case in order to link to, bind by name, or subclass the Program
48
+ or Modified Works thereof.
49
+
50
+ "Distribute" means the acts of a) distributing or b) making available
51
+ in any manner that enables the transfer of a copy.
52
+
53
+ "Source Code" means the form of a Program preferred for making
54
+ modifications, including but not limited to software source code,
55
+ documentation source, and configuration files.
56
+
57
+ "Secondary License" means either the GNU General Public License,
58
+ Version 2.0, or any later versions of that license, including any
59
+ exceptions or additional permissions as identified by the initial
60
+ Contributor.
61
+
62
+ 2. GRANT OF RIGHTS
63
+
64
+ a) Subject to the terms of this Agreement, each Contributor hereby
65
+ grants Recipient a non-exclusive, worldwide, royalty-free copyright
66
+ license to reproduce, prepare Derivative Works of, publicly display,
67
+ publicly perform, Distribute and sublicense the Contribution of such
68
+ Contributor, if any, and such Derivative Works.
69
+
70
+ b) Subject to the terms of this Agreement, each Contributor hereby
71
+ grants Recipient a non-exclusive, worldwide, royalty-free patent
72
+ license under Licensed Patents to make, use, sell, offer to sell,
73
+ import and otherwise transfer the Contribution of such Contributor,
74
+ if any, in Source Code or other form. This patent license shall
75
+ apply to the combination of the Contribution and the Program if, at
76
+ the time the Contribution is added by the Contributor, such addition
77
+ of the Contribution causes such combination to be covered by the
78
+ Licensed Patents. The patent license shall not apply to any other
79
+ combinations which include the Contribution. No hardware per se is
80
+ licensed hereunder.
81
+
82
+ c) Recipient understands that although each Contributor grants the
83
+ licenses to its Contributions set forth herein, no assurances are
84
+ provided by any Contributor that the Program does not infringe the
85
+ patent or other intellectual property rights of any other entity.
86
+ Each Contributor disclaims any liability to Recipient for claims
87
+ brought by any other entity based on infringement of intellectual
88
+ property rights or otherwise. As a condition to exercising the
89
+ rights and licenses granted hereunder, each Recipient hereby
90
+ assumes sole responsibility to secure any other intellectual
91
+ property rights needed, if any. For example, if a third party
92
+ patent license is required to allow Recipient to Distribute the
93
+ Program, it is Recipient's responsibility to acquire that license
94
+ before distributing the Program.
95
+
96
+ d) Each Contributor represents that to its knowledge it has
97
+ sufficient copyright rights in its Contribution, if any, to grant
98
+ the copyright license set forth in this Agreement.
99
+
100
+ e) Notwithstanding the terms of any Secondary License, no
101
+ Contributor makes additional grants to any Recipient (other than
102
+ those set forth in this Agreement) as a result of such Recipient's
103
+ receipt of the Program under the terms of a Secondary License
104
+ (if permitted under the terms of Section 3).
105
+
106
+ 3. REQUIREMENTS
107
+
108
+ 3.1 If a Contributor Distributes the Program in any form, then:
109
+
110
+ a) the Program must also be made available as Source Code, in
111
+ accordance with section 3.2, and the Contributor must accompany
112
+ the Program with a statement that the Source Code for the Program
113
+ is available under this Agreement, and informs Recipients how to
114
+ obtain it in a reasonable manner on or through a medium customarily
115
+ used for software exchange; and
116
+
117
+ b) the Contributor may Distribute the Program under a license
118
+ different than this Agreement, provided that such license:
119
+ i) effectively disclaims on behalf of all other Contributors all
120
+ warranties and conditions, express and implied, including
121
+ warranties or conditions of title and non-infringement, and
122
+ implied warranties or conditions of merchantability and fitness
123
+ for a particular purpose;
124
+
125
+ ii) effectively excludes on behalf of all other Contributors all
126
+ liability for damages, including direct, indirect, special,
127
+ incidental and consequential damages, such as lost profits;
128
+
129
+ iii) does not attempt to limit or alter the recipients' rights
130
+ in the Source Code under section 3.2; and
131
+
132
+ iv) requires any subsequent distribution of the Program by any
133
+ party to be under a license that satisfies the requirements
134
+ of this section 3.
135
+
136
+ 3.2 When the Program is Distributed as Source Code:
137
+
138
+ a) it must be made available under this Agreement, or if the
139
+ Program (i) is combined with other material in a separate file or
140
+ files made available under a Secondary License, and (ii) the initial
141
+ Contributor attached to the Source Code the notice described in
142
+ Exhibit A of this Agreement, then the Program may be made available
143
+ under the terms of such Secondary Licenses, and
144
+
145
+ b) a copy of this Agreement must be included with each copy of
146
+ the Program.
147
+
148
+ 3.3 Contributors may not remove or alter any copyright, patent,
149
+ trademark, attribution notices, disclaimers of warranty, or limitations
150
+ of liability ("notices") contained within the Program from any copy of
151
+ the Program which they Distribute, provided that Contributors may add
152
+ their own appropriate notices.
153
+
154
+ 4. COMMERCIAL DISTRIBUTION
155
+
156
+ Commercial distributors of software may accept certain responsibilities
157
+ with respect to end users, business partners and the like. While this
158
+ license is intended to facilitate the commercial use of the Program,
159
+ the Contributor who includes the Program in a commercial product
160
+ offering should do so in a manner which does not create potential
161
+ liability for other Contributors. Therefore, if a Contributor includes
162
+ the Program in a commercial product offering, such Contributor
163
+ ("Commercial Contributor") hereby agrees to defend and indemnify every
164
+ other Contributor ("Indemnified Contributor") against any losses,
165
+ damages and costs (collectively "Losses") arising from claims, lawsuits
166
+ and other legal actions brought by a third party against the Indemnified
167
+ Contributor to the extent caused by the acts or omissions of such
168
+ Commercial Contributor in connection with its distribution of the Program
169
+ in a commercial product offering. The obligations in this section do not
170
+ apply to any claims or Losses relating to any actual or alleged
171
+ intellectual property infringement. In order to qualify, an Indemnified
172
+ Contributor must: a) promptly notify the Commercial Contributor in
173
+ writing of such claim, and b) allow the Commercial Contributor to control,
174
+ and cooperate with the Commercial Contributor in, the defense and any
175
+ related settlement negotiations. The Indemnified Contributor may
176
+ participate in any such claim at its own expense.
177
+
178
+ For example, a Contributor might include the Program in a commercial
179
+ product offering, Product X. That Contributor is then a Commercial
180
+ Contributor. If that Commercial Contributor then makes performance
181
+ claims, or offers warranties related to Product X, those performance
182
+ claims and warranties are such Commercial Contributor's responsibility
183
+ alone. Under this section, the Commercial Contributor would have to
184
+ defend claims against the other Contributors related to those performance
185
+ claims and warranties, and if a court requires any other Contributor to
186
+ pay any damages as a result, the Commercial Contributor must pay
187
+ those damages.
188
+
189
+ 5. NO WARRANTY
190
+
191
+ EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
192
+ PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS"
193
+ BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR
194
+ IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF
195
+ TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR
196
+ PURPOSE. Each Recipient is solely responsible for determining the
197
+ appropriateness of using and distributing the Program and assumes all
198
+ risks associated with its exercise of rights under this Agreement,
199
+ including but not limited to the risks and costs of program errors,
200
+ compliance with applicable laws, damage to or loss of data, programs
201
+ or equipment, and unavailability or interruption of operations.
202
+
203
+ 6. DISCLAIMER OF LIABILITY
204
+
205
+ EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
206
+ PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS
207
+ SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
208
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST
209
+ PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
210
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
211
+ ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE
212
+ EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE
213
+ POSSIBILITY OF SUCH DAMAGES.
214
+
215
+ 7. GENERAL
216
+
217
+ If any provision of this Agreement is invalid or unenforceable under
218
+ applicable law, it shall not affect the validity or enforceability of
219
+ the remainder of the terms of this Agreement, and without further
220
+ action by the parties hereto, such provision shall be reformed to the
221
+ minimum extent necessary to make such provision valid and enforceable.
222
+
223
+ If Recipient institutes patent litigation against any entity
224
+ (including a cross-claim or counterclaim in a lawsuit) alleging that the
225
+ Program itself (excluding combinations of the Program with other software
226
+ or hardware) infringes such Recipient's patent(s), then such Recipient's
227
+ rights granted under Section 2(b) shall terminate as of the date such
228
+ litigation is filed.
229
+
230
+ All Recipient's rights under this Agreement shall terminate if it
231
+ fails to comply with any of the material terms or conditions of this
232
+ Agreement and does not cure such failure in a reasonable period of
233
+ time after becoming aware of such noncompliance. If all Recipient's
234
+ rights under this Agreement terminate, Recipient agrees to cease use
235
+ and distribution of the Program as soon as reasonably practicable.
236
+ However, Recipient's obligations under this Agreement and any licenses
237
+ granted by Recipient relating to the Program shall continue and survive.
238
+
239
+ Everyone is permitted to copy and distribute copies of this Agreement,
240
+ but in order to avoid inconsistency the Agreement is copyrighted and
241
+ may only be modified in the following manner. The Agreement Steward
242
+ reserves the right to publish new versions (including revisions) of
243
+ this Agreement from time to time. No one other than the Agreement
244
+ Steward has the right to modify this Agreement. The Eclipse Foundation
245
+ is the initial Agreement Steward. The Eclipse Foundation may assign the
246
+ responsibility to serve as the Agreement Steward to a suitable separate
247
+ entity. Each new version of the Agreement will be given a distinguishing
248
+ version number. The Program (including Contributions) may always be
249
+ Distributed subject to the version of the Agreement under which it was
250
+ received. In addition, after a new version of the Agreement is published,
251
+ Contributor may elect to Distribute the Program (including its
252
+ Contributions) under the new version.
253
+
254
+ Except as expressly stated in Sections 2(a) and 2(b) above, Recipient
255
+ receives no rights or licenses to the intellectual property of any
256
+ Contributor under this Agreement, whether expressly, by implication,
257
+ estoppel or otherwise. All rights in the Program not expressly granted
258
+ under this Agreement are reserved. Nothing in this Agreement is intended
259
+ to be enforceable by any entity that is not a Contributor or Recipient.
260
+ No third-party beneficiary rights are created under this Agreement.
261
+
262
+ Exhibit A - Form of Secondary Licenses Notice
263
+
264
+ "This Source Code may also be made available under the following
265
+ Secondary Licenses when the conditions for such availability set forth
266
+ in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),
267
+ version(s), and exceptions or additional permissions here}."
268
+
269
+ Simply including a copy of this Agreement, including this Exhibit A
270
+ is not sufficient to license the Source Code under Secondary Licenses.
271
+
272
+ If it is not possible or desirable to put the notice in a particular
273
+ file, then You may include the notice in a location (such as a LICENSE
274
+ file in a relevant directory) where a recipient would be likely to
275
+ look for such a notice.
276
+
277
+ You may add additional accurate notices of copyright ownership.