/* * Copyright (c) 2015 Google Inc. * * Licensed 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 com.google.appengine.sparkdemo; import static com.google.common.base.Preconditions.checkArgument; import com.google.cloud.datastore.Datastore; import com.google.cloud.datastore.Entity; import com.google.cloud.datastore.Key; import com.google.cloud.datastore.KeyFactory; import com.google.cloud.datastore.Query; import com.google.cloud.datastore.QueryResults; import java.util.ArrayList; import java.util.List; public class UserService { private final Datastore datastore; private final KeyFactory keyFactory; private final String kind; /** * Constructor for UserService. * * @param datastore service object to execute requests * @param kind the kind for the Datastore entities in this demo */ public UserService(Datastore datastore, String kind) { this.datastore = datastore; this.keyFactory = datastore.newKeyFactory().setKind(kind); this.kind = kind; } /** * Return a list of all users. */ public List<User> getAllUsers() { Query<Entity> query = Query.newGqlQueryBuilder(Query.ResultType.ENTITY, "SELECT * FROM " + kind).build(); QueryResults<Entity> results = datastore.run(query); List<User> users = new ArrayList<>(); while (results.hasNext()) { Entity result = results.next(); users.add( new User(result.getString("id"), result.getString("name"), result.getString("email"))); } return users; } /** * Return the user with the given id. */ User getUser(String id) { Entity entity = datastore.get(keyFactory.newKey(id)); return entity == null ? null : new User(entity.getString("id"), entity.getString("name"), entity.getString("email")); } /** * Create a new user and add it to Cloud Datastore. */ public User createUser(String name, String email) { failIfInvalid(name, email); User user = new User(name, email); Key key = keyFactory.newKey(user.getId()); Entity entity = Entity.newBuilder(key) .set("id", user.getId()) .set("name", name) .set("email", email) .build(); datastore.add(entity); return user; } /** * Delete a user from Cloud Datastore. */ public String deleteUser(String id) { Key key = keyFactory.newKey(id); datastore.delete(key); return "ok"; } /** * Updates a user in Cloud Datastore. */ public User updateUser(String id, String name, String email) { failIfInvalid(name, email); Key key = keyFactory.newKey(id); Entity entity = datastore.get(key); if (entity == null) { throw new IllegalArgumentException("No user with id '" + id + "' found"); } else { entity = Entity.newBuilder(entity) .set("id", id) .set("name", name) .set("email", email) .build(); datastore.update(entity); } return new User(id, name, email); } private void failIfInvalid(String name, String email) { checkArgument(name != null && !name.isEmpty(), "Parameter 'name' cannot be empty"); checkArgument(email != null && !email.isEmpty(), "Parameter 'email' cannot be empty"); } }