├── .gitignore
├── .github
└── workflows
│ ├── test.yml
│ ├── snapshot.yml
│ ├── doc-build.yml
│ └── release.yml
├── bin
└── run_generative_tests.clj
├── project.clj
├── README.md
├── src
├── test
│ └── clojure
│ │ └── clojure
│ │ └── data
│ │ └── fressian_test.clj
└── main
│ └── clojure
│ └── clojure
│ └── data
│ └── fressian.clj
├── pom.xml
├── LICENSE
└── epl-v10.html
/.gitignore:
--------------------------------------------------------------------------------
1 | target
2 |
--------------------------------------------------------------------------------
/.github/workflows/test.yml:
--------------------------------------------------------------------------------
1 | name: Test
2 |
3 | on: [push]
4 |
5 | jobs:
6 | call-test:
7 | uses: clojure/build.ci/.github/workflows/test.yml@master
8 |
--------------------------------------------------------------------------------
/.github/workflows/snapshot.yml:
--------------------------------------------------------------------------------
1 | name: Snapshot on demand
2 |
3 | on: [workflow_dispatch]
4 |
5 | jobs:
6 | call-snapshot:
7 | uses: clojure/build.ci/.github/workflows/snapshot.yml@master
8 | secrets: inherit
9 |
--------------------------------------------------------------------------------
/.github/workflows/doc-build.yml:
--------------------------------------------------------------------------------
1 | name: Build API Docs
2 |
3 | on:
4 | workflow_dispatch:
5 |
6 | jobs:
7 | call-doc-build-workflow:
8 | uses: clojure/build.ci/.github/workflows/doc-build.yml@master
9 | with:
10 | project: clojure/data.fressian
11 |
--------------------------------------------------------------------------------
/bin/run_generative_tests.clj:
--------------------------------------------------------------------------------
1 | (set! *warn-on-reflection* true)
2 | (when-not (System/getProperty "clojure.test.generative.msec")
3 | (System/setProperty "clojure.test.generative.msec" "30000"))
4 | (require '[clojure.test.generative.runner :as runner])
5 | (runner/-main "src/test")
6 |
--------------------------------------------------------------------------------
/project.clj:
--------------------------------------------------------------------------------
1 | (defproject org.clojure/data.fressian "0.2.1-SNAPSHOT"
2 | :description "Read/write Fressian from Clojure."
3 | :url "https://github.com/clojure/data.fressian"
4 | :license {:name "Eclipse Public License - v 1.0"
5 | :url "http://www.eclipse.org/legal/epl-v10.html"}
6 | :dependencies [[org.clojure/clojure "1.9.0"]
7 | [org.fressian/fressian "0.6.8"]
8 | [org.clojure/test.generative "1.1.0" :scope "test"]]
9 | :jvm-opts ["-Xmx2g" "-server"])
10 |
--------------------------------------------------------------------------------
/.github/workflows/release.yml:
--------------------------------------------------------------------------------
1 | name: Release on demand
2 |
3 | on:
4 | workflow_dispatch:
5 | inputs:
6 | releaseVersion:
7 | description: "Version to release"
8 | required: true
9 | snapshotVersion:
10 | description: "Snapshot version after release"
11 | required: true
12 |
13 | jobs:
14 | call-release:
15 | uses: clojure/build.ci/.github/workflows/release.yml@master
16 | with:
17 | releaseVersion: ${{ github.event.inputs.releaseVersion }}
18 | snapshotVersion: ${{ github.event.inputs.snapshotVersion }}
19 | secrets: inherit
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # data.fressian
2 |
3 | Read and write fressian data. See https://github.com/Datomic/fressian/wiki
4 |
5 | # Releases and Dependency Information
6 |
7 | [CLI/`deps.edn`](https://clojure.org/reference/deps_edn) dependency information:
8 | ```clojure
9 | org.clojure/data.fressian {:mvn/version "1.1.0"}
10 | ```
11 |
12 | [Leiningen](https://github.com/technomancy/leiningen) dependency information:
13 |
14 | [org.clojure/data.fressian "1.1.0"]
15 |
16 | [Maven](http://maven.apache.org/) dependency information:
17 |
18 |
19 | org.clojure
20 | data.fressian
21 | 1.1.0
22 |
23 |
24 | Other versions:
25 |
26 | * [All Released Versions](https://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22org.clojure%22%20AND%20a%3A%22data.fressian%22)
27 | * [Development Snapshots](https://oss.sonatype.org/index.html#nexus-search;gav~org.clojure~data.fressian~~~)
28 | * [Development Snapshot Repositories](https://dev.clojure.org/display/doc/Maven+Settings+and+Repositories)
29 |
30 | # Usage
31 |
32 | [API Documentation](https://clojure.github.io/data.fressian/)
33 |
34 | Basic examples:
35 |
36 | ```clojure
37 | (require '[clojure.data.fressian :as fress])
38 |
39 | ;; read / write objects
40 | (fress/write x)
41 | (fress/read)
42 |
43 | ;; create reader/write on input/output streams
44 | (fress/create-reader is)
45 | (fress/create-writer os)
46 | ```
47 |
48 | It is also possible to create custom tags and handlers. For more information see [Creating custom handlers](https://github.com/clojure/data.fressian/wiki/Creating-custom-handlers) for details.
49 |
50 | # Developer Information
51 |
52 | * [GitHub project](https://github.com/clojure/data.fressian)
53 | * [Bug Tracker](https://clojure.atlassian.net/browse/DFRS)
54 | * [Continuous Integration](https://github.com/clojure/data.fressian/actions/workflows/test.yml)
55 |
56 |
57 | # Copyright and License
58 |
59 | Copyright (c) Rich Hickey, Nu North America, Inc. All rights reserved. The use and
60 | distribution terms for this software are covered by the Eclipse Public
61 | License 1.0 (https://opensource.org/license/epl-1-0/) witch can
62 | be found in the file epl-v10.html at the root of this distribution.
63 | By using this software in any fashion, you are agreeing to be bound by
64 | the terms of this license. You must not remove this notice, or any
65 | other, from this software.
66 |
--------------------------------------------------------------------------------
/src/test/clojure/clojure/data/fressian_test.clj:
--------------------------------------------------------------------------------
1 | ;; Copyright (c) Rich Hickey, Cognitect, Inc. All rights reserved. The use
2 | ;; and distribution terms for this software are covered by the Eclipse
3 | ;; Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php)
4 | ;; which can be found in the file epl-v10.html at the root of this
5 | ;; distribution. By using this software in any fashion, you are
6 | ;; agreeing to be bound by the terms of this license. You must not
7 | ;; remove this notice, or any other, from this software.
8 |
9 | (ns clojure.data.fressian-test
10 | (:import clojure.lang.Ratio)
11 | (:require
12 | [clojure.data.fressian :as fress]
13 | [clojure.data.generators :as gen]
14 | [clojure.test.generative :refer (defspec)]))
15 |
16 | (defn roundtrip
17 | [x]
18 | (-> x fress/write fress/read))
19 |
20 | (def clojure-fressianable
21 | gen/anything)
22 |
23 | (defn gen-ratio
24 | []
25 | (Ratio. (gen/bigdec) (gen/bigdec)))
26 |
27 | (def keyword-pool
28 | "Pool keywords so generation does not exhaust permgen"
29 | (delay
30 | (binding [gen/*rnd* (java.util.Random. 42)]
31 | (into [] (repeatedly 1000 gen/keyword)))))
32 |
33 | (defn keyword-from-pool
34 | []
35 | (gen/rand-nth @keyword-pool))
36 |
37 | (def symbol-pool
38 | "Pool symbols so generation does not exhaust permgen"
39 | (delay
40 | (binding [gen/*rnd* (java.util.Random. 42)]
41 | (into [] (repeatedly 1000 gen/symbol)))))
42 |
43 | (defn symbol-from-pool
44 | []
45 | (gen/rand-nth @keyword-pool))
46 |
47 | (defrecord ExampleRecord [^long f1 ^char f2 f3])
48 |
49 | (defn gen-example-record
50 | []
51 | (ExampleRecord. (gen/long) (gen/char) (keyword-from-pool)))
52 |
53 | (defn data-with-handler
54 | "Generate data that has data.fressian specific handler"
55 | []
56 | (gen/one-of gen/char
57 | gen/ratio
58 | gen/bigint
59 | gen-example-record
60 | symbol-from-pool
61 | keyword-from-pool))
62 |
63 | (defspec test-roundtrip-anything
64 | roundtrip
65 | [^{:tag `clojure-fressianable} o]
66 | (when-not (= o %)
67 | (throw (ex-info "object != readback" {:object o :readback %})))
68 | (when-not (= % o)
69 | (throw (ex-info "readback != object" {:object o :readback %})))
70 | ;; metadata not supported yet
71 | #_(when-not (= (meta o) (meta %))
72 | (throw (ex-info "(meta obj) != (meta readback)" {:object o :readback %}))))
73 |
74 | (defspec test-roundtrip-handlers
75 | roundtrip
76 | [^{:tag `data-with-handler} o])
77 |
78 |
79 |
--------------------------------------------------------------------------------
/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 4.0.0
4 | data.fressian
5 | 1.1.1-SNAPSHOT
6 | data.fressian
7 | Read/write Fressian from Clojure
8 | https://github.com/clojure/data.fressian
9 |
10 |
11 |
12 | Stuart Halloway
13 | stu@cognitect.com
14 | http://cognitect.com/
15 | -5
16 |
17 |
18 |
19 |
20 | org.clojure
21 | pom.contrib
22 | 1.3.0
23 |
24 |
25 |
26 | scm:git:git@github.com:clojure/data.fressian
27 | scm:git:git@github.com:clojure/data.fressian
28 | git@github.com:clojure/data.fressian.git
29 | HEAD
30 |
31 |
32 |
33 |
34 | org.clojure
35 | clojure
36 | 1.9.0
37 |
38 |
39 | org.fressian
40 | fressian
41 | 0.6.8
42 |
43 |
44 | org.clojure
45 | test.generative
46 | 1.1.0
47 | test
48 |
49 |
50 |
51 |
52 |
53 | ${basedir}/src
54 |
55 |
56 | com.theoryinpractise
57 | clojure-maven-plugin
58 | 1.7.1
59 |
60 |
61 | src/main/clojure
62 |
63 |
64 | src/test/clojure
65 |
66 | bin/run_generative_tests.clj
67 |
68 | !.*
69 |
70 | true
71 |
72 |
73 |
74 | test-clojure
75 | test
76 |
77 | test
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
--------------------------------------------------------------------------------
/src/main/clojure/clojure/data/fressian.clj:
--------------------------------------------------------------------------------
1 | ;; Copyright (c) Rich Hickey, Cognitect, Inc. All rights reserved. The use
2 | ;; and distribution terms for this software are covered by the Eclipse
3 | ;; Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php)
4 | ;; which can be found in the file epl-v10.html at the root of this
5 | ;; distribution. By using this software in any fashion, you are
6 | ;; agreeing to be bound by the terms of this license. You must not
7 | ;; remove this notice, or any other, from this software.
8 |
9 | (ns ^{:author "Stuart Halloway"
10 | :doc "Read/write fressian data. See http://www.edn-format.org/"}
11 | clojure.data.fressian
12 | (:refer-clojure :exclude (read))
13 | (:require
14 | [clojure.java.io :as io]
15 | [clojure.string :as str])
16 | (:import
17 | [clojure.lang IRecord Ratio]
18 | [java.io InputStream OutputStream]
19 | [java.nio ByteBuffer]
20 | [org.fressian FressianWriter StreamingWriter FressianReader TaggedObject Writer Reader]
21 | [org.fressian.handlers WriteHandler ReadHandler ILookup WriteHandlerLookup]
22 | [org.fressian.impl ByteBufferInputStream BytesOutputStream InheritanceLookup]))
23 |
24 | (set! *warn-on-reflection* true)
25 |
26 | (defn- write-named [tag ^Writer w s]
27 | (.writeTag w tag 2)
28 | (.writeObject w (namespace s) true)
29 | (.writeObject w (name s) true))
30 |
31 |
32 | (defn- ^ByteBuffer bytestream->buf
33 | "Return a readable buf over the current internal state of a
34 | BytesOutputStream."
35 | [^BytesOutputStream stream]
36 | (ByteBuffer/wrap (.internalBuffer stream) 0 (.length stream)))
37 |
38 | (defprotocol FressianReadable
39 | (to-input-stream [obj] "Implementation detail."))
40 |
41 | (extend-protocol FressianReadable
42 | Object
43 | (to-input-stream
44 | [obj]
45 | (io/input-stream obj))
46 |
47 | ByteBuffer
48 | (to-input-stream
49 | [bb]
50 | (io/input-stream (ByteBufferInputStream. bb))))
51 |
52 | (defn associative-lookup
53 | "Build an ILookup from an associative collection."
54 | [o]
55 | (reify ILookup
56 | (valAt [_ k] (get o k))))
57 |
58 | (defn inheritance-lookup
59 | "Returns an inheritance aware lookup based on lookup that will match
60 | subclasses as well as exact matches. Will walk inheritance hierarchy
61 | once per new type encountered to find the best match, then cache
62 | results."
63 | [lookup]
64 | (InheritanceLookup. lookup))
65 |
66 | (defn- class-sym
67 | "Returns the class name of inst as a symbol."
68 | [^Object inst]
69 | (-> inst (.getClass) (.getName) symbol))
70 |
71 | (def clojure-write-handlers
72 | "Standard set of write handlers for Clojure data."
73 | {Character
74 | {"char"
75 | (reify WriteHandler
76 | (write [_ w ch]
77 | (.writeTag w "char" 1)
78 | (.writeInt w (int ch))))}
79 | Ratio
80 | {"ratio"
81 | (reify WriteHandler
82 | (write [_ w n]
83 | (.writeTag w "ratio" 2)
84 | (.writeObject w (.numerator ^Ratio n))
85 | (.writeObject w (.denominator ^Ratio n))))}
86 |
87 | IRecord
88 | {"clojure/record"
89 | (reify WriteHandler
90 | (write [_ w rec]
91 | (.writeTag w "record" 2)
92 | (.writeObject w (class-sym rec) true)
93 | (.writeTag w "map" 1)
94 | (.beginClosedList ^StreamingWriter w)
95 | (reduce-kv
96 | (fn [^Writer w k v]
97 | (.writeObject w k true)
98 | (.writeObject w v))
99 | w
100 | rec)
101 | (.endList ^StreamingWriter w)))}
102 |
103 | clojure.lang.Keyword
104 | {"key"
105 | (reify WriteHandler
106 | (write [_ w s]
107 | (write-named "key" w s)))}
108 |
109 | clojure.lang.BigInt
110 | {"bigint"
111 | (reify WriteHandler
112 | (write [this w d]
113 | (let [^BigInteger bi (if (instance? clojure.lang.BigInt d)
114 | (.toBigInteger ^clojure.lang.BigInt d)
115 | d)]
116 | (.writeTag w "bigint" 1)
117 | (.writeBytes w (.toByteArray bi)))))}
118 |
119 | clojure.lang.Symbol
120 | {"sym"
121 | (reify WriteHandler
122 | (write [_ w s]
123 | (write-named "sym" w s)))}})
124 |
125 | (defn field-caching-writer
126 | "Returns a record writer that caches values for keys
127 | matching cache-pred, which is typically specified
128 | as a set, e.g. (field-caching-writer #{:color})"
129 | [cache-pred]
130 | (reify WriteHandler
131 | (write [_ w rec]
132 | (.writeTag w "record" 2)
133 | (.writeObject w (class-sym rec) true)
134 | (.writeTag w "map" 1)
135 | (.beginClosedList ^StreamingWriter w)
136 | (reduce-kv
137 | (fn [^Writer w k v]
138 | (.writeObject w k true)
139 | (.writeObject w v (boolean (cache-pred k))))
140 | w
141 | rec)
142 | (.endList ^StreamingWriter w))))
143 |
144 | (defn- record-map-constructor-name
145 | "Return the map constructor for a record"
146 | [rname]
147 | (let [comps (str/split (str rname) #"\.")]
148 | (symbol (->> (butlast comps) (map #(str/replace % "_" "-"))
149 | (str/join "."))
150 | (str "map->" (last comps)))))
151 |
152 | (def clojure-read-handlers
153 | "Standard set of read handlers for Clojure data."
154 | {"bigint"
155 | (reify ReadHandler
156 | (read [_ rdr tag component-count]
157 | (let [^bytes bibytes (.readObject rdr)]
158 | (bigint (BigInteger. bibytes)))))
159 |
160 | "byte"
161 | (reify ReadHandler (read [_ rdr tag component-count]
162 | (byte (.readObject rdr))))
163 |
164 | "record"
165 | (reify ReadHandler (read [_ rdr tag component-count]
166 | (let [rname (.readObject rdr)
167 | rmap (.readObject rdr)]
168 | (if-let [rcons (resolve (record-map-constructor-name rname))]
169 | (rcons rmap)
170 | (TaggedObject. "record" (into-array Object [rname rmap]))))))
171 |
172 | "char"
173 | (reify ReadHandler (read [_ rdr tag component-count]
174 | (char (.readObject rdr))))
175 |
176 | "ratio"
177 | (reify ReadHandler (read [_ rdr tag component-count]
178 | (Ratio. (biginteger (.readObject rdr))
179 | (biginteger (.readObject rdr)))))
180 | "key"
181 | (reify ReadHandler (read [_ rdr tag component-count]
182 | (keyword (.readObject rdr) (.readObject rdr))))
183 | "sym"
184 | (reify ReadHandler (read [_ rdr tag component-count]
185 | (symbol (.readObject rdr) (.readObject rdr))))
186 | "map"
187 | (reify ReadHandler (read [_ rdr tag component-count]
188 | (let [kvs ^java.util.List (.readObject rdr)]
189 | (if (< (.size kvs) 16)
190 | (clojure.lang.PersistentArrayMap. (.toArray kvs))
191 | (clojure.lang.PersistentHashMap/create (seq kvs))))))})
192 |
193 | (defn ^Writer create-writer
194 | "Create a fressian writer targeting out. Handlers must be
195 | a nested map of type => tag => WriteHandler wrapped with
196 | associative-lookup and inheritance-lookup. See
197 | clojure-write-handlers for an example."
198 | [^OutputStream out & {:keys [handlers]}]
199 | (FressianWriter. out (or handlers (-> clojure-write-handlers associative-lookup inheritance-lookup))))
200 |
201 | (defn ^Reader create-reader
202 | "Create a fressian reader targeting in, which must be compatible
203 | with clojure.java.io/input-stream. Handlers must be a map of
204 | tag => ReadHandler wrapped in associative-lookup. See
205 | clojure-read-handlers for an example."
206 | [^InputStream in & {:keys [handlers checksum?]}]
207 | (FressianReader. in
208 | (or handlers (associative-lookup clojure-read-handlers))
209 | (boolean checksum?)))
210 |
211 | (defn read-object
212 | "Read a single object from a fressian reader."
213 | [^Reader rdr]
214 | (.readObject rdr))
215 |
216 | (defn write-object
217 | "Write a single object to a fressian reader. Returns the reader."
218 | [^Writer writer obj]
219 | (.writeObject writer obj))
220 |
221 | (defn read
222 | "Convenience method for reading a single fressian object.
223 | Takes same options as create-reader. Readable can be
224 | any type supported by clojure.java.io/input-stream, or
225 | a ByteBuffer."
226 | [readable & options]
227 | (.readObject ^Reader (apply create-reader (to-input-stream readable) options)))
228 |
229 | (defn ^ByteBuffer write
230 | "Convenience method for writing a single object. Returns a
231 | byte buffer. Options are the same as for create-reader,
232 | with one additional option. If footer? is specified, will
233 | write a fressian footer after writing the object."
234 | ([obj & options]
235 | (let [{:keys [footer?]} (when options (apply hash-map options))
236 | bos (BytesOutputStream.)
237 | writer ^Writer (apply create-writer bos options)]
238 | (.writeObject writer obj)
239 | (when footer?
240 | (.writeFooter writer))
241 | (bytestream->buf bos))))
242 |
243 | (defn tagged-object?
244 | "Returns true if o is a tagged object, which will occur when
245 | the reader does not recognized a specific type. Use tag
246 | and tagged-value to access the contents of a tagged-object."
247 | [o]
248 | (instance? TaggedObject o))
249 |
250 | (defn tag
251 | "Returns the tag if object is a tagged-object, else nil."
252 | [^TaggedObject obj]
253 | (when (tagged-object? obj)
254 | (.getTag obj)))
255 |
256 | (defn tagged-value
257 | "Returns the value (an Object arrray) wrapped by obj, or nil
258 | if obj is not a tagged object."
259 | [^TaggedObject obj]
260 | (when (tagged-object? obj)
261 | (.getValue obj)))
262 |
263 | (defn ^Writer write-footer
264 | [^Writer writer]
265 | (.writeFooter writer))
266 |
267 | (defn ^Writer begin-closed-list
268 | "Begin writing a fressianed list. To end the list, call end-list.
269 | Used to write sequential data whose size is not known in advance."
270 | [^StreamingWriter writer]
271 | (.beginClosedList writer))
272 |
273 | (defn ^Writer end-list
274 | "Ends a list begun with begin-closed-list."
275 | [^StreamingWriter writer]
276 | (.endList writer))
277 |
278 | (defn ^Writer begin-open-list
279 | "Advanced. Writes fressian code to begin an open list. An
280 | open list can be terminated either by a call to end-list,
281 | or by simply closing the stream. Used to write sequential
282 | data whose size is not known in advance, in contexts where
283 | stream failure can safely be interpreted as end of list."
284 | [^StreamingWriter writer]
285 | (.beginOpenList writer))
286 |
287 |
288 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Eclipse Public License - v 1.0
2 |
3 | THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC
4 | LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM
5 | 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 code and documentation
12 | distributed under this Agreement, and
13 | b) in the case of each subsequent Contributor:
14 | i) changes to the Program, and
15 | ii) additions to the Program;
16 |
17 | where such changes and/or additions to the Program originate from and are
18 | distributed by that particular Contributor. A Contribution 'originates'
19 | from a Contributor if it was added to the Program by such Contributor
20 | itself or anyone acting on such Contributor's behalf. Contributions do not
21 | include additions to the Program which: (i) are separate modules of
22 | software distributed in conjunction with the Program under their own
23 | license agreement, and (ii) are not derivative works of the Program.
24 |
25 | "Contributor" means any person or entity that distributes the Program.
26 |
27 | "Licensed Patents" mean patent claims licensable by a Contributor which are
28 | necessarily infringed by the use or sale of its Contribution alone or when
29 | combined with the Program.
30 |
31 | "Program" means the Contributions distributed in accordance with this
32 | Agreement.
33 |
34 | "Recipient" means anyone who receives the Program under this Agreement,
35 | including all Contributors.
36 |
37 | 2. GRANT OF RIGHTS
38 | a) Subject to the terms of this Agreement, each Contributor hereby grants
39 | Recipient a non-exclusive, worldwide, royalty-free copyright license to
40 | reproduce, prepare derivative works of, publicly display, publicly
41 | perform, distribute and sublicense the Contribution of such Contributor,
42 | if any, and such derivative works, in source code and object code form.
43 | b) Subject to the terms of this Agreement, each Contributor hereby grants
44 | Recipient a non-exclusive, worldwide, royalty-free patent license under
45 | Licensed Patents to make, use, sell, offer to sell, import and otherwise
46 | transfer the Contribution of such Contributor, if any, in source code and
47 | object code form. This patent license shall apply to the combination of
48 | the Contribution and the Program if, at the time the Contribution is
49 | added by the Contributor, such addition of the Contribution causes such
50 | combination to be covered by the Licensed Patents. The patent license
51 | shall not apply to any other combinations which include the Contribution.
52 | No hardware per se is licensed hereunder.
53 | c) Recipient understands that although each Contributor grants the licenses
54 | to its Contributions set forth herein, no assurances are provided by any
55 | Contributor that the Program does not infringe the patent or other
56 | intellectual property rights of any other entity. Each Contributor
57 | disclaims any liability to Recipient for claims brought by any other
58 | entity based on infringement of intellectual property rights or
59 | otherwise. As a condition to exercising the rights and licenses granted
60 | hereunder, each Recipient hereby assumes sole responsibility to secure
61 | any other intellectual property rights needed, if any. For example, if a
62 | third party patent license is required to allow Recipient to distribute
63 | the Program, it is Recipient's responsibility to acquire that license
64 | before distributing the Program.
65 | d) Each Contributor represents that to its knowledge it has sufficient
66 | copyright rights in its Contribution, if any, to grant the copyright
67 | license set forth in this Agreement.
68 |
69 | 3. REQUIREMENTS
70 |
71 | A Contributor may choose to distribute the Program in object code form under
72 | its own license agreement, provided that:
73 |
74 | a) it complies with the terms and conditions of this Agreement; and
75 | b) its license agreement:
76 | i) effectively disclaims on behalf of all Contributors all warranties
77 | and conditions, express and implied, including warranties or
78 | conditions of title and non-infringement, and implied warranties or
79 | conditions of merchantability and fitness for a particular purpose;
80 | ii) effectively excludes on behalf of all Contributors all liability for
81 | damages, including direct, indirect, special, incidental and
82 | consequential damages, such as lost profits;
83 | iii) states that any provisions which differ from this Agreement are
84 | offered by that Contributor alone and not by any other party; and
85 | iv) states that source code for the Program is available from such
86 | Contributor, and informs licensees how to obtain it in a reasonable
87 | manner on or through a medium customarily used for software exchange.
88 |
89 | When the Program is made available in source code form:
90 |
91 | a) it must be made available under this Agreement; and
92 | b) a copy of this Agreement must be included with each copy of the Program.
93 | Contributors may not remove or alter any copyright notices contained
94 | within the Program.
95 |
96 | Each Contributor must identify itself as the originator of its Contribution,
97 | if
98 | any, in a manner that reasonably allows subsequent Recipients to identify the
99 | originator of the Contribution.
100 |
101 | 4. COMMERCIAL DISTRIBUTION
102 |
103 | Commercial distributors of software may accept certain responsibilities with
104 | respect to end users, business partners and the like. While this license is
105 | intended to facilitate the commercial use of the Program, the Contributor who
106 | includes the Program in a commercial product offering should do so in a manner
107 | which does not create potential liability for other Contributors. Therefore,
108 | if a Contributor includes the Program in a commercial product offering, such
109 | Contributor ("Commercial Contributor") hereby agrees to defend and indemnify
110 | every other Contributor ("Indemnified Contributor") against any losses,
111 | damages and costs (collectively "Losses") arising from claims, lawsuits and
112 | other legal actions brought by a third party against the Indemnified
113 | Contributor to the extent caused by the acts or omissions of such Commercial
114 | Contributor in connection with its distribution of the Program in a commercial
115 | product offering. The obligations in this section do not apply to any claims
116 | or Losses relating to any actual or alleged intellectual property
117 | infringement. In order to qualify, an Indemnified Contributor must:
118 | a) promptly notify the Commercial Contributor in writing of such claim, and
119 | b) allow the Commercial Contributor to control, and cooperate with the
120 | Commercial Contributor in, the defense and any related settlement
121 | negotiations. The Indemnified Contributor may participate in any such claim at
122 | its own expense.
123 |
124 | For example, a Contributor might include the Program in a commercial product
125 | offering, Product X. That Contributor is then a Commercial Contributor. If
126 | that Commercial Contributor then makes performance claims, or offers
127 | warranties related to Product X, those performance claims and warranties are
128 | such Commercial Contributor's responsibility alone. Under this section, the
129 | Commercial Contributor would have to defend claims against the other
130 | Contributors related to those performance claims and warranties, and if a
131 | court requires any other Contributor to pay any damages as a result, the
132 | Commercial Contributor must pay those damages.
133 |
134 | 5. NO WARRANTY
135 |
136 | EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN
137 | "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR
138 | IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE,
139 | NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each
140 | Recipient is solely responsible for determining the appropriateness of using
141 | and distributing the Program and assumes all risks associated with its
142 | exercise of rights under this Agreement , including but not limited to the
143 | risks and costs of program errors, compliance with applicable laws, damage to
144 | or loss of data, programs or equipment, and unavailability or interruption of
145 | operations.
146 |
147 | 6. DISCLAIMER OF LIABILITY
148 |
149 | EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY
150 | CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL,
151 | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION
152 | LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
153 | CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
154 | ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE
155 | EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY
156 | OF SUCH DAMAGES.
157 |
158 | 7. GENERAL
159 |
160 | If any provision of this Agreement is invalid or unenforceable under
161 | applicable law, it shall not affect the validity or enforceability of the
162 | remainder of the terms of this Agreement, and without further action by the
163 | parties hereto, such provision shall be reformed to the minimum extent
164 | necessary to make such provision valid and enforceable.
165 |
166 | If Recipient institutes patent litigation against any entity (including a
167 | cross-claim or counterclaim in a lawsuit) alleging that the Program itself
168 | (excluding combinations of the Program with other software or hardware)
169 | infringes such Recipient's patent(s), then such Recipient's rights granted
170 | under Section 2(b) shall terminate as of the date such litigation is filed.
171 |
172 | All Recipient's rights under this Agreement shall terminate if it fails to
173 | comply with any of the material terms or conditions of this Agreement and does
174 | not cure such failure in a reasonable period of time after becoming aware of
175 | such noncompliance. If all Recipient's rights under this Agreement terminate,
176 | Recipient agrees to cease use and distribution of the Program as soon as
177 | reasonably practicable. However, Recipient's obligations under this Agreement
178 | and any licenses granted by Recipient relating to the Program shall continue
179 | and survive.
180 |
181 | Everyone is permitted to copy and distribute copies of this Agreement, but in
182 | order to avoid inconsistency the Agreement is copyrighted and may only be
183 | modified in the following manner. The Agreement Steward reserves the right to
184 | publish new versions (including revisions) of this Agreement from time to
185 | time. No one other than the Agreement Steward has the right to modify this
186 | Agreement. The Eclipse Foundation is the initial Agreement Steward. The
187 | Eclipse Foundation may assign the responsibility to serve as the Agreement
188 | Steward to a suitable separate entity. Each new version of the Agreement will
189 | be given a distinguishing version number. The Program (including
190 | Contributions) may always be distributed subject to the version of the
191 | Agreement under which it was received. In addition, after a new version of the
192 | Agreement is published, Contributor may elect to distribute the Program
193 | (including its Contributions) under the new version. Except as expressly
194 | stated in Sections 2(a) and 2(b) above, Recipient receives no rights or
195 | licenses to the intellectual property of any Contributor under this Agreement,
196 | whether expressly, by implication, estoppel or otherwise. All rights in the
197 | Program not expressly granted under this Agreement are reserved.
198 |
199 | This Agreement is governed by the laws of the State of New York and the
200 | intellectual property laws of the United States of America. No party to this
201 | Agreement will bring a legal action under this Agreement more than one year
202 | after the cause of action arose. Each party waives its rights to a jury trial in
203 | any resulting litigation.
204 |
205 |
206 |
--------------------------------------------------------------------------------
/epl-v10.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Eclipse Public License - Version 1.0
8 |
25 |
26 |
27 |
28 |
29 |
30 | Eclipse Public License - v 1.0
31 |
32 | THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
33 | PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR
34 | DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS
35 | AGREEMENT.
36 |
37 | 1. DEFINITIONS
38 |
39 | "Contribution" means:
40 |
41 | a) in the case of the initial Contributor, the initial
42 | code and documentation distributed under this Agreement, and
43 | b) in the case of each subsequent Contributor:
44 | i) changes to the Program, and
45 | ii) additions to the Program;
46 | where such changes and/or additions to the Program
47 | originate from and are distributed by that particular Contributor. A
48 | Contribution 'originates' from a Contributor if it was added to the
49 | Program by such Contributor itself or anyone acting on such
50 | Contributor's behalf. Contributions do not include additions to the
51 | Program which: (i) are separate modules of software distributed in
52 | conjunction with the Program under their own license agreement, and (ii)
53 | are not derivative works of the Program.
54 |
55 | "Contributor" means any person or entity that distributes
56 | the Program.
57 |
58 | "Licensed Patents" mean patent claims licensable by a
59 | Contributor which are necessarily infringed by the use or sale of its
60 | Contribution alone or when combined with the Program.
61 |
62 | "Program" means the Contributions distributed in accordance
63 | with this Agreement.
64 |
65 | "Recipient" means anyone who receives the Program under
66 | this Agreement, including all Contributors.
67 |
68 | 2. GRANT OF RIGHTS
69 |
70 | a) Subject to the terms of this Agreement, each
71 | Contributor hereby grants Recipient a non-exclusive, worldwide,
72 | royalty-free copyright license to reproduce, prepare derivative works
73 | of, publicly display, publicly perform, distribute and sublicense the
74 | Contribution of such Contributor, if any, and such derivative works, in
75 | source code and object code form.
76 |
77 | b) Subject to the terms of this Agreement, each
78 | Contributor hereby grants Recipient a non-exclusive, worldwide,
79 | royalty-free patent license under Licensed Patents to make, use, sell,
80 | offer to sell, import and otherwise transfer the Contribution of such
81 | Contributor, if any, in source code and object code form. This patent
82 | license shall apply to the combination of the Contribution and the
83 | Program if, at the time the Contribution is added by the Contributor,
84 | such addition of the Contribution causes such combination to be covered
85 | by the Licensed Patents. The patent license shall not apply to any other
86 | combinations which include the Contribution. No hardware per se is
87 | licensed hereunder.
88 |
89 | c) Recipient understands that although each Contributor
90 | grants the licenses to its Contributions set forth herein, no assurances
91 | are provided by any Contributor that the Program does not infringe the
92 | patent or other intellectual property rights of any other entity. Each
93 | Contributor disclaims any liability to Recipient for claims brought by
94 | any other entity based on infringement of intellectual property rights
95 | or otherwise. As a condition to exercising the rights and licenses
96 | granted hereunder, each Recipient hereby assumes sole responsibility to
97 | secure any other intellectual property rights needed, if any. For
98 | example, if a third party patent license is required to allow Recipient
99 | to distribute the Program, it is Recipient's responsibility to acquire
100 | that license before distributing the Program.
101 |
102 | d) Each Contributor represents that to its knowledge it
103 | has sufficient copyright rights in its Contribution, if any, to grant
104 | the copyright license set forth in this Agreement.
105 |
106 | 3. REQUIREMENTS
107 |
108 | A Contributor may choose to distribute the Program in object code
109 | form under its own license agreement, provided that:
110 |
111 | a) it complies with the terms and conditions of this
112 | Agreement; and
113 |
114 | b) its license agreement:
115 |
116 | i) effectively disclaims on behalf of all Contributors
117 | all warranties and conditions, express and implied, including warranties
118 | or conditions of title and non-infringement, and implied warranties or
119 | conditions of merchantability and fitness for a particular purpose;
120 |
121 | ii) effectively excludes on behalf of all Contributors
122 | all liability for damages, including direct, indirect, special,
123 | incidental and consequential damages, such as lost profits;
124 |
125 | iii) states that any provisions which differ from this
126 | Agreement are offered by that Contributor alone and not by any other
127 | party; and
128 |
129 | iv) states that source code for the Program is available
130 | from such Contributor, and informs licensees how to obtain it in a
131 | reasonable manner on or through a medium customarily used for software
132 | exchange.
133 |
134 | When the Program is made available in source code form:
135 |
136 | a) it must be made available under this Agreement; and
137 |
138 | b) a copy of this Agreement must be included with each
139 | copy of the Program.
140 |
141 | Contributors may not remove or alter any copyright notices contained
142 | within the Program.
143 |
144 | Each Contributor must identify itself as the originator of its
145 | Contribution, if any, in a manner that reasonably allows subsequent
146 | Recipients to identify the originator of the Contribution.
147 |
148 | 4. COMMERCIAL DISTRIBUTION
149 |
150 | Commercial distributors of software may accept certain
151 | responsibilities with respect to end users, business partners and the
152 | like. While this license is intended to facilitate the commercial use of
153 | the Program, the Contributor who includes the Program in a commercial
154 | product offering should do so in a manner which does not create
155 | potential liability for other Contributors. Therefore, if a Contributor
156 | includes the Program in a commercial product offering, such Contributor
157 | ("Commercial Contributor") hereby agrees to defend and
158 | indemnify every other Contributor ("Indemnified Contributor")
159 | against any losses, damages and costs (collectively "Losses")
160 | arising from claims, lawsuits and other legal actions brought by a third
161 | party against the Indemnified Contributor to the extent caused by the
162 | acts or omissions of such Commercial Contributor in connection with its
163 | distribution of the Program in a commercial product offering. The
164 | obligations in this section do not apply to any claims or Losses
165 | relating to any actual or alleged intellectual property infringement. In
166 | order to qualify, an Indemnified Contributor must: a) promptly notify
167 | the Commercial Contributor in writing of such claim, and b) allow the
168 | Commercial Contributor to control, and cooperate with the Commercial
169 | Contributor in, the defense and any related settlement negotiations. The
170 | Indemnified Contributor may participate in any such claim at its own
171 | expense.
172 |
173 | For example, a Contributor might include the Program in a commercial
174 | product offering, Product X. That Contributor is then a Commercial
175 | Contributor. If that Commercial Contributor then makes performance
176 | claims, or offers warranties related to Product X, those performance
177 | claims and warranties are such Commercial Contributor's responsibility
178 | alone. Under this section, the Commercial Contributor would have to
179 | defend claims against the other Contributors related to those
180 | performance claims and warranties, and if a court requires any other
181 | Contributor to pay any damages as a result, the Commercial Contributor
182 | must pay those damages.
183 |
184 | 5. NO WARRANTY
185 |
186 | EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
187 | PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
188 | OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION,
189 | ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY
190 | OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
191 | responsible for determining the appropriateness of using and
192 | distributing the Program and assumes all risks associated with its
193 | exercise of rights under this Agreement , including but not limited to
194 | the risks and costs of program errors, compliance with applicable laws,
195 | damage to or loss of data, programs or equipment, and unavailability or
196 | interruption of operations.
197 |
198 | 6. DISCLAIMER OF LIABILITY
199 |
200 | EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT
201 | NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT,
202 | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING
203 | WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF
204 | LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
205 | NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR
206 | DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
207 | HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
208 |
209 | 7. GENERAL
210 |
211 | If any provision of this Agreement is invalid or unenforceable under
212 | applicable law, it shall not affect the validity or enforceability of
213 | the remainder of the terms of this Agreement, and without further action
214 | by the parties hereto, such provision shall be reformed to the minimum
215 | extent necessary to make such provision valid and enforceable.
216 |
217 | If Recipient institutes patent litigation against any entity
218 | (including a cross-claim or counterclaim in a lawsuit) alleging that the
219 | Program itself (excluding combinations of the Program with other
220 | software or hardware) infringes such Recipient's patent(s), then such
221 | Recipient's rights granted under Section 2(b) shall terminate as of the
222 | date such litigation is filed.
223 |
224 | All Recipient's rights under this Agreement shall terminate if it
225 | fails to comply with any of the material terms or conditions of this
226 | Agreement and does not cure such failure in a reasonable period of time
227 | after becoming aware of such noncompliance. If all Recipient's rights
228 | under this Agreement terminate, Recipient agrees to cease use and
229 | distribution of the Program as soon as reasonably practicable. However,
230 | Recipient's obligations under this Agreement and any licenses granted by
231 | Recipient relating to the Program shall continue and survive.
232 |
233 | Everyone is permitted to copy and distribute copies of this
234 | Agreement, but in order to avoid inconsistency the Agreement is
235 | copyrighted and may only be modified in the following manner. The
236 | Agreement Steward reserves the right to publish new versions (including
237 | revisions) of this Agreement from time to time. No one other than the
238 | Agreement Steward has the right to modify this Agreement. The Eclipse
239 | Foundation is the initial Agreement Steward. The Eclipse Foundation may
240 | assign the responsibility to serve as the Agreement Steward to a
241 | suitable separate entity. Each new version of the Agreement will be
242 | given a distinguishing version number. The Program (including
243 | Contributions) may always be distributed subject to the version of the
244 | Agreement under which it was received. In addition, after a new version
245 | of the Agreement is published, Contributor may elect to distribute the
246 | Program (including its Contributions) under the new version. Except as
247 | expressly stated in Sections 2(a) and 2(b) above, Recipient receives no
248 | rights or licenses to the intellectual property of any Contributor under
249 | this Agreement, whether expressly, by implication, estoppel or
250 | otherwise. All rights in the Program not expressly granted under this
251 | Agreement are reserved.
252 |
253 | This Agreement is governed by the laws of the State of New York and
254 | the intellectual property laws of the United States of America. No party
255 | to this Agreement will bring a legal action under this Agreement more
256 | than one year after the cause of action arose. Each party waives its
257 | rights to a jury trial in any resulting litigation.
258 |
259 |
260 |
261 |
262 |
--------------------------------------------------------------------------------