usergrid-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From sun...@apache.org
Subject svn commit: r1633650 [2/14] - in /incubator/usergrid/site/publish/documents: ./ _sources/ _sources/concepts/ _sources/presentations-and-videos/ _static/ _static/css/ _static/fonts/ _static/js/ concepts/ presentations-and-videos/
Date Wed, 22 Oct 2014 16:47:14 GMT
Added: incubator/usergrid/site/publish/documents/_sources/concepts/query-language.txt
URL: http://svn.apache.org/viewvc/incubator/usergrid/site/publish/documents/_sources/concepts/query-language.txt?rev=1633650&view=auto
==============================================================================
--- incubator/usergrid/site/publish/documents/_sources/concepts/query-language.txt (added)
+++ incubator/usergrid/site/publish/documents/_sources/concepts/query-language.txt Wed Oct 22 16:47:12 2014
@@ -0,0 +1,427 @@
+# Query Language
+
+> Query examples in this content are shown unencoded to make
+> them easier to read. Keep in mind that you might need to encode query
+> strings if you're sending them as part of URLs, such as when you're
+> executing them with the cURL tool.
+
+The following example retrieves a list of restaurants (from a
+restaurants collection) whose name property contains the value "diner",
+sorting the list in ascending order by name:
+
+    /restaurants?ql=select * where name contains 'diner' order by name asc
+
+
+## Basic syntax
+
+Queries of Apigee data for Apache Usergrid are made up of two kinds of
+statements: the path to the collection you want to query, followed by
+the query language statement containing your query. These two statements
+are separated by "?ql=" to indicate where the query language statement
+starts.
+
+To retrieve items from a collection, you would use a syntax such as the
+following:
+
+    /<collection>?ql=<query_statement>
+
+In the following example, the query is retrieving all users whose name
+is Gladys Kravitz.
+
+    /users?ql=select * where name = 'Gladys Kravitz'
+
+The following example selects all items except those that have an a
+property value of 5:
+
+    /items?ql=select * where NOT a = 5
+
+Note that there is a shortcut available when your query selects all
+items matching certain criteria -- in other words, where you use a
+statement that starts "select \* where". In this case, you can omit the
+first part of the statement and abbreviate it this way:
+
+    /items?ql=NOT a = 5
+
+You query your Apache Usergrid data by using a query syntax that's like
+Structured Query Language (SQL), the query language for relational
+databases. Unlike a relational database, where you specify tables and
+columns containing the data you want to query, in your Apache Usergrid
+queries you specify collections and entities.
+
+The syntax of Apache Usergrid queries only *resembles* SQL to
+make queries familiar and easier to write. However, the language isn't
+SQL. Only the syntax items documented here are supported.
+
+## Supported operators
+
+Comparisons
+
+* Less than `<` or `lt`
+* Less than or equal `<=` or `lte`
+* Equal `=` or `eq`
+* Greater than or equal `>=` or `gte`
+* Greater than `>` or `gt`
+* Not equal `NOT`
+
+Logical operations
+
+* Intersection of results `and`
+* Union of results `or`
+* Subtraction of results `not`
+
+
+## Query Response Format
+
+the query’s response is formatted in
+JavaScript Object Notation (JSON). This is a common format used for
+parameter and return values in REST web services.
+
+So for the following query:
+
+    /users?ql=select * where name = ‘Gladys Kravitz’
+
+...you would get a response such as the the one below. The JSON format
+arranges the data in name/value pairs. Many of the values correspond to
+specifics of the request, including the request’s HTTP action (GET), the
+application’s UUID, the request’s parameters (the query string you
+sent), and so on.
+
+Here, the query is asking for whole entities in the users collection.
+Data corresponding to the response is captured in the response’s
+`entities` array. The array has one member here, corresponding to the
+one user found by the query (another kind of query might have found more
+users). That one member gives the UUID of the entity (user), the entity
+type, and values for properties such as name, username, email, and so
+on.
+
+```json
+{
+  "action" : "get",
+  "application" : "8272c9b0-d86a-11e2-92e2-cdf1ce04c1c0",
+  "params" : {
+    "ql" : [ "select * where name = 'Gladys Kravitz'" ]
+  },
+  "path" : "/users",
+  "uri" : "http://api.usergrid.com/myorg/myapp/users",
+  "entities" : [ {
+    "uuid" : "d0d7d0ba-e97b-11e2-8cef-411c466c4f2c",
+    "type" : "user",
+    "name" : "Gladys Kravitz",
+    "created" : 1373472876859,
+    "modified" : 1373472876859,
+    "username" : "gladys",
+    "email" : "gladys@example.com",
+    "activated" : true,
+    "picture" : "http://www.gravatar.com/avatar/20c57d4f41cf51f2db44165eb058b3b2",
+    "metadata" : {
+      "path" : "/users/d0d7d0ba-e97b-11e2-8cef-411c466c4f2c",
+      "sets" : {
+        "rolenames" : "/users/d0d7d0ba-e97b-11e2-8cef-411c466c4f2c/rolenames",
+        "permissions" : "/users/d0d7d0ba-e97b-11e2-8cef-411c466c4f2c/permissions"
+      },
+      "connections" : {
+        "firstname" : "/users/d0d7d0ba-e97b-11e2-8cef-411c466c4f2c/firstname",
+        "lastname" : "/users/d0d7d0ba-e97b-11e2-8cef-411c466c4f2c/lastname"
+      },
+      "collections" : {
+        "activities" : "/users/d0d7d0ba-e97b-11e2-8cef-411c466c4f2c/activities",
+        "devices" : "/users/d0d7d0ba-e97b-11e2-8cef-411c466c4f2c/devices",
+        "feed" : "/users/d0d7d0ba-e97b-11e2-8cef-411c466c4f2c/feed",
+        "groups" : "/users/d0d7d0ba-e97b-11e2-8cef-411c466c4f2c/groups",
+        "roles" : "/users/d0d7d0ba-e97b-11e2-8cef-411c466c4f2c/roles",
+        "following" : "/users/d0d7d0ba-e97b-11e2-8cef-411c466c4f2c/following",
+        "followers" : "/users/d0d7d0ba-e97b-11e2-8cef-411c466c4f2c/followers"
+      }
+    }
+  } ],
+  "timestamp" : 1374694196061,
+  "duration" : 48,
+  "organization" : "myorg",
+  "applicationName" : "myapp",
+  "count" : 1
+}
+```
+
+Compare the preceding example with the following for another kind of
+query. Imagine the following request string, where the query string is
+asking for only the values of two of the entity’s properties (username
+and name):
+
+    /users?ql=select username,name where name=’Gladys Kravitz’
+
+In the response JSON from this query, the return value is specified as
+the property of the `list` item -- here, an array containing only the
+values of the properties the query asked for, in the order they were
+requested (username first, then name).
+
+    {
+      "action" : "get",
+      "application" : "8272c9b0-d86a-11e2-92e2-cdf1ce04c1c0",
+      "params" : {
+        "ql" : [ "select username,name where name='Gladys Kravitz'" ]
+      },
+      "path" : "/users",
+      "uri" : "http://api.usergrid.com/myorg/myapp/users",
+      "list" : [ [ "gladys", "Gladys Kravitz" ] ],
+      "timestamp" : 1374697463190,
+      "duration" : 25,
+      "organization" : "myorg",
+      "applicationName" : "myapp",
+      "count" : 1
+    }
+
+
+## Data types supported in queries
+
+As you develop queries for your Apache Usergrid data, remember that entity
+properties each conform to a particular data type (whether the entity is
+included by default or an entity you defined). Your queries must
+acknowledge this, testing with values that conform to each property's
+data type. (You can view the list of property data types for the default
+entities at [Default Data Entities](/default-data-entities).)
+
+For example, in the default entity `User`, the `name` property is stored
+as a `string`, the created date as a `long`, and metadata is stored as a
+JSON object. Your queries must be data type-aware so that you can be
+sure that query results are as you expect them to be.
+
+So imagine you define an entity with a `price` property whose value
+might be `100.00`. Querying for `100` will return no results even if
+there are occurrences of `100.00` as `price` values in your data set.
+That's because the database expected a decimal-delimited `float` value
+in your query.
+
+
+Data Type     Examples                                                                                    Notes
+----------- ------------------------------------------------------------------------------------------- ---------
+`string`    `'value'`, `unicode '\uFFFF'`, `octal '\0707'`                                              true | false
+`long`      1357412326021                                                                               Timestamps are typically stored as `long` values.
+`float`     10.1, -10.1, 10e10, 10e-10, 10E10, 10e-10                                                   Your query must be specific about the value you're looking for, down to the value (if any) after the decimal point.
+`boolean`   true | false                                      
+`UUID`      ee912c4b-5769-11e2-924d-02e81ac5a17b                                                        UUID types are typically used for the unique IDs of entities. The value must conform to the following format (do not enclose with quotation marks): xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
+
+
+`object`    For a JSON object like this one:
+
+```
+  {
+    "items":[
+      {"name":"rocks"},
+      {"name":"boats"}
+    ]
+  }
+```
+
+you can use dot notation to reach property values in the object: /mycollection/thing?ql="select * where items.name = 'rocks'"                        Objects are often used to contain entity metadata, such as the activities associated with a user, the users associated with a role, and so on.
+
+## Retrieving values for multiple properties
+
+Your query can return multiple kinds of values -- such as the values of
+multiple properties -- by specifying the property names in your select
+statement as a comma-separated list.
+
+For example, the following request returns the address and phone number
+of users whose name is Gladys Kravitz:
+
+    /users?ql=select address,phone_number where name = 'Gladys Kravitz'
+
+
+## Querying for the contents of text
+
+Your query can search the text of entity values of the string data type.
+For example, you can search a postal code field for values that start
+with a specific three numbers.
+
+For example, the following query selects all restaurants with the word
+`diner` in the name:
+
+    /restaurants?ql=select * where name contains 'diner'
+
+**Note:** Not all string properties of the default entities are
+indexed for searching. This includes the `User` entity's `username`
+property.
+
+This will return all users whose name property contains the word 'Kravitz'
+
+    /users?ql=select * where name contains 'Kravitz'
+
+This will return all users whose name property contains a word beginning with 'Krav'
+
+    /users?ql=select * where name contains 'Krav*'
+
+This will return all users whose name is exactly 'Gladys Kravitz'
+
+    /users?ql=select * where name = 'Gladys Kravitz'
+
+
+## Sorting results
+
+You can return query results that are sorted in the order you specify.
+Use the `order by` clause to specify the property to sort by, along with
+the order in which results should be sorted. The syntax for the clause
+is as follows `order by <property_name> asc | desc`
+
+The following table includes a few examples:
+
+    /users?ql=select * where lastname = 'Smith' order by firstname asc
+
+
+    /users?ql=select * where lastname = 'Smith' order by firstname desc
+
+
+    /users?ql=select * where lastname contains 'Sm*' order by lastname asc, firstname asc
+
+
+## Geoqueries
+
+Many of today's apps are enhanced by the use of *geolocation*, wireless
+detection of the physical location of a remote device. These apps are
+said to be *geolocation-aware* in that they query the device to
+determine the user's position and then use this data to further enhance
+the user's experience. For example, apps can capture the exact location
+where a picture was taken or a message was created.
+
+App services support geolocation on any entity, both built in (e.g.,
+users, groups) and user defined.
+
+To add a location to any entity, include the following member to the
+JSON in a POST or PUT call:
+
+    "location": {
+        "latitude": 37.779632,
+        "longitude": -122.395131  
+    } 
+
+For example, to store a listing of restaurants and their locations,
+start by creating a collection called restaurants:
+
+    POST https://api.usergrid.com/org_name/app_name/restaurants
+
+Next, add a new entity to the collection:
+
+    POST https://api.usergrid.com/org_name/app_name/restaurants
+    {
+      "name": "Rockadero",
+      "address": "21 Slate Street, Bedrock, CA",
+      "location": {
+        "latitude": 37.779632,
+        "longitude": -122.395131
+      }
+    }
+
+This creates a new restaurant entity called "Rockadero" with the
+longitude and latitude included as part of the object.
+
+When a location is added to an entity, it is easy to make queries
+against that data. For example, to see all restaurants within a 10 mile
+radius of the user's location, make a GET call against that entity, and
+include a search query in the following format:
+
+    location within <distance in meters> of <latitude>, <longitude>
+
+If we use the location of our user Fred, we first need to convert miles
+to meters. 1 mile is equivalent to 1609.344 meters, so 10 miles is about
+16093 meters. Thus, the API call looks like this:
+
+    GET https://api.usergrid.com/org_name/app_name/restaurants?ql=location within 16093 of 37.776753, -122.407846
+
+
+## Managing large sets of results
+
+When your query might return more results than you want to display to
+the user at once, you can use the limit parameter with cursors or API
+methods to manage the display of results. By default, query results are
+limited to 10 at a time. You can adjust this by setting the limit
+parameter to a value you prefer.
+
+For example, you might execute a query that could potentially return
+hundreds of results, but you want to display 20 of those at a time to
+users. To do this, your code sets the limit parameter to 20 when
+querying for data, then provides a way for the user to request more of
+the results when they're ready.
+
+You would use the following parameters in your query:
+
++-------------------------+-------------------------+-------------------------+
+| Parameter               | Type                    | Description             |
++=========================+=========================+=========================+
+| `limit`                 | integer                 | Number of results to    |
+|                         |                         | return. The maximum     |
+|                         |                         | number of results is    |
+|                         |                         | 1,000. Specifying a     |
+|                         |                         | limit greater than      |
+|                         |                         | 1,000 will result in a  |
+|                         |                         | limit of 1,000.         |
+|                         |                         |                         |
+|                         |                         | Limit is applied to the |
+|                         |                         | collection, not the     |
+|                         |                         | query string. For       |
+|                         |                         | example, the following  |
+|                         |                         | query will find the     |
+|                         |                         | first 100 entities in   |
+|                         |                         | the books collection,   |
+|                         |                         | then from that set      |
+|                         |                         | return the ones with    |
+|                         |                         | author='Hemingway':     |
+|                         |                         |                         |
+|                         |                         |     /books?ql=author =  |
+|                         |                         | 'Hemingway'&limit=100   |
+|                         |                         |                         |
+|                         |                         | You can also use the    |
+|                         |                         | limit parameter on a    |
+|                         |                         | request without a query |
+|                         |                         | string. The following   |
+|                         |                         | example is shorthand    |
+|                         |                         | for selecting all books |
+|                         |                         | and limiting by 100 at  |
+|                         |                         | a time:                 |
+|                         |                         |                         |
+|                         |                         |     /books?limit=100    |
+|                         |                         |                         |
+|                         |                         | Using a limit on a      |
+|                         |                         | DELETE can help you     |
+|                         |                         | manage the amount of    |
+|                         |                         | time it takes to delete |
+|                         |                         | data. For example you   |
+|                         |                         | can delete all of the   |
+|                         |                         | books, 1000 at a time,  |
+|                         |                         | with the following:     |
+|                         |                         |                         |
+|                         |                         |     DELETE /books?limit |
+|                         |                         | =1000                   |
+|                         |                         |                         |
+|                         |                         | Keep in mind that       |
+|                         |                         | DELETE operations can   |
+|                         |                         | take longer to execute. |
+|                         |                         | Yet even though the     |
+|                         |                         | DELETE query call might |
+|                         |                         | time out (such as with  |
+|                         |                         | a very large limit),    |
+|                         |                         | the operation will      |
+|                         |                         | continue on the server  |
+|                         |                         | even if the client      |
+|                         |                         | stops waiting for the   |
+|                         |                         | result.                 |
++-------------------------+-------------------------+-------------------------+
+| `cursor`                | string                  | An encoded              |
+|                         |                         | representation of the   |
+|                         |                         | query position pointing |
+|                         |                         | to a set of results. To |
+|                         |                         | retrieve the next set   |
+|                         |                         | of results, pass the    |
+|                         |                         | cursor with your next   |
+|                         |                         | call for most results.  |
++-------------------------+-------------------------+-------------------------+
+
+For example:
+
+Select all users whose name starts with fred, and returns the first 50
+results:
+
+    /users?ql=select * where name = 'fred*'&limit=50
+
+Retrieve the next batch of users whose name is "fred", passing the
+cursor received from the last request to specify where the next set of
+results should begin:
+
+    /users?ql=select * where name = 'fred*'&limit=50&cursor=LTIxNDg0NDUxNDpnR2tBQVFFQWdITUFDWFJ2YlM1emJXbDBhQUNBZFFBUUQyMVZneExfRWVLRlV3TG9Hc1doZXdDQWRRQVFIYVdjb0JwREVlS1VCd0xvR3NWT0JRQQ

Added: incubator/usergrid/site/publish/documents/_sources/concepts/relationships.txt
URL: http://svn.apache.org/viewvc/incubator/usergrid/site/publish/documents/_sources/concepts/relationships.txt?rev=1633650&view=auto
==============================================================================
--- incubator/usergrid/site/publish/documents/_sources/concepts/relationships.txt (added)
+++ incubator/usergrid/site/publish/documents/_sources/concepts/relationships.txt Wed Oct 22 16:47:12 2014
@@ -0,0 +1,100 @@
+# Relationships
+
+Creating connections between entities
+-------------------------------------
+
+One of the most useful features of App services is the ability to create
+connections between entities. A simple example of this is the
+Twitter-like use of *following*, where one user forms a connection with
+another by subscribing to any tweets they post. [Messagee
+Example](/messagee-example) walks you through an example of following
+other users in our sample app, *Messagee*. Here is the basic format:
+
+    POST https://api.usergrid.com/my-org/my-app/users/fred/following/users/barney
+
+This API call results in two users, Fred and Barney, linked with a
+connection where Fred is following Barney.
+
+If you create a *following* connection between two users, Apache Usergrid
+automatically creates a virtual connection called *followers* that
+mirrors the *following* connection. In other words, if you create a
+connection where Fred is following Barney, Apache Usergrid automatically
+creates a virtual connection where Fred is a follower of Barney.
+
+Note that there is no mirror connection established. Apache Usergrid only
+creates a mirror connection when you create a *following* connection. It
+does not create a mirror connection for other verbs such as likes.
+
+You can see all the users that Fred is following, in this case only
+Barney, by making the following API call:
+
+    GET https://api.usergrid.com/my-org/my-app/users/fred/following
+
+You can see all of barney’s followers, in this case only Fred, by making
+the following API call:
+
+    GET https://api.usergrid.com/my-org/my-app/users/barney/followers
+
+The *followers* connection is a virtual connection because you can’t use
+it to link two entities. In other words, you can’t make fred a follower
+of barney by using a *followers* connection.  **This is wrong:**
+
+    POST https://api.usergrid.com/my-org/my-app/users/barney/followers/users/fred
+
+To create a *following* connection with the users switched, so that
+Barney is following Fred, do this:
+
+    POST https://api.usergrid.com/my-org/my-app/users/barney/following/users/fred
+
+You can now see Fred’s followers (only Barney) by making the following
+call:
+
+    GET https://api.usergrid.com/my-org/my-app/users/fred/followers
+
+Creating other connections
+--------------------------
+
+You can extend this connection structure to create connections using any
+"verb" that can link two entities. For example, you could use likes to
+denote a connection between a user and his dog. First, create a dogs
+collection:
+
+    POST https://api.usergrid.com/my-org/my-app/dogs
+
+Then populate this collection with a new dog named Dino:
+
+    POST https://api.usergrid.com/my-org/my-app/dogs {"name" : "dino"}
+
+Then create a likes connection between Fred and his dog Dino:
+
+    POST https://api.usergrid.com/my-org/my-app/users/fred/likes/dogs/dino
+
+Getting connections
+-------------------
+
+### Get all connections for an entity
+
+To get a list that only contains the connections, do a GET on the
+connections sub-property of the entity:
+
+    GET https://api.usergrid.com/my-org/my-app/users/fred/connections
+
+### Get information on a specific connection type
+
+To get a list of users who like Fred:
+
+    GET https://api.usergrid.com/my-org/my-app/users/fred/connecting/likes
+
+To get a list of all dogs that Fred likes:
+
+    GET https://api.usergrid.com/my-org/my-app/users/fred/likes/dog
+
+Deleting a connection
+---------------------
+
+You can delete a connection in a way similar to creating one. Just
+replace the POST method with the DELETE method. For example, you can
+delete the connection between fred and barney with the following API
+call:
+
+    DELETE https://api.usergrid.com/my-org/my-app/users/fred/following/barney

Added: incubator/usergrid/site/publish/documents/_sources/concepts/roles-and-permissions.txt
URL: http://svn.apache.org/viewvc/incubator/usergrid/site/publish/documents/_sources/concepts/roles-and-permissions.txt?rev=1633650&view=auto
==============================================================================
--- incubator/usergrid/site/publish/documents/_sources/concepts/roles-and-permissions.txt (added)
+++ incubator/usergrid/site/publish/documents/_sources/concepts/roles-and-permissions.txt Wed Oct 22 16:47:12 2014
@@ -0,0 +1,18 @@
+# Roles & Permissions
+
+## Roles
+
+A role represents a set of permissions that enable certain operations to
+be performed on a specific endpoint. You can assign a user to a role,
+and in this way give the user the permissions associated with that role.
+
+**Note:** The /rolenames endpoint is no longer valid. If your code currently
+makes calls to /rolenames, you need to change the calls to use /roles.
+
+## Permissions
+
+Each role contains multiple permissions. Permissions work by whitelisting by default, meaning any permission that is not explicitely granted is denied by default. Permission is an HTTP verb (GET to allow reads, POST to allow creation, PUT to allow edits and DELETE to allow deletes) combined with a path, with optional wildcards. For example the permission put:/users/* allows editing any user.
+
+Permissions can be added to roles, groups or to users directly, and a user’s permission is the combination of its personal permissions and the permissions of any role he’s been assigned, and the permissions of any group he’s a member of.
+
+Permissions are only valid within the scope of a single application, so the permission paths do not need to be prefixed with /org\_name\_or\_uuid/app\_name\_or\_uuid.
\ No newline at end of file

Added: incubator/usergrid/site/publish/documents/_sources/concepts/users-devices.txt
URL: http://svn.apache.org/viewvc/incubator/usergrid/site/publish/documents/_sources/concepts/users-devices.txt?rev=1633650&view=auto
==============================================================================
--- incubator/usergrid/site/publish/documents/_sources/concepts/users-devices.txt (added)
+++ incubator/usergrid/site/publish/documents/_sources/concepts/users-devices.txt Wed Oct 22 16:47:12 2014
@@ -0,0 +1,108 @@
+# Users & Devices
+
+Users and Devices are the primary ways to identify access to the system. Devices are great to track anonymous access, while Users allow you to model signing up, signing in, etc. 
+
+Users
+-----
+
+### Properties
+
+Property     Type      Description
+------------ --------- ---------------------------------------------------------------------------------
+  uuid         UUID      User’s unique entity ID
+  type         string    Type of entity, in this case “user”
+  created      long      [UNIX timestamp](http://en.wikipedia.org/wiki/Unix_time) of entity creation
+  modified     long      [UNIX timestamp](http://en.wikipedia.org/wiki/Unix_time) of entity modification
+  username     string    Valid and unique string username (mandatory)
+  password     string    User password
+  email        string    Valid and unique email address
+  name         string    User display name
+  activated    boolean   Whether the user account is activated
+  disabled     boolean   Whether the user account is administratively disabled
+  firstname    string    User first name
+  middlename   string    User middle name
+  lastname     string    User last name
+  picture      string    User picture
+
+
+### Sets
+
+  Set           Type     Description
+  ------------- -------- ---------------------------------------
+  connections   string   Set of connection types (e.g., likes)
+  rolenames     string   Set of roles assigned to a user
+  permissions   string   Set of user permissions
+  credentials   string   Set of user credentials
+
+### Relationshops
+
+  Collection   Type       Description
+  ------------ ---------- -----------------------------------------------------
+  groups       group      Collection of groups to which a user belongs
+  devices      device     Collection of devices in the service
+  activities   activity   Collection of activities a user has performed
+  feed         activity   Inbox of activity notifications a user has received
+  roles        role       Set of roles assigned to a user
+
+### Facebook Sign-in
+
+You can authenticate your Apache Usergrid requests by logging into
+Facebook. To access Apache Usergrid resources, you need to provide an
+access token with each request (unless you use the sandbox app). You can
+get an access token by connecting to an appropriate web service endpoint
+and providing the correct client credentials — this is further described
+in [Authenticating users and application
+clients](/authenticating-users-and-application-clients). However, you
+can also obtain an access token by logging into Facebook.
+
+To enable authentication to Apache Usergrid through Facebook, do the
+following in your app:
+
+1.  Make a login call to the Facebook API (do this using the [Facebook
+    SDK](https://developers.facebook.com/docs/sdks/) or
+    [API](https://developers.facebook.com/docs/facebook-login/)). If the
+    login succeeds, a Facebook access token is returned.
+2.  Send the Facebook access token to Apache Usergrid. If the Facebook
+    access token is valid and the user does not already exist in App
+    Services, Apache Usergrid provisions a new Apache Usergrid user. It also
+    returns an Apache Usergrid access token, which you can use for
+    subsequent Apache Usergrid API calls. Behind the scenes, Apache Usergrid
+    uses the Facebook access token to retrieve the user's profile
+    information from Facebook.
+
+    If the Facebook access token is invalid, Facebook returns an OAuth
+    authentication error, and the login does not succeed.
+
+The request to authenticate to Apache Usergrid using a Facebook access
+token is:
+
+    GET https://api.usergrid.com/{my_org}/{my_app}/auth/facebook?fb_access_token={fb_access_token}
+
+where:
+
+* {my\_org} is the organization UUID or organization name.\
+* {my\_app} is the application UUID or application name.\
+* {fb\_access\_token} is the Facebook access token.
+
+
+Devices
+-------
+
+### Properties
+
+Property   Type     Description
+---------- -------- ---------------------------------------------------------------------------------
+  uuid       UUID     Entity unique ID
+  type       string   Entity type (e.g., device)
+  created    long     [UNIX timestamp](http://en.wikipedia.org/wiki/Unix_time) of entity creation
+  modified   long     [UNIX timestamp](http://en.wikipedia.org/wiki/Unix_time) of entity modification
+  name       string   Device name (mandatory)
+
+
+### Relationships
+
+Devices have the following associated collection.
+
+  Collection   Type   Description
+  ------------ ------ -----------------------------------------------
+  users        user   Collection of users to which a device belongs

Added: incubator/usergrid/site/publish/documents/_sources/contribute-code.txt
URL: http://svn.apache.org/viewvc/incubator/usergrid/site/publish/documents/_sources/contribute-code.txt?rev=1633650&view=auto
==============================================================================
--- incubator/usergrid/site/publish/documents/_sources/contribute-code.txt (added)
+++ incubator/usergrid/site/publish/documents/_sources/contribute-code.txt Wed Oct 22 16:47:12 2014
@@ -0,0 +1,22 @@
+# How to Contribute Code & Docs
+
+Code Contributions
+---
+The Usergrid project has adopted a policy for how code is to be contributed
+by external contributors, and by those who are committers on the project. 
+You can read this policy here [Usergrid Contribution Workflow](https://cwiki.apache.org/confluence/display/apache/incubator-usergrid+Contribution+Workflow).
+
+Basically, we use GitHub as our code review system. So you should fork the 
+apache/incubator-usergrid repo and submit PRs back to the project. Here 
+are are step-by-step guide for both both external contributors and committers:
+
+* [External Contributors Guide](https://cwiki.apache.org/confluence/display/apache/incubator-usergrid+External+Contributors+Guide)
+* [Usergrid Committers Guide](https://cwiki.apache.org/confluence/display/apache/incubator-usergrid+Committers+Guide)
+
+Website and Documentation Contributions
+---
+If you want to contribute to the documentation you'll find that we use a different
+system. Our website and documentation is managed in Subversion. Here's a README file
+that explains how to get the website and documentation source code and make changes:
+
+* [README.md for website and documentation](http://svn.apache.org/viewvc/incubator/usergrid/site/README.md?view=markup)

Added: incubator/usergrid/site/publish/documents/_sources/deploy-local.txt
URL: http://svn.apache.org/viewvc/incubator/usergrid/site/publish/documents/_sources/deploy-local.txt?rev=1633650&view=auto
==============================================================================
--- incubator/usergrid/site/publish/documents/_sources/deploy-local.txt (added)
+++ incubator/usergrid/site/publish/documents/_sources/deploy-local.txt Wed Oct 22 16:47:12 2014
@@ -0,0 +1,170 @@
+# Deploying to local Tomcat & Cassandra
+
+This is a guide that explains how to install and run Usergrid using stock Tomcat and Cassandra on a single computer.
+
+NOTE: running Cassandra on a single computer is something you should do ONLY for testing purposes. You don't want to run one node in production even just to start out. To get the benefit of Cassandra's architecture, which is designed to support linear scalability. You should be running a Cassandra cluster with at least three nodes. 
+
+For more information:
+
+* [Cassandra FAQ: Can I Start With a Single Node?](http://planetcassandra.org/blog/post/cassandra-faq-can-i-start-with-a-single-node/)
+* [Why don't you start off with a “single & small” Cassandra server](http://stackoverflow.com/questions/18462530/why-dont-you-start-off-with-a-single-small-cassandra-server-as-you-usually)
+
+## Requirements
+
+* [JDK 1.7](http://www.oracle.com/technetwork/java/javase/downloads/index.html)
+* [Maven](http://maven.apache.org/)
+
+## Download
+
+Use GitHub to clone the [apache/incubator-usergrid](https://github.com/apache/incubator-usergrid) repo.
+
+Or you can start by [downloading our latest code](https://github.com/apache/incubator-usergrid/archive/master.zip) and extract it.
+
+## Building
+
+From the command line, navigate to stack directory and type the following:
+
+    mvn clean package -DskipTests=true
+
+Once you are done the Usergrid application will be package as a Java EE WAR file at the location __stack/rest/target/ROOT.war__.
+
+Install and configure Cassandra
+---
+
+Install Cassandra, don't edit configuration files as we just want default values for this simple setup. Here are the [instructions for installing Cassandra](http://wiki.apache.org/cassandra/GettingStarted)
+
+Install and configure Tomcat
+---
+
+Follow instructions, don't edit configuration files as we just want default values for this simple setup. Here are the [instructions for installing Tomcat 7](http://tomcat.apache.org/tomcat-7.0-doc/setup.html)
+
+Add Usergrid WAR to Tomcat
+---
+
+Remove the existing tomcat/webapps/ROOT directory. 
+
+Place the Usergrid ROOT.war file into the tomcat/webapps directory
+
+Add Usergrid configuration file to Tomcat
+---
+
+Create a __usergrid-deployment.properties__ file and place it in Tomcat's __lib__ directory. You can find an example properties file below  that should work well for a local Tomcat & Cassandra setup. You will probably only need to change the properties below to use your email address and preferred password for the install.
+
+
+    usergrid.sysadmin.login.allowed=true
+    usergrid.sysadmin.login.name=superuser
+    usergrid.sysadmin.login.password=pw123
+    usergrid.sysadmin.email=me@example.com
+    usergrid.sysadmin.login.email=myself@example.com
+    usergrid.management.mailer=Myself<myself@example.com>
+    usergrid.test-account.admin-user.email=myself@example.com
+    usergrid.test-account.admin-user.password=test
+
+Run Usergrid Database & Super User Setup
+---
+
+Start Tomcat and use your web browser to visit the URLs below. While you do this you might want to watch the logs under tomcat/logs for clues, just in case anything goes wrong. 
+
+Database setup URL - [http://localhost:8080/system/database/setup](http://localhost:8080/system/database/setup)
+
+When prompted to login use the sysadmin credentials that you specified in your usergrid-deployment.properties file. Based on the example above that would be superuser and pw123. If the operation is successful you should a message like the one below in your browser. If not, check your logs for clues about what went wrong.
+
+    {
+      "action" : "cassandra setup",
+      "status" : "ok",
+      "timestamp" : 1379424622947,
+      "duration" : 76
+    }
+
+Superuser setup URL - [http://localhost:8080/system/superuser/setup](http://localhost:8080/system/superuser/setup)
+
+You should not be prompted for login because you already logged into for the Database Setup. If setup works, you should see a message like this:
+
+    {
+      "action" : "superuser setup",
+      "status" : "ok",
+      "timestamp" : 1379424667936,
+      "duration" : 2
+    }
+
+Login to the Usergrid Console & get started
+---
+You should now be able to login to the Usergrid console and start configuring applications, users and more. 
+
+You can use an static version of the portal to get started:
+
+[http://apigee.github.io/usergrid-portal/?api_url=http://localhost:8080](http://apigee.github.io/usergrid-portal/?api_url=http://localhost:8080)
+
+
+Example usergrid-deployment.properties file
+---
+Here's a complete example properties file to get you started.
+
+    # Minimal Usergrid configuration properties for local Tomcat and Cassandra 
+    #
+    # The cassandra configuration options. 
+
+    # The cassandra host to use
+    cassandra.url=localhost:9160
+    
+    # The strategy to use when creating the keyspace. This is the default. 
+    # We recommend creating the keyspace with this default, then editing it 
+    # via the cassandra CLI to meet the client's needs.
+    cassandra.keyspace.strategy=org.apache.cassandra.locator.SimpleStrategy
+     
+    # The default replication factor for the simple strategy. Again, leave the 
+    # default, create the app, then use the cassandra cli to set the replication 
+    # factor options. This can become complicated with different topologies and 
+    # is more a Cassandra administration issue than a UG issue.
+    cassandra.keyspace.strategy.options.replication_factor=1
+     
+    ######################################################
+    # Custom mail transport. Not usually used for local testing
+
+    #mail.transport.protocol=smtps
+    #mail.smtps.host=email-smtp.us-east-1.amazonaws.com
+    #mail.smtps.port=465
+    #mail.smtps.auth=true
+    #mail.smtps.quitwait=false
+    #mail.smtps.username=
+    #mail.smtps.password=
+
+    ######################################################
+    # Admin and test user setup (change these to be their super user
+
+    usergrid.sysadmin.login.name=superuser
+    usergrid.sysadmin.login.email=myself@example.com     <--- Change this
+    usergrid.sysadmin.login.password=pw123               <--- Change this
+    usergrid.sysadmin.login.allowed=true
+    usergrid.sysadmin.email=myself@example.com           <--- Change this
+    
+    # Enable or disable this to require superadmin approval of users
+    usergrid.sysadmin.approve.users=false
+
+    ######################################################
+    # Auto-confirm and sign-up notifications settings
+
+    usergrid.management.admin_users_require_confirmation=false
+    usergrid.management.admin_users_require_activation=false
+    usergrid.management.organizations_require_activation=false
+    usergrid.management.notify_sysadmin_of_new_organizations=false
+    usergrid.management.notify_sysadmin_of_new_admin_users=false
+
+    ######################################################
+    # URLs
+    # Redirect path when request come in for TLD
+
+    usergrid.redirect_root=https://localhost:8080/status
+    usergrid.view.management.organizations.organization.activate=https://localhost:8080/accounts/welcome
+    usergrid.view.management.organizations.organization.confirm=https://localhost:8080/accounts/welcome
+    usergrid.view.management.users.user.activate=https://localhost:8080/accounts/welcome
+    usergrid.view.management.users.user.confirm=https://localhost:8080/accounts/welcome
+    usergrid.organization.activation.url=https://localhost:8080/management/organizations/%s/activate
+    usergrid.admin.activation.url=https://localhost:8080/management/users/%s/activate
+    usergrid.admin.resetpw.url=https://localhost:8080/management/users/%s/resetpw
+    usergrid.admin.confirmation.url=https://localhost:8080/management/users/%s/confirm
+    usergrid.user.activation.url=https://localhost:8080%s/%s/users/%s/activate
+    usergrid.user.confirmation.url=https://localhost:8080/%s/%s/users/%s/confirm
+    usergrid.user.resetpw.url=https://localhost:8080/%s/%s/users/%s/resetpw
+ 
+ 
\ No newline at end of file

Added: incubator/usergrid/site/publish/documents/_sources/getting-up-and-running-locally.txt
URL: http://svn.apache.org/viewvc/incubator/usergrid/site/publish/documents/_sources/getting-up-and-running-locally.txt?rev=1633650&view=auto
==============================================================================
--- incubator/usergrid/site/publish/documents/_sources/getting-up-and-running-locally.txt (added)
+++ incubator/usergrid/site/publish/documents/_sources/getting-up-and-running-locally.txt Wed Oct 22 16:47:12 2014
@@ -0,0 +1,72 @@
+# Getting Up & Running Locally
+
+## Requirements
+
+* [JDK 1.7](http://www.oracle.com/technetwork/java/javase/downloads/index.html)
+* [Maven](http://maven.apache.org/)
+
+## Download
+
+### Download2
+
+Start by [downloading our latest code](https://github.com/apache/incubator-usergrid/archive/master.zip) and extract it.
+
+#### Building 3
+
+From the command line, navigate to stack directory and type the following:
+
+    mvn clean install -DskipTests=true
+
+## Running
+
+Usergrid-core contains the persistence layer and shared utilities for powering the Usergrid service. The services layer is contained in usergrid-services and exposes a higher-level API that's used by the usergrid-rest web services tier.
+
+You can run Usergrid from the command-line from the
+jar in the usergrid/standalone project:
+
+    cd launcher; java -jar target/usergrid-launcher-*.jar
+
+After startup, your instance will be available on localhost, port 8080.
+To check it’s running properly, you can try loading our status page:
+
+    curl http://localhost:8080/status
+
+You can also run it as a webapp in Tomcat, by deploying the ROOT.war file generated in the usergrid/rest project.
+
+## Getting Started with the HTTP API
+
+Start by creating an Organization. It’s the top-level structure in Usergrid:
+all Apps and Administrators must belong to an Organization. Here’s how you create one:
+
+    curl -X POST  \
+         -d 'organization=myfirstorg&username=myadmin&name=Admin&email=admin@example.com&password=password' \
+         http://localhost:8080/management/organizations
+
+You can see that creating an Organization creates an Administrator in the process. Let’s authenticate as him:
+
+    curl 'http://localhost:8080/management/token?grant_type=password&username=myadmin&password=password'
+
+This will return an access\_token. We’ll use this to authenticate the next two calls.
+Next, let’s create an Application:
+
+    curl -H "Authorization: Bearer [the management token from above]" \
+         -H "Content-Type: application/json" \
+         -X POST -d '{ "name":"myapp" }' \
+         http://localhost:8080/management/orgs/myfirstorg/apps
+
+… And a User for the Application:
+
+    curl -H "Authorization: Bearer [the management token from above]" \
+         -X POST "http://localhost:8080/myfirstorg/myapp/users" \
+         -d '{ "username":"myuser", "password":"mypassword", "email":"user@example.com" }'
+
+Let’s now generate an access token for this Application User:
+
+    curl 'http://localhost:8080/myfirstorg/myapp/token?grant_type=password&username=myuser&password=mypassword'
+
+This will also send back an access\_token, but limited in scope.
+Let’s use it to create a collection with some data in it:
+
+    curl -H "Authorization: Bearer [the user token]" \
+         -X POST -d '[ { "cat":"fluffy" }, { "fish": { "gold":2, "oscar":1 } } ]' \
+         http://localhost:8080/myfirstorg/myapp/pets

Added: incubator/usergrid/site/publish/documents/_sources/index.txt
URL: http://svn.apache.org/viewvc/incubator/usergrid/site/publish/documents/_sources/index.txt?rev=1633650&view=auto
==============================================================================
--- incubator/usergrid/site/publish/documents/_sources/index.txt (added)
+++ incubator/usergrid/site/publish/documents/_sources/index.txt Wed Oct 22 16:47:12 2014
@@ -0,0 +1,11 @@
+***************
+Apache Usergrid Documents
+***************
+
+.. toctree::
+   deploy-local
+   getting-up-and-running-locally
+   organizations-admins
+   presentations-and-videos
+   upgrading
+   contribute-code
\ No newline at end of file

Added: incubator/usergrid/site/publish/documents/_sources/organizations-admins.txt
URL: http://svn.apache.org/viewvc/incubator/usergrid/site/publish/documents/_sources/organizations-admins.txt?rev=1633650&view=auto
==============================================================================
--- incubator/usergrid/site/publish/documents/_sources/organizations-admins.txt (added)
+++ incubator/usergrid/site/publish/documents/_sources/organizations-admins.txt Wed Oct 22 16:47:12 2014
@@ -0,0 +1,44 @@
+Organizations & Admins
+==================================================
+
+.. toctree::
+	concepts/applications
+	concepts/events-and-counters
+	concepts/roles-and-permissions
+	concepts/relationships
+	concepts/collections
+	concepts/query-language
+	concepts/users-devices
+	concepts/groups
+	concepts/activity
+	concepts/assets
+
+###### Organizations
+
+An organization represents the highest level of the Apache Usergrid data
+hierarchy. It contains applications (and the entities and collections
+they contain) and is associated with one or more administrators. An
+organization can be representative of a company, team, or project. It
+allows multiple applications  to be shared within the organization with
+other administrators.
+
+
+Property                                Type      Description
+--------------------------------------- --------- ---------------------------------------------------------------------
+uuid                                    UUID      Organization’s unique entity ID
+type                                    string    "organization"
+created                                 long      [UNIX timestamp](http://en.wikipedia.org/wiki/Unix_time) of entity creation
+modified                                long      [UNIX timestamp](http://en.wikipedia.org/wiki/Unix_time) of entity modification
+organization                            string    The name of the organization.
+username                                string    The username of the administrator.
+name                                    string    The name of the administrator.
+email                                   string    The email address of the administrator.
+password                                string    The password of the administrator. (create-only)
+
+###### Admins
+
+An admin user has full access to perform any operation on all
+organization accounts of which the admin user is a member. Using the App
+services API, you can create, update, or retrieve an admin user. You can
+also set or reset an admin user's password, activite or reactivate an
+admin user, and get an admin user's activity feed.
\ No newline at end of file

Added: incubator/usergrid/site/publish/documents/_sources/presentations-and-videos.txt
URL: http://svn.apache.org/viewvc/incubator/usergrid/site/publish/documents/_sources/presentations-and-videos.txt?rev=1633650&view=auto
==============================================================================
--- incubator/usergrid/site/publish/documents/_sources/presentations-and-videos.txt (added)
+++ incubator/usergrid/site/publish/documents/_sources/presentations-and-videos.txt Wed Oct 22 16:47:12 2014
@@ -0,0 +1,7 @@
+***************
+Presentations & Videos
+***************
+
+.. toctree::
+   presentations-and-videos/presentations
+   presentations-and-videos/videos
\ No newline at end of file

Added: incubator/usergrid/site/publish/documents/_sources/presentations-and-videos/presentations.txt
URL: http://svn.apache.org/viewvc/incubator/usergrid/site/publish/documents/_sources/presentations-and-videos/presentations.txt?rev=1633650&view=auto
==============================================================================
--- incubator/usergrid/site/publish/documents/_sources/presentations-and-videos/presentations.txt (added)
+++ incubator/usergrid/site/publish/documents/_sources/presentations-and-videos/presentations.txt Wed Oct 22 16:47:12 2014
@@ -0,0 +1,21 @@
+# Presentations
+
+## How to Contribute to Apache Usergrid
+- David Johnson, [ApacheCon NA 2014](http://apacheconnorthamerica2014.sched.org/event/29971aabd3c86398be2ae93403c7d1d2)
+
+<iframe src="http://www.slideshare.net/slideshow/embed_code/33275731" width="600" height="400" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe>
+
+## Apache Usergrid Internals
+- Sungju Jin
+
+<iframe src="http://speakerdeck.com/player/f0cd95108c150131a1e7669157168c6d" width="600" height="400" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe>
+
+## Open Source Mobile Backend on Cassandra
+- Ed Anuff
+
+<iframe src="http://www.slideshare.net/slideshow/embed_code/13919079" width="600" height="400" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe>
+
+## Usergrid Overview
+- Ed Anuff
+
+<iframe src="http://www.slideshare.net/slideshow/embed_code/9476483" width="600" height="400" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe>
\ No newline at end of file

Added: incubator/usergrid/site/publish/documents/_sources/presentations-and-videos/videos.txt
URL: http://svn.apache.org/viewvc/incubator/usergrid/site/publish/documents/_sources/presentations-and-videos/videos.txt?rev=1633650&view=auto
==============================================================================
--- incubator/usergrid/site/publish/documents/_sources/presentations-and-videos/videos.txt (added)
+++ incubator/usergrid/site/publish/documents/_sources/presentations-and-videos/videos.txt Wed Oct 22 16:47:12 2014
@@ -0,0 +1,11 @@
+# Videos
+
+## How to Contribute to Apache Usergrid
+- David Johnson, [ApacheCon NA 2014](http://apacheconnorthamerica2014.sched.org/event/29971aabd3c86398be2ae93403c7d1d2)
+
+<iframe width="640" height="360" src="http://www.youtube.com/embed/cfwGmvUhFzY?rel=0" frameborder="0" allowfullscreen></iframe>
+
+## C* 2012: Cassandra at Apigee: Usergrid Powering Mobile
+- Ed Anuff
+
+<iframe width="640" height="360" src="http://www.youtube.com/embed/RuJwIBu3jvs?rel=0" frameborder="0" allowfullscreen></iframe>
\ No newline at end of file

Added: incubator/usergrid/site/publish/documents/_sources/upgrading.txt
URL: http://svn.apache.org/viewvc/incubator/usergrid/site/publish/documents/_sources/upgrading.txt?rev=1633650&view=auto
==============================================================================
--- incubator/usergrid/site/publish/documents/_sources/upgrading.txt (added)
+++ incubator/usergrid/site/publish/documents/_sources/upgrading.txt Wed Oct 22 16:47:12 2014
@@ -0,0 +1,3 @@
+# Upgrading from Previous Versions
+
+If you built and used a previous version of Usergrid, that may be using a different schema, we have an easy built-in tool to audit your Cassandra column family structure and upgrade the dataset as necessary. Once you have pulled, built and launched the new version of Usergrid, just hit [http://localhost:8080/system/database/setup](http://localhost:8080/system/database/setup) to run the upgrade tool.
\ No newline at end of file

Added: incubator/usergrid/site/publish/documents/_static/ajax-loader.gif
URL: http://svn.apache.org/viewvc/incubator/usergrid/site/publish/documents/_static/ajax-loader.gif?rev=1633650&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/usergrid/site/publish/documents/_static/ajax-loader.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/usergrid/site/publish/documents/_static/basic.css
URL: http://svn.apache.org/viewvc/incubator/usergrid/site/publish/documents/_static/basic.css?rev=1633650&view=auto
==============================================================================
--- incubator/usergrid/site/publish/documents/_static/basic.css (added)
+++ incubator/usergrid/site/publish/documents/_static/basic.css Wed Oct 22 16:47:12 2014
@@ -0,0 +1,557 @@
+/*
+ * basic.css
+ * ~~~~~~~~~
+ *
+ * Sphinx stylesheet -- basic theme.
+ *
+ * :copyright: Copyright 2007-2014 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+
+/* -- main layout ----------------------------------------------------------- */
+
+div.clearer {
+    clear: both;
+}
+
+/* -- relbar ---------------------------------------------------------------- */
+
+div.related {
+    width: 100%;
+    font-size: 90%;
+}
+
+div.related h3 {
+    display: none;
+}
+
+div.related ul {
+    margin: 0;
+    padding: 0 0 0 10px;
+    list-style: none;
+}
+
+div.related li {
+    display: inline;
+}
+
+div.related li.right {
+    float: right;
+    margin-right: 5px;
+}
+
+/* -- sidebar --------------------------------------------------------------- */
+
+div.sphinxsidebarwrapper {
+    padding: 10px 5px 0 10px;
+}
+
+div.sphinxsidebar {
+    float: left;
+    width: 230px;
+    margin-left: -100%;
+    font-size: 90%;
+}
+
+div.sphinxsidebar ul {
+    list-style: none;
+}
+
+div.sphinxsidebar ul ul,
+div.sphinxsidebar ul.want-points {
+    margin-left: 20px;
+    list-style: square;
+}
+
+div.sphinxsidebar ul ul {
+    margin-top: 0;
+    margin-bottom: 0;
+}
+
+div.sphinxsidebar form {
+    margin-top: 10px;
+}
+
+div.sphinxsidebar input {
+    border: 1px solid #98dbcc;
+    font-family: sans-serif;
+    font-size: 1em;
+}
+
+div.sphinxsidebar #searchbox input[type="text"] {
+    width: 170px;
+}
+
+div.sphinxsidebar #searchbox input[type="submit"] {
+    width: 30px;
+}
+
+img {
+    border: 0;
+    max-width: 100%;
+}
+
+/* -- search page ----------------------------------------------------------- */
+
+ul.search {
+    margin: 10px 0 0 20px;
+    padding: 0;
+}
+
+ul.search li {
+    padding: 5px 0 5px 20px;
+    background-image: url(file.png);
+    background-repeat: no-repeat;
+    background-position: 0 7px;
+}
+
+ul.search li a {
+    font-weight: bold;
+}
+
+ul.search li div.context {
+    color: #888;
+    margin: 2px 0 0 30px;
+    text-align: left;
+}
+
+ul.keywordmatches li.goodmatch a {
+    font-weight: bold;
+}
+
+/* -- index page ------------------------------------------------------------ */
+
+table.contentstable {
+    width: 90%;
+}
+
+table.contentstable p.biglink {
+    line-height: 150%;
+}
+
+a.biglink {
+    font-size: 1.3em;
+}
+
+span.linkdescr {
+    font-style: italic;
+    padding-top: 5px;
+    font-size: 90%;
+}
+
+/* -- general index --------------------------------------------------------- */
+
+table.indextable {
+    width: 100%;
+}
+
+table.indextable td {
+    text-align: left;
+    vertical-align: top;
+}
+
+table.indextable dl, table.indextable dd {
+    margin-top: 0;
+    margin-bottom: 0;
+}
+
+table.indextable tr.pcap {
+    height: 10px;
+}
+
+table.indextable tr.cap {
+    margin-top: 10px;
+    background-color: #f2f2f2;
+}
+
+img.toggler {
+    margin-right: 3px;
+    margin-top: 3px;
+    cursor: pointer;
+}
+
+div.modindex-jumpbox {
+    border-top: 1px solid #ddd;
+    border-bottom: 1px solid #ddd;
+    margin: 1em 0 1em 0;
+    padding: 0.4em;
+}
+
+div.genindex-jumpbox {
+    border-top: 1px solid #ddd;
+    border-bottom: 1px solid #ddd;
+    margin: 1em 0 1em 0;
+    padding: 0.4em;
+}
+
+/* -- general body styles --------------------------------------------------- */
+
+a.headerlink {
+    visibility: hidden;
+}
+
+h1:hover > a.headerlink,
+h2:hover > a.headerlink,
+h3:hover > a.headerlink,
+h4:hover > a.headerlink,
+h5:hover > a.headerlink,
+h6:hover > a.headerlink,
+dt:hover > a.headerlink,
+caption:hover > a.headerlink,
+p.caption:hover > a.headerlink,
+div.code-block-caption:hover > a.headerlink {
+    visibility: visible;
+}
+
+div.body p.caption {
+    text-align: inherit;
+}
+
+div.body td {
+    text-align: left;
+}
+
+.field-list ul {
+    padding-left: 1em;
+}
+
+.first {
+    margin-top: 0 !important;
+}
+
+p.rubric {
+    margin-top: 30px;
+    font-weight: bold;
+}
+
+img.align-left, .figure.align-left, object.align-left {
+    clear: left;
+    float: left;
+    margin-right: 1em;
+}
+
+img.align-right, .figure.align-right, object.align-right {
+    clear: right;
+    float: right;
+    margin-left: 1em;
+}
+
+img.align-center, .figure.align-center, object.align-center {
+  display: block;
+  margin-left: auto;
+  margin-right: auto;
+}
+
+.align-left {
+    text-align: left;
+}
+
+.align-center {
+    text-align: center;
+}
+
+.align-right {
+    text-align: right;
+}
+
+/* -- sidebars -------------------------------------------------------------- */
+
+div.sidebar {
+    margin: 0 0 0.5em 1em;
+    border: 1px solid #ddb;
+    padding: 7px 7px 0 7px;
+    background-color: #ffe;
+    width: 40%;
+    float: right;
+}
+
+p.sidebar-title {
+    font-weight: bold;
+}
+
+/* -- topics ---------------------------------------------------------------- */
+
+div.topic {
+    border: 1px solid #ccc;
+    padding: 7px 7px 0 7px;
+    margin: 10px 0 10px 0;
+}
+
+p.topic-title {
+    font-size: 1.1em;
+    font-weight: bold;
+    margin-top: 10px;
+}
+
+/* -- admonitions ----------------------------------------------------------- */
+
+div.admonition {
+    margin-top: 10px;
+    margin-bottom: 10px;
+    padding: 7px;
+}
+
+div.admonition dt {
+    font-weight: bold;
+}
+
+div.admonition dl {
+    margin-bottom: 0;
+}
+
+p.admonition-title {
+    margin: 0px 10px 5px 0px;
+    font-weight: bold;
+}
+
+div.body p.centered {
+    text-align: center;
+    margin-top: 25px;
+}
+
+/* -- tables ---------------------------------------------------------------- */
+
+table.docutils {
+    border: 0;
+    border-collapse: collapse;
+}
+
+table.docutils td, table.docutils th {
+    padding: 1px 8px 1px 5px;
+    border-top: 0;
+    border-left: 0;
+    border-right: 0;
+    border-bottom: 1px solid #aaa;
+}
+
+table.field-list td, table.field-list th {
+    border: 0 !important;
+}
+
+table.footnote td, table.footnote th {
+    border: 0 !important;
+}
+
+th {
+    text-align: left;
+    padding-right: 5px;
+}
+
+table.citation {
+    border-left: solid 1px gray;
+    margin-left: 1px;
+}
+
+table.citation td {
+    border-bottom: none;
+}
+
+/* -- other body styles ----------------------------------------------------- */
+
+ol.arabic {
+    list-style: decimal;
+}
+
+ol.loweralpha {
+    list-style: lower-alpha;
+}
+
+ol.upperalpha {
+    list-style: upper-alpha;
+}
+
+ol.lowerroman {
+    list-style: lower-roman;
+}
+
+ol.upperroman {
+    list-style: upper-roman;
+}
+
+dl {
+    margin-bottom: 15px;
+}
+
+dd p {
+    margin-top: 0px;
+}
+
+dd ul, dd table {
+    margin-bottom: 10px;
+}
+
+dd {
+    margin-top: 3px;
+    margin-bottom: 10px;
+    margin-left: 30px;
+}
+
+dt:target, .highlighted {
+    background-color: #fbe54e;
+}
+
+dl.glossary dt {
+    font-weight: bold;
+    font-size: 1.1em;
+}
+
+.field-list ul {
+    margin: 0;
+    padding-left: 1em;
+}
+
+.field-list p {
+    margin: 0;
+}
+
+.optional {
+    font-size: 1.3em;
+}
+
+.sig-paren {
+    font-size: larger;
+}
+
+.versionmodified {
+    font-style: italic;
+}
+
+.system-message {
+    background-color: #fda;
+    padding: 5px;
+    border: 3px solid red;
+}
+
+.footnote:target  {
+    background-color: #ffa;
+}
+
+.line-block {
+    display: block;
+    margin-top: 1em;
+    margin-bottom: 1em;
+}
+
+.line-block .line-block {
+    margin-top: 0;
+    margin-bottom: 0;
+    margin-left: 1.5em;
+}
+
+.guilabel, .menuselection {
+    font-family: sans-serif;
+}
+
+.accelerator {
+    text-decoration: underline;
+}
+
+.classifier {
+    font-style: oblique;
+}
+
+abbr, acronym {
+    border-bottom: dotted 1px;
+    cursor: help;
+}
+
+/* -- code displays --------------------------------------------------------- */
+
+pre {
+    overflow: auto;
+    overflow-y: hidden;  /* fixes display issues on Chrome browsers */
+}
+
+td.linenos pre {
+    padding: 5px 0px;
+    border: 0;
+    background-color: transparent;
+    color: #aaa;
+}
+
+table.highlighttable {
+    margin-left: 0.5em;
+}
+
+table.highlighttable td {
+    padding: 0 0.5em 0 0.5em;
+}
+
+div.code-block-caption {
+    padding: 2px 5px;
+    font-size: small;
+}
+
+div.code-block-filename code {
+    background-color: transparent;
+}
+
+div.code-block-caption + div > div.highlight > pre {
+    margin-top: 0;
+}
+
+code.descname {
+    background-color: transparent;
+    font-weight: bold;
+    font-size: 1.2em;
+}
+
+code.descclassname {
+    background-color: transparent;
+}
+
+code.xref, a code {
+    background-color: transparent;
+    font-weight: bold;
+}
+
+h1 code, h2 code, h3 code, h4 code, h5 code, h6 code {
+    background-color: transparent;
+}
+
+.viewcode-link {
+    float: right;
+}
+
+.viewcode-back {
+    float: right;
+    font-family: sans-serif;
+}
+
+div.viewcode-block:target {
+    margin: -1px -10px;
+    padding: 0 10px;
+}
+
+/* -- math display ---------------------------------------------------------- */
+
+img.math {
+    vertical-align: middle;
+}
+
+div.body div.math p {
+    text-align: center;
+}
+
+span.eqno {
+    float: right;
+}
+
+/* -- printout stylesheet --------------------------------------------------- */
+
+@media print {
+    div.document,
+    div.documentwrapper,
+    div.bodywrapper {
+        margin: 0 !important;
+        width: 100%;
+    }
+
+    div.sphinxsidebar,
+    div.related,
+    div.footer,
+    #top-link {
+        display: none;
+    }
+}
\ No newline at end of file

Added: incubator/usergrid/site/publish/documents/_static/comment-bright.png
URL: http://svn.apache.org/viewvc/incubator/usergrid/site/publish/documents/_static/comment-bright.png?rev=1633650&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/usergrid/site/publish/documents/_static/comment-bright.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/usergrid/site/publish/documents/_static/comment-close.png
URL: http://svn.apache.org/viewvc/incubator/usergrid/site/publish/documents/_static/comment-close.png?rev=1633650&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/usergrid/site/publish/documents/_static/comment-close.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/usergrid/site/publish/documents/_static/comment.png
URL: http://svn.apache.org/viewvc/incubator/usergrid/site/publish/documents/_static/comment.png?rev=1633650&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/usergrid/site/publish/documents/_static/comment.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/usergrid/site/publish/documents/_static/css/badge_only.css
URL: http://svn.apache.org/viewvc/incubator/usergrid/site/publish/documents/_static/css/badge_only.css?rev=1633650&view=auto
==============================================================================
--- incubator/usergrid/site/publish/documents/_static/css/badge_only.css (added)
+++ incubator/usergrid/site/publish/documents/_static/css/badge_only.css Wed Oct 22 16:47:12 2014
@@ -0,0 +1,2 @@
+.fa:before{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-weight:normal;font-style:normal;src:url("../font/fontawesome_webfont.eot");src:url("../font/fontawesome_webfont.eot?#iefix") format("embedded-opentype"),url("../font/fontawesome_webfont.woff") format("woff"),url("../font/fontawesome_webfont.ttf") format("truetype"),url("../font/fontawesome_webfont.svg#FontAwesome") format("svg")}.fa:before{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:normal;line-height:1;text-decoration:inherit}a .fa{display:inline-block;text-decoration:inherit}li .fa{display:inline-block}li .fa-large:before,li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-0.8em}ul.fas li .fa{width:0.8em}ul.fas li .fa-large:before,ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before{content:""}.icon-b
 ook:before{content:""}.fa-caret-down:before{content:""}.icon-caret-down:before{content:""}.fa-caret-up:before{content:""}.icon-caret-up:before{content:""}.fa-caret-left:before{content:""}.icon-caret-left:before{content:""}.fa-caret-right:before{content:""}.icon-caret-right:before{content:""}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;border-top:solid 10px #343131;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;z-index:400}.rst-versions a{color:#2980B9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27AE60;*zoom:1}.rst-versions .rst-current-version:before,.rst-versions .rst-current-version:after{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-versions .rst-current-version .fa{co
 lor:#fcfcfc}.rst-versions .rst-current-version .fa-book{float:left}.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#E74C3C;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#F1C40F;color:#000}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:gray;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:solid 1px #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px}.rst-versions.rst-badge .icon-book{float:none}.rst-versions.rst-badge .fa-book{float:none}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rs
 t-badge.shift-up .rst-current-version .fa-book{float:left}.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge .rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width: 768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}img{width:100%;height:auto}}
+/*# sourceMappingURL=badge_only.css.map */

Added: incubator/usergrid/site/publish/documents/_static/css/theme.css
URL: http://svn.apache.org/viewvc/incubator/usergrid/site/publish/documents/_static/css/theme.css?rev=1633650&view=auto
==============================================================================
--- incubator/usergrid/site/publish/documents/_static/css/theme.css (added)
+++ incubator/usergrid/site/publish/documents/_static/css/theme.css Wed Oct 22 16:47:12 2014
@@ -0,0 +1,5 @@
+*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}[hidden]{display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:hover,a:active{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;color:#000;text-decoration:none}mark{background:#ff0;color:#000;font-style:italic;font-weight:bold}pre,code,.rst-content tt,kbd,samp{font-family:monospace,serif;_font-family:"courier new",monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:before,q:after{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:bas
 eline}sup{top:-0.5em}sub{bottom:-0.25em}ul,ol,dl{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure{margin:0}form{margin:0}fieldset{border:0;margin:0;padding:0}label{cursor:pointer}legend{border:0;*margin-left:-7px;padding:0;white-space:normal}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0;*width:13px;*height:13px}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-decoration,input[typ
 e="search"]::-webkit-search-cancel-button{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top;resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:0.2em 0;background:#ccc;color:#000;padding:0.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none !important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{html,body,section{background:none !important}*{box-shadow:none !important;
 text-shadow:none !important;filter:none !important;-ms-filter:none !important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:0.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}.fa:before,.rst-content .admonition-title:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content dl dt .headerlink:before,.icon:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-i
 nput-context:before,.wy-alert,.rst-content .note,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .warning,.rst-content .seealso,.rst-content .admonition-todo,.btn,input[type="text"],input[type="password"],input[type="email"],input[type="url"],input[type="date"],input[type="month"],input[type="time"],input[type="datetime"],input[type="datetime-local"],input[type="week"],input[type="number"],input[type="search"],input[type="tel"],input[type="color"],select,textarea,.wy-menu-vertical li.on a,.wy-menu-vertical li.current>a,.wy-side-nav-search>a,.wy-side-nav-search .wy-dropdown>a,.wy-nav-top a{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:""}.clearfix:after{clear:both}/*!
+ *  Font Awesome 4.1.0 by @davegandy - http://fontawesome.io - @fontawesome
+ *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)

[... 3 lines stripped ...]
Added: incubator/usergrid/site/publish/documents/_static/doctools.js
URL: http://svn.apache.org/viewvc/incubator/usergrid/site/publish/documents/_static/doctools.js?rev=1633650&view=auto
==============================================================================
--- incubator/usergrid/site/publish/documents/_static/doctools.js (added)
+++ incubator/usergrid/site/publish/documents/_static/doctools.js Wed Oct 22 16:47:12 2014
@@ -0,0 +1,263 @@
+/*
+ * doctools.js
+ * ~~~~~~~~~~~
+ *
+ * Sphinx JavaScript utilities for all documentation.
+ *
+ * :copyright: Copyright 2007-2014 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+
+/**
+ * select a different prefix for underscore
+ */
+$u = _.noConflict();
+
+/**
+ * make the code below compatible with browsers without
+ * an installed firebug like debugger
+if (!window.console || !console.firebug) {
+  var names = ["log", "debug", "info", "warn", "error", "assert", "dir",
+    "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace",
+    "profile", "profileEnd"];
+  window.console = {};
+  for (var i = 0; i < names.length; ++i)
+    window.console[names[i]] = function() {};
+}
+ */
+
+/**
+ * small helper function to urldecode strings
+ */
+jQuery.urldecode = function(x) {
+  return decodeURIComponent(x).replace(/\+/g, ' ');
+};
+
+/**
+ * small helper function to urlencode strings
+ */
+jQuery.urlencode = encodeURIComponent;
+
+/**
+ * This function returns the parsed url parameters of the
+ * current request. Multiple values per key are supported,
+ * it will always return arrays of strings for the value parts.
+ */
+jQuery.getQueryParameters = function(s) {
+  if (typeof s == 'undefined')
+    s = document.location.search;
+  var parts = s.substr(s.indexOf('?') + 1).split('&');
+  var result = {};
+  for (var i = 0; i < parts.length; i++) {
+    var tmp = parts[i].split('=', 2);
+    var key = jQuery.urldecode(tmp[0]);
+    var value = jQuery.urldecode(tmp[1]);
+    if (key in result)
+      result[key].push(value);
+    else
+      result[key] = [value];
+  }
+  return result;
+};
+
+/**
+ * highlight a given string on a jquery object by wrapping it in
+ * span elements with the given class name.
+ */
+jQuery.fn.highlightText = function(text, className) {
+  function highlight(node) {
+    if (node.nodeType == 3) {
+      var val = node.nodeValue;
+      var pos = val.toLowerCase().indexOf(text);
+      if (pos >= 0 && !jQuery(node.parentNode).hasClass(className)) {
+        var span = document.createElement("span");
+        span.className = className;
+        span.appendChild(document.createTextNode(val.substr(pos, text.length)));
+        node.parentNode.insertBefore(span, node.parentNode.insertBefore(
+          document.createTextNode(val.substr(pos + text.length)),
+          node.nextSibling));
+        node.nodeValue = val.substr(0, pos);
+      }
+    }
+    else if (!jQuery(node).is("button, select, textarea")) {
+      jQuery.each(node.childNodes, function() {
+        highlight(this);
+      });
+    }
+  }
+  return this.each(function() {
+    highlight(this);
+  });
+};
+
+/*
+ * backward compatibility for jQuery.browser
+ * This will be supported until firefox bug is fixed.
+ */
+if (!jQuery.browser) {
+  jQuery.uaMatch = function(ua) {
+    ua = ua.toLowerCase();
+
+    var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
+      /(webkit)[ \/]([\w.]+)/.exec(ua) ||
+      /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
+      /(msie) ([\w.]+)/.exec(ua) ||
+      ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
+      [];
+
+    return {
+      browser: match[ 1 ] || "",
+      version: match[ 2 ] || "0"
+    };
+  };
+  jQuery.browser = {};
+  jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true;
+}
+
+/**
+ * Small JavaScript module for the documentation.
+ */
+var Documentation = {
+
+  init : function() {
+    this.fixFirefoxAnchorBug();
+    this.highlightSearchWords();
+    this.initIndexTable();
+  },
+
+  /**
+   * i18n support
+   */
+  TRANSLATIONS : {},
+  PLURAL_EXPR : function(n) { return n == 1 ? 0 : 1; },
+  LOCALE : 'unknown',
+
+  // gettext and ngettext don't access this so that the functions
+  // can safely bound to a different name (_ = Documentation.gettext)
+  gettext : function(string) {
+    var translated = Documentation.TRANSLATIONS[string];
+    if (typeof translated == 'undefined')
+      return string;
+    return (typeof translated == 'string') ? translated : translated[0];
+  },
+
+  ngettext : function(singular, plural, n) {
+    var translated = Documentation.TRANSLATIONS[singular];
+    if (typeof translated == 'undefined')
+      return (n == 1) ? singular : plural;
+    return translated[Documentation.PLURALEXPR(n)];
+  },
+
+  addTranslations : function(catalog) {
+    for (var key in catalog.messages)
+      this.TRANSLATIONS[key] = catalog.messages[key];
+    this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')');
+    this.LOCALE = catalog.locale;
+  },
+
+  /**
+   * add context elements like header anchor links
+   */
+  addContextElements : function() {
+    $('div[id] > :header:first').each(function() {
+      $('<a class="headerlink">\u00B6</a>').
+      attr('href', '#' + this.id).
+      attr('title', _('Permalink to this headline')).
+      appendTo(this);
+    });
+    $('dt[id]').each(function() {
+      $('<a class="headerlink">\u00B6</a>').
+      attr('href', '#' + this.id).
+      attr('title', _('Permalink to this definition')).
+      appendTo(this);
+    });
+  },
+
+  /**
+   * workaround a firefox stupidity
+   * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075
+   */
+  fixFirefoxAnchorBug : function() {
+    if (document.location.hash && $.browser.mozilla)
+      window.setTimeout(function() {
+        document.location.href += '';
+      }, 10);
+  },
+
+  /**
+   * highlight the search words provided in the url in the text
+   */
+  highlightSearchWords : function() {
+    var params = $.getQueryParameters();
+    var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : [];
+    if (terms.length) {
+      var body = $('div.body');
+      if (!body.length) {
+        body = $('body');
+      }
+      window.setTimeout(function() {
+        $.each(terms, function() {
+          body.highlightText(this.toLowerCase(), 'highlighted');
+        });
+      }, 10);
+      $('<p class="highlight-link"><a href="javascript:Documentation.' +
+        'hideSearchWords()">' + _('Hide Search Matches') + '</a></p>')
+          .appendTo($('#searchbox'));
+    }
+  },
+
+  /**
+   * init the domain index toggle buttons
+   */
+  initIndexTable : function() {
+    var togglers = $('img.toggler').click(function() {
+      var src = $(this).attr('src');
+      var idnum = $(this).attr('id').substr(7);
+      $('tr.cg-' + idnum).toggle();
+      if (src.substr(-9) == 'minus.png')
+        $(this).attr('src', src.substr(0, src.length-9) + 'plus.png');
+      else
+        $(this).attr('src', src.substr(0, src.length-8) + 'minus.png');
+    }).css('display', '');
+    if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) {
+        togglers.click();
+    }
+  },
+
+  /**
+   * helper function to hide the search marks again
+   */
+  hideSearchWords : function() {
+    $('#searchbox .highlight-link').fadeOut(300);
+    $('span.highlighted').removeClass('highlighted');
+  },
+
+  /**
+   * make the url absolute
+   */
+  makeURL : function(relativeURL) {
+    return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL;
+  },
+
+  /**
+   * get the current relative url
+   */
+  getCurrentURL : function() {
+    var path = document.location.pathname;
+    var parts = path.split(/\//);
+    $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() {
+      if (this == '..')
+        parts.pop();
+    });
+    var url = parts.join('/');
+    return path.substring(url.lastIndexOf('/') + 1, path.length - 1);
+  }
+};
+
+// quick alias for translations
+_ = Documentation.gettext;
+
+$(document).ready(function() {
+  Documentation.init();
+});

Added: incubator/usergrid/site/publish/documents/_static/down-pressed.png
URL: http://svn.apache.org/viewvc/incubator/usergrid/site/publish/documents/_static/down-pressed.png?rev=1633650&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/usergrid/site/publish/documents/_static/down-pressed.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/usergrid/site/publish/documents/_static/down.png
URL: http://svn.apache.org/viewvc/incubator/usergrid/site/publish/documents/_static/down.png?rev=1633650&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/usergrid/site/publish/documents/_static/down.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/usergrid/site/publish/documents/_static/file.png
URL: http://svn.apache.org/viewvc/incubator/usergrid/site/publish/documents/_static/file.png?rev=1633650&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/usergrid/site/publish/documents/_static/file.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/usergrid/site/publish/documents/_static/fonts/FontAwesome.otf
URL: http://svn.apache.org/viewvc/incubator/usergrid/site/publish/documents/_static/fonts/FontAwesome.otf?rev=1633650&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/usergrid/site/publish/documents/_static/fonts/FontAwesome.otf
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/usergrid/site/publish/documents/_static/fonts/fontawesome-webfont.eot
URL: http://svn.apache.org/viewvc/incubator/usergrid/site/publish/documents/_static/fonts/fontawesome-webfont.eot?rev=1633650&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/usergrid/site/publish/documents/_static/fonts/fontawesome-webfont.eot
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream



Mime
View raw message