/* * 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.gses.webui.form; import com.vaadin.ui.Field; import com.vaadin.ui.Form; import com.vaadin.ui.VerticalLayout; import ru.codeinside.gses.activiti.FileValue; import ru.codeinside.gses.activiti.ReadOnly; import ru.codeinside.gses.activiti.SignatureProtocol; import ru.codeinside.gses.activiti.VariableToBytes; import ru.codeinside.gses.activiti.forms.FormID; import ru.codeinside.gses.activiti.forms.Signatures; import ru.codeinside.gses.webui.form.api.FieldSignatureSource; import ru.codeinside.gses.webui.wizard.TransitionAction; import java.util.List; final public class FormSignatureSeq extends AbstractFormSeq { public static final String SIGNATURE = "ЭЦП"; private static final long serialVersionUID = 1L; public FormSignatureSeq(DataAccumulator dataAccumulator) { super(dataAccumulator); } @Override public String getCaption() { return "Подписание данных личной ЭЦП"; } @Override public List<FormField> getFormFields() { throw new UnsupportedOperationException(); } @Override public Form getForm(final FormID formId, final FormSeq previous) { final List<FormField> formFields = previous.getFormFields(); final Form form = new SignatureForm(); int n = 1; for (final FormField formField : formFields) { Object valueObject = formField.getValue(); if (valueObject == null) { valueObject = ""; } else if (valueObject instanceof Boolean) { valueObject = ((Boolean) valueObject) ? "Да" : "Нет"; } String name = formField.getName(); if (name == null) { name = formField.getPropId(); } final ReadOnly txt = new ReadOnly(name + " = " + valueObject); if (n == 1) { txt.setCaption("Подписываемые данные"); } txt.addStyleName("light"); form.addField("*" + n + "*", txt); n++; } if (!formFields.isEmpty()) { final int size = formFields.size(); byte[][] blocks = new byte[size][]; String[] ids = new String[size]; boolean[] files = new boolean[size]; int i = 0; for (final FormField formField : formFields) { Object modelValue = formField.getValue(); blocks[i] = VariableToBytes.toBytes(modelValue); files[i] = (modelValue instanceof FileValue); ids[i] = formField.getPropId(); i++; } FormSignatureField sign = new FormSignatureField(new SignatureProtocol(formId, SIGNATURE, SIGNATURE, blocks, files, ids, form, dataAccumulator)); sign.setCaption(SIGNATURE); sign.setRequired(true); form.addField(SIGNATURE, sign); } else { //TODO: понять ранее на уровне FFT.needStep() final ReadOnly txt = new ReadOnly("Нет данных для подписания"); txt.setRequired(false); txt.setCaption(SIGNATURE); txt.setRequired(true); form.addField(SIGNATURE, txt); } return form; } @Override public TransitionAction getTransitionAction() { return new EmptyAction(); } final public static class SignatureForm extends Form implements FieldSignatureSource { public SignatureForm() { this.setDescription("Электронная подпись предназначена для идентификации лица, " + "подписавшего электронный документ и является полноценной заменой (аналогом) " + "собственноручной подписи в случаях, предусмотренных Гражданским кодексом Российской Федерации " + "(часть 1, глава 9, статья 160)"); } @Override public String getSignedData() { return null; } @Override public Signatures getSignatures() { Field field = getField(SIGNATURE); Object value = field.getValue(); return value instanceof Signatures ? (Signatures) value : null; } @Override public SignData getSignData() { throw new UnsupportedOperationException("Method does not allowed"); } @Override public void attach() { super.attach(); VerticalLayout vl = (VerticalLayout) getParent(); vl.setWidth(100, UNITS_PERCENTAGE); vl.setHeight(-1, UNITS_PIXELS); } } }