/*
* 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) 2015, 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.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;
public class FormOvSignatureSeq extends AbstractFormSeq {
public static final String OV_SIGN = "_SoapBodySignatureField";
public static final String SIGNED_DATA_ID = "_SignedSoapBody";
public static final String REQUEST_ID = "_ClientRequestEntityId";
private Form form;
public FormOvSignatureSeq(DataAccumulator dataAccumulator) {
super(dataAccumulator);
}
@Override
public String getCaption() {
return "Подписание тела запроса подписью ОВ";
}
@Override
public List<FormField> getFormFields() {
return null;
}
/**
* Создание формы на основе предыдущей.
*
* @param formId
* @param previous
*/
@Override
public Form getForm(FormID formId, FormSeq previous) {
SignData signData = (SignData) resultTransition.getData();
form = new OvSignatureForm(dataAccumulator.getServiceName(), signData);
FormUtils.addSignedDataToForm(form, signData, SIGNED_DATA_ID);
FormUtils.addSignatureFieldToForm(form, formId, signData, previous.getFormFields(), OV_SIGN, dataAccumulator);
return form;
}
@Override
public void backwardAction() {
if (dataAccumulator != null) {
dataAccumulator.setSoapMessage(null);
}
}
@Override
public TransitionAction getTransitionAction() {
if (dataAccumulator.getServiceName() != null) {
// срабатывает для потребителя
return new CreateSoapMessageAction(dataAccumulator);
} else if (dataAccumulator.getRequestType() != null) {
// срабатывет для поставщика
return new CreateResultSoapMessageAction(dataAccumulator);
} else {
throw new IllegalStateException("Ошибка в маршруте");
}
}
final public static class OvSignatureForm extends Form implements FieldSignatureSource {
private String serviceName;
private SignData signData;
public OvSignatureForm(String serviceName, SignData signData) {
this.setDescription("Электронная подпись предназначена для идентификации лица, " +
"подписавшего электронный документ и является полноценной заменой (аналогом) " +
"собственноручной подписи в случаях, предусмотренных Гражданским кодексом Российской Федерации " +
"(часть 1, глава 9, статья 160)");
this.serviceName = serviceName;
this.signData = signData;
}
public String getEntityFieldId() {
return serviceName + FormOvSignatureSeq.REQUEST_ID;
}
@Override
public String getSignedData() {
Field f = getField(SIGNED_DATA_ID);
return (String) f.getValue();
}
@Override
public Signatures getSignatures() {
Field field = getField(FormSignatureSeq.SIGNATURE);
Object value = field.getValue();
return value instanceof Signatures ? (Signatures) value : null;
}
@Override
public SignData getSignData() {
return signData;
}
@Override
public void attach() {
super.attach();
VerticalLayout vl = (VerticalLayout) getParent();
vl.setWidth(100, UNITS_PERCENTAGE);
vl.setHeight(-1, UNITS_PIXELS);
}
}
}