package org.panlab.software.fstoolkit.sfaclient.preferences;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.window.Window;
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.Listener;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeColumn;
import org.eclipse.swt.widgets.TreeItem;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.panlab.software.fstoolkit.sfaclient.Activator;
public class SFAPreferencePage extends PreferencePage implements
IWorkbenchPreferencePage {
private Tree tree;
public SFAPreferencePage() {
setPreferenceStore(Activator.getDefault().getPreferenceStore());
// ImageDescriptor imageDesc = new ;
setImageDescriptor( AbstractUIPlugin.imageDescriptorFromPlugin( "org.panlab.software.fstoolkit.sfaclient", "icons/sfa_logo.gif") );
setDescription("Please fill your credentials for Slice Federation Architecture (SFA) authorities");
}
@Override
public void init(IWorkbench workbench) {
// TODO Auto-generated method stub
}
@Override
protected Control createContents(Composite parent) {
// Get the preference store
IPreferenceStore preferenceStore = getPreferenceStore();
Composite container = new Composite(parent, SWT.NULL);
GridLayout layout = new GridLayout();
container.setLayout(layout);
layout.numColumns = 2;
layout.verticalSpacing = 2;
GridData gd= new GridData(GridData.FILL_BOTH);
gd.horizontalSpan= 2;
container.setLayoutData(gd);
Composite tableComposite= new Composite(container, SWT.NONE);
tableComposite.setLayout(layout);
GridData data= new GridData(GridData.FILL_BOTH);
data.widthHint= 360;
data.heightHint= convertHeightInCharsToPixels(10);
tableComposite.setLayoutData(data);
tree = new Tree(tableComposite, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION);
tree.setLayoutData(data);
tree.setLinesVisible(true);
tree.setHeaderVisible(true);
TreeColumn column1 = new TreeColumn(tree, SWT.LEFT);
column1.setText("SFA URL");
column1.setWidth(160);
TreeColumn column2 = new TreeColumn(tree, SWT.LEFT);
column2.setText("Username (HRN)");
column2.setWidth(160);
TreeColumn column3 = new TreeColumn(tree, SWT.LEFT);
column3.setText("Authority (HRN)");
column3.setWidth(160);
int accountsnum = preferenceStore.getInt("AccountNums");
for (int i = 0; i < accountsnum; i++) {
TreeItem item = new TreeItem(tree, SWT.NONE);
SFAAccount account = new SFAAccount(
preferenceStore.getString("REGISTRYURL_" + i ),
preferenceStore.getString("AGGREGATEURL_" + i ),
preferenceStore.getString("SLICEMGRURL_" + i ),
preferenceStore.getString("KEYSTORE_" + i ),
preferenceStore.getString("KEYSTOREPASSWORD_" + i ),
preferenceStore.getString("USERNAME_" + i ),
preferenceStore.getString("AUTHORITY_" + i ),
preferenceStore.getString("CERTIFICATEFILENAME_" + i ),
preferenceStore.getString("TRUSTSTORE_" + i ),
preferenceStore.getString("TRUSTSTOREPASSWORD_" + i ),
preferenceStore.getString("SFAVERSION_" + i ),
preferenceStore.getString("SFATYPE_" + i ),
preferenceStore.getBoolean("ENABLEDACCOUNT_" + i ),
preferenceStore.getBoolean("CACHEMODEL_" + i )
);
item.setData( account );
item.setText(new String[] {
account.getRegistry_url() ,
account.getUsername(),
account.getAuthority() });
}
GridData gdButton= new GridData(GridData.FILL_HORIZONTAL );
gdButton.widthHint = 120;
Composite buttons= new Composite(container, SWT.NULL);
buttons.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING));
layout= new GridLayout();
layout.marginHeight= 0;
layout.marginWidth= 0;
buttons.setLayout(layout);
Button button = new Button(buttons, SWT.PUSH);
button.setText("Add");
button.setLayoutData(gdButton);
button.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) {
add();
}
});
button.setLayoutData(getButtonGridData(button));
button = new Button(buttons, SWT.PUSH);
button.setText("Edit");
button.setLayoutData(gdButton);
button.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) {
edit();
}
});
button.setLayoutData(getButtonGridData(button));
button = new Button(buttons, SWT.PUSH);
button.setText("Delete");
button.setLayoutData(gdButton);
button.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) {
delete();
}
});
button.setLayoutData(getButtonGridData(button));
return container;
}
protected void add() {
SFAAccount account = new SFAAccount("https://url:12345", "https://url:12346", "https://url:12347",
"", "", "",
"plc.<baseurl>", "", "", "", "2", "SFA", true, false);
SFAAccount newaccount = editSFAAccount(account, false);
if (newaccount != null){
TreeItem item = new TreeItem(tree, SWT.NONE);
item.setData( newaccount );
item.setText(new String[] {
newaccount.getRegistry_url() ,
newaccount.getUsername(),
newaccount.getAuthority() });
}
}
protected void delete() {
TreeItem item = tree.getSelection()[0];
item.dispose();
item=null;
}
protected void edit() {
TreeItem item = tree.getSelection()[0];
SFAAccount account = (SFAAccount) item.getData();
SFAAccount newaccount = editSFAAccount(account, true);
if (newaccount != null){
item.setData( newaccount );
item.setText(new String[] {
newaccount.getRegistry_url() ,
newaccount.getUsername(),
newaccount.getAuthority() });
}
}
protected SFAAccount editSFAAccount(SFAAccount account, boolean edit) {
EditSFAAccountDialog dialog= new EditSFAAccountDialog(getShell(), account, edit);
if (dialog.open() == Window.OK) {
return dialog.getAccount();
}
return null;
}
@Override
public boolean performOk() {
// Get the preference store
IPreferenceStore preferenceStore = getPreferenceStore();
preferenceStore.setValue("AccountNums", tree.getItemCount() );
for (int i = 0; i < tree.getItemCount(); i++) {
TreeItem item = tree.getItem(i);
SFAAccount account = (SFAAccount) item.getData();
preferenceStore.setValue("REGISTRYURL_" + i , account.getRegistry_url());
preferenceStore.setValue("AGGREGATEURL_" + i , account.getAggregate_url());
preferenceStore.setValue("SLICEMGRURL_" + i , account.getSlicemanager_url());
preferenceStore.setValue("KEYSTORE_" + i , account.getKeystoreFileName());
preferenceStore.setValue("KEYSTOREPASSWORD_" + i , account.getKeystorePassword() );
preferenceStore.setValue("USERNAME_" + i , account.getUsername() );
preferenceStore.setValue("AUTHORITY_" + i , account.getAuthority() );
preferenceStore.setValue("CERTIFICATEFILENAME_" + i , account.getCertificateFileName() );
preferenceStore.setValue("TRUSTSTORE_" + i , account.getTrustStoreFileName ());
preferenceStore.setValue("TRUSTSTOREPASSWORD_" + i , account.getTrustStorePassword() );
preferenceStore.setValue("SFAVERSION_" + i , account.getSFAVersion() );
preferenceStore.setValue("SFATYPE_" + i , account.getSFAType() );
preferenceStore.setValue("ENABLEDACCOUNT_" +i, account.getEnabledAccount());
preferenceStore.setValue("CACHEMODEL_" +i, account.getCacheModel());
}
// Set the values from the fields
// if (fieldOne != null) preferenceStore.setValue(PLCPreferenceConstants.P_PLCUSERNAME, fieldOne.getText());
// if (fieldTwo != null) preferenceStore.setValue(TWO, fieldTwo.getText());
// if (fieldThree != null)
// preferenceStore.setValue(THREE, fieldThree.getText());
// Return true to allow dialog to close
return true;
}
private static GridData getButtonGridData(Button button) {
GridData data= new GridData(GridData.FILL_HORIZONTAL);
// TODO replace SWTUtil
// data.widthHint= SWTUtil.getButtonWidthHint(button);
// data.heightHint= SWTUtil.getButtonHeightHint(button);
return data;
}
}