package com.mobilesorcery.sdk.builder.java.ui;
import org.eclipse.jface.preference.FileFieldEditor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import com.mobilesorcery.sdk.builder.java.KeystoreCertificateInfo;
import com.mobilesorcery.sdk.ui.PasswordTextFieldDecorator;
import com.mobilesorcery.sdk.ui.UpdateListener;
import com.mobilesorcery.sdk.ui.UpdateListener.IUpdatableControl;
public class KeystoreCertificateInfoEditor extends Composite implements IUpdatableControl {
private final FileFieldEditor keyStore;
private final Text passkey;
private final Label passkeyLabel;
private final Text storekey;
private final Label storekeyLabel;
private final Label aliasLabel;
private final Text alias;
private final PasswordTextFieldDecorator storekeyDec;
private final PasswordTextFieldDecorator passkeyDec;
private KeystoreCertificateInfo info;
private boolean dirty = false;
private IUpdatableControl updatable;
private final UpdateListener listener;
private KeystoreCertificateInfo defaultInfo;
public KeystoreCertificateInfoEditor(Composite parent, int style) {
super(parent, style);
keyStore = new FileFieldEditor("dummy.1", "Key&store", this) { //$NON-NLS-1$
@Override
protected boolean checkState() {
clearErrorMessage();
return true;
}
};
storekeyLabel = new Label(this, SWT.PASSWORD);
storekeyLabel.setText("&Keystore password");
storekey = new Text(this, SWT.BORDER | SWT.SINGLE);
storekeyDec = new PasswordTextFieldDecorator(storekey);
GridData storekeyData = new GridData(GridData.FILL_HORIZONTAL);
storekeyData.horizontalSpan = 2;
storekey.setLayoutData(storekeyData);
aliasLabel = new Label(this, SWT.NONE);
aliasLabel.setText("Key &Alias");
alias = new Text(this, SWT.BORDER | SWT.SINGLE);
GridData aliasData = new GridData(GridData.FILL_HORIZONTAL);
aliasData.horizontalSpan = 2;
alias.setLayoutData(aliasData);
passkeyLabel = new Label(this, SWT.NONE);
passkeyLabel.setText("&Private key password");
passkey = new Text(this, SWT.BORDER | SWT.SINGLE);
passkeyDec = new PasswordTextFieldDecorator(passkey);
GridData passkeyData = new GridData(GridData.FILL_HORIZONTAL);
passkeyData.horizontalSpan = 2;
passkey.setLayoutData(passkeyData);
listener = new UpdateListener(this);
listener.addTo(SWT.Modify, keyStore.getTextControl(this), storekey, alias, passkey);
}
@Override
public void setEnabled(boolean isEnabled) {
keyStore.setEnabled(isEnabled, this);
storekeyLabel.setEnabled(isEnabled);
storekeyDec.setEnabled(isEnabled);
aliasLabel.setEnabled(isEnabled);
alias.setEnabled(isEnabled);
passkeyLabel.setEnabled(isEnabled);
passkeyDec.setEnabled(isEnabled);
}
public void setKeystoreCertInfo(KeystoreCertificateInfo info) {
this.info = info;
initUI();
}
public KeystoreCertificateInfo getKeystoreCertInfo() {
if (dirty) {
updateKeystoreCertInfo();
}
return info;
}
private void initUI() {
listener.setActive(false);
String keyStorePath = info == null ? "" : info.getKeystoreLocation();
keyStore.setStringValue(keyStorePath == null ? "" : keyStorePath);
String storekeyValue = info == null ? "" : info.getKeystorePassword();
storekey.setText(storekeyValue == null ? "" : storekeyValue);
String aliasValue = info == null ? "" : info.getAlias();
alias.setText(aliasValue == null ? "" : aliasValue);
String passkeyValue = info == null ? "" : info.getKeyPassword();
passkey.setText(passkeyValue == null ? "" : passkeyValue);
listener.setActive(true);
}
void updateKeystoreCertInfo() {
info = new KeystoreCertificateInfo(keyStore.getStringValue(), alias.getText(), storekey.getText(), passkey.getText(), true);
dirty = false;
}
@Override
public void updateUI() {
this.dirty = true;
if (updatable != null) {
updatable.updateUI();
}
}
public void setUpdatable(IUpdatableControl updatable) {
this.updatable = updatable;
}
public void setToDefault() {
setKeystoreCertInfo(KeystoreCertificateInfo.createDefault());
}
}