View Javadoc

1   package org.eparapher.rcp.wizards;
2   
3   import java.security.cert.X509Certificate;
4   
5   import org.eclipse.jface.action.Action;
6   import org.eclipse.jface.viewers.DoubleClickEvent;
7   import org.eclipse.jface.viewers.IDoubleClickListener;
8   import org.eclipse.jface.viewers.ISelection;
9   import org.eclipse.jface.viewers.IStructuredContentProvider;
10  import org.eclipse.jface.viewers.IStructuredSelection;
11  import org.eclipse.jface.viewers.ITableLabelProvider;
12  import org.eclipse.jface.viewers.LabelProvider;
13  import org.eclipse.jface.viewers.TableViewer;
14  import org.eclipse.jface.viewers.Viewer;
15  import org.eclipse.jface.viewers.ViewerSorter;
16  import org.eclipse.jface.wizard.IWizardPage;
17  import org.eclipse.jface.wizard.WizardPage;
18  import org.eclipse.swt.SWT;
19  import org.eclipse.swt.graphics.Image;
20  import org.eclipse.swt.layout.FillLayout;
21  import org.eclipse.swt.widgets.Composite;
22  import org.eclipse.swt.widgets.Table;
23  import org.eclipse.swt.widgets.TableColumn;
24  import org.eclipse.swt.widgets.TableItem;
25  import org.eparapher.core.crypto.EPKeystoreManager;
26  import org.eparapher.core.crypto.KeystoreEntry;
27  import org.eparapher.core.crypto.cert.CertificateInfo;
28  import org.eparapher.core.crypto.keystore.IUserKeystore;
29  import org.eparapher.rcp.dialog.CertificateViewerDialog;
30  import org.eparapher.rcp.tools.GUIIcons;
31  import org.eparapher.rcp.tools.eParapherTools;
32  import org.eparapher.core.signature.DefaultSignatureParameters;
33  
34  public abstract class KeysAndCertificateSelectionPage extends WizardPage implements
35  		IWizardPage {
36  
37  	private TableViewer viewer;
38  	
39  	@SuppressWarnings("unused")
40  	private DoubleClickAction dca;
41  	
42  	private KeystoreEntry[] certlist;
43  
44  	private int defaultindex;
45  	private String defaultAlias;
46  	
47  	private Composite container;
48  	
49  	public KeysAndCertificateSelectionPage() {
50  		super("Keys And Certificate Selection");
51  		setDescription("Please select your signing certificate.");
52  		setImageDescriptor( GUIIcons.WIZARD_SIGN_IMG2 );
53  		defaultAlias = EPKeystoreManager.getInstance().getUserkeystore().getDefaultAlias();
54  	}
55  
56  	public KeysAndCertificateSelectionPage(DefaultSignatureParameters dsp) {
57  		this();
58  		defaultAlias=dsp.getSignatureAlias();
59  	}
60  	
61  	public void createControl(Composite parent) {
62  		container = new Composite(parent, SWT.NULL);
63  		FillLayout layout = new FillLayout();
64  		//layout.numColumns = 1;
65  		container.setLayout(layout);
66  
67  		setControl(container);
68  
69  		//http://www.eclipsezone.com/eclipse/forums/t73690.html
70  		final Table table = new Table(container, SWT.BORDER | SWT.SINGLE | SWT.FULL_SELECTION );
71  		table.setHeaderVisible(true);
72  		table.setLinesVisible(false);
73  		//table.setBounds(new Rectangle(26, 21, 381, 370));
74  
75  		String[] column = new String[] {" ","Alias","Subject","Validity","Key"};
76  		 
77          for (int i = 0; i < column.length; i++) {
78              TableColumn c = new TableColumn(table, SWT.LEFT);
79              c.setText(column[i]);
80              switch (i) {
81  			case 0:
82  	            c.setWidth(25);
83  				break;
84  			case 3:
85  	            c.setWidth(180);
86  				break;
87  			default:
88  				c.setWidth(120);
89  				break;
90  			}
91          }
92  //		table.addListener(SWT.Selection, new Listener() {
93  //			public void handleEvent(Event event) {
94  //				String string = event.detail == SWT.CHECK ? "Checked" : "Selected";
95  //				//log.info(event.item + " " + string);
96  //				if (event.detail == SWT.CHECK) {
97  //					//log.info(event.item + " was checked: " + ((TableItem) event.item).getChecked());
98  //					TableItem tableItem = (TableItem) event.item;
99  //					int ndx = table.indexOf(tableItem);
100 //					elipseButtons[ndx].setVisible(tableItem.getChecked());
101 //				}
102 //
103 //			}
104 //		});
105 		viewer = new TableViewer(table);
106 		viewer.setContentProvider(new ViewContentProvider());
107 		viewer.setLabelProvider(new ViewLabelProvider());
108 		viewer.setComparator(new NameSorter());
109 		viewer.setInput(getContainer());
110 		
111 		//Set Default selection
112 		for (int i = 0; i < viewer.getTable().getItemCount(); i++) {
113 		    Object data = viewer.getTable().getItem(i).getData();
114 		    if (data instanceof KeystoreEntry) {
115 		        KeystoreEntry itemke = (KeystoreEntry) data;
116 		        if (itemke.getKeystoreAlias().equals(defaultAlias))
117 		            defaultindex = i;
118 		    }
119         }
120 		viewer.getTable().setSelection(defaultindex);
121 
122 		//TODO : Window not selectable - modal wizard problem?
123 		dca = new DoubleClickAction();
124 		
125 		setPageComplete(true);
126 	}
127 
128 	public String getSelectedSignatureCertificateAlias() {
129 		ISelection selection = viewer.getSelection();
130 		KeystoreEntry obj = (KeystoreEntry) ((IStructuredSelection)selection).getFirstElement();
131 		return obj.getKeystoreAlias();
132 	}
133 	
134 	
135 	class ViewContentProvider implements IStructuredContentProvider {
136 		public void inputChanged(Viewer v, Object oldInput, Object newInput) {
137 		}
138 		public void dispose() {
139 		}
140 		public Object[] getElements(Object parent) {
141 			certlist = new KeystoreEntry[0];
142 			IUserKeystore userKeystore = EPKeystoreManager.getInstance().getUserkeystore();
143 			if ( userKeystore == null ) {
144 		        eParapherTools.errorMessage("Failed to initialize your personal keystore.\r\nPlease change it in configuration.");
145 			} else if ( userKeystore.loadKeyStore() ) {
146 				certlist = userKeystore.getKeystoreEntries();
147 				
148 			}
149 			return certlist;
150 		}
151 	}
152 	class ViewLabelProvider extends LabelProvider implements ITableLabelProvider {
153 		public String getColumnText(Object obj, int index) {
154 
155 			if (obj==null)
156 				return "";
157 			
158 			KeystoreEntry certchain = (KeystoreEntry) obj;
159 			X509Certificate userCert = null;
160 			if (certchain.getCertificateChain() == null) {
161 				if (index==4)
162 					return "Secret Key";
163 				if (index==7)
164 					return certchain.getKeystoreAlias();
165 				return "";
166 			}
167 			userCert = certchain.getCertificateChain()[0];
168 			
169 			switch (index) {
170 				case 0:	return "";
171 				case 1: return certchain.getKeystoreAlias();
172 				case 2: return CertificateInfo.getSubjectAsShortText(userCert);
173 				case 3: return CertificateInfo.getNotBeforeAsText( userCert ) + " to " + CertificateInfo.getNotAfterAsText( userCert );
174 				case 4: return CertificateInfo.getPublicKeyInfo( userCert.getPublicKey() );
175 				default: break;
176 			}
177 			return "";
178 		}
179 		public Image getColumnImage(Object obj, int index) {
180 			if (index == 0)
181 				return getImage(obj);
182 			return null;
183 		}
184 		
185 		public Image getImage(Object obj) {
186 			KeystoreEntry certchain = (KeystoreEntry) obj;
187 			if (certchain.getKeystoreAlias().equals(defaultAlias)) {
188 				return GUIIcons.CERTIFICATE_SEL_ICON_IMAGE;
189 			} else if ( certchain.getCertificateChain()==null || certchain.getCertificateChain().length==0 )
190 				return GUIIcons.PRIVATE_KEY_ICON_IMAGE;
191 			else
192 				return GUIIcons.CERTIFICATE_ICON_IMAGE;
193 		}
194 	}
195 	class NameSorter extends ViewerSorter {
196 	}	
197 	class DoubleClickAction extends Action {
198 		public DoubleClickAction() {
199 			viewer.addDoubleClickListener(new IDoubleClickListener() {
200 				public void doubleClick(DoubleClickEvent event) {
201 					run();
202 				}
203 			});
204 		}
205 		public void run() {
206 			ISelection selection = viewer.getSelection();
207 			Object obj = ((IStructuredSelection)selection).getFirstElement();
208 			if (obj!=null)
209 				if (obj instanceof KeystoreEntry) {
210 					KeystoreEntry ke = (KeystoreEntry) obj; 
211 					CertificateViewerDialog cvg = new CertificateViewerDialog(ke.getCertificateChain());
212 					cvg.open();
213 				}
214 		}
215 	}
216 }