You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@usergrid.apache.org by mr...@apache.org on 2016/06/02 17:07:21 UTC
[03/54] [abbrv] usergrid git commit: Initial commit for new JavaSDK.
http://git-wip-us.apache.org/repos/asf/usergrid/blob/2e127e62/sdks/java/src/main/java/org/apache/usergrid/java/client/entities/User.java
----------------------------------------------------------------------
diff --git a/sdks/java/src/main/java/org/apache/usergrid/java/client/entities/User.java b/sdks/java/src/main/java/org/apache/usergrid/java/client/entities/User.java
deleted file mode 100644
index 0046ab2..0000000
--- a/sdks/java/src/main/java/org/apache/usergrid/java/client/entities/User.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.usergrid.java.client.entities;
-
-import static com.fasterxml.jackson.databind.annotation.JsonSerialize.Inclusion.NON_NULL;
-import static org.apache.usergrid.java.client.utils.JsonUtils.getBooleanProperty;
-import static org.apache.usergrid.java.client.utils.JsonUtils.getStringProperty;
-import static org.apache.usergrid.java.client.utils.JsonUtils.setBooleanProperty;
-import static org.apache.usergrid.java.client.utils.JsonUtils.setStringProperty;
-
-import java.util.List;
-
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-
-public class User extends Entity {
-
- public final static String ENTITY_TYPE = "user";
-
- public final static String PROPERTY_USERNAME = "username";
- public final static String PROPERTY_EMAIL = "email";
- public final static String PROPERTY_NAME = "name";
- public final static String PROPERTY_FIRSTNAME = "firstname";
- public final static String PROPERTY_MIDDLENAME = "middlename";
- public final static String PROPERTY_LASTNAME = "lastname";
- public final static String PROPERTY_ACTIVATED = "activated";
- public final static String PROPERTY_PICTURE = "picture";
- public final static String PROPERTY_DISABLED = "disabled";
-
- public User() {
- super();
- setType(ENTITY_TYPE);
- }
-
- public User(Entity entity) {
- super();
- properties = entity.properties;
- setType(ENTITY_TYPE);
- }
-
- @Override
- @JsonIgnore
- public String getNativeType() {
- return ENTITY_TYPE;
- }
-
- @Override
- @JsonIgnore
- public List<String> getPropertyNames() {
- List<String> properties = super.getPropertyNames();
- properties.add(PROPERTY_USERNAME);
- properties.add(PROPERTY_EMAIL);
- properties.add(PROPERTY_NAME);
- properties.add(PROPERTY_FIRSTNAME);
- properties.add(PROPERTY_MIDDLENAME);
- properties.add(PROPERTY_LASTNAME);
- properties.add(PROPERTY_ACTIVATED);
- properties.add(PROPERTY_PICTURE);
- properties.add(PROPERTY_DISABLED);
- return properties;
- }
-
- @JsonSerialize(include = NON_NULL)
- public String getUsername() {
- return getStringProperty(properties, PROPERTY_USERNAME);
- }
-
- public void setUsername(String username) {
- setStringProperty(properties, PROPERTY_USERNAME, username);
- }
-
- @JsonSerialize(include = NON_NULL)
- public String getName() {
- return getStringProperty(properties, PROPERTY_NAME);
- }
-
- public void setName(String name) {
- setStringProperty(properties, PROPERTY_NAME, name);
- }
-
- @JsonSerialize(include = NON_NULL)
- public String getEmail() {
- return getStringProperty(properties, PROPERTY_EMAIL);
- }
-
- public void setEmail(String email) {
- setStringProperty(properties, PROPERTY_EMAIL, email);
- }
-
- @JsonSerialize(include = NON_NULL)
- public Boolean isActivated() {
- return getBooleanProperty(properties, PROPERTY_ACTIVATED);
- }
-
- public void setActivated(Boolean activated) {
- setBooleanProperty(properties, PROPERTY_ACTIVATED, activated);
- }
-
- @JsonSerialize(include = NON_NULL)
- public Boolean isDisabled() {
- return getBooleanProperty(properties, PROPERTY_DISABLED);
- }
-
- public void setDisabled(Boolean disabled) {
- setBooleanProperty(properties, PROPERTY_DISABLED, disabled);
- }
-
- @JsonSerialize(include = NON_NULL)
- public String getFirstname() {
- return getStringProperty(properties, PROPERTY_FIRSTNAME);
- }
-
- public void setFirstname(String firstname) {
- setStringProperty(properties, PROPERTY_FIRSTNAME, firstname);
- }
-
- @JsonSerialize(include = NON_NULL)
- public String getMiddlename() {
- return getStringProperty(properties, PROPERTY_MIDDLENAME);
- }
-
- public void setMiddlename(String middlename) {
- setStringProperty(properties, PROPERTY_MIDDLENAME, middlename);
- }
-
- @JsonSerialize(include = NON_NULL)
- public String getLastname() {
- return getStringProperty(properties, PROPERTY_LASTNAME);
- }
-
- public void setLastname(String lastname) {
- setStringProperty(properties, PROPERTY_LASTNAME, lastname);
- }
-
- @JsonSerialize(include = NON_NULL)
- public String getPicture() {
- return getStringProperty(properties, PROPERTY_PICTURE);
- }
-
- public void setPicture(String picture) {
- setStringProperty(properties, PROPERTY_PICTURE, picture);
- }
-
-}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/2e127e62/sdks/java/src/main/java/org/apache/usergrid/java/client/exception/ClientException.java
----------------------------------------------------------------------
diff --git a/sdks/java/src/main/java/org/apache/usergrid/java/client/exception/ClientException.java b/sdks/java/src/main/java/org/apache/usergrid/java/client/exception/ClientException.java
deleted file mode 100644
index 24f27e2..0000000
--- a/sdks/java/src/main/java/org/apache/usergrid/java/client/exception/ClientException.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.usergrid.java.client.exception;
-
-/**
- * Simple wrapper for client exceptions
- * @author tnine
- *
- */
-public class ClientException extends RuntimeException{
-
- /**
- *
- */
- private static final long serialVersionUID = 1L;
-
- /**
- * @param message
- * @param cause
- */
- public ClientException(String message, Throwable cause) {
- super(message, cause);
- }
-
-
-
-}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/2e127e62/sdks/java/src/main/java/org/apache/usergrid/java/client/exception/UsergridException.java
----------------------------------------------------------------------
diff --git a/sdks/java/src/main/java/org/apache/usergrid/java/client/exception/UsergridException.java b/sdks/java/src/main/java/org/apache/usergrid/java/client/exception/UsergridException.java
new file mode 100644
index 0000000..a9b0cf7
--- /dev/null
+++ b/sdks/java/src/main/java/org/apache/usergrid/java/client/exception/UsergridException.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.usergrid.java.client.exception;
+
+import org.jetbrains.annotations.NotNull;
+
+@SuppressWarnings("unused")
+public class UsergridException extends RuntimeException {
+
+ private int responseCode;
+
+ public int getResponseCode() {
+ return responseCode;
+ }
+ public void setResponseCode(final int responseCode) { this.responseCode = responseCode; }
+
+ public UsergridException(@NotNull final String message) {
+ super(message);
+ }
+
+ public UsergridException(@NotNull final String message, @NotNull final Throwable cause) {
+ super(message, cause);
+ }
+
+ public UsergridException(@NotNull final String message, final int responseCode) {
+ super(message);
+ this.responseCode = responseCode;
+ }
+
+ public UsergridException(@NotNull final String message, @NotNull final Throwable cause, final int responseCode) {
+ super(message, cause);
+ this.responseCode = responseCode;
+ }
+}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/2e127e62/sdks/java/src/main/java/org/apache/usergrid/java/client/model/UsergridDevice.java
----------------------------------------------------------------------
diff --git a/sdks/java/src/main/java/org/apache/usergrid/java/client/model/UsergridDevice.java b/sdks/java/src/main/java/org/apache/usergrid/java/client/model/UsergridDevice.java
new file mode 100644
index 0000000..1833afb
--- /dev/null
+++ b/sdks/java/src/main/java/org/apache/usergrid/java/client/model/UsergridDevice.java
@@ -0,0 +1,60 @@
+package org.apache.usergrid.java.client.model;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.databind.JsonNode;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.Map;
+
+@SuppressWarnings("unused")
+public class UsergridDevice extends UsergridEntity {
+ @NotNull public static String DEVICE_ENTITY_TYPE = "device";
+
+ @Nullable private String model;
+ @Nullable private String platform;
+ @Nullable private String osVersion;
+
+ public UsergridDevice() {
+ super(DEVICE_ENTITY_TYPE);
+ }
+
+ public UsergridDevice(@Nullable final String name) {
+ super(DEVICE_ENTITY_TYPE,name);
+ }
+
+ public UsergridDevice(@NotNull final Map<String, JsonNode> properties) {
+ super(DEVICE_ENTITY_TYPE,null,properties);
+ }
+
+ public UsergridDevice(@Nullable final String name, @NotNull final Map<String, JsonNode> properties) {
+ super(DEVICE_ENTITY_TYPE,name,properties);
+ }
+
+ @Nullable @JsonProperty("deviceModel")
+ public String getModel() {
+ return this.model;
+ }
+ @JsonProperty("deviceModel")
+ public void setModel(@Nullable final String model) {
+ this.model = model;
+ }
+
+ @Nullable @JsonProperty("devicePlatform")
+ public String getPlatform() {
+ return this.platform;
+ }
+ @JsonProperty("devicePlatform")
+ public void setPlatform(@Nullable final String platform) {
+ this.platform = platform;
+ }
+
+ @Nullable @JsonProperty("deviceOSVersion")
+ public String getOsVersion() {
+ return this.osVersion;
+ }
+ @JsonProperty("deviceOSVersion")
+ public void setOsVersion(@Nullable final String osVersion) {
+ this.osVersion = osVersion;
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/usergrid/blob/2e127e62/sdks/java/src/main/java/org/apache/usergrid/java/client/model/UsergridEntity.java
----------------------------------------------------------------------
diff --git a/sdks/java/src/main/java/org/apache/usergrid/java/client/model/UsergridEntity.java b/sdks/java/src/main/java/org/apache/usergrid/java/client/model/UsergridEntity.java
new file mode 100644
index 0000000..f1dc622
--- /dev/null
+++ b/sdks/java/src/main/java/org/apache/usergrid/java/client/model/UsergridEntity.java
@@ -0,0 +1,484 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.usergrid.java.client.model;
+
+import com.fasterxml.jackson.annotation.*;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.ObjectReader;
+import com.fasterxml.jackson.databind.node.*;
+import org.apache.usergrid.java.client.UsergridEnums.*;
+import org.apache.usergrid.java.client.Usergrid;
+import org.apache.usergrid.java.client.UsergridClient;
+import org.apache.usergrid.java.client.response.UsergridResponse;
+import org.apache.usergrid.java.client.utils.JsonUtils;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.io.IOException;
+import java.util.*;
+
+import static org.apache.usergrid.java.client.utils.JsonUtils.*;
+
+@SuppressWarnings("unused")
+public class UsergridEntity {
+
+ @NotNull private static final HashMap<String,Class<? extends UsergridEntity>> subclassMappings = new HashMap<>();
+ @NotNull private static final ObjectMapper entityUpdateMapper = new ObjectMapper();
+ @NotNull private final ObjectReader entityUpdateReader = entityUpdateMapper.readerForUpdating(this);
+
+ static {
+ subclassMappings.put("user",UsergridUser.class);
+ subclassMappings.put("device",UsergridDevice.class);
+ }
+
+ @NotNull private String type;
+ @Nullable private String uuid;
+ @Nullable private String name;
+ @Nullable private Long created;
+ @Nullable private Long modified;
+
+ @NotNull private Map<String, JsonNode> properties = new HashMap<>();
+
+ public UsergridEntity(@JsonProperty("type") @NotNull final String type) {
+ this.type = type;
+ }
+
+ public UsergridEntity(@NotNull final String type, @Nullable final String name) {
+ this(type);
+ if( name != null ) {
+ this.name = name;
+ }
+ }
+
+ public UsergridEntity(@NotNull final String type, @Nullable final String name, @NotNull final Map<String, JsonNode> properties) {
+ this(type,name);
+ this.updatePropertiesWithMap(properties);
+ }
+
+ @Nullable
+ public static Class<? extends UsergridEntity> customSubclassForType(@NotNull final String type) {
+ return UsergridEntity.subclassMappings.get(type);
+ }
+
+ public void copyAllProperties(@NotNull final UsergridEntity fromEntity) {
+ try {
+ this.updatePropertiesWithJsonNode(entityUpdateMapper.valueToTree(fromEntity));
+ } catch( IllegalArgumentException e ) { System.out.print("Usergrid Error: Unable to update properties from entity - " + fromEntity.toString()); }
+ }
+
+ public void updatePropertiesWithMap(@NotNull final Map<String,JsonNode> properties) {
+ try {
+ this.updatePropertiesWithJsonNode(entityUpdateMapper.valueToTree(properties));
+ } catch( IllegalArgumentException e ) { System.out.print("Usergrid Error: Unable to update properties from map - " + properties.toString()); }
+ }
+
+ public void updatePropertiesWithJsonNode(@NotNull final JsonNode node) {
+ try {
+ entityUpdateReader.readValue(node);
+ } catch( IOException e ) { System.out.print("Usergrid Error: Unable to update properties from jsonNode - " + node.toString()); }
+ }
+
+ public static void mapCustomSubclassToType(@NotNull final String type, @NotNull final Class<? extends UsergridEntity> subclass) {
+ UsergridEntity.subclassMappings.put(type,subclass);
+ }
+
+ @NotNull @Override public String toString() {
+ return toJsonString(this);
+ }
+ @NotNull public JsonNode toJsonObjectValue() {
+ return toJsonNode(this);
+ }
+
+ @JsonIgnore
+ public boolean isUser() { return (this instanceof UsergridUser || this.getType().equalsIgnoreCase(UsergridUser.USER_ENTITY_TYPE)); }
+
+ @NotNull public String getType() { return this.type; }
+ private void setType(@NotNull final String type) { this.type = type; }
+
+ @Nullable public String getUuid() { return this.uuid; }
+ private void setUuid(@NotNull final String uuid) { this.uuid = uuid; }
+
+ @Nullable public String getName() { return this.name; }
+ protected void setName(@Nullable final String name) { this.name = name; }
+
+ @Nullable public Long getCreated() { return this.created; }
+ private void setCreated(@NotNull final Long created) { this.created = created; }
+
+ @Nullable public Long getModified() { return this.modified; }
+ private void setModified(@NotNull final Long modified) { this.modified = modified; }
+
+ public void setLocation(final double latitude, final double longitude) {
+ ObjectNode rootNode = JsonUtils.createObjectNode();
+ rootNode.put("latitude", latitude);
+ rootNode.put("longitude", longitude);
+ setObjectProperty(this.properties, "location", rootNode);
+ }
+
+ @Nullable
+ public String uuidOrName() {
+ String uuidOrName = this.getUuid();
+ if( uuidOrName == null ) {
+ uuidOrName = this.getName();
+ }
+ return uuidOrName;
+ }
+
+ @NotNull
+ public UsergridResponse reload() {
+ return this.reload(Usergrid.getInstance());
+ }
+
+ @NotNull
+ public UsergridResponse reload(@NotNull final UsergridClient client) {
+ String uuidOrName = this.uuidOrName();
+ if( uuidOrName == null ) {
+ return UsergridResponse.fromError(client, "No UUID or name found.", "The entity object must have a `uuid` or `name` assigned.");
+ }
+ UsergridResponse response = client.GET(this.getType(), uuidOrName);
+ if( response.ok() ) {
+ UsergridEntity responseEntity = response.first();
+ if( responseEntity != null ) {
+ this.copyAllProperties(responseEntity);
+ }
+ }
+ return response;
+ }
+
+ @NotNull
+ public UsergridResponse save() {
+ return this.save(Usergrid.getInstance());
+ }
+
+ @NotNull
+ public UsergridResponse save(@NotNull final UsergridClient client) {
+ UsergridResponse response;
+ if( this.getUuid() != null ) {
+ response = client.PUT(this);
+ } else {
+ response = client.POST(this);
+ }
+ if( response.ok() ) {
+ UsergridEntity responseEntity = response.first();
+ if( responseEntity != null ) {
+ this.copyAllProperties(responseEntity);
+ }
+ }
+ return response;
+ }
+
+ @NotNull
+ public UsergridResponse remove() {
+ return this.remove(Usergrid.getInstance());
+ }
+
+ @NotNull
+ public UsergridResponse remove(@NotNull final UsergridClient client) {
+ return client.DELETE(this);
+ }
+
+ @NotNull
+ public UsergridResponse connect(@NotNull final String relationship, @NotNull final UsergridEntity toEntity) {
+ return this.connect(Usergrid.getInstance(), relationship, toEntity);
+ }
+
+ @NotNull
+ public UsergridResponse connect(@NotNull final UsergridClient client, @NotNull final String relationship, @NotNull final UsergridEntity toEntity) {
+ return client.connect(this,relationship,toEntity);
+ }
+
+ @NotNull
+ public UsergridResponse disconnect(@NotNull final String relationship, @NotNull final UsergridEntity fromEntity) {
+ return this.disconnect(Usergrid.getInstance(), relationship, fromEntity);
+ }
+
+ @NotNull
+ public UsergridResponse disconnect(@NotNull final UsergridClient client, @NotNull final String relationship, @NotNull final UsergridEntity fromEntity) {
+ return client.disconnect(this,relationship,fromEntity);
+ }
+
+ @NotNull
+ public UsergridResponse getConnections(@NotNull final UsergridDirection direction, @NotNull final String relationship) {
+ return this.getConnections(Usergrid.getInstance(),direction,relationship);
+ }
+
+ @NotNull
+ public UsergridResponse getConnections(@NotNull final UsergridClient client, @NotNull final UsergridDirection direction, @NotNull final String relationship) {
+ return client.getConnections(direction,this,relationship);
+ }
+
+ public void removeProperty(@NotNull final String name) {
+ putProperty(name, NullNode.getInstance());
+ }
+
+ public void removeProperties(@NotNull final List<String> names) {
+ for( String propertyName : names ) {
+ this.removeProperty(propertyName);
+ }
+ }
+
+ public void putProperty(@NotNull final String name, @NotNull final String value) {
+ this.putProperty(name, JsonNodeFactory.instance.textNode(value));
+ }
+ public void putProperty(@NotNull final String name, final boolean value) {
+ this.putProperty(name, JsonNodeFactory.instance.booleanNode(value));
+ }
+ public void putProperty(@NotNull final String name, @NotNull final List value) {
+ this.putProperty(name, JsonNodeFactory.instance.pojoNode(value));
+ }
+ public void putProperty(@NotNull final String name, final int value) {
+ this.putProperty(name, JsonNodeFactory.instance.numberNode(value));
+ }
+ public void putProperty(@NotNull final String name, final long value) {
+ this.putProperty(name, JsonNodeFactory.instance.numberNode(value));
+ }
+ public void putProperty(@NotNull final String name, final float value) {
+ this.putProperty(name, JsonNodeFactory.instance.numberNode(value));
+ }
+ public void putProperty(@NotNull final String name, @Nullable final JsonNode value) {
+ UsergridEntityProperties entityProperty = UsergridEntityProperties.fromString(name);
+ if( entityProperty != null && !entityProperty.isMutableForEntity(this)) {
+ return;
+ }
+
+ JsonNode valueNode = value;
+ if( valueNode == null ) {
+ valueNode = NullNode.getInstance();
+ }
+ this.updatePropertiesWithMap(Collections.singletonMap(name,valueNode));
+ }
+ public void putProperties(@NotNull final String jsonString) {
+ try {
+ JsonNode jsonNode = entityUpdateMapper.readTree(jsonString);
+ this.putProperties(jsonNode);
+ } catch( Exception ignore ) {}
+ }
+ public void putProperties(@NotNull final Map<String, Object> properties) {
+ try {
+ JsonNode jsonNode = entityUpdateMapper.valueToTree(properties);
+ this.putProperties(jsonNode);
+ } catch( Exception ignore ) {}
+ }
+ public void putProperties(@NotNull final JsonNode jsonNode) {
+ HashMap<String,JsonNode> propertiesToUpdate = new HashMap<>();
+ Iterator<Map.Entry<String,JsonNode>> keys = jsonNode.fields();
+ while (keys.hasNext()) {
+ Map.Entry<String,JsonNode> entry = keys.next();
+ String key = entry.getKey();
+ UsergridEntityProperties entityProperty = UsergridEntityProperties.fromString(key);
+ if( entityProperty == null || entityProperty.isMutableForEntity(this) ) {
+ propertiesToUpdate.put(key,entry.getValue());
+ }
+ }
+ if( !propertiesToUpdate.isEmpty() ) {
+ this.updatePropertiesWithMap(propertiesToUpdate);
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ public void append(@NotNull final String name, @NotNull final Object value) {
+ this.append(name, (value instanceof List) ? (List<Object>) value : Collections.singletonList(value));
+ }
+
+ public void append(@NotNull final String name, @NotNull final List<Object> value) {
+ this.insert(name, value, Integer.MAX_VALUE);
+ }
+
+ @SuppressWarnings("unchecked")
+ public void insert(@NotNull final String name, @NotNull final Object value) {
+ this.insert(name, (value instanceof List) ? (List<Object>) value : Collections.singletonList(value), 0);
+ }
+
+ @SuppressWarnings("unchecked")
+ public void insert(@NotNull final String name, @NotNull final Object value, final int index) {
+ this.insert(name, (value instanceof List) ? (List<Object>) value : Collections.singletonList(value), index);
+ }
+
+ public void insert(@NotNull final String name, @NotNull final List<Object> value) {
+ this.insert(name,value,0);
+ }
+
+ public void insert(@NotNull final String name, @NotNull final List<Object> value, final int index) {
+ int indexToInsert = index;
+ if (indexToInsert < 0) {
+ indexToInsert = 0;
+ }
+ Object propertyValue = this.getEntityProperty(name);
+ if( propertyValue != null ) {
+ ArrayList<Object> propertyArrayValue = this.convertToList(propertyValue);
+ propertyArrayValue = this.insertIntoArray(propertyArrayValue,value,indexToInsert);
+ this.putProperty(name, propertyArrayValue);
+ } else {
+ this.putProperty(name, value);
+ }
+ }
+
+ public void pop(@NotNull final String name) {
+ ArrayList<Object> arrayToPop = this.getArrayToPopOrShift(name);
+ if( arrayToPop != null && !arrayToPop.isEmpty() ) {
+ arrayToPop.remove(arrayToPop.size() - 1);
+ this.putProperty(name, arrayToPop);
+ }
+ }
+
+ public void shift(@NotNull final String name) {
+ ArrayList<Object> arrayToShift = this.getArrayToPopOrShift(name);
+ if( arrayToShift != null && !arrayToShift.isEmpty() ) {
+ arrayToShift.remove(0);
+ this.putProperty(name, arrayToShift);
+ }
+ }
+
+ @Nullable
+ public <T> T getEntityProperty(@NotNull final String name) {
+ return JsonUtils.getProperty(this.properties, name);
+ }
+
+ @Nullable
+ public JsonNode getJsonNodeProperty(@NotNull final String name) {
+ return this.getProperties().get(name);
+ }
+
+ @Nullable
+ public String getStringProperty(@NotNull final String name) {
+ return JsonUtils.getStringProperty(this.getProperties(), name);
+ }
+
+ @Nullable
+ public Boolean getBooleanProperty(@NotNull final String name) {
+ Boolean booleanValue = null;
+ Object object = JsonUtils.getProperty(this.getProperties(), name);
+ if( object instanceof Boolean ) {
+ booleanValue = (Boolean)object;
+ }
+ return booleanValue;
+ }
+
+ @Nullable
+ public Number getNumberProperty(@NotNull final String name) {
+ Number numberValue = null;
+ Object object = JsonUtils.getProperty(this.getProperties(), name);
+ if( object instanceof Number ) {
+ numberValue = (Number)object;
+ }
+ return numberValue;
+ }
+
+ @Nullable
+ public Integer getIntegerProperty(@NotNull final String name) {
+ Integer integerValue = null;
+ Object object = JsonUtils.getProperty(this.getProperties(), name);
+ if( object instanceof Number ) {
+ integerValue = ((Number)object).intValue();
+ }
+ return integerValue;
+ }
+
+ @Nullable
+ public Float getFloatProperty(@NotNull final String name) {
+ Float floatValue = null;
+ Object object = JsonUtils.getProperty(this.getProperties(), name);
+ if( object instanceof Number ) {
+ floatValue = ((Number)object).floatValue();
+ }
+ return floatValue;
+ }
+
+ @Nullable
+ public Long getLongProperty(@NotNull final String name) {
+ Long longValue = null;
+ Object object = JsonUtils.getProperty(this.getProperties(), name);
+ if( object instanceof Number ) {
+ longValue = ((Number)object).longValue();
+ }
+ return longValue;
+ }
+
+ @JsonAnyGetter @NotNull
+ private Map<String, JsonNode> getProperties() {
+ return this.properties;
+ }
+
+ @JsonAnySetter
+ private void internalPutProperty(@NotNull final String name, @Nullable final JsonNode value) {
+ if (value == null) {
+ properties.put(name, NullNode.instance);
+ } else {
+ properties.put(name, value);
+ }
+ }
+
+ @Nullable
+ @SuppressWarnings("unchecked")
+ private ArrayList<Object> getArrayToPopOrShift(@NotNull final String name) {
+ Object entityProperty = getEntityProperty(name);
+ ArrayList<Object> arrayToPopOrShift = null;
+ if (entityProperty instanceof POJONode) {
+ Object objectValue = ((POJONode) entityProperty).getPojo();
+ if (objectValue instanceof List) {
+ arrayToPopOrShift = new ArrayList<>((List) objectValue);
+ } else {
+ arrayToPopOrShift = new ArrayList<>();
+ arrayToPopOrShift.add(objectValue);
+ }
+ } else if( entityProperty instanceof ArrayNode ) {
+ arrayToPopOrShift = JsonUtils.convertToArrayList((ArrayNode)entityProperty);
+ } else if( entityProperty instanceof List ) {
+ arrayToPopOrShift = new ArrayList<>((List) entityProperty);
+ }
+ return arrayToPopOrShift;
+ }
+
+ @NotNull
+ private ArrayList<Object> convertToList(@NotNull final Object value) {
+ ArrayList<Object> arrayList = new ArrayList<>();
+ if( value instanceof ArrayNode ) {
+ arrayList = JsonUtils.convertToArrayList((ArrayNode)value);
+ } else if (value instanceof POJONode) {
+ Object objectValue = ((POJONode) value).getPojo();
+ if( objectValue instanceof List ) {
+ arrayList.addAll((List)objectValue);
+ } else {
+ arrayList.add(objectValue);
+ }
+ } else if (value instanceof List) {
+ arrayList.addAll((List)value);
+ } else {
+ arrayList.add(value);
+ }
+ return arrayList;
+ }
+
+ @NotNull
+ private ArrayList<Object> insertIntoArray(@NotNull final List<Object> propertyArrayNode, @NotNull final List<Object> arrayToInsert, final int index) {
+ ArrayList<Object> mergedArray = new ArrayList<>();
+ if (propertyArrayNode.size() <= 0 || arrayToInsert.isEmpty()) {
+ mergedArray.addAll(arrayToInsert);
+ } else if ( index <= 0 ) {
+ mergedArray.addAll(arrayToInsert);
+ mergedArray.addAll(propertyArrayNode);
+ } else if ( index > 0 ) {
+ mergedArray.addAll(propertyArrayNode);
+ if ( index > propertyArrayNode.size() ) {
+ mergedArray.addAll(arrayToInsert);
+ } else {
+ mergedArray.addAll(index,arrayToInsert);
+ }
+ }
+ return mergedArray;
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/usergrid/blob/2e127e62/sdks/java/src/main/java/org/apache/usergrid/java/client/model/UsergridUser.java
----------------------------------------------------------------------
diff --git a/sdks/java/src/main/java/org/apache/usergrid/java/client/model/UsergridUser.java b/sdks/java/src/main/java/org/apache/usergrid/java/client/model/UsergridUser.java
new file mode 100644
index 0000000..4092a21
--- /dev/null
+++ b/sdks/java/src/main/java/org/apache/usergrid/java/client/model/UsergridUser.java
@@ -0,0 +1,197 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.usergrid.java.client.model;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import org.apache.usergrid.java.client.Usergrid;
+import org.apache.usergrid.java.client.UsergridClient;
+import org.apache.usergrid.java.client.UsergridEnums.*;
+import org.apache.usergrid.java.client.auth.UsergridUserAuth;
+import org.apache.usergrid.java.client.query.UsergridQuery;
+import org.apache.usergrid.java.client.response.UsergridResponse;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.HashMap;
+
+@SuppressWarnings("unused")
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class UsergridUser extends UsergridEntity {
+ @NotNull public final static String USER_ENTITY_TYPE = "user";
+
+ @Nullable private UsergridUserAuth userAuth = null;
+
+ @Nullable private String username;
+ @Nullable private String email;
+ @Nullable private String password;
+ @Nullable private String picture;
+
+ private boolean activated = false;
+ private boolean disabled = false;
+
+ public UsergridUser() {
+ super(USER_ENTITY_TYPE);
+ }
+
+ public UsergridUser(@NotNull final String username, @Nullable final String password) {
+ super(USER_ENTITY_TYPE);
+ setUsername(username);
+ setPassword(password);
+ }
+
+ public UsergridUser(@NotNull final String name, @NotNull final HashMap<String, Object> propertyMap) {
+ super(USER_ENTITY_TYPE,name);
+ putProperties(propertyMap);
+ }
+
+ public UsergridUser(@Nullable final String name, @Nullable final String username, @Nullable final String email, @Nullable final String password) {
+ super(USER_ENTITY_TYPE,name);
+ setUsername(username);
+ setEmail(email);
+ setPassword(password);
+ }
+
+ public void setName(@Nullable final String name) { super.setName(name); }
+
+ @Nullable public String getUsername() { return this.username; }
+ public void setUsername(@Nullable final String username) { this.username = username; }
+
+ @Nullable public String getEmail() { return this.email; }
+ public void setEmail(@Nullable final String email) { this.email = email; }
+
+ @Nullable public String getPassword() { return this.password; }
+ public void setPassword(@Nullable final String password) { this.password = password; }
+
+ @Nullable public String setPicture() { return this.picture; }
+ public void setPicture(@Nullable final String picture) { this.picture = picture; }
+
+ public boolean isActivated() { return this.activated; }
+ public void setActivated(final boolean activated) { this.activated = activated; }
+
+ public boolean isDisabled() { return this.disabled; }
+ public void setDisabled(final boolean disabled) { this.disabled = disabled; }
+
+ @Nullable public UsergridUserAuth getUserAuth() { return this.userAuth; }
+ public void setUserAuth(@Nullable final UsergridUserAuth userAuth) { this.userAuth = userAuth; }
+
+ @Nullable
+ public String uuidOrUsername() {
+ String uuidOrUsername = this.getUuid();
+ if( uuidOrUsername == null ) {
+ uuidOrUsername = this.getUsername();
+ }
+ return uuidOrUsername;
+ }
+
+ @Nullable
+ public String usernameOrEmail() {
+ String usernameOrEmail = this.getUsername();
+ if( usernameOrEmail == null ) {
+ usernameOrEmail = this.getEmail();
+ }
+ return usernameOrEmail;
+ }
+
+ public static boolean checkAvailable(@Nullable final String email, @Nullable final String username) {
+ return UsergridUser.checkAvailable(Usergrid.getInstance(), email, username);
+ }
+
+ public static boolean checkAvailable(@NotNull final UsergridClient client, @Nullable final String email, @Nullable final String username) {
+ if (email == null && username == null) {
+ throw new IllegalArgumentException("email and username both are null ");
+ }
+ UsergridQuery query = new UsergridQuery(USER_ENTITY_TYPE);
+ if (username != null) {
+ query.eq(UsergridUserProperties.USERNAME.toString(), username);
+ }
+ if (email != null) {
+ query.or().eq(UsergridUserProperties.EMAIL.toString(), email);
+ }
+ return client.GET(query).first() != null;
+ }
+
+ @NotNull
+ public UsergridResponse create() {
+ return this.create(Usergrid.getInstance());
+ }
+
+ @NotNull
+ public UsergridResponse create(@NotNull final UsergridClient client) {
+ UsergridResponse response = client.POST(this);
+ UsergridUser createdUser = response.user();
+ if( createdUser != null ) {
+ this.copyAllProperties(createdUser);
+ }
+ return response;
+ }
+
+ @NotNull
+ public UsergridResponse login(@NotNull final String username, @NotNull final String password) {
+ return this.login(Usergrid.getInstance(),username,password);
+ }
+
+ @NotNull
+ public UsergridResponse login(@NotNull final UsergridClient client, @NotNull final String username, @NotNull final String password) {
+ UsergridUserAuth userAuth = new UsergridUserAuth(username,password);
+ UsergridResponse response = client.authenticateUser(userAuth,false);
+ if( response.ok() ) {
+ this.userAuth = userAuth;
+ }
+ return response;
+ }
+
+ @NotNull
+ public UsergridResponse resetPassword(@NotNull final String oldPassword, @NotNull final String newPassword) {
+ return this.resetPassword(Usergrid.getInstance(),oldPassword,newPassword);
+ }
+
+ @NotNull
+ public UsergridResponse resetPassword(@NotNull final UsergridClient client, @NotNull final String oldPassword, @NotNull final String newPassword) {
+ return client.resetPassword(this,oldPassword,newPassword);
+ }
+
+ @NotNull
+ public UsergridResponse reauthenticate() {
+ return this.reauthenticate(Usergrid.getInstance());
+ }
+
+ @NotNull
+ public UsergridResponse reauthenticate(@NotNull final UsergridClient client) {
+ return this.userAuth == null ? UsergridResponse.fromError(client, "Invalid UsergridUserAuth.", "No UsergridUserAuth found on the UsergridUser.") : client.authenticateUser(this.userAuth, false);
+ }
+
+ @NotNull
+ public UsergridResponse logout() {
+ return this.logout(Usergrid.getInstance());
+ }
+
+ @NotNull
+ public UsergridResponse logout(@NotNull final UsergridClient client) {
+ UsergridResponse response;
+ String uuidOrUsername = this.uuidOrUsername();
+ String accessToken = (this.userAuth != null) ? this.userAuth.getAccessToken() : null;
+ if (uuidOrUsername == null || accessToken == null ) {
+ response = UsergridResponse.fromError(client, "Logout Failed.", "UUID or Access Token not found on UsergridUser object.");
+ } else {
+ response = client.logoutUser(uuidOrUsername, accessToken);
+ if( response.ok() ) {
+ this.userAuth = null;
+ }
+ }
+ return response;
+ }
+}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/2e127e62/sdks/java/src/main/java/org/apache/usergrid/java/client/query/UsergridQuery.java
----------------------------------------------------------------------
diff --git a/sdks/java/src/main/java/org/apache/usergrid/java/client/query/UsergridQuery.java b/sdks/java/src/main/java/org/apache/usergrid/java/client/query/UsergridQuery.java
new file mode 100644
index 0000000..dc359c0
--- /dev/null
+++ b/sdks/java/src/main/java/org/apache/usergrid/java/client/query/UsergridQuery.java
@@ -0,0 +1,434 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.usergrid.java.client.query;
+
+import org.apache.usergrid.java.client.UsergridEnums.UsergridQueryOperator;
+import org.apache.usergrid.java.client.UsergridEnums.UsergridQuerySortOrder;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.net.URLEncoder;
+import java.util.*;
+
+@SuppressWarnings("unused")
+public final class UsergridQuery {
+
+ @NotNull private final ArrayList<String> requirementStrings = new ArrayList<>();
+ @NotNull private final ArrayList<String> urlTerms = new ArrayList<>();
+ @NotNull private final HashMap<String, UsergridQuerySortOrder> orderClauses = new HashMap<>();
+ @NotNull private Integer limit = UsergridQuery.LIMIT_DEFAULT;
+ @Nullable private String cursor = null;
+ @Nullable private String fromStringValue = null;
+ @Nullable private String collectionName = null;
+
+ public UsergridQuery() {
+ this(null);
+ }
+
+ public UsergridQuery(@Nullable final String collectionName) {
+ this.collectionName = collectionName;
+ this.requirementStrings.add(UsergridQuery.EMPTY_STRING);
+ }
+
+ private static boolean isUUID(@NotNull final String string) {
+ try {
+ UUID uuid = UUID.fromString(string);
+ return true;
+ } catch (Exception ex) {
+ return false;
+ }
+ }
+
+ @NotNull
+ private static String encode(@NotNull final String stringValue) {
+ String escapedString;
+ try {
+ escapedString = URLEncoder.encode(stringValue, UTF8);
+ } catch (Exception e) {
+ escapedString = stringValue;
+ }
+ return escapedString;
+ }
+
+ @NotNull
+ public static String strJoin(@NotNull final List<String> array, @NotNull final String separator) {
+ StringBuilder stringBuilder = new StringBuilder();
+ for (int i = 0, il = array.size(); i < il; i++) {
+ if (i > 0) {
+ stringBuilder.append(separator);
+ }
+ stringBuilder.append(array.get(i));
+ }
+ return stringBuilder.toString();
+ }
+
+ @NotNull
+ public UsergridQuery fromString(@NotNull final String stringValue) {
+ this.fromStringValue = stringValue;
+ return this;
+ }
+
+ @Nullable
+ public String getType() {
+ return this.collectionName;
+ }
+
+ @Nullable
+ public String getCollectionName() {
+ return this.collectionName;
+ }
+
+ @Nullable
+ public String getCollection() {
+ return this.collectionName;
+ }
+
+ @NotNull
+ public UsergridQuery type(@Nullable final String type) {
+ this.collectionName = type;
+ return this;
+ }
+
+ @NotNull
+ public UsergridQuery collection(@Nullable final String collectionName) {
+ return this.type(collectionName);
+ }
+
+ @NotNull
+ public UsergridQuery collectionName(@Nullable final String collectionName) {
+ return this.type(collectionName);
+ }
+
+ @NotNull
+ public UsergridQuery cursor(@Nullable final String value) {
+ this.cursor = value;
+ return this;
+ }
+
+ @NotNull
+ public UsergridQuery limit(@NotNull final Integer limit) {
+ this.limit = limit;
+ return this;
+ }
+
+ @NotNull
+ private UsergridQuery addConditionalSeparator(@NotNull final String separator) {
+ if (!this.requirementStrings.get(0).isEmpty()) {
+ this.requirementStrings.add(0, separator);
+ this.requirementStrings.add(0, UsergridQuery.EMPTY_STRING);
+ }
+ return this;
+ }
+
+ @NotNull
+ public UsergridQuery and() {
+ return this.addConditionalSeparator(UsergridQuery.AND);
+ }
+
+ @NotNull
+ public UsergridQuery or() {
+ return this.addConditionalSeparator(UsergridQuery.OR);
+ }
+
+ @NotNull
+ public UsergridQuery not() {
+ return this.addConditionalSeparator(UsergridQuery.NOT);
+ }
+
+ @NotNull
+ public UsergridQuery sort(@NotNull final String term, @NotNull final UsergridQuerySortOrder sortOrder) {
+ this.orderClauses.put(term, sortOrder);
+ return this;
+ }
+
+ @NotNull
+ public UsergridQuery ascending(@NotNull final String term) {
+ return this.asc(term);
+ }
+
+ @NotNull
+ public UsergridQuery asc(@NotNull final String term) {
+ return this.sort(term, UsergridQuerySortOrder.ASC);
+ }
+
+ @NotNull
+ public UsergridQuery descending(@NotNull final String term) {
+ return this.desc(term);
+ }
+
+ @NotNull
+ public UsergridQuery desc(@NotNull final String term) {
+ return this.sort(term, UsergridQuerySortOrder.DESC);
+ }
+
+ @NotNull
+ public UsergridQuery contains(@NotNull final String term, @NotNull final String value) {
+ return this.containsWord(term, value);
+ }
+
+ @NotNull
+ public UsergridQuery containsString(@NotNull final String term, @NotNull final String value) {
+ return this.containsWord(term, value);
+ }
+
+ @NotNull
+ public UsergridQuery containsWord(@NotNull final String term, @NotNull final String value) {
+ return this.addRequirement(term + SPACE + CONTAINS + SPACE + ((UsergridQuery.isUUID(value)) ? EMPTY_STRING : APOSTROPHE) + value + ((UsergridQuery.isUUID(value)) ? EMPTY_STRING : APOSTROPHE));
+ }
+
+ @NotNull
+ public UsergridQuery filter(@NotNull final String term, @NotNull final Object value) {
+ return this.eq(term, value);
+ }
+
+ @NotNull
+ public UsergridQuery equals(@NotNull final String term, @NotNull final Object value) {
+ return this.eq(term, value);
+ }
+
+ @NotNull
+ public UsergridQuery eq(@NotNull final String term, @NotNull final Object value) {
+ return this.addOperationRequirement(term, UsergridQueryOperator.EQUAL, value);
+ }
+
+ @NotNull
+ public UsergridQuery greaterThan(@NotNull final String term, @NotNull final Object value) {
+ return this.gt(term, value);
+ }
+
+ @NotNull
+ public UsergridQuery gt(@NotNull final String term, @NotNull final Object value) {
+ return this.addOperationRequirement(term, UsergridQueryOperator.GREATER_THAN, value);
+ }
+
+ @NotNull
+ public UsergridQuery greaterThanOrEqual(@NotNull final String term, @NotNull final Object value) {
+ return this.gte(term, value);
+ }
+
+ @NotNull
+ public UsergridQuery gte(@NotNull final String term, @NotNull final Object value) {
+ return this.addOperationRequirement(term, UsergridQueryOperator.GREATER_THAN_EQUAL_TO, value);
+ }
+
+ @NotNull
+ public UsergridQuery lessThan(@NotNull final String term, @NotNull final Object value) {
+ return this.lt(term, value);
+ }
+
+ @NotNull
+ public UsergridQuery lt(@NotNull final String term, @NotNull final Object value) {
+ return this.addOperationRequirement(term, UsergridQueryOperator.LESS_THAN, value);
+ }
+
+ @NotNull
+ public UsergridQuery lessThanOrEqual(@NotNull final String term, @NotNull final Object value) {
+ return this.lte(term, value);
+ }
+
+ @NotNull
+ public UsergridQuery lte(@NotNull final String term, @NotNull final Object value) {
+ return this.addOperationRequirement(term, UsergridQueryOperator.LESS_THAN_EQUAL_TO, value);
+ }
+
+ @NotNull
+ public UsergridQuery locationWithin(final double distance, final double latitude, final double longitude) {
+ return this.addRequirement(LOCATION + SPACE + WITHIN + SPACE + distance + SPACE + OF + SPACE + latitude + SPACE + COMMA + longitude);
+ }
+
+ @NotNull
+ public UsergridQuery urlTerm(@NotNull final String term, @NotNull final String equalsValue) {
+ if (term.equalsIgnoreCase(QL)) {
+ this.ql(equalsValue);
+ } else {
+ this.urlTerms.add(UsergridQuery.encode(term) + EQUALS + UsergridQuery.encode(equalsValue));
+ }
+ return this;
+ }
+
+ @NotNull
+ public UsergridQuery ql(@NotNull final String value) {
+ return this.addRequirement(value);
+ }
+
+ @NotNull
+ public UsergridQuery addRequirement(@NotNull final String requirement) {
+ String requirementString = this.requirementStrings.remove(0);
+ if (!requirement.isEmpty() && !requirementString.isEmpty()) {
+ requirementString += SPACE + AND + SPACE;
+ }
+ requirementString += requirement;
+ this.requirementStrings.add(0, requirementString);
+ return this;
+ }
+
+ @NotNull
+ public UsergridQuery addOperationRequirement(@NotNull final String term, @NotNull final UsergridQueryOperator operation, final int intValue) {
+ return this.addOperationRequirement(term, operation, Integer.valueOf(intValue));
+ }
+
+ @NotNull
+ public UsergridQuery addOperationRequirement(@NotNull final String term, @NotNull final UsergridQueryOperator operation, @NotNull final Object value) {
+ if (value instanceof String) {
+ String valueString = value.toString();
+ if (!UsergridQuery.isUUID(valueString)) {
+ valueString = APOSTROPHE + value + APOSTROPHE;
+ }
+ return addRequirement(term + SPACE + operation.operatorValue() + SPACE + valueString);
+ } else {
+ return addRequirement(term + SPACE + operation.operatorValue() + SPACE + value.toString());
+ }
+ }
+
+ @NotNull
+ private String constructOrderByString() {
+ String orderByString = EMPTY_STRING;
+ if (!this.orderClauses.isEmpty()) {
+ for (Map.Entry<String, UsergridQuerySortOrder> orderClause : this.orderClauses.entrySet()) {
+ if (!orderByString.isEmpty()) {
+ orderByString += COMMA;
+ }
+ orderByString += orderClause.getKey() + SPACE + orderClause.getValue().toString();
+ }
+ if (!orderByString.isEmpty()) {
+ orderByString = SPACE + ORDER_BY + SPACE + orderByString;
+ }
+ }
+ return orderByString;
+ }
+
+ @NotNull
+ private String constructURLTermsString() {
+ String urlTermsString = EMPTY_STRING;
+ if (!this.urlTerms.isEmpty()) {
+ urlTermsString = UsergridQuery.strJoin(this.urlTerms, AMPERSAND);
+ }
+ return urlTermsString;
+ }
+
+ @NotNull
+ private String constructRequirementString() {
+ ArrayList<String> requirementStrings = new ArrayList<>(this.requirementStrings);
+ String firstString = requirementStrings.get(0);
+ if (firstString.isEmpty()) {
+ requirementStrings.remove(0);
+ }
+ String requirementsString = EMPTY_STRING;
+ if (!requirementStrings.isEmpty()) {
+ firstString = requirementStrings.get(0);
+ if (firstString.equalsIgnoreCase(OR) || firstString.equalsIgnoreCase(AND) || firstString.equalsIgnoreCase(NOT)) {
+ requirementStrings.remove(0);
+ }
+ if (!requirementStrings.isEmpty()) {
+ Collections.reverse(requirementStrings);
+ requirementsString = UsergridQuery.strJoin(requirementStrings, SPACE);
+ }
+ }
+ return requirementsString;
+ }
+
+ @NotNull
+ private String constructURLAppend() {
+ return this.constructURLAppend(true);
+ }
+
+ @NotNull
+ private String constructURLAppend(final boolean autoURLEncode) {
+ if (this.fromStringValue != null) {
+ String requirementsString = this.fromStringValue;
+ if (autoURLEncode) {
+ requirementsString = UsergridQuery.encode(requirementsString);
+ }
+ return QUESTION_MARK + QL + EQUALS + requirementsString;
+ }
+ String urlAppend = EMPTY_STRING;
+ if (this.limit != LIMIT_DEFAULT) {
+ urlAppend += LIMIT + EQUALS + this.limit.toString();
+ }
+ String urlTermsString = this.constructURLTermsString();
+ if (!urlTermsString.isEmpty()) {
+ if (!urlAppend.isEmpty()) {
+ urlAppend += AMPERSAND;
+ }
+ urlAppend += urlTermsString;
+ }
+ if (this.cursor != null && !this.cursor.isEmpty()) {
+ if (!urlAppend.isEmpty()) {
+ urlAppend += AMPERSAND;
+ }
+ urlAppend += CURSOR + EQUALS + this.cursor;
+ }
+
+ String requirementsString = this.constructRequirementString();
+ if (!requirementsString.isEmpty()) {
+ requirementsString = SELECT_ALL + SPACE + WHERE + SPACE + requirementsString;
+ } else {
+ requirementsString = SELECT_ALL + SPACE;
+ }
+
+ String orderByString = this.constructOrderByString();
+ if (!orderByString.isEmpty()) {
+ requirementsString += orderByString;
+ }
+ if (!requirementsString.isEmpty()) {
+ if (autoURLEncode) {
+ requirementsString = UsergridQuery.encode(requirementsString);
+ }
+ if (!urlAppend.isEmpty()) {
+ urlAppend += AMPERSAND;
+ }
+ urlAppend += QL + EQUALS + requirementsString;
+ }
+ if (!urlAppend.isEmpty()) {
+ urlAppend = QUESTION_MARK + urlAppend;
+ }
+ return urlAppend;
+ }
+
+ @NotNull
+ public String build() {
+ return this.build(true);
+ }
+
+ @NotNull
+ public String build(final boolean autoURLEncode) {
+ return this.constructURLAppend(autoURLEncode);
+ }
+
+ private static final int LIMIT_DEFAULT = 10;
+ @NotNull private static final String AMPERSAND = "&";
+ @NotNull private static final String AND = "and";
+ @NotNull private static final String APOSTROPHE = "'";
+ @NotNull private static final String COMMA = ",";
+ @NotNull private static final String CONTAINS = "contains";
+ @NotNull private static final String CURSOR = "cursor";
+ @NotNull private static final String EMPTY_STRING = "";
+ @NotNull private static final String EQUALS = "=";
+ @NotNull private static final String LIMIT = "limit";
+ @NotNull private static final String LOCATION = "location";
+ @NotNull private static final String NOT = "not";
+ @NotNull private static final String OF = "of";
+ @NotNull private static final String OR = "or";
+ @NotNull private static final String ORDER_BY = "order by";
+ @NotNull private static final String QL = "ql";
+ @NotNull private static final String QUESTION_MARK = "?";
+ @NotNull private static final String SELECT_ALL = "select *";
+ @NotNull private static final String SPACE = " ";
+ @NotNull private static final String UTF8 = "UTF-8";
+ @NotNull private static final String WHERE = "where";
+ @NotNull private static final String WITHIN = "within";
+}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/2e127e62/sdks/java/src/main/java/org/apache/usergrid/java/client/response/AggregateCounter.java
----------------------------------------------------------------------
diff --git a/sdks/java/src/main/java/org/apache/usergrid/java/client/response/AggregateCounter.java b/sdks/java/src/main/java/org/apache/usergrid/java/client/response/AggregateCounter.java
deleted file mode 100644
index 240d09f..0000000
--- a/sdks/java/src/main/java/org/apache/usergrid/java/client/response/AggregateCounter.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.usergrid.java.client.response;
-
-import static org.apache.usergrid.java.client.utils.JsonUtils.toJsonString;
-
-public class AggregateCounter {
-
- private long timestamp;
- private long value;
-
- public AggregateCounter(long timestamp, long value) {
- this.timestamp = timestamp;
- this.value = value;
- }
-
- public long getTimestamp() {
- return timestamp;
- }
-
- public void setTimestamp(long timestamp) {
- this.timestamp = timestamp;
- }
-
- public long getValue() {
- return value;
- }
-
- public void setValue(long value) {
- this.value = value;
- }
-
- @Override
- public String toString() {
- return toJsonString(this);
- }
-
-}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/2e127e62/sdks/java/src/main/java/org/apache/usergrid/java/client/response/AggregateCounterSet.java
----------------------------------------------------------------------
diff --git a/sdks/java/src/main/java/org/apache/usergrid/java/client/response/AggregateCounterSet.java b/sdks/java/src/main/java/org/apache/usergrid/java/client/response/AggregateCounterSet.java
deleted file mode 100644
index 499af3e..0000000
--- a/sdks/java/src/main/java/org/apache/usergrid/java/client/response/AggregateCounterSet.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.usergrid.java.client.response;
-
-import static org.apache.usergrid.java.client.utils.JsonUtils.toJsonString;
-
-import java.util.List;
-import java.util.UUID;
-
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize.Inclusion;
-
-public class AggregateCounterSet {
- private String name;
- private UUID user;
- private UUID group;
- private UUID queue;
- private String category;
- private List<AggregateCounter> values;
-
- public AggregateCounterSet(String name, UUID user, UUID group,
- String category, List<AggregateCounter> values) {
- this.name = name;
- this.user = user;
- this.group = group;
- this.category = category;
- this.values = values;
- }
-
- public AggregateCounterSet(String name, UUID queue, String category,
- List<AggregateCounter> values) {
- this.name = name;
- setQueue(queue);
- this.category = category;
- this.values = values;
- }
-
- @JsonSerialize(include = Inclusion.NON_NULL)
- public UUID getUser() {
- return user;
- }
-
- public void setUser(UUID user) {
- this.user = user;
- }
-
- @JsonSerialize(include = Inclusion.NON_NULL)
- public UUID getGroup() {
- return group;
- }
-
- public void setGroup(UUID group) {
- this.group = group;
- }
-
- @JsonSerialize(include = Inclusion.NON_NULL)
- public String getCategory() {
- return category;
- }
-
- public void setCategory(String category) {
- this.category = category;
- }
-
- @JsonSerialize(include = Inclusion.NON_NULL)
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- @JsonSerialize(include = Inclusion.NON_NULL)
- public List<AggregateCounter> getValues() {
- return values;
- }
-
- public void setValues(List<AggregateCounter> values) {
- this.values = values;
- }
-
- @JsonSerialize(include = Inclusion.NON_NULL)
- public UUID getQueue() {
- return queue;
- }
-
- public void setQueue(UUID queue) {
- this.queue = queue;
- }
-
- @Override
- public String toString() {
- return toJsonString(this);
- }
-
-}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/2e127e62/sdks/java/src/main/java/org/apache/usergrid/java/client/response/ApiResponse.java
----------------------------------------------------------------------
diff --git a/sdks/java/src/main/java/org/apache/usergrid/java/client/response/ApiResponse.java b/sdks/java/src/main/java/org/apache/usergrid/java/client/response/ApiResponse.java
deleted file mode 100644
index a87e293..0000000
--- a/sdks/java/src/main/java/org/apache/usergrid/java/client/response/ApiResponse.java
+++ /dev/null
@@ -1,421 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.usergrid.java.client.response;
-
-import static org.apache.usergrid.java.client.utils.JsonUtils.toJsonString;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.annotation.JsonAnyGetter;
-import com.fasterxml.jackson.annotation.JsonAnySetter;
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize.Inclusion;
-import org.apache.usergrid.java.client.entities.Entity;
-import org.apache.usergrid.java.client.entities.Message;
-import org.apache.usergrid.java.client.entities.User;
-
-public class ApiResponse {
-
- private String accessToken;
-
- private String error;
- private String errorDescription;
- private String errorUri;
- private String exception;
-
- private String path;
- private String uri;
- private String status;
- private long timestamp;
- private UUID application;
- private List<Entity> entities;
- private UUID next;
- private String cursor;
- private String action;
- private List<Object> list;
- private Object data;
- private Map<String, UUID> applications;
- private Map<String, JsonNode> metadata;
- private Map<String, List<String>> params;
- private List<AggregateCounterSet> counters;
- private ClientCredentialsInfo credentials;
-
- private List<Message> messages;
- private List<QueueInfo> queues;
- private UUID last;
- private UUID queue;
- private UUID consumer;
-
- private User user;
-
- private final Map<String, JsonNode> properties = new HashMap<String, JsonNode>();
-
- public ApiResponse() {
- }
-
- @JsonAnyGetter
- public Map<String, JsonNode> getProperties() {
- return properties;
- }
-
- @JsonAnySetter
- public void setProperty(String key, JsonNode value) {
- properties.put(key, value);
- }
-
- @JsonProperty("access_token")
- @JsonSerialize(include = Inclusion.NON_NULL)
- public String getAccessToken() {
- return accessToken;
- }
-
- @JsonProperty("access_token")
- public void setAccessToken(String accessToken) {
- this.accessToken = accessToken;
- }
-
- @JsonSerialize(include = Inclusion.NON_NULL)
- public String getError() {
- return error;
- }
-
- public void setError(String error) {
- this.error = error;
- }
-
- @JsonSerialize(include = Inclusion.NON_NULL)
- @JsonProperty("error_description")
- public String getErrorDescription() {
- return errorDescription;
- }
-
- @JsonProperty("error_description")
- public void setErrorDescription(String errorDescription) {
- this.errorDescription = errorDescription;
- }
-
- @JsonSerialize(include = Inclusion.NON_NULL)
- @JsonProperty("error_uri")
- public String getErrorUri() {
- return errorUri;
- }
-
- @JsonProperty("error_uri")
- public void setErrorUri(String errorUri) {
- this.errorUri = errorUri;
- }
-
- @JsonSerialize(include = Inclusion.NON_NULL)
- public String getException() {
- return exception;
- }
-
- public void setException(String exception) {
- this.exception = exception;
- }
-
- @JsonSerialize(include = Inclusion.NON_NULL)
- public String getPath() {
- return path;
- }
-
- public void setPath(String path) {
- this.path = path;
- }
-
- @JsonSerialize(include = Inclusion.NON_NULL)
- public String getUri() {
- return uri;
- }
-
- public void setUri(String uri) {
- this.uri = uri;
- }
-
- @JsonSerialize(include = Inclusion.NON_NULL)
- public String getStatus() {
- return status;
- }
-
- public void setStatus(String status) {
- this.status = status;
- }
-
- public long getTimestamp() {
- return timestamp;
- }
-
- public void setTimestamp(long timestamp) {
- this.timestamp = timestamp;
- }
-
- @JsonSerialize(include = Inclusion.NON_NULL)
- public UUID getApplication() {
- return application;
- }
-
- public void setApplication(UUID application) {
- this.application = application;
- }
-
- @JsonSerialize(include = Inclusion.NON_NULL)
- public List<Entity> getEntities() {
- return entities;
- }
-
- public void setEntities(List<Entity> entities) {
- this.entities = entities;
- }
-
- public int getEntityCount() {
- if (entities == null) {
- return 0;
- }
- return entities.size();
- }
-
- public Entity getFirstEntity() {
- if ((entities != null) && (entities.size() > 0)) {
- return entities.get(0);
- }
- return null;
- }
-
- public <T extends Entity> T getFirstEntity(Class<T> t) {
- return Entity.toType(getFirstEntity(), t);
- }
-
- public Entity getLastEntity() {
- if ((entities != null) && (entities.size() > 0)) {
- return entities.get(entities.size() - 1);
- }
- return null;
- }
-
- public <T extends Entity> T getLastEntity(Class<T> t) {
- return Entity.toType(getLastEntity(), t);
- }
-
- public <T extends Entity> List<T> getEntities(Class<T> t) {
- return Entity.toType(entities, t);
- }
-
- @JsonSerialize(include = Inclusion.NON_NULL)
- public UUID getNext() {
- return next;
- }
-
- public void setNext(UUID next) {
- this.next = next;
- }
-
- @JsonSerialize(include = Inclusion.NON_NULL)
- public String getCursor() {
- return cursor;
- }
-
- public void setCursor(String cursor) {
- this.cursor = cursor;
- }
-
- @JsonSerialize(include = Inclusion.NON_NULL)
- public String getAction() {
- return action;
- }
-
- public void setAction(String action) {
- this.action = action;
- }
-
- @JsonSerialize(include = Inclusion.NON_NULL)
- public List<Object> getList() {
- return list;
- }
-
- public void setList(List<Object> list) {
- this.list = list;
- }
-
- @JsonSerialize(include = Inclusion.NON_NULL)
- public Object getData() {
- return data;
- }
-
- public void setData(Object data) {
- this.data = data;
- }
-
- @JsonSerialize(include = Inclusion.NON_NULL)
- public Map<String, UUID> getApplications() {
- return applications;
- }
-
- public void setApplications(Map<String, UUID> applications) {
- this.applications = applications;
- }
-
- @JsonSerialize(include = Inclusion.NON_NULL)
- public Map<String, JsonNode> getMetadata() {
- return metadata;
- }
-
- public void setMetadata(Map<String, JsonNode> metadata) {
- this.metadata = metadata;
- }
-
- @JsonSerialize(include = Inclusion.NON_NULL)
- public Map<String, List<String>> getParams() {
- return params;
- }
-
- public void setParams(Map<String, List<String>> params) {
- this.params = params;
- }
-
- @JsonSerialize(include = Inclusion.NON_NULL)
- public List<AggregateCounterSet> getCounters() {
- return counters;
- }
-
- public void setCounters(List<AggregateCounterSet> counters) {
- this.counters = counters;
- }
-
- @JsonSerialize(include = Inclusion.NON_NULL)
- public ClientCredentialsInfo getCredentials() {
- return credentials;
- }
-
- public void setCredentials(ClientCredentialsInfo credentials) {
- this.credentials = credentials;
- }
-
- @JsonSerialize(include = Inclusion.NON_NULL)
- public User getUser() {
- return user;
- }
-
- public void setUser(User user) {
- this.user = user;
- }
-
- @Override
- public String toString() {
- return toJsonString(this);
- }
-
- @JsonSerialize(include = Inclusion.NON_NULL)
- public List<Message> getMessages() {
- return messages;
- }
-
- public void setMessages(List<Message> messages) {
- this.messages = messages;
- }
-
- @JsonIgnore
- public int getMessageCount() {
- if (messages == null) {
- return 0;
- }
- return messages.size();
- }
-
- @JsonIgnore
- public Message getFirstMessage() {
- if ((messages != null) && (messages.size() > 0)) {
- return messages.get(0);
- }
- return null;
- }
-
- @JsonIgnore
- public Entity getLastMessage() {
- if ((messages != null) && (messages.size() > 0)) {
- return messages.get(messages.size() - 1);
- }
- return null;
- }
-
- @JsonSerialize(include = Inclusion.NON_NULL)
- public UUID getLast() {
- return last;
- }
-
- public void setLast(UUID last) {
- this.last = last;
- }
-
- @JsonSerialize(include = Inclusion.NON_NULL)
- public List<QueueInfo> getQueues() {
- return queues;
- }
-
- public void setQueues(List<QueueInfo> queues) {
- this.queues = queues;
- }
-
- @JsonIgnore
- public QueueInfo getFirstQueue() {
- if ((queues != null) && (queues.size() > 0)) {
- return queues.get(0);
- }
- return null;
- }
-
- @JsonIgnore
- public QueueInfo getLastQueue() {
- if ((queues != null) && (queues.size() > 0)) {
- return queues.get(queues.size() - 1);
- }
- return null;
- }
-
- @JsonIgnore
- public UUID getLastQueueId() {
- QueueInfo q = getLastQueue();
- if (q != null) {
- return q.getQueue();
- }
- return null;
- }
-
- @JsonSerialize(include = Inclusion.NON_NULL)
- public UUID getQueue() {
- return queue;
- }
-
- public void setQueue(UUID queue) {
- this.queue = queue;
- }
-
- @JsonSerialize(include = Inclusion.NON_NULL)
- public UUID getConsumer() {
- return consumer;
- }
-
- public void setConsumer(UUID consumer) {
- this.consumer = consumer;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/2e127e62/sdks/java/src/main/java/org/apache/usergrid/java/client/response/ClientCredentialsInfo.java
----------------------------------------------------------------------
diff --git a/sdks/java/src/main/java/org/apache/usergrid/java/client/response/ClientCredentialsInfo.java b/sdks/java/src/main/java/org/apache/usergrid/java/client/response/ClientCredentialsInfo.java
deleted file mode 100644
index 7ac6b36..0000000
--- a/sdks/java/src/main/java/org/apache/usergrid/java/client/response/ClientCredentialsInfo.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.usergrid.java.client.response;
-
-import static org.apache.usergrid.java.client.utils.JsonUtils.toJsonString;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-public class ClientCredentialsInfo {
-
- private String id;
- private String secret;
-
- public ClientCredentialsInfo(String id, String secret) {
- this.id = id;
- this.secret = secret;
- }
-
- @JsonProperty("client_id")
- public String getId() {
- return id;
- }
-
- @JsonProperty("client_id")
- public void setId(String id) {
- this.id = id;
- }
-
- @JsonProperty("client_secret")
- public String getSecret() {
- return secret;
- }
-
- @JsonProperty("client_secret")
- public void setSecret(String secret) {
- this.secret = secret;
- }
-
- @Override
- public String toString() {
- return toJsonString(this);
- }
-
-}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/2e127e62/sdks/java/src/main/java/org/apache/usergrid/java/client/response/QueueInfo.java
----------------------------------------------------------------------
diff --git a/sdks/java/src/main/java/org/apache/usergrid/java/client/response/QueueInfo.java b/sdks/java/src/main/java/org/apache/usergrid/java/client/response/QueueInfo.java
deleted file mode 100644
index 04fe717..0000000
--- a/sdks/java/src/main/java/org/apache/usergrid/java/client/response/QueueInfo.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.usergrid.java.client.response;
-
-import java.util.UUID;
-
-public class QueueInfo {
-
- String path;
- UUID queue;
-
- public QueueInfo() {
- }
-
- public String getPath() {
- return path;
- }
-
- public void setPath(String path) {
- this.path = path;
- }
-
- public UUID getQueue() {
- return queue;
- }
-
- public void setQueue(UUID queue) {
- this.queue = queue;
- }
-}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/2e127e62/sdks/java/src/main/java/org/apache/usergrid/java/client/response/UsergridResponse.java
----------------------------------------------------------------------
diff --git a/sdks/java/src/main/java/org/apache/usergrid/java/client/response/UsergridResponse.java b/sdks/java/src/main/java/org/apache/usergrid/java/client/response/UsergridResponse.java
new file mode 100644
index 0000000..8618d94
--- /dev/null
+++ b/sdks/java/src/main/java/org/apache/usergrid/java/client/response/UsergridResponse.java
@@ -0,0 +1,222 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.usergrid.java.client.response;
+
+import com.fasterxml.jackson.annotation.*;
+import com.fasterxml.jackson.databind.JsonNode;
+import okhttp3.Headers;
+import org.apache.usergrid.java.client.UsergridClient;
+import org.apache.usergrid.java.client.UsergridEnums;
+import org.apache.usergrid.java.client.UsergridRequest;
+import org.apache.usergrid.java.client.model.UsergridEntity;
+import org.apache.usergrid.java.client.model.UsergridUser;
+import org.apache.usergrid.java.client.query.UsergridQuery;
+import org.apache.usergrid.java.client.utils.JsonUtils;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.*;
+
+import static org.apache.usergrid.java.client.utils.JsonUtils.toJsonString;
+
+@SuppressWarnings("unused")
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class UsergridResponse {
+
+ @Nullable private UsergridClient client;
+ @NotNull private Map<String, JsonNode> properties = new HashMap<>();
+
+ private int statusCode = 0;
+ @Nullable private JsonNode responseJson = null;
+ @Nullable private String cursor;
+ @Nullable private List<UsergridEntity> entities;
+ @Nullable private Map<String, String> headers;
+ @Nullable private UsergridQuery query;
+ @Nullable private UsergridResponseError responseError = null;
+
+ @Nullable private String accessToken;
+ @Nullable private Long expires;
+
+ public boolean ok() { return (statusCode > 0 && statusCode < 400); }
+ public int count() { return (entities == null) ? 0 : entities.size(); }
+ public boolean hasNextPage() { return (cursor != null); }
+ @NotNull @Override public String toString() {
+ return toJsonString(this);
+ }
+
+ @Nullable public UsergridEntity first() { return (entities == null || entities.isEmpty()) ? null : entities.get(0); }
+ @Nullable public UsergridEntity entity() {
+ return first();
+ }
+ @Nullable public UsergridEntity last() { return (entities == null || entities.isEmpty()) ? null : entities.get(entities.size() - 1); }
+
+ @Nullable
+ public UsergridUser user() {
+ UsergridEntity entity = this.first();
+ if( entity != null && entity instanceof UsergridUser ) {
+ return (UsergridUser) entity;
+ }
+ return null;
+ }
+
+ @Nullable
+ public List<UsergridUser> users() {
+ ArrayList<UsergridUser> users = null;
+ if( entities != null && !entities.isEmpty() ) {
+ for( UsergridEntity entity : entities ) {
+ if( entity instanceof UsergridUser ) {
+ if( users == null ) {
+ users = new ArrayList<>();
+ }
+ users.add((UsergridUser)entity);
+ }
+ }
+ }
+ return users;
+ }
+
+ public int getStatusCode() { return this.statusCode; }
+
+ @Nullable @JsonIgnore
+ public UsergridClient getClient() {
+ return client;
+ }
+ @JsonIgnore public void setClient(@Nullable final UsergridClient client) { this.client = client; }
+
+ @Nullable @JsonIgnore
+ public JsonNode getResponseJson() {
+ return responseJson;
+ }
+ private void setResponseJson(@Nullable final JsonNode responseJson) {this.responseJson = responseJson; }
+
+ @Nullable @JsonIgnore
+ public UsergridQuery getQuery() {
+ return query;
+ }
+ private void setQuery(@Nullable final UsergridQuery query) { this.query = query; }
+
+ @Nullable
+ public UsergridResponseError getResponseError() {
+ return responseError;
+ }
+ private void setResponseError(@Nullable final UsergridResponseError responseError) { this.responseError = responseError; }
+
+ @Nullable
+ public Map<String, String> getHeaders() {
+ return headers;
+ }
+ private void setHeaders(@Nullable final Map<String, String> headers) { this.headers = headers; }
+
+ @Nullable
+ public List<UsergridEntity> getEntities() { return entities; }
+ private void setEntities(@NotNull final List<UsergridEntity> entities) { this.entities = entities; }
+
+ @Nullable @JsonProperty("cursor")
+ public String getCursor() {
+ return cursor;
+ }
+ @JsonProperty("cursor")
+ private void setCursor(@NotNull final String cursor) { this.cursor = cursor; }
+
+ @Nullable @JsonProperty("access_token")
+ public String getAccessToken() { return this.accessToken; }
+ @JsonProperty("access_token")
+ private void setAccessToken(@NotNull final String accessToken) { this.accessToken = accessToken; }
+
+ @Nullable @JsonProperty("expires_in")
+ public Long getExpires() { return this.expires; }
+ @JsonProperty("expires_in")
+ private void setExpires(@NotNull final Long expires) { this.expires = expires; }
+
+ @JsonProperty("user")
+ private void setUser(@NotNull final UsergridUser user) {
+ if( this.entities == null ) {
+ this.entities = new ArrayList<>();
+ }
+ this.entities.add(user);
+ }
+
+ @NotNull @JsonAnyGetter
+ public Map<String, JsonNode> getProperties() {
+ return properties;
+ }
+ @JsonAnySetter
+ private void setProperty(@NotNull final String key, @NotNull final JsonNode value) {
+ properties.put(key, value);
+ }
+
+ @NotNull
+ public UsergridResponse loadNextPage() {
+ UsergridClient client = this.client;
+ UsergridEntity entity = this.first();
+ if( this.hasNextPage() && client != null && entity != null ) {
+ Map<String, Object> paramsMap = new HashMap<>();
+ paramsMap.put("cursor", getCursor());
+ UsergridRequest request = new UsergridRequest(UsergridEnums.UsergridHttpMethod.GET, UsergridRequest.APPLICATION_JSON_MEDIA_TYPE, client.clientAppUrl(), paramsMap, null, null, this.getQuery(), client.authForRequests() , entity.getType());
+ return client.sendRequest(request);
+ } else {
+ return UsergridResponse.fromError(client,"Error Loading Next Page.","Unable to load next page.");
+ }
+ }
+
+ @NotNull
+ public static UsergridResponse fromError(@Nullable final UsergridClient client, @NotNull final String errorName, @NotNull final String errorDescription) {
+ UsergridResponse response = new UsergridResponse();
+ response.client = client;
+ response.responseError = new UsergridResponseError(errorName,errorDescription);
+ return response;
+ }
+
+ @NotNull
+ public static UsergridResponse fromException(@Nullable final UsergridClient client, @NotNull final Exception ex) {
+ UsergridResponse response = new UsergridResponse();
+ response.client = client;
+ response.responseError = new UsergridResponseError(ex.getClass().toString(), ex.getMessage(), ex.getCause().toString());
+ return response;
+ }
+
+ @NotNull
+ public static UsergridResponse fromResponse(@NotNull final UsergridClient client, @NotNull final UsergridRequest request, @NotNull final okhttp3.Response requestResponse) {
+ UsergridResponse response;
+ JsonNode responseJson;
+ try {
+ String responseJsonString = requestResponse.body().string();
+ responseJson = JsonUtils.mapper.readTree(responseJsonString);
+ } catch ( Exception e ) {
+ return UsergridResponse.fromException(client,e);
+ }
+ if ( responseJson.has("error") ) {
+ response = new UsergridResponse();
+ response.responseError = JsonUtils.fromJsonNode(responseJson,UsergridResponseError.class);
+ } else {
+ response = JsonUtils.fromJsonNode(responseJson,UsergridResponse.class);
+ }
+ response.client = client;
+ response.responseJson = responseJson;
+ response.statusCode = requestResponse.code();
+
+ Headers responseHeaders = requestResponse.headers();
+ HashMap<String,String> headers = new HashMap<>();
+ for (int i = 0; i < responseHeaders.size(); i++) {
+ headers.put(responseHeaders.name(i),responseHeaders.value(i));
+ }
+
+ response.headers = headers;
+ response.query = request.getQuery();
+ return response;
+ }
+}