/**
* JBoss, Home of Professional Open Source
* Copyright Red Hat, Inc., and individual contributors.
*
* 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 org.jboss.aerogear.unifiedpush.service;
import org.jboss.aerogear.unifiedpush.api.Installation;
import org.jboss.aerogear.unifiedpush.api.Variant;
import org.jboss.aerogear.unifiedpush.dao.ResultsStream;
import java.util.List;
import java.util.Set;
/**
* Service class used by the Server to work with Installations
* for the different Variants.
*/
public interface ClientInstallationService {
/**
* Store a new Installation object on the database.
*
* @param variant the variant to store on
* @param installation the installation
*/
void addInstallation(Variant variant, Installation installation);
/**
* Add new Installations objects, for importing devices on the database.
*
* @param variant the variant to store on
* @param installations list of installations
*/
void addInstallations(Variant variant, List<Installation> installations);
/**
* Performs an update/merge on the given entity.
*
* @param installation the installation
*/
void updateInstallation(Installation installation);
/**
* Updates the first argument with the values from the second, and returns the updated entity.
*
* @param toUpdate entity to be updated
* @param postedInstallation entity where we read the "updateable" values from.
*/
void updateInstallation(Installation toUpdate, Installation postedInstallation);
/**
* Returns the Installation entity, matching the given primaryKey.
*
* @param primaryKey the PK for the installation
*
* @return the installation entity
*/
Installation findById(String primaryKey);
/**
* Removes the given installation entity.
*
* @param installation the installation
*/
void removeInstallation(Installation installation);
/**
* Removes all the installation entities in the {@link List}.
*
* @param installations list of installations
*/
void removeInstallations(List<Installation> installations);
/**
* Used for "feedback service": Collects the invalid Installations for a Variant, based on the identifier tokens.
*
* @param variantID id of the variant
* @param deviceTokens list of tokens
*/
void removeInstallationsForVariantByDeviceTokens(String variantID, Set<String> deviceTokens);
/**
* Used to remove single device token from UPS. Used for error handling of specific tokens
*
* @param variantID id of the variant
* @param deviceToken one tokens
*/
void removeInstallationForVariantByDeviceToken(String variantID, String deviceToken);
/**
* Used for "Device Registration":
*
* Finder that returns the actual client installation, identified by its device-token, for the given variant.
*
* @param variantID id of the variant
* @param deviceToken one tokens
*
* @return the installation entity
*/
Installation findInstallationForVariantByDeviceToken(String variantID, String deviceToken);
/**
* Used for Android installations which have less/other categories on repeated registration
*
* @param installation Installation object containing correct variant property of AndroidVariant class
*/
void unsubscribeOldTopics(Installation installation);
// =================== SENDER API ===================
/**
* Used for (Android/iOS) Sender API. Queries the available device-tokens for a given variant, based on provided criteria.
*
* @param variantID the variantID for the filter
* @param categories applied categories for the filter
* @param aliases applied aliases for the filter
* @param deviceTypes applied deviceTypes for the filter
* @param maxResults number of maxResults for the filter
* @param lastTokenFromPreviousBatch identifier of the last fetched token
*
* @return list of device tokens that matches this filter
*/
ResultsStream.QueryBuilder<String> findAllDeviceTokenForVariantIDByCriteria(String variantID, List<String> categories, List<String> aliases, List<String> deviceTypes, int maxResults, String lastTokenFromPreviousBatch);
/**
* Used to query all old GCM tokens, which do not contain a ':' char.
* Queries the available device-tokens for a given variant, based on provided criteria.
*
* @param variantID the variantID for the filter
* @param categories applied categories for the filter
* @param aliases applied aliases for the filter
* @param deviceTypes applied deviceTypes for the filter
* @param maxResults number of maxResults for the filter
* @param lastTokenFromPreviousBatch identifier of the last fetched token
*
* @return list of old GCM device tokens that matches this filter
*/
ResultsStream.QueryBuilder<String> findAllOldGoogleCloudMessagingDeviceTokenForVariantIDByCriteria(String variantID, List<String> categories, List<String> aliases, List<String> deviceTypes, int maxResults, String lastTokenFromPreviousBatch);
}