package com.mobilesorcery.sdk.builder.java.ui.preferences; import java.util.ArrayList; import org.eclipse.jface.dialogs.IMessageProvider; import org.eclipse.jface.preference.PreferencePage; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; import com.mobilesorcery.sdk.builder.java.Activator; import com.mobilesorcery.sdk.builder.java.KeystoreCertificateInfo; import com.mobilesorcery.sdk.builder.java.PropertyInitializer; import com.mobilesorcery.sdk.builder.java.ui.KeystoreCertificateInfoEditor; import com.mobilesorcery.sdk.core.CoreMoSyncPlugin; import com.mobilesorcery.sdk.core.PreferenceStorePropertyOwner; import com.mobilesorcery.sdk.core.SecurePropertyException; import com.mobilesorcery.sdk.ui.DefaultMessageProvider; import com.mobilesorcery.sdk.ui.UpdateListener; import com.mobilesorcery.sdk.ui.UpdateListener.IUpdatableControl; public class JavaMESigningPreferencePage extends PreferencePage implements IWorkbenchPreferencePage, IUpdatableControl { private KeystoreCertificateInfoEditor editor; private Button doSign; public JavaMESigningPreferencePage() { super(); setPreferenceStore(Activator.getDefault().getPreferenceStore()); } @Override public boolean performOk() { ArrayList<KeystoreCertificateInfo> infos = new ArrayList<KeystoreCertificateInfo>(); if (doSign.getSelection()) { infos.add(editor.getKeystoreCertInfo()); } Activator.getDefault().getPreferenceStore().setValue(PropertyInitializer.JAVAME_DO_SIGN, doSign.getSelection()); try { KeystoreCertificateInfo.store(infos, PropertyInitializer.JAVAME_KEYSTORE_CERT_INFOS, new PreferenceStorePropertyOwner(getPreferenceStore()), CoreMoSyncPlugin.getDefault().getSecureProperties()); } catch (SecurePropertyException e) { handleSecurePropertyException(e); return false; } return true; } private void handleSecurePropertyException(SecurePropertyException e) { setMessage(e.getMessage(), IMessageProvider.WARNING); } private void setMessage(IMessageProvider message) { setMessage(message.getMessage(), message.getMessageType()); } @Override public void performDefaults() { editor.setToDefault(); doSign.setSelection(Activator.getDefault().getPreferenceStore().getDefaultBoolean(PropertyInitializer.JAVAME_DO_SIGN)); updateUI(); } @Override public void init(IWorkbench workbench) { } @Override protected Control createContents(Composite parent) { // We only support one certificate at this time (in the UI). doSign = new Button(parent, SWT.CHECK); doSign.addListener(SWT.Selection, new UpdateListener(this)); doSign.setText("&Sign application for JavaME platforms"); editor = new KeystoreCertificateInfoEditor(parent, SWT.NONE); KeystoreCertificateInfo info = KeystoreCertificateInfo.loadOne( PropertyInitializer.JAVAME_KEYSTORE_CERT_INFOS, new PreferenceStorePropertyOwner(getPreferenceStore()), CoreMoSyncPlugin.getDefault().getSecureProperties()); editor.setKeystoreCertInfo(info); editor.setUpdatable(this); doSign.setSelection(Activator.getDefault().getPreferenceStore().getBoolean(PropertyInitializer.JAVAME_DO_SIGN)); updateUI(); return editor; } @Override public void updateUI() { editor.setEnabled(doSign.getSelection()); KeystoreCertificateInfo info = editor.getKeystoreCertInfo(); setMessage((doSign.getSelection() && info != null) ? info.validate(true) : DefaultMessageProvider.EMPTY); } }