Commit Graph

1238 Commits

Author SHA1 Message Date
Adrian Cole 2edc0ef19d Merge pull request #1056 from jclouds/jclouds-549-retry-after
introduce RetryAfterException + make Nova use it
2012-12-10 16:24:26 -08:00
Everett Toews 0b0373c91f Modernizing the Rackspace Cloud Load Balancers API. Following naming conventions and using PagedIterable. 2012-12-10 12:15:38 -06:00
Adrian Cole b4fd69287f Merge pull request #1059 from jclouds/delegate-with-paths
Delegate with paths
2012-12-09 12:19:36 -08:00
Adrian Cole 00560b3224 Path annotation ignored when endpoint not set on caller 2012-12-09 11:34:30 -08:00
Adrian Cole 99d778c1ca cleaned up unnecessary wrapping of ExecutionException 2012-12-09 11:34:25 -08:00
Ignasi Barrera 89f2f133d4 Remove net.oauth dependency 2012-12-09 19:12:59 +01:00
Adrian Cole 24f8e665d4 added RetryAfterException and placed in default exception handling 2012-12-09 03:00:45 -08:00
Adrian Cole b8eb49f0a9 added rfc822 + iso8601Seconds to DateCodecFactory and simplified ctor 2012-12-09 02:47:09 -08:00
Ignasi Barrera 72deb93570 Fixed decoding of some PKCS1 encoded public keys 2012-12-08 21:49:15 -08:00
Ioannis Canellos b7863ae394 fix issue #1044: Added listener interfaces for Providers and Apis. 2012-12-08 16:55:22 -08:00
Adrian Cole 27dfdd571b fix issue #607: NPE in compareTo method of ResourceMetadataImpl 2012-12-04 22:42:47 -08:00
Adrian Cole 6563ba1ad9 Merge pull request #995 from LeanderBB/openstack-nova-diagnostics
Started work on adding the nova diagnostics command to JClouds
2012-12-04 07:47:31 -08:00
Adrian Cole c30fedec20 updated to employ Reflection.newProxy + AbstractInvocationHandler 2012-12-02 12:27:57 -08:00
Adrian Cole 1001021ecd switched setup annotation to operate on Class to avoid InterruptedExceptions; accomodated OpenJDK behavior change wrt Expect: 100-continue 2012-12-01 18:40:07 -08:00
Adrian Cole ac8be50461 Merge pull request #1017 from jclouds/cleanup-basehttptest
clean up style on base http test class
2012-12-01 15:14:55 -08:00
Adrian Cole 1a0e0e3594 cleaned up clutter in base http tests and converted known failures to skip exceptions 2012-12-01 14:01:18 -08:00
Adrian Cole 6a20e00102 changed to use FlexBase64 from Jason Greene 2012-12-01 10:19:15 -08:00
Leander Bessa Beernaert 38be08eb6b Extends JClouds' OpenStack Nova API with the Diagnostics command
The diagnostics command returns a collection of system information
for the a given server. At the moment, there is no formal
specification for this command. Therefore, it is returned as
a Map of hypervisor specific entries and corresponding values.
More information about the command can be viewed here [1]
in the section "Server Diagnostics".

[1] http://api.openstack.org/api-ref.html
2012-11-30 17:40:12 +00:00
Adrian Cole 1b1bb39deb ensure UTC can be used where GMT is 2012-11-27 11:22:28 -08:00
Adrian Cole 9f95ff1476 Merge pull request #996 from jclouds/undo-serializable
undid Serializable and added checkstyle
2012-11-19 17:45:04 -08:00
Guy Korland 0c38cd584a Avoid NPE in case value is null but contains return true. 2012-11-19 17:35:41 +02:00
Guy Korland 405ca5648a Add missing argumnet in Exception 2012-11-19 17:13:49 +02:00
Adrian Cole 878ec1bcab undid Serializable and added checkstyle InterfaceIsType:allowMarkerInterfaces=false 2012-11-18 09:23:44 -08:00
Andrew Gaul b9e4543cdb Enforce no use of star imports via Checkstyle 2012-11-13 20:51:59 -08:00
Andrew Gaul b16ca139a4 Honor PROPERTY_REQUEST_TIMEOUT in clearContainer 2012-11-13 13:27:18 -08:00
Adrian Cole 0b0d240b4e Merge pull request #981 from jclouds/since-api-version
added ability to test if an api is available based on apiVersion
2012-11-12 17:04:09 -08:00
Andrew Gaul d7380114a6 Enforce use of Atomics.newReference via Checkstyle
Avoids duplicating types.
2012-11-12 11:56:48 -08:00
Adrian Cole 2dc9533e0b added ability to test if an api is available based on apiVersion 2012-11-11 11:07:03 -08:00
Andrew Gaul 3ad36d25d5 Enforce no unnecessary parentheses via Checkstyle 2012-11-10 13:22:12 -08:00
Andrew Gaul cca02ae02d Improve use of Splitter.omitEmptyStrings 2012-11-07 22:30:52 -08:00
Adrian Cole 6352cbccfd Merge pull request #967 from jclouds/better-factory-javadoc
improved javadoc including where to look for alternative syntax
2012-11-07 07:43:44 -08:00
Adrian Cole c7c27e12e2 improved javadoc including where to look for alternative syntax 2012-11-07 12:02:52 -03:00
Adrian Cole 489783d5c3 renamed syntax of base64 url-safe to be consistent with guava 14 + fixed bad import from prior PR 2012-11-07 10:43:56 -03:00
Adrian Cole 64a8fd0cbb Merge pull request #961 from andrewgaul/checkstyle-collection-helpers
Enforce use of Collection helpers via Checkstyle
2012-11-05 11:38:49 -08:00
Andrew Gaul 3d191253ec Enforce use of Collection helpers via Checkstyle
This ensures that we do not repeat the type name.  Some instances remain
due to auto-generated code in dmtf/cim/Cim*.
2012-11-04 20:45:49 -08:00
Andrew Gaul 9d643b569a Enforce a single variable declaration per line 2012-11-04 17:37:16 -08:00
Adrian Cole c00ef4c941 Merge pull request #956 from andrewgaul/checkstyle-illegal-throws
Enforce no illegal throws via Checkstyle
2012-11-04 17:14:14 -08:00
Andrew Gaul 41154d552c Enforce no illegal throws via Checkstyle
Also remove a stray unused import.
2012-11-04 15:48:44 -08:00
Adrian Cole 2c900d1bab Issue 1120: support base64 encode/decode for url applications 2012-11-04 15:38:13 -08:00
Andrew Gaul 0761874578 Prefer Assert.fail over assert
The former cannot be disabled.
2012-11-03 14:51:52 -07:00
Andrew Gaul 08b9982384 Enforce modifier order via Checkstyle
Also fix violations, via:

find -name \*.java | xargs sed -i 's/final static/static final/'
find -name \*.java | xargs sed -i 's/static private/private static/'
find -name \*.java | xargs sed -i 's/static abstract/abstract static/'
2012-11-01 20:01:30 -07:00
Andrew Gaul 88d53b8792 Enforce no empty statements via Checkstyle 2012-11-01 18:59:18 -07:00
Andrew Gaul 35ce78f15a Correct typos 2012-11-01 13:25:44 -07:00
Adrian Cole 4c72c5c803 Merge pull request #927 from iocanel/jclouds-osgi-fixes
Jclouds osgi fixes
2012-11-01 13:12:01 -07:00
Ioannis Canellos f76b67ac33 Specified a wider version range for rocoto. 2012-10-31 11:10:57 +02:00
Ioannis Canellos f49cca46f0 MetadataBundleListener now works with multiple providers/apis per bundle. Added a class assignable check in MetadataBundleListener. Added unit test for MetadataBundleListener. Fixed spelling and formatting of MetadataBundleListener and MetadataBundleListenerTest. 2012-10-31 11:10:20 +02:00
Adrian Cole 5da5161485 Merge pull request #909 from andrewgaul/clear-container-timeout-exception
Throw TimeoutException from awaitCompletion
2012-10-30 08:57:20 -07:00
Andrew Gaul 93d69ece2b Enforce newline at end of file via Checkstyle
Also address all warnings, via:

find -name \*.java | while read i; do if [ x`tail -c 1 $i` != x"" ]; then echo >> $i; fi; done
2012-10-29 22:12:44 -07:00
Andrew Gaul 709ca69a2d Enforce that all imports are used via Checkstyle
Also remove all unused imports, via:

mvn checkstyle:checkstyle -Dcheckstyle.output.file=/dev/stdout -Dcheckstyle.output.format=plain | tac | awk -v FS=: '/warning/{print "sed -i " $2 "d " $1}' | while read i; do $i; done
2012-10-29 17:11:08 -07:00
Adrian Cole 3a2905ee1e Merge pull request #926 from andrewgaul/to-string-and-close-exception-handling
Propagate exceptions from toStringAndClose
2012-10-29 16:50:37 -07:00
Adrian Cole 3a00a2c389 Merge pull request #924 from andrewgaul/copyright-notice
Address minor copyright notice typos
2012-10-29 16:50:01 -07:00
Andrew Gaul aad4d4dbcf Propagate exceptions from toStringAndClose
This method already declares throws IOException and callers should
handle these errors appropriately.
2012-10-29 09:37:46 -07:00
Aled Sage 09425f4f69 Version upgrades
- gson from 2.2 to 2.2.2
- guava from 13.0 to 13.0.1
- rocoto from 6.1 to 6.2
- log4j from 1.2.16 to 1.2.17
- log back from 1.0.0 to 1.0.7
- httpclient from 4.1.3 to 4.2.2
- netty from 3.3.1 to 3.5.9
- slf4j from 1.6.4 to 1.7.2
- testing from various to 6.8
- jetty from 8.1.1 to 8.1.7
- snakeyaml from 1.10 to 1.11
2012-10-29 13:00:44 +00:00
Andrew Gaul e7dde3aff5 Address minor copyright notice typos 2012-10-28 23:27:56 -07:00
Andrew Gaul 336ccfa2e6 Throw TimeoutException from awaitCompletion
This is a common error that callers should interpret correctly.  For
DeleteAllKeysInList, we integrate into its retry and backoff logic,
and for other callers, we continue to propagate RuntimeException.
2012-10-25 13:50:29 -07:00
Andrew Gaul 28d7a6f143 Prefer immutable over empty collections
The former does not create an object when calling iterator(), as
discussed here:

https://groups.google.com/d/msg/jclouds-dev/l7BviKDXreA/mP6Ow_RYxIgJ
2012-10-20 15:35:29 -07:00
Andrew Gaul 90f42d01ce Remove InputSuppliers.of(byte[])
Callers rarely want this functionality and should call
ByteStreams.newInputStreamSupplier when they do.
2012-10-17 11:35:45 -07:00
Adrian Cole ffa9cd3bb0 corrected guice bindings for swift-based blob signatures and backfilled expect tests 2012-10-10 12:03:23 +02:00
Andrew Gaul 9024c77405 Improve use of Charsets 2012-10-07 22:31:49 -07:00
Adrian Cole 5b213c2171 Merge pull request #883 from andrewgaul/unsupported-encoding-exception
Remove unneeded UnsupportedEncodingExceptions
2012-10-07 18:04:31 -07:00
Adrian Cole 298e764f85 fixed context builder when params in properties 2012-10-07 17:50:59 -07:00
Andrew Gaul 07ca6ab27b Remove unneeded UnsupportedEncodingExceptions
Enabled by use of Charsets.  Remaining calls due to URLEncoder.encode
and decode.
2012-10-07 17:16:02 -07:00
Andrew Gaul 8a0900d6ca Prefer fail over assertTrue(false) where possible 2012-10-06 19:25:54 -07:00
Ioannis Canellos 0dcd648599 Added javadoc description for name property. Cleaned up code in ContextBuilder 2012-10-06 10:31:23 +03:00
Ioannis Canellos 76beeee55b Merge pull request #873 from iocanel/master
Added name property to Context.
2012-10-06 00:26:07 -07:00
Everett Toews add1182960 Made the polling period between updates for servers and images configurable when using the ComputeService. 2012-10-04 20:45:20 -05:00
Adrian Cole 4e32001b84 Merge pull request #689 from andrewgaul/propagate-timeout-exception
Propagate TimeoutException when possible
2012-10-04 14:46:28 -07:00
Andrew Gaul a66c146a54 Propagate TimeoutException when possible
This allows clients to recover from transient errors.
2012-10-04 11:32:48 -07:00
Ioannis Canellos b784cdd4af Added name property to Context. 2012-10-04 13:40:02 +03:00
Andrew Gaul ceb203c10a Improve use of InputSupplier helpers 2012-10-02 18:18:51 -07:00
Adrian Cole 41e4a369e7 reveal underlying exception that causes a guice provider to fail 2012-09-29 14:03:25 -07:00
Adrian Cole 162b2f6829 added advancing iterable 2012-09-21 17:29:59 -07:00
Adrian Cole 38f8f98b16 removed static field-based state sharing when looking up delegate methods 2012-09-20 15:26:06 -07:00
Adrian Cole 28d766b9df bumped to 1.6.0-SNAPSHOT 2012-09-17 01:43:52 -07:00
Adrian Cole 0be04f7952 make it possible to extend gson type adapters 2012-09-16 23:38:35 -07:00
Adrian Cole d9c71923a6 param parsers can accept nullable params 2012-09-16 14:56:57 -07:00
Adrian Cole 85b5006084 nicer NPE when null args are specified to ReST methods 2012-09-16 12:38:00 -07:00
Adrian Cole 49877c8f06 helpers for empty collections 2012-09-15 23:43:50 -07:00
Adrian Cole c0e8470952 default region endpoint for rackspace legacy apis 2012-08-29 23:47:05 -07:00
Andrew Gaul 980f469679 Correct typo 2012-08-23 15:32:36 -07:00
Everett Toews 27dee0bfd9 Moved HttpMessage.getLowercaseHeaders() to Multimaps2.transformKeys() and
org.jclouds.functions.ToLowerCase for better reuse.

Added org.jclouds.util.Multimaps2Test for unit test.
2012-08-20 19:02:33 -05:00
Everett Toews 8d9499b3c1 Made getting a header by field-name case-insensitive to address the issue from
https://groups.google.com/forum/?fromgroups#!topic/jclouds/lEZjqhbudX4

This is the proper way to handle it as RFC 2616, "Hypertext Transfer Protocol -- HTTP/1.1", Section 4.2, "Message Headers" states,

Each header field consists of a name followed by a colon (":") and the field value. Field names are case-insensitive.
2012-08-20 15:30:50 -05:00
Adrian Cole 8c5e03a9a5 added debug when parsing fails 2012-08-19 19:51:30 -07:00
Andrew Gaul 63173fb6f3 Use Multimaps and Predicates helpers
Addresses a TODO.
2012-08-16 13:58:51 -07:00
Adrian Cole b055fb1233 Merge pull request #780 from grkvlt/openstack
Openstack Extensibility
2012-08-12 09:29:51 -07:00
Dies Koper f9e51c37d5 add FirstNetwork, in line with FirstRegion, etc., for use in FGCP provider 2012-08-11 23:22:41 -07:00
Adrian Cole 5851233603 Issue 1067:update to guava 13 2012-08-11 20:59:27 -07:00
Adam Lowe 4fad770eaf openstack-nova: allowing extension of the standard extensions by providers 2012-08-12 02:48:24 +01:00
Dies Koper c684a59cb3 add predicates and template builder live tests for location scopes SYSTEM and NETWORK 2012-08-06 23:29:26 +10:00
Adrian Cole ba56e2dce4 utils and better toStrings for location classes 2012-07-29 16:30:20 -07:00
Andrew Gaul 8ed0e28e68 Spelling corrections 2012-07-26 22:39:35 -07:00
Adrian Cole 3e2e24493e Issue 981: better toString on template 2012-07-26 11:28:38 -07:00
Andrew Gaul cd48729f65 Prefer ImmutableMap for SyncProxy maps 2012-07-26 08:44:13 -07:00
Adrian Cole 821b422b94 added SshKeyPairGenerator 2012-07-25 00:33:38 -07:00
Adrian Cole cab271d30f expect test ignored properties 2012-07-25 00:33:38 -07:00
Andrew Gaul 3648863a3c Introduce Predicates2.startsWith and endsWith 2012-07-24 22:21:34 -07:00
Adrian Cole 9d007a40b7 reset loginpassword/privatekey when explicitly set 2012-07-23 19:28:59 -07:00
Adrian Cole 6d9d638a1f Merge pull request #746 from dkoper/master
adding SYSTEM location scope required for FGCP
2012-07-23 19:19:50 -07:00
Dies Koper 966f1fc459 Add SYSTEM scope from DMTF CIMI. FGCP provider needs it. 2012-07-24 11:39:54 +10:00
Andrew Gaul 8524dd3a67 Ensure that EventBus is a singleton 2012-07-23 11:02:55 -07:00
Andrew Gaul 985cccff9a Prefer valueOf over explicit object creation
This allows use of cached values.  Patched with:

find -name \*.java | xargs sed -i 's/new Boolean(false)/Boolean.FALSE/g'
find -name \*.java | xargs sed -i 's/new Boolean(true)/Boolean.TRUE/g'
find -name \*.java | xargs sed -i 's/new Boolean(/Boolean.valueOf(/g'
find -name \*.java | xargs sed -i 's/new Integer(/Integer.valueOf(/g'
find -name \*.java | xargs sed -i 's/new Long(/Long.valueOf(/g'
2012-07-22 21:01:46 -07:00
Andrew Gaul 27e61f73e9 Remove encodeString() and encodeString(String)
These are not used in jclouds and callers should use
String.getBytes(Charset) directly, preferably with Guava Charsets
constants.
2012-07-19 10:55:23 -07:00
Andrew Gaul a40983a39d Prefer InputSupplier helpers
These ensure that inputs are closed properly.

Updated with: find -name \*.java | xargs sed -i
's/toStringAndClose(\(.*\)\.getInput())/toString(\1)/'
2012-07-18 17:42:48 -07:00
Adrian Cole 62e8c59385 Merge pull request #724 from andrewgaul/hex-cut-and-paste
Remove duplicated hexadecimal conversion code
2012-07-17 15:24:21 -07:00
Andrew Gaul d82dd32c64 Remove duplicated hexadecimal conversion code 2012-07-17 13:09:38 -07:00
Adam Lowe 20d3d0d603 expect tests: removing requirement that requests are unique (so orderedRequestsSendResponses can tee up different responses for the same request when testing functions) 2012-07-17 15:30:03 +01:00
Dies Koper f119aaa49f remove stray @Test on base class as it's causing warnings due to its public non-test methods 2012-07-17 11:50:18 +10:00
Adrian Cole a979c31d8c Merge pull request #718 from grkvlt/transform-parallel-timeout
Timeouts on FutureIterables.transformParallel
2012-07-16 16:40:45 -07:00
Adrian Cole 3154371433 Issue 1011: remove PagedIterator 2012-07-16 12:11:59 -04:00
Andrew Donald Kennedy 4463b52051 Added optional timeout to EC2 listNodes strategy and made awaitCompletion update latch in finally block 2012-07-16 16:58:37 +01:00
Adrian Cole addeb0d031 added concat to PagedIterable 2012-07-16 11:07:17 -04:00
Adrian Cole 315d5fb3ef Issue 1011: introducing PagedIterable 2012-07-15 23:34:42 -07:00
Adrian Cole 248c6dcb39 Transform to work with SaxParser 2012-07-15 22:44:07 -07:00
Adrian Cole 872046ed4c added @Transform 2012-07-15 20:10:49 -07:00
Adrian Cole b49f2e99c7 Issue 1022: naming conventions 2012-07-15 13:57:44 -07:00
Adrian Cole 05fd64af44 cleaned up http builders and expect tests 2012-07-15 01:50:38 -07:00
Andrew Gaul b95f36952d Fix infinite loops, found by FindBugs 2012-07-14 18:46:58 -07:00
Andrew Gaul 68b8a99c79 Log hostnames only if they differ
Also only log we have not previously encountered this mapping.
Finally use concurrent map for thread safety.
2012-07-13 15:17:53 -07:00
Adrian Cole 72ba1639b9 Issue 1022: added BaseRestApiExpectTest 2012-07-12 10:08:10 -07:00
Adrian Cole 0383a80904 Issue 1011: PaginatedIterable with marker type as Object 2012-07-09 16:08:32 -07:00
Adrian Cole 6cdad28359 Merge pull request #704 from dkoper/master
tested NPE goes away with FGCP expect test
2012-07-09 00:04:59 -07:00
Dies Koper 43f12fa627 prevent NPE when null is passed to @QueryParam annotated argument 2012-07-09 13:15:32 +10:00
Adrian Cole 7a776c0572 Issue 1007: missing interface method for iso8601 codec 2012-07-06 22:27:54 -07:00
Adrian Cole a73240f41b Issue 1007: ios8601 codec 2012-07-06 21:23:10 -07:00
Adrian Cole 25e68b328c Merge pull request #700 from aledsage/Issue-1004
Issue 1004: changes default SocketOpen impl
2012-07-06 14:38:02 -07:00
Adrian Cole 6359db8c5b Merge pull request #702 from dkoper/master
decouple use of provider's SSLContext from trustAllCerts setting
2012-07-05 22:47:38 -07:00
Dies Koper 90df3a1e51 enable provider (like FGCP) specific subclasses to reuse these static classes 2012-07-06 13:01:20 +10:00
Dies Koper 6f81d8d0d3 improvement on previous change: decouple use of provider's SSLContext from trustAllCerts setting. This will allow providers to combine their SSLContext with the value of this option 2012-07-06 12:40:48 +10:00
Adrian Cole 270b0d92f6 Merge pull request #701 from dkoper/master
adding hook to allow provider specific SSLContext for HTTPS communication
2012-07-05 19:00:46 -07:00
Dies Koper 4cbf02f0bc add hook for provider specific trusted SSLContext - in anticipation of FGCP support 2012-07-06 11:53:39 +10:00
Aled Sage 95c35487f0 Issue 1004: changes default SocketOpen impl
Sets it to InetSocketAddressConnect, instead of SocketOpenUnsupported.
Removes overriding the impl from Jsch and Sshj's client modules.
2012-07-05 16:00:29 +01:00
Adrian Cole 493de01cfa Merge pull request #694 from aplowe/openstack-nova2
Openstack & further GSON work: changed new openstack modules to use Named and ConstructorProperties
2012-07-03 07:07:07 -07:00
Adam Lowe 7ed9ebda47 Moving TypeAdapterFactories that eliminate null values in Sets, Maps and Multimaps to jclouds-core. 2012-07-03 14:46:54 +01:00
Adrian Cole 222e2cc367 Merge pull request #693 from dkoper/master
don't overwrite USER_AGENT if already there
2012-07-03 06:28:29 -07:00
Adam Lowe 3243325878 openstack: adjusting deserialization to treat {} as null if (and ONLY if) a null pointer is thrown when attempting to construct an object from the empty json object ({}) 2012-07-03 12:39:53 +01:00
Dies Koper afdf7f2c37 don't override USER_AGENT if already specified by provider 2012-07-03 16:50:36 +10:00
Adrian Cole fb98ce82f7 cleanup of module binding, clarity in toStrings, reduced wrapper depth for memoized sets 2012-07-02 19:36:27 -07:00
Adrian Cole 07240f3e77 removed copy/paste code relating to expiration after write 2012-07-02 15:27:31 -07:00
Adrian Cole ef9a69e7c3 added strict suppliers of scoped locations 2012-07-02 15:22:10 -07:00
Adrian Cole 763572f8ee added paginated set functionality 2012-06-24 11:48:18 -07:00
Adam Lowe 21802d467a Adjusting general strategy to accept @Named in place of @SerializedName.
Adding TypeAdapterFactory to handle deserialization based on constructor annotations (Inject/Named and/or ConstructorProperties).
2012-06-20 13:41:44 +03:00
Adrian Cole 3afdcb66b3 Issue 981:Quiet down jclouds.compute logger 2012-06-16 18:27:29 -04:00
Adrian Cole 5dd4f04ddf allowed for mock testing 2012-06-16 18:19:59 -04:00
Adrian Cole db8f869f5b Issue 979:invalid endpoint returned when region name is the same as the provider 2012-06-15 23:36:21 -04:00
Adrian Cole 30ba717969 Issue 977:ec2 zones are not mapping to endpoints 2012-06-15 23:36:17 -04:00
Andrew Gaul 736554d049 Correct spelling errors 2012-06-14 10:03:39 -04:00
Ioannis Canellos ff2c2fb3e3 Providers and APIs in OSGi can be discovered even if they are installed prior to the installation of jclouds-core. 2012-06-13 20:40:03 +03:00
Andrew Phillips c0e23d4460 Updated authors and added a small correction to the changes in ca84fcc279 for supporting beta versions in JcloudsVersion 2012-06-13 10:34:12 -04:00
Ioannis Canellos cf94e70a95 Improved discovery of api metadata inside OSGi. 2012-06-13 13:05:43 +03:00
Adrian Cole 9daee06e13 usage example 2012-06-12 09:09:44 -07:00