1 /* 2 * Copyright (c) 2017 Google Inc. All Rights Reserved. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); you 5 * may not use this file except in compliance with the License. You may 6 * obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 13 * implied. See the License for the specific language governing 14 * permissions and limitations under the License. 15 */ 16 17 package com.android.vts.entity; 18 19 import com.google.common.collect.Lists; 20 import com.googlecode.objectify.Key; 21 22 import java.io.Serializable; 23 import java.util.List; 24 import java.util.Map; 25 import java.util.stream.Collectors; 26 27 import static com.googlecode.objectify.ObjectifyService.ofy; 28 29 /** Interface for interacting with VTS Dashboard entities in Cloud Datastore. */ 30 public interface DashboardEntity extends Serializable { 31 /** 32 * Save the Entity to the datastore. 33 * 34 * @return The saved entity's key value. 35 */ save()36 <T> Key<T> save(); 37 38 /** Save List of entity through objectify entities method. */ saveAll(List<T> entityList, int maxEntitySize)39 static <T> Map<Key<T>, T> saveAll(List<T> entityList, int maxEntitySize) { 40 return ofy().transact( 41 () -> { 42 List<List<T>> partitionedList = 43 Lists.partition(entityList, maxEntitySize); 44 return partitionedList 45 .stream() 46 .map( 47 subEntityList -> 48 ofy().save().entities(subEntityList).now()) 49 .flatMap(m -> m.entrySet().stream()) 50 .collect( 51 Collectors.toMap( 52 entry -> entry.getKey(), 53 entry -> entry.getValue())); 54 }); 55 } 56 } 57