package com.mobilesorcery.sdk.builder.java.capabilities; import java.util.ArrayList; import com.mobilesorcery.sdk.capabilities.core.AddDeviceFilterChangeRequest; 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.MoSyncTool; import com.mobilesorcery.sdk.core.security.ICommonPermissions; import com.mobilesorcery.sdk.profiles.IDeviceFilter; import com.mobilesorcery.sdk.profiles.IProfile; import com.mobilesorcery.sdk.profiles.filter.ProfileFilter; /** * <p> * A class that helps the user to filter out those capabilites * that typically requires an operator certificate to work * (in practice you don't want to publish to those devices) * </p> * <p>The strategy used is to create a <code>IChangeRequest</code> * for all requested capabilities that matches: * <ul> * <li>A default MIDP 3rd party protection domain of "No" or "Oneshot" * <br>(as per defined in the MIDP 2.0.1 addendum "The Recommended Security Policy for GSM/UMTS Compliant Devices") * <li>Exception: SMS, Internet access * </ul> * where the recom * @author Mattias Bybro, mattias.bybro@purplescout.se * */ public class JavaMEOpCertCapabilitiesMatcher implements ICapabilitiesMatcher { public IChangeRequest match(MoSyncProject project, ICapabilities requestedCapabilities) { IProfile[] profiles = project.getFilteredProfiles(); JavaMEOpCertFilter filter = new JavaMEOpCertFilter(requestedCapabilities); for (int i = 0; i < profiles.length; i++) { IProfile profile = profiles[i]; if (!filter.accept(profile)) { AddDeviceFilterChangeRequest changeRequest = new AddDeviceFilterChangeRequest(project, filter); changeRequest.setMessage("Remove {0} JavaME profiles that might require operator certificates"); changeRequest.setPreferredApplyState(false); return changeRequest; } } return null; } }