/* * Copyright 2012 Red Hat, Inc. and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jbpm.services.task.commands; import org.jbpm.services.task.impl.TaskContentRegistry; import org.jbpm.services.task.impl.model.xml.JaxbAttachment; import org.jbpm.services.task.impl.model.xml.JaxbContent; import org.jbpm.services.task.utils.ContentMarshallerHelper; import org.kie.api.runtime.Context; import org.kie.api.task.model.Attachment; import org.kie.api.task.model.Content; import org.kie.api.task.model.Task; import org.kie.internal.task.api.ContentMarshallerContext; import org.kie.internal.task.api.TaskModelProvider; import org.kie.internal.task.api.model.InternalAttachment; import org.kie.internal.task.api.model.InternalContent; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlTransient; @XmlRootElement(name="add-attachment-command") @XmlAccessorType(XmlAccessType.NONE) public class AddAttachmentCommand extends UserGroupCallbackTaskCommand<Long> { private static final long serialVersionUID = -1295175842745522756L; @XmlElement private JaxbAttachment jaxbAttachment; @XmlTransient private Attachment attachment; @XmlElement private JaxbContent jaxbContent; @XmlTransient private Content content; @XmlTransient private Object rawContent; public AddAttachmentCommand() { } public AddAttachmentCommand(Long taskId, Attachment attachment, Content content) { this.taskId = taskId; setAttachment(attachment); setContent(content); } public AddAttachmentCommand(Long taskId, Attachment attachment, Object rawContent) { this.taskId = taskId; setAttachment(attachment); setRawContent(rawContent); } public Long execute(Context cntxt) { TaskContext context = (TaskContext) cntxt; Attachment attachmentImpl = attachment; if (attachmentImpl == null) { attachmentImpl = jaxbAttachment; } Content contentImpl = content; if (contentImpl == null) { contentImpl = jaxbContent; } if (rawContent != null && contentImpl == null) { Task task = context.getPersistenceContext().findTask(taskId); contentImpl = TaskModelProvider.getFactory().newContent(); ContentMarshallerContext ctx = TaskContentRegistry.get().getMarshallerContext(task.getTaskData().getDeploymentId()); ((InternalContent)contentImpl).setContent(ContentMarshallerHelper.marshallContent(task, rawContent, ctx.getEnvironment())); ((InternalAttachment)attachmentImpl).setSize(contentImpl.getContent().length); } doCallbackOperationForAttachment(attachmentImpl, context); return context.getTaskAttachmentService().addAttachment(taskId, attachmentImpl, contentImpl); } public void setAttachment(Attachment attachment) { this.attachment = attachment; if (attachment instanceof JaxbAttachment) { this.jaxbAttachment = (JaxbAttachment) attachment; } else { this.jaxbAttachment = new JaxbAttachment(attachment); } } public JaxbAttachment getJaxbAttachment() { return jaxbAttachment; } public void setJaxbAttachment(JaxbAttachment jaxbAttachment) { this.jaxbAttachment = jaxbAttachment; } public JaxbContent getJaxbContent() { return jaxbContent; } public void setJaxbContent(JaxbContent jaxbContent) { this.jaxbContent = jaxbContent; } public Content getContent() { return content; } public void setContent(Content content) { this.content = content; if (content instanceof JaxbContent) { this.jaxbContent = (JaxbContent) content; } else { this.jaxbContent = new JaxbContent(content); } } public Attachment getAttachment() { return attachment; } public Object getRawContent() { return rawContent; } public void setRawContent(Object rawContent) { this.rawContent = rawContent; } }