package gr.upatras.ece.nam.fstoolkit.plc.preferences;
import gr.upatras.ece.nam.fstoolkit.plc.Activator;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferencePage;
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.Text;
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;
public class PlanetLabPreferencePage extends PreferencePage implements
IWorkbenchPreferencePage {
private Text fieldOne;
private Tree tree;
public PlanetLabPreferencePage(){
setPreferenceStore(Activator.getDefault().getPreferenceStore());
// ImageDescriptor imageDesc = new ;
setImageDescriptor( AbstractUIPlugin.imageDescriptorFromPlugin( "gr.upatras.ece.nam.fstoolkit.plc", "icons/plc_logo.gif") );
setDescription("Please fill your credentials for PlanetLab Central(s)");
}
@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("Name");
column1.setWidth(160);
TreeColumn column2 = new TreeColumn(tree, SWT.LEFT);
column2.setText("URL (XML-RPC API)");
column2.setWidth(160);
TreeColumn column3 = new TreeColumn(tree, SWT.LEFT);
column3.setText("Username");
column3.setWidth(160);
int accountsnum = preferenceStore.getInt("AccountNums");
for (int i = 0; i < accountsnum; i++) {
TreeItem item = new TreeItem(tree, SWT.NONE);
PLCAccount account = new PLCAccount(
preferenceStore.getString("PLCNAME_" + i ),
preferenceStore.getString("URL_" + i ),
preferenceStore.getString("USERNAME_" + i ),
preferenceStore.getString("PASSWORD_" + i ),
preferenceStore.getBoolean("ENABLED_ACCOUNT_" + i)
);
item.setData( account );
item.setText(new String[] {
account.getPlcName() ,
account.getUrlapi() ,
account.getUsername() });
}
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.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.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.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) {
delete();
}
});
button.setLayoutData(getButtonGridData(button));
return container;
}
protected void add() {
PLCAccount account = new PLCAccount("", "", "", "", true);
PLCAccount newaccount = editPLCAccount(account, false);
if (newaccount != null){
TreeItem item = new TreeItem(tree, SWT.NONE);
item.setData( newaccount );
item.setText(new String[] {
newaccount .getPlcName() ,
newaccount .getUrlapi() ,
newaccount .getUsername() });
}
}
protected void delete() {
TreeItem item = tree.getSelection()[0];
item.dispose();
item=null;
}
protected void edit() {
TreeItem item = tree.getSelection()[0];
PLCAccount account = (PLCAccount) item.getData();
PLCAccount newaccount = editPLCAccount(account, true);
if (newaccount != null){
item.setData( newaccount );
item.setText(new String[] {
newaccount .getPlcName() ,
newaccount .getUrlapi() ,
newaccount .getUsername() });
}
}
protected PLCAccount editPLCAccount(PLCAccount account, boolean edit) {
EditPLCAccountDialog dialog= new EditPLCAccountDialog(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);
PLCAccount account = (PLCAccount) item.getData();
preferenceStore.setValue("PLCNAME_" + i , account.getPlcName());
preferenceStore.setValue("URL_" + i , account.getUrlapi());
preferenceStore.setValue("USERNAME_" + i , account.getUsername());
preferenceStore.setValue("PASSWORD_" + i , account.getPassword() );
preferenceStore.setValue("ENABLED_ACCOUNT_" + i , account.getEnabledAccount() );
}
// 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;
}
}