package ru.codeinside.gses.beans;
import org.activiti.engine.delegate.VariableScope;
import org.apache.commons.lang.StringUtils;
import org.apache.tika.mime.MimeTypes;
import ru.codeinside.gses.activiti.ftarchive.AttachmentFFT;
import ru.codeinside.gses.webui.form.DataAccumulator;
import ru.codeinside.gses.webui.form.ProtocolUtils;
import ru.codeinside.gses.webui.form.StartEventAttachmentConverter;
import ru.codeinside.gses.webui.form.TmpAttachment;
import ru.codeinside.gws.api.Enclosure;
import ru.codeinside.gws.api.ExchangeContext;
import java.io.ByteArrayInputStream;
import java.util.Set;
public class StartFormExchangeContext implements ExchangeContext {
private final MimeTypes mimeTypes = new MimeTypes();
private final VariableScope variableScope;
private final DataAccumulator dataAccumulator;
private Object local;
public StartFormExchangeContext(VariableScope variableScope, DataAccumulator dataAccumulator) {
this.variableScope = variableScope;
this.dataAccumulator = dataAccumulator;
}
@Override
public Object getLocal() {
return local;
}
@Override
public void setLocal(Object value) {
this.local = value;
}
@Override
public Set<String> getVariableNames() {
return variableScope.getVariableNames();
}
@Override
public Object getVariable(String name) {
return variableScope.getVariable(name);
}
@Override
public boolean isEnclosure(String name) {
final Object value = variableScope.getVariable(name);
return AttachmentFFT.isAttachmentValue(value);
}
@Override
public void setVariable(String name, Object value) {
variableScope.setVariable(name, value);
}
@Override
public Enclosure getEnclosure(String name) {
final Object value = variableScope.getVariable(name);
String attId = AttachmentFFT.getAttachmentIdByValue(value);
if (StringUtils.isEmpty(attId)) {
return null;
}
TmpAttachment attachment = dataAccumulator.getAttachment(attId);
if (attachment == null) {
return null;
}
return ProtocolUtils.createEnclosureInStartEventContext(attachment, name);
}
@Override
public void addEnclosure(String name, Enclosure enclosure) {
ByteArrayInputStream content = new ByteArrayInputStream(enclosure.content);
String mimeType = StringUtils.isNotEmpty(enclosure.mimeType) ? enclosure.mimeType : mimeTypes.getMimeType(enclosure.content).getName();
TmpAttachment attachment = StartEventAttachmentConverter.createTmpAttachment(mimeType, enclosure.fileName, content);
setVariable(name, AttachmentFFT.stringValue(attachment));
dataAccumulator.setAttachment(attachment);
}
}