package com.mobilesorcery.sdk.capabilities.core.permissions;
import java.util.ArrayList;
import java.util.List;
import com.mobilesorcery.sdk.capabilities.core.ICapabilitiesMatcher;
import com.mobilesorcery.sdk.capabilities.core.IChangeRequest;
import com.mobilesorcery.sdk.core.ICapabilities;
import com.mobilesorcery.sdk.core.MoSyncProject;
import com.mobilesorcery.sdk.core.security.IApplicationPermissions;
/**
* A {@link ICapabilitiesMatcher} for application permissions. The
* {@link IChangeRequest} returned will add (but never remove) permissions to
* make it compatible with set of requested capabilities.
* @author Mattias Bybro, mattias.bybro@purplescout.se
*
*/
public class ApplicationPermissionsCapabilitesMatcher implements ICapabilitiesMatcher {
public IChangeRequest match(MoSyncProject project, ICapabilities requestedCapabilites) {
IApplicationPermissions permissions = project.getPermissions();
// We'll just use the convention that the permission id is also the API capability id
List<String> availablePermissions = permissions.getAvailablePermissions(null);
List<String> missingPermissions = new ArrayList<String>();
for (String permission : availablePermissions) {
if (requestedCapabilites.hasCapability(permission) && !permissions.isPermissionRequested(permission)) {
missingPermissions.add(permission);
}
}
return missingPermissions.isEmpty() ? null : new ApplicationPermissionsChangeRequest(project, missingPermissions);
}
}