package com.mobilesorcery.sdk.builder.java.capabilities; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import org.eclipse.ui.IMemento; import com.mobilesorcery.sdk.builder.java.Activator; import com.mobilesorcery.sdk.core.ICapabilities; import com.mobilesorcery.sdk.core.security.ICommonPermissions; import com.mobilesorcery.sdk.profiles.IProfile; import com.mobilesorcery.sdk.profiles.filter.AbstractDeviceFilter; public class JavaMEOpCertFilter extends AbstractDeviceFilter { private static final HashSet<String> TAINTED_CAPABILITIES = new HashSet<String>(Arrays.asList(new String[] { ICommonPermissions.LOCATION, ICommonPermissions.BLUETOOTH, ICommonPermissions.CALENDAR, ICommonPermissions.CAMERA, ICommonPermissions.CONTACTS, ICommonPermissions.CALENDAR, ICommonPermissions.FILE_STORAGE })); public static final String FACTORY_ID = Activator.PLUGIN_ID + ".capabilities.elementfactory"; private String[] requestedCapabilities; private boolean doesFilter = false; public JavaMEOpCertFilter(String[] requestedCapabilities) { init(requestedCapabilities); } public JavaMEOpCertFilter(ICapabilities requestedCapabilities) { ArrayList<String> capabilitiesAsStr = new ArrayList<String>(); for (String tainted : TAINTED_CAPABILITIES) { if (requestedCapabilities.hasCapability(tainted)) { capabilitiesAsStr.add(tainted); } } init(capabilitiesAsStr.toArray(new String[0])); } private void init(String[] requestedCapabilities) { // NOTE: we could get away for now with just storing the 'should filter', // but we'll soon add some even smarter stuff :) this.requestedCapabilities = requestedCapabilities; doesFilter = false; for (String requestedCapability : requestedCapabilities) { doesFilter |= TAINTED_CAPABILITIES.contains(requestedCapability); } setStyle(DISALLOW); } public boolean doesFilter() { return doesFilter; } @Override public String getFactoryId() { return FACTORY_ID; } @Override public void saveState(IMemento memento) { for (String requestedCapability : requestedCapabilities) { IMemento child = memento.createChild("requested-capability"); child.putString("id", requestedCapability); } } @Override public boolean acceptProfile(IProfile profile) { // TODO: Create api to extract packager from runtime id boolean platformIsJavaME = profile.getProperties().containsKey("MA_PROF_STRING_PLATFORM_JAVAME"); return !doesFilter || !platformIsJavaME; } @Override public String toString() { return "JavaME profiles that might require operator certificates"; } }