/* * 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.adm.ui.employee; import com.vaadin.ui.Alignment; import com.vaadin.ui.Button; import com.vaadin.ui.Component; import com.vaadin.ui.CustomComponent; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Label; import com.vaadin.ui.Panel; import com.vaadin.ui.Window; import com.vaadin.ui.themes.Reindeer; import ru.codeinside.adm.UserItem; import ru.codeinside.gses.cert.NameParts; import ru.codeinside.gses.cert.X509; import ru.codeinside.gses.webui.supervisor.ConfirmWindow; import java.security.cert.X509Certificate; public class CertificateBlock extends CustomComponent { final byte[] x509; boolean certificateWasRemoved = false; public CertificateBlock(UserItem userItem) { this.x509 = userItem.getX509(); Component root = new HorizontalLayout(); if (x509 != null) { X509Certificate x509Certificate = X509.decode(x509); if (x509Certificate != null) { HorizontalLayout h = new HorizontalLayout(); h.setSpacing(true); h.setMargin(true); h.setSizeUndefined(); NameParts subjectParts = X509.getSubjectParts(x509Certificate); Label certLabel = new Label(subjectParts.getShortName()); h.addComponent(certLabel); h.setComponentAlignment(certLabel, Alignment.MIDDLE_CENTER); Button remove = new Button("Сбросить привязку к сертификату"); remove.setStyleName(Reindeer.BUTTON_SMALL); h.addComponent(remove); h.setComponentAlignment(remove, Alignment.MIDDLE_CENTER); remove.addListener((Button.ClickListener) new CertificateCleaner(remove, certLabel)); Panel panel = new Panel(); panel.setCaption("Используемый сертификат:"); panel.setContent(h); panel.setSizeUndefined(); root = panel; } else { certificateWasRemoved = true; } } setCompositionRoot(root); setSizeUndefined(); } public boolean isCertificateWasRemoved() { return certificateWasRemoved; } final class CertificateCleaner implements Button.ClickListener, Listener { private final Button remove; private final Label certLabel; public CertificateCleaner(Button remove, Label certLabel) { this.remove = remove; this.certLabel = certLabel; } @Override public void buttonClick(Button.ClickEvent event) { Window confirmWindow = new ConfirmWindow("Вы уверены, что хотите сбросить привязку к сертификату?"); confirmWindow.setResizable(false); confirmWindow.setClosable(false); confirmWindow.addListener(this); getWindow().addWindow(confirmWindow); } @Override public void componentEvent(Event event) { if (event instanceof ConfirmWindow.ConfirmOkEvent) { remove.setVisible(false); certLabel.setValue("отсутствует"); certificateWasRemoved = true; } } } }