/* * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * Copyright (c) 2013, MPL CodeInside http://codeinside.ru */ package ru.codeinside.sign; import java.awt.BorderLayout; import java.awt.Button; import java.awt.Label; import java.awt.Panel; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.security.PrivateKey; import java.security.cert.CertificateEncodingException; import java.security.cert.X509Certificate; import static javax.xml.bind.DatatypeConverter.printBase64Binary; final class Binder implements CertConsumer { final Vaadin vaadin; final Panel ui; final Filter filter = new AcceptAll(); final String fio; Binder(Vaadin vaadin, Panel ui, String fio) { this.vaadin = vaadin; this.ui = ui; this.fio = fio; } public void ready(String name, PrivateKey unusedPrivateKey, X509Certificate certificate) { String status; try { vaadin.updateVariable("cert", printBase64Binary(certificate.getEncoded())); status = "Готово."; } catch (CertificateEncodingException e) { status = "Ошибка."; } ui.removeAll(); ui.add(new Label(name), BorderLayout.PAGE_START); ui.add(new Label(status), BorderLayout.CENTER); Button cancel = new Button("Отменить"); cancel.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { loading(); } }); Panel buttons = new Panel(new BorderLayout(2, 2)); buttons.add(cancel, BorderLayout.LINE_START); ui.add(buttons, BorderLayout.PAGE_END); refresh(); } @Override public void loading() { vaadin.updateVariable("state", "loading"); ui.removeAll(); ui.add(new Label("Загрузка сертификатов..."), BorderLayout.LINE_START); Label status = new Label(""); ui.add(status, BorderLayout.CENTER); refresh(); new Thread(new CertDetector(this, ui, status,fio)).start(); } public void refresh() { ui.validate(); ui.repaint(); } @Override public void noJcp() { vaadin.updateVariable("state", "noJcp"); ui.removeAll(); ui.add(new Label("КриптоПРО JCP не установлен!"), BorderLayout.LINE_START); refresh(); } @Override public Filter getFilter() { return filter; } @Override public String getActionText() { return "Завершить выбор"; } @Override public String getSelectionLabel() { return "Выберите сертификат:"; } }