package gr.upatras.ece.nam.fstoolkit.sfaclient.preferences; import java.io.FileInputStream; import java.io.IOException; import java.util.Scanner; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.Path; import org.eclipse.jface.dialogs.StatusDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; 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.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.eclipse.swt.widgets.FileDialog; import gr.upatras.ece.nam.fci.sfa.SFA_XMLRPCClient; public class EditSFAAccountDialog extends StatusDialog { protected SFAAccount account; private Text registryUrlText; private Text aggregateUrlText; private Text sliceManagerUrlText; private Text keystoreFileNameText; private Text keystorePasswordText; private Text usernameText; private Text authorityText; private Text certificateText; private Text testConnection; private Text trustStoreFileNameText; private Text trustStorePasswordText; private Text SFAVersionText; private Text SFATypeText; private Button enableAccountChb; private Button cacheRSpecCkb; public EditSFAAccountDialog(Shell parent, SFAAccount account, boolean edit) { super(parent); this.account = account; String title= edit ? "Edit SFA account" : "New SFA account"; setTitle(title); // TODO Auto-generated constructor stub } public SFAAccount getAccount() { return this.account; } @Override protected Control createDialogArea(Composite parent) { Composite container = new Composite(parent, SWT.NULL); GridLayout layout = new GridLayout(); container.setLayout(layout); layout.numColumns = 3; layout.verticalSpacing = 2; GridData gdButton= new GridData(GridData.FILL_HORIZONTAL ); gdButton.widthHint = 120; GridData gd= new GridData(GridData.FILL_BOTH); gd.horizontalSpan= 2; gd.widthHint = 640; gd.heightHint = 400; gd.horizontalAlignment = SWT.FILL; container.setLayoutData(gd); createLabel(container, ""); enableAccountChb = new Button(container, SWT.CHECK ); enableAccountChb.setText("Enable this account"); enableAccountChb.setSelection( account.getEnabledAccount() ); enableAccountChb.setLayoutData(gdButton); createLabel(container, ""); createLabel(container, "Registry URL:"); //int descFlags= fIsNameModifiable ? SWT.BORDER : SWT.BORDER | SWT.READ_ONLY; GridData gdtext= new GridData(GridData.FILL_HORIZONTAL ); gdtext.widthHint = 250; registryUrlText = new Text(container, SWT.BORDER ); registryUrlText.setLayoutData(gdtext); registryUrlText.setText(account.getRegistry_url()); createLabel(container, ""); createLabel(container, "Aggregate URL:"); //int descFlags= fIsNameModifiable ? SWT.BORDER : SWT.BORDER | SWT.READ_ONLY; gdtext= new GridData(GridData.FILL_HORIZONTAL ); gdtext.widthHint = 250; aggregateUrlText = new Text(container, SWT.BORDER ); aggregateUrlText.setLayoutData(gdtext); aggregateUrlText.setText(account.getAggregate_url()); createLabel(container, ""); createLabel(container, "Slice Manager URL:"); //int descFlags= fIsNameModifiable ? SWT.BORDER : SWT.BORDER | SWT.READ_ONLY; gdtext= new GridData(GridData.FILL_HORIZONTAL ); gdtext.widthHint = 250; sliceManagerUrlText = new Text(container, SWT.BORDER ); sliceManagerUrlText.setLayoutData(gdtext); sliceManagerUrlText.setText(account.getSlicemanager_url()); createLabel(container, ""); createLabel(container, "Authority (HRN):"); //int descFlags= fIsNameModifiable ? SWT.BORDER : SWT.BORDER | SWT.READ_ONLY; authorityText = new Text(container, SWT.BORDER ); authorityText.setLayoutData(gdtext); authorityText.setText(account.getAuthority() ); createLabel(container, ""); createLabel(container, "Username (HRN):"); //int descFlags= fIsNameModifiable ? SWT.BORDER : SWT.BORDER | SWT.READ_ONLY; usernameText = new Text(container, SWT.BORDER ); usernameText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); usernameText.setText(account.getUsername() ); createLabel(container, ""); createLabel(container, "SFAVersion:"); //int descFlags= fIsNameModifiable ? SWT.BORDER : SWT.BORDER | SWT.READ_ONLY; SFAVersionText = new Text(container, SWT.BORDER ); SFAVersionText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); SFAVersionText.setText(account.getSFAVersion() ); createLabel(container, ""); createLabel(container, "SFAType:"); //int descFlags= fIsNameModifiable ? SWT.BORDER : SWT.BORDER | SWT.READ_ONLY; SFATypeText = new Text(container, SWT.BORDER ); SFATypeText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); SFATypeText.setText(account.getSFAType() ); createLabel(container, ""); createLabel(container, "p12 Keystore Filename (.p12):"); //int descFlags= fIsNameModifiable ? SWT.BORDER : SWT.BORDER | SWT.READ_ONLY; keystoreFileNameText = new Text(container, SWT.BORDER ); keystoreFileNameText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); keystoreFileNameText.setText(account.getKeystoreFileName() ); keystoreFileNameText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { dialogChanged(); } }); Button button = new Button(container, SWT.PUSH); button.setText("Browse..."); button.setLayoutData(gdButton); button.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { handleBrowse(keystoreFileNameText); } }); createLabel(container, "p12 Keystore Password:"); //int descFlags= fIsNameModifiable ? SWT.BORDER : SWT.BORDER | SWT.READ_ONLY; keystorePasswordText = new Text(container, SWT.BORDER ); keystorePasswordText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); keystorePasswordText.setEchoChar('*'); keystorePasswordText.setText(account.getKeystorePassword() ); createLabel(container, ""); createLabel(container, "Trust Filename (.keystore):"); //int descFlags= fIsNameModifiable ? SWT.BORDER : SWT.BORDER | SWT.READ_ONLY; trustStoreFileNameText = new Text(container, SWT.BORDER ); trustStoreFileNameText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); trustStoreFileNameText.setText(account.getTrustStoreFileName() ); trustStoreFileNameText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { dialogChanged(); } }); button = new Button(container, SWT.PUSH); button.setText("Browse..."); button.setLayoutData(gdButton); button.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { handleBrowse(trustStoreFileNameText); } }); createLabel(container, "Trust Password:"); //int descFlags= fIsNameModifiable ? SWT.BORDER : SWT.BORDER | SWT.READ_ONLY; trustStorePasswordText = new Text(container, SWT.BORDER ); trustStorePasswordText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); trustStorePasswordText.setEchoChar('*'); trustStorePasswordText.setText(account.getTrustStorePassword() ); createLabel(container, ""); createLabel(container, "self-signed Certificate Filename (.sscrt):"); //int descFlags= fIsNameModifiable ? SWT.BORDER : SWT.BORDER | SWT.READ_ONLY; certificateText = new Text(container, SWT.BORDER ); certificateText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); certificateText.setText(account.getCertificateFileName() ); certificateText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { dialogChanged(); } }); button = new Button(container, SWT.PUSH); button.setText("Browse..."); button.setLayoutData(gdButton); button.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { handleBrowse(certificateText); } }); createLabel(container, ""); cacheRSpecCkb = new Button(container, SWT.CHECK); cacheRSpecCkb.setText("Cache R-Spec"); cacheRSpecCkb.setLayoutData(gdButton); cacheRSpecCkb.setSelection( account.getCacheModel() ); cacheRSpecCkb.setToolTipText("Check this if you want to cache the R-Spec and speedup the loading of Eclipse plugins. Press the Test button to reload model"); createLabel(container, ""); createLabel(container, "Test connection:"); testConnection = new Text(container, SWT.BORDER | SWT.WRAP | SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL); GridData gridData = new GridData(); gridData.horizontalAlignment = SWT.FILL; gridData.grabExcessHorizontalSpace = true; gridData.verticalAlignment = SWT.FILL; gridData.grabExcessVerticalSpace = true; gridData.heightHint = 400; testConnection.setLayoutData(gridData); testConnection.setText("Press the Test button after filling your settings to test connectivity."); button = new Button(container, SWT.PUSH); button.setText("Test / Update model"); button.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING) ); button.setLayoutData(gdButton); button.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { testConnectivity(); } }); return super.createDialogArea(container); } protected void testConnectivity() { testConnection.setText("test result..."); String certtext = ""; try { certtext = read(this.certificateText.getText()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } SFA_XMLRPCClient sfa = new SFA_XMLRPCClient(); String res = sfa.testMe(this.registryUrlText.getText(), this.sliceManagerUrlText.getText(), this.aggregateUrlText.getText(), this.keystoreFileNameText.getText(), this.keystorePasswordText.getText(), this.trustStoreFileNameText.getText(), this.trustStorePasswordText.getText(), this.authorityText.getText(), this.usernameText.getText(), certtext, this.SFAVersionText.getText(), this.SFATypeText.getText() ).toString() ; testConnection.setText(res); } /** * Uses the standard container selection dialog to choose the new value for * the container field. */ private void handleBrowse(Text textField) { // ContainerSelectionDialog dialog = new ContainerSelectionDialog( // getShell(), ResourcesPlugin.getWorkspace().getRoot(), false, // "Select new file"); // if (dialog.open() == ContainerSelectionDialog.OK) { // Object[] result = dialog.getResult(); // if (result.length == 1) { // textField.setText(((Path) result[0]).toString()); // } // } FileDialog dialog = new FileDialog(getShell()); String fileName = dialog.open(); if (fileName != null) { textField.setText(fileName); } } protected void dialogChanged() { // TODO Auto-generated method stub } private static Label createLabel(Composite parent, String name) { Label label= new Label(parent, SWT.NULL ); label.setText(name); label.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING) ); return label; } private static Text createText(Composite parent) { Text text= new Text(parent, SWT.BORDER); return text; } @Override protected void okPressed() { account.setRegistry_url (this.registryUrlText.getText()); account.setAggregate_url(this.aggregateUrlText.getText()); account.setSlicemanager_url(this.sliceManagerUrlText.getText()); account.setAuthority(this.authorityText.getText()) ; account.setUsername(this.usernameText.getText()); account.setKeystoreFileName(this.keystoreFileNameText.getText()); account.setKeystorePassword(this.keystorePasswordText.getText()); account.setCertificateFileName(this.certificateText.getText()); account.setTrustStoreFileName(this.trustStoreFileNameText.getText()); account.setTrustStorePassword(this.trustStorePasswordText.getText()); account.setSFAVersionText(this.SFAVersionText.getText()); account.setSFATypeText(this.SFATypeText.getText()); account.setEnabledAccount( this.enableAccountChb.getSelection() ); account.setCacheModel(this.cacheRSpecCkb.getSelection()); super.okPressed(); } /** Read the contents of the given file. */ protected String read(String fFileName) throws IOException { StringBuilder text = new StringBuilder(); String NL = System.getProperty("line.separator"); Scanner scanner = new Scanner(new FileInputStream(fFileName), "UTF-8"); try { while (scanner.hasNextLine()){ text.append(scanner.nextLine() + NL); } } finally{ scanner.close(); } return text.toString() ; } }