|
Lines 12-41
Link Here
|
| 12 |
*******************************************************************************/ |
12 |
*******************************************************************************/ |
| 13 |
package org.eclipse.jsch.internal.ui.preference; |
13 |
package org.eclipse.jsch.internal.ui.preference; |
| 14 |
|
14 |
|
| 15 |
import java.io.*; |
15 |
import java.io.ByteArrayInputStream; |
|
|
16 |
import java.io.ByteArrayOutputStream; |
| 17 |
import java.io.File; |
| 18 |
import java.io.IOException; |
| 19 |
import java.util.Arrays; |
| 20 |
import java.util.HashSet; |
| 16 |
import java.util.Iterator; |
21 |
import java.util.Iterator; |
|
|
22 |
import java.util.Set; |
| 17 |
|
23 |
|
| 18 |
import org.eclipse.core.runtime.*; |
24 |
import org.eclipse.core.runtime.NullProgressMonitor; |
| 19 |
import org.eclipse.jface.dialogs.*; |
25 |
import org.eclipse.core.runtime.Preferences; |
| 20 |
import org.eclipse.jface.dialogs.Dialog; |
26 |
import org.eclipse.jface.dialogs.Dialog; |
| 21 |
import org.eclipse.jface.viewers.*; |
27 |
import org.eclipse.jface.dialogs.IDialogConstants; |
|
|
28 |
import org.eclipse.jface.dialogs.MessageDialog; |
| 29 |
import org.eclipse.jface.viewers.ColumnWeightData; |
| 30 |
import org.eclipse.jface.viewers.IStructuredContentProvider; |
| 31 |
import org.eclipse.jface.viewers.IStructuredSelection; |
| 32 |
import org.eclipse.jface.viewers.ITableLabelProvider; |
| 33 |
import org.eclipse.jface.viewers.LabelProvider; |
| 34 |
import org.eclipse.jface.viewers.TableLayout; |
| 35 |
import org.eclipse.jface.viewers.TableViewer; |
| 36 |
import org.eclipse.jface.viewers.Viewer; |
| 22 |
import org.eclipse.jsch.core.IJSchLocation; |
37 |
import org.eclipse.jsch.core.IJSchLocation; |
| 23 |
import org.eclipse.jsch.core.IJSchService; |
38 |
import org.eclipse.jsch.core.IJSchService; |
| 24 |
import org.eclipse.jsch.internal.core.*; |
39 |
import org.eclipse.jsch.internal.core.IConstants; |
|
|
40 |
import org.eclipse.jsch.internal.core.JSchCorePlugin; |
| 41 |
import org.eclipse.jsch.internal.core.Utils; |
| 25 |
import org.eclipse.jsch.internal.ui.JSchUIPlugin; |
42 |
import org.eclipse.jsch.internal.ui.JSchUIPlugin; |
| 26 |
import org.eclipse.jsch.internal.ui.Messages; |
43 |
import org.eclipse.jsch.internal.ui.Messages; |
| 27 |
import org.eclipse.osgi.util.NLS; |
44 |
import org.eclipse.osgi.util.NLS; |
| 28 |
import org.eclipse.swt.SWT; |
45 |
import org.eclipse.swt.SWT; |
| 29 |
import org.eclipse.swt.custom.BusyIndicator; |
46 |
import org.eclipse.swt.custom.BusyIndicator; |
| 30 |
import org.eclipse.swt.custom.TableEditor; |
47 |
import org.eclipse.swt.custom.TableEditor; |
| 31 |
import org.eclipse.swt.events.*; |
48 |
import org.eclipse.swt.events.FocusEvent; |
|
|
49 |
import org.eclipse.swt.events.FocusListener; |
| 50 |
import org.eclipse.swt.events.ModifyEvent; |
| 51 |
import org.eclipse.swt.events.ModifyListener; |
| 52 |
import org.eclipse.swt.events.SelectionAdapter; |
| 53 |
import org.eclipse.swt.events.SelectionEvent; |
| 32 |
import org.eclipse.swt.graphics.Image; |
54 |
import org.eclipse.swt.graphics.Image; |
| 33 |
import org.eclipse.swt.layout.GridData; |
55 |
import org.eclipse.swt.layout.GridData; |
| 34 |
import org.eclipse.swt.layout.GridLayout; |
56 |
import org.eclipse.swt.layout.GridLayout; |
| 35 |
import org.eclipse.swt.widgets.*; |
57 |
import org.eclipse.swt.widgets.Button; |
| 36 |
import org.eclipse.ui.*; |
58 |
import org.eclipse.swt.widgets.Composite; |
| 37 |
|
59 |
import org.eclipse.swt.widgets.Control; |
| 38 |
import com.jcraft.jsch.*; |
60 |
import org.eclipse.swt.widgets.DirectoryDialog; |
|
|
61 |
import org.eclipse.swt.widgets.Display; |
| 62 |
import org.eclipse.swt.widgets.Event; |
| 63 |
import org.eclipse.swt.widgets.FileDialog; |
| 64 |
import org.eclipse.swt.widgets.Label; |
| 65 |
import org.eclipse.swt.widgets.Listener; |
| 66 |
import org.eclipse.swt.widgets.Shell; |
| 67 |
import org.eclipse.swt.widgets.TabFolder; |
| 68 |
import org.eclipse.swt.widgets.TabItem; |
| 69 |
import org.eclipse.swt.widgets.Table; |
| 70 |
import org.eclipse.swt.widgets.TableColumn; |
| 71 |
import org.eclipse.swt.widgets.TableItem; |
| 72 |
import org.eclipse.swt.widgets.Text; |
| 73 |
import org.eclipse.ui.IWorkbench; |
| 74 |
import org.eclipse.ui.IWorkbenchPreferencePage; |
| 75 |
import org.eclipse.ui.PlatformUI; |
| 76 |
|
| 77 |
import com.jcraft.jsch.Channel; |
| 78 |
import com.jcraft.jsch.ChannelSftp; |
| 79 |
import com.jcraft.jsch.HostKey; |
| 80 |
import com.jcraft.jsch.HostKeyRepository; |
| 81 |
import com.jcraft.jsch.JSch; |
| 82 |
import com.jcraft.jsch.JSchException; |
| 83 |
import com.jcraft.jsch.KeyPair; |
| 84 |
import com.jcraft.jsch.Session; |
| 85 |
import com.jcraft.jsch.SftpATTRS; |
| 86 |
import com.jcraft.jsch.SftpException; |
| 39 |
|
87 |
|
| 40 |
public class PreferencePage extends org.eclipse.jface.preference.PreferencePage |
88 |
public class PreferencePage extends org.eclipse.jface.preference.PreferencePage |
| 41 |
implements IWorkbenchPreferencePage{ |
89 |
implements IWorkbenchPreferencePage{ |
|
Lines 93-98
Link Here
|
| 93 |
tabItem=new TabItem(tabFolder, SWT.NONE); |
141 |
tabItem=new TabItem(tabFolder, SWT.NONE); |
| 94 |
tabItem.setText(Messages.CVSSSH2PreferencePage_133); |
142 |
tabItem.setText(Messages.CVSSSH2PreferencePage_133); |
| 95 |
tabItem.setControl(createHostKeyManagementPage(tabFolder)); |
143 |
tabItem.setControl(createHostKeyManagementPage(tabFolder)); |
|
|
144 |
|
| 145 |
tabItem=new TabItem(tabFolder, SWT.NONE); |
| 146 |
tabItem.setText(Messages.CVSSSH2PreferencePage_137); |
| 147 |
tabItem.setControl(createPreferredAuthenticationPage(tabFolder)); |
| 96 |
|
148 |
|
| 97 |
initControls(); |
149 |
initControls(); |
| 98 |
|
150 |
|
|
Lines 715-720
Link Here
|
| 715 |
private TableViewer viewer; |
767 |
private TableViewer viewer; |
| 716 |
private Button removeHostKeyButton; |
768 |
private Button removeHostKeyButton; |
| 717 |
|
769 |
|
|
|
770 |
private Table preferedAuthMethodTable; |
| 771 |
|
| 772 |
private Button up; |
| 773 |
|
| 774 |
private Button down; |
| 775 |
|
| 718 |
class TableLabelProvider extends LabelProvider implements ITableLabelProvider{ |
776 |
class TableLabelProvider extends LabelProvider implements ITableLabelProvider{ |
| 719 |
public String getColumnText(Object element, int columnIndex){ |
777 |
public String getColumnText(Object element, int columnIndex){ |
| 720 |
HostKey entry=(HostKey)element; |
778 |
HostKey entry=(HostKey)element; |
|
Lines 840-845
Link Here
|
| 840 |
|
898 |
|
| 841 |
return group; |
899 |
return group; |
| 842 |
} |
900 |
} |
|
|
901 |
|
| 902 |
private Control createPreferredAuthenticationPage(Composite parent){ |
| 903 |
Composite root = new Composite(parent, SWT.NONE); |
| 904 |
GridLayout layout=new GridLayout(); |
| 905 |
layout.marginHeight=convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN); |
| 906 |
layout.marginWidth=convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN); |
| 907 |
layout.verticalSpacing=convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING); |
| 908 |
layout.horizontalSpacing=convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING); |
| 909 |
layout.numColumns = 2; |
| 910 |
root.setLayout(layout); |
| 911 |
|
| 912 |
Label label=new Label(root, SWT.NONE); |
| 913 |
GridData textLayoutData=new GridData(SWT.BEGINNING, SWT.BEGINNING, true, false); |
| 914 |
textLayoutData.horizontalSpan = 2; |
| 915 |
label.setLayoutData(textLayoutData); |
| 916 |
label.setText(Messages.CVSSSH2PreferencePage_4); |
| 917 |
|
| 918 |
preferedAuthMethodTable=new Table(root, SWT.CHECK | SWT.BORDER); |
| 919 |
GridData layoutData=new GridData(SWT.FILL, SWT.BEGINNING, true, true); |
| 920 |
layoutData.verticalSpan = 3; |
| 921 |
preferedAuthMethodTable.setLayoutData(layoutData); |
| 922 |
layoutData.minimumHeight = 150; |
| 923 |
layoutData.minimumWidth = 200; |
| 924 |
populateAuthMethods(); |
| 925 |
|
| 926 |
up=new Button(root, SWT.PUSH); |
| 927 |
up.setText(Messages.CVSSSH2PreferencePage_2); |
| 928 |
up.setEnabled(false); |
| 929 |
setButtonLayoutData(up); |
| 930 |
|
| 931 |
down=new Button(root, SWT.PUSH); |
| 932 |
down.setText(Messages.CVSSSH2PreferencePage_3); |
| 933 |
down.setEnabled(false); |
| 934 |
setButtonLayoutData(down); |
| 935 |
|
| 936 |
preferedAuthMethodTable.addSelectionListener(new SelectionAdapter(){ |
| 937 |
|
| 938 |
public void widgetSelected(SelectionEvent e){ |
| 939 |
boolean anySelected = false; |
| 940 |
for(int i = 0; i < preferedAuthMethodTable.getItemCount(); i++){ |
| 941 |
anySelected |= preferedAuthMethodTable.getItem(i).getChecked(); |
| 942 |
} |
| 943 |
|
| 944 |
if(anySelected){ |
| 945 |
setErrorMessage(null); |
| 946 |
setValid(true); |
| 947 |
} |
| 948 |
else{ |
| 949 |
setErrorMessage(Messages.CVSSSH2PreferencePage_5); |
| 950 |
setValid(false); |
| 951 |
} |
| 952 |
up.setEnabled(preferedAuthMethodTable.getSelectionIndex()>0); |
| 953 |
down |
| 954 |
.setEnabled(preferedAuthMethodTable.getSelectionIndex()<preferedAuthMethodTable |
| 955 |
.getItemCount()-1); |
| 956 |
} |
| 957 |
|
| 958 |
}); |
| 959 |
up.addSelectionListener(new SelectionAdapter(){ |
| 960 |
|
| 961 |
public void widgetSelected(SelectionEvent e){ |
| 962 |
int selectedIndex=preferedAuthMethodTable.getSelectionIndex(); |
| 963 |
if(selectedIndex == 1){ //this is the last possible swap |
| 964 |
up.setEnabled(false); |
| 965 |
} |
| 966 |
down.setEnabled(true); |
| 967 |
TableItem sourceItem = preferedAuthMethodTable.getItem(selectedIndex); |
| 968 |
TableItem targetItem = preferedAuthMethodTable.getItem(selectedIndex-1); |
| 969 |
|
| 970 |
//switch text |
| 971 |
String stemp = targetItem.getText(); |
| 972 |
targetItem.setText(sourceItem.getText()); |
| 973 |
sourceItem.setText(stemp); |
| 974 |
|
| 975 |
//switch selection |
| 976 |
boolean btemp = targetItem.getChecked(); |
| 977 |
targetItem.setChecked(sourceItem.getChecked()); |
| 978 |
sourceItem.setChecked(btemp); |
| 979 |
|
| 980 |
preferedAuthMethodTable.setSelection(targetItem); |
| 981 |
} |
| 982 |
}); |
| 983 |
|
| 984 |
down.addSelectionListener(new SelectionAdapter(){ |
| 985 |
|
| 986 |
public void widgetSelected(SelectionEvent e){ |
| 987 |
int selectedIndex=preferedAuthMethodTable.getSelectionIndex(); |
| 988 |
if(selectedIndex == preferedAuthMethodTable.getItemCount()-2){ //this is the last possible swap |
| 989 |
down.setEnabled(false); |
| 990 |
} |
| 991 |
up.setEnabled(true); |
| 992 |
TableItem sourceItem = preferedAuthMethodTable.getItem(selectedIndex); |
| 993 |
TableItem targetItem = preferedAuthMethodTable.getItem(selectedIndex+1); |
| 994 |
|
| 995 |
//switch text |
| 996 |
String stemp = targetItem.getText(); |
| 997 |
targetItem.setText(sourceItem.getText()); |
| 998 |
sourceItem.setText(stemp); |
| 999 |
|
| 1000 |
//switch selection |
| 1001 |
boolean btemp = targetItem.getChecked(); |
| 1002 |
targetItem.setChecked(sourceItem.getChecked()); |
| 1003 |
sourceItem.setChecked(btemp); |
| 1004 |
|
| 1005 |
preferedAuthMethodTable.setSelection(targetItem); |
| 1006 |
} |
| 1007 |
}); |
| 1008 |
|
| 1009 |
return root; |
| 1010 |
} |
| 1011 |
|
| 1012 |
private void populateAuthMethods(){ |
| 1013 |
preferedAuthMethodTable.removeAll(); |
| 1014 |
String[] methods = Utils.getEnabledPreferredAuthMethods().split(","); //$NON-NLS-1$ |
| 1015 |
Set smethods = new HashSet(Arrays.asList(methods)); |
| 1016 |
|
| 1017 |
String[] order = Utils.getMethodsOrder().split(","); //$NON-NLS-1$ |
| 1018 |
|
| 1019 |
for(int i=0; i<order.length; i++){ |
| 1020 |
TableItem tableItem= new TableItem(preferedAuthMethodTable, SWT.NONE); |
| 1021 |
tableItem.setText(0, order[i]); |
| 1022 |
if(smethods.contains(order[i])){ |
| 1023 |
tableItem.setChecked(true); |
| 1024 |
} |
| 1025 |
} |
| 1026 |
} |
| 843 |
|
1027 |
|
| 844 |
void handleSelection(){ |
1028 |
void handleSelection(){ |
| 845 |
boolean empty=viewer.getSelection().isEmpty(); |
1029 |
boolean empty=viewer.getSelection().isEmpty(); |
|
Lines 953-958
Link Here
|
| 953 |
keyPassphrase2Text.setEnabled(enable); |
1137 |
keyPassphrase2Text.setEnabled(enable); |
| 954 |
keyExport.setEnabled(enable); |
1138 |
keyExport.setEnabled(enable); |
| 955 |
saveKeyPair.setEnabled(enable); |
1139 |
saveKeyPair.setEnabled(enable); |
|
|
1140 |
populateAuthMethods(); |
| 1141 |
up.setEnabled(false); |
| 1142 |
down.setEnabled(false); |
| 956 |
} |
1143 |
} |
| 957 |
|
1144 |
|
| 958 |
public void init(IWorkbench workbench){ |
1145 |
public void init(IWorkbench workbench){ |
|
Lines 975-980
Link Here
|
| 975 |
|
1162 |
|
| 976 |
public boolean performOk(){ |
1163 |
public boolean performOk(){ |
| 977 |
boolean result=super.performOk(); |
1164 |
boolean result=super.performOk(); |
|
|
1165 |
storeAuthenticationMethodSettings(); |
| 978 |
if(result){ |
1166 |
if(result){ |
| 979 |
setErrorMessage(null); |
1167 |
setErrorMessage(null); |
| 980 |
String home=ssh2HomeText.getText(); |
1168 |
String home=ssh2HomeText.getText(); |
|
Lines 1003-1014
Link Here
|
| 1003 |
return result; |
1191 |
return result; |
| 1004 |
} |
1192 |
} |
| 1005 |
|
1193 |
|
|
|
1194 |
private void storeAuthenticationMethodSettings(){ |
| 1195 |
String selected = null; |
| 1196 |
String order = null; |
| 1197 |
for(int i = 0; i < preferedAuthMethodTable.getItemCount(); i++){ |
| 1198 |
TableItem item=preferedAuthMethodTable.getItem(i); |
| 1199 |
if(item.getChecked()){ |
| 1200 |
if(selected==null){ |
| 1201 |
selected=item.getText(); |
| 1202 |
} |
| 1203 |
else{ |
| 1204 |
selected+=","+item.getText(); //$NON-NLS-1$ |
| 1205 |
} |
| 1206 |
} |
| 1207 |
if(order == null){ |
| 1208 |
order = item.getText(); |
| 1209 |
} else { |
| 1210 |
order += "," + item.getText(); //$NON-NLS-1$ |
| 1211 |
} |
| 1212 |
} |
| 1213 |
Utils.setEnabledPreferredAuthMethods(selected, order); |
| 1214 |
} |
| 1215 |
|
| 1006 |
public void performApply(){ |
1216 |
public void performApply(){ |
| 1007 |
performOk(); |
1217 |
performOk(); |
| 1008 |
} |
1218 |
} |
| 1009 |
|
1219 |
|
| 1010 |
protected void performDefaults(){ |
1220 |
protected void performDefaults(){ |
| 1011 |
super.performDefaults(); |
1221 |
super.performDefaults(); |
|
|
1222 |
Utils.setEnabledPreferredAuthMethods(Utils.getDefaultAuthMethods(), Utils |
| 1223 |
.getDefaultAuthMethods()); |
| 1012 |
Preferences preferences=JSchCorePlugin.getPlugin().getPluginPreferences(); |
1224 |
Preferences preferences=JSchCorePlugin.getPlugin().getPluginPreferences(); |
| 1013 |
ssh2HomeText |
1225 |
ssh2HomeText |
| 1014 |
.setText(preferences |
1226 |
.setText(preferences |