/* Copyright (C) 2009 Mobile Sorcery AB This program is free software; you can redistribute it and/or modify it under the terms of the Eclipse Public License v1.0. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Eclipse Public License v1.0 for more details. You should have received a copy of the Eclipse Public License v1.0 along with this program. It is also available at http://www.eclipse.org/legal/epl-v10.html */ package com.mobilesorcery.sdk.builder.android.ui.properties; import org.eclipse.jface.dialogs.IMessageProvider; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Listener; import org.eclipse.ui.IWorkbenchPropertyPage; import com.mobilesorcery.sdk.builder.android.Activator; import com.mobilesorcery.sdk.builder.android.PropertyInitializer; import com.mobilesorcery.sdk.builder.java.KeystoreCertificateInfo; 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.PropertyUtil; import com.mobilesorcery.sdk.core.SecurePropertyException; import com.mobilesorcery.sdk.ui.DefaultMessageProvider; import com.mobilesorcery.sdk.ui.MoSyncPropertyPage; import com.mobilesorcery.sdk.ui.UpdateListener; public class AndroidSigningPropertyPage extends MoSyncPropertyPage implements IWorkbenchPropertyPage { private Button useProjectSpecific; private Group signingGroup; private KeystoreCertificateInfoEditor keyCertUI; private KeystoreCertificateInfo globalCertInfo; private KeystoreCertificateInfo projectCertInfo; private KeystoreCertificateInfo currentCertInfo; private Boolean wasEnabled; public AndroidSigningPropertyPage() { super(true); } @Override protected Control createContents(Composite parent) { Composite main = new Composite(parent, SWT.NONE); main.setLayout(new GridLayout(1, false)); useProjectSpecific = new Button(main, SWT.CHECK); useProjectSpecific.setText("Enable Pr&oject Specific Settings"); useProjectSpecific.setSelection(PropertyUtil.getBoolean(getProject(), PropertyInitializer.ANDROID_PROJECT_SPECIFIC_KEYS)); useProjectSpecific.addListener(SWT.Selection, new UpdateListener(this)); Label separator = new Label(main, SWT.SEPARATOR | SWT.HORIZONTAL); separator.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); signingGroup = new Group(main, SWT.NONE); signingGroup.setText("Signing"); signingGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); signingGroup.setLayout(new GridLayout(1, false)); keyCertUI = new KeystoreCertificateInfoEditor(signingGroup, SWT.NONE); keyCertUI.setUpdatable(this); keyCertUI.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); init(); updateUI(); return main; } private void init() { globalCertInfo = KeystoreCertificateInfo.loadOne(PropertyInitializer.ANDROID_KEYSTORE_CERT_INFO, new PreferenceStorePropertyOwner(Activator.getDefault().getPreferenceStore()), CoreMoSyncPlugin.getDefault().getSecureProperties()); projectCertInfo = KeystoreCertificateInfo.loadOne(PropertyInitializer.ANDROID_KEYSTORE_CERT_INFO, getProject(), getProject().getSecurePropertyOwner()); currentCertInfo = globalCertInfo; } @Override public void updateUI() { boolean isEnabled = useProjectSpecific.getSelection(); keyCertUI.setEnabled(isEnabled); boolean changedState = wasEnabled == null || isEnabled != wasEnabled; if (changedState) { wasEnabled = isEnabled; if (isEnabled) { keyCertUI.setKeystoreCertInfo(projectCertInfo); } else { projectCertInfo = currentCertInfo; keyCertUI.setKeystoreCertInfo(globalCertInfo); } } currentCertInfo = keyCertUI.getKeystoreCertInfo(); setMessage(currentCertInfo.validate(true)); } @Override public boolean performOk() { PropertyUtil.setBoolean(getProject(), PropertyInitializer.ANDROID_PROJECT_SPECIFIC_KEYS, useProjectSpecific.getSelection()); try { keyCertUI.getKeystoreCertInfo().store(PropertyInitializer.ANDROID_KEYSTORE_CERT_INFO, getProject(), getProject().getSecurePropertyOwner()); } catch (SecurePropertyException e) { handleSecurePropertyException(e); return false; } return true; } @Override public void performDefaults() { keyCertUI.setToDefault(); useProjectSpecific.setSelection(PropertyUtil.toBoolean(getProject().getDefaultProperty(PropertyInitializer.ANDROID_PROJECT_SPECIFIC_KEYS))); updateUI(); } private void handleSecurePropertyException(SecurePropertyException e) { setMessage(new DefaultMessageProvider(e.getMessage(), IMessageProvider.WARNING)); } }