/** * * Copyright * 2009-2015 Jayway Products AB * 2016-2017 Föreningen Sambruk * * Licensed under AGPL, Version 3.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.gnu.org/licenses/agpl.txt * * 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 se.streamsource.streamflow.web.rest.resource.workspace.cases; import java.io.IOException; import java.io.OutputStream; import org.apache.pdfbox.exceptions.COSVisitorException; import org.apache.pdfbox.pdfwriter.COSWriter; import org.apache.pdfbox.pdmodel.PDDocument; import org.restlet.data.Disposition; import org.restlet.data.MediaType; import org.restlet.representation.OutputRepresentation; import se.streamsource.dci.api.RoleMap; import se.streamsource.dci.restlet.server.CommandQueryResource; import se.streamsource.dci.restlet.server.api.SubResource; import se.streamsource.streamflow.api.workspace.cases.CaseOutputConfigDTO; import se.streamsource.streamflow.web.context.RequiresPermission; import se.streamsource.streamflow.web.context.workspace.cases.CaseCommandsContext; import se.streamsource.streamflow.web.context.workspace.cases.CaseContext; import se.streamsource.streamflow.web.context.workspace.cases.general.CaseFormOnDeleteContext; import se.streamsource.streamflow.web.domain.interaction.gtd.CaseId; import se.streamsource.streamflow.web.domain.interaction.security.PermissionType; import se.streamsource.streamflow.web.rest.resource.workspace.cases.conversation.ConversationsResource; import se.streamsource.streamflow.web.rest.resource.workspace.cases.form.CaseSubmittedFormsResource; /** * JAVADOC */ @RequiresPermission( PermissionType.read ) public class CaseResource extends CommandQueryResource { public CaseResource() { super( CaseContext.class, CaseCommandsContext.class ); } public OutputRepresentation exportpdf( CaseOutputConfigDTO config ) throws Throwable { final PDDocument pdf = context(CaseCommandsContext.class).exportpdf(config); OutputRepresentation representation = new OutputRepresentation( MediaType.APPLICATION_PDF ) { @Override public void write( OutputStream outputStream ) throws IOException { COSWriter writer = null; try { writer = new COSWriter( outputStream ); writer.write( pdf ); } catch (COSVisitorException e) { // Todo Handle this error more gracefully... e.printStackTrace(); } finally { if (pdf != null) { pdf.close(); } if (writer != null) { writer.close(); } } } }; Disposition disposition = new Disposition(); disposition.setFilename( RoleMap.role(CaseId.Data.class).caseId().get() + ".pdf" ); disposition.setType( Disposition.TYPE_ATTACHMENT ); representation.setDisposition( disposition ); return representation; } @SubResource public void general() { subResource( CaseGeneralResource.class ); } @SubResource public void conversations() { subResource( ConversationsResource.class ); } @SubResource public void contacts() { subResource( ContactsResource.class ); } @SubResource public void submittedforms() { subResource(CaseSubmittedFormsResource.class); } @SubResource public void formdrafts() { subResource( CaseFormDraftsResource.class ); } @SubResource public void possibleforms() { subResource( CasePossibleFormsResource.class ); } @SubResource public void attachments() { subResource( AttachmentsResource.class ); } @SubResource public void caselog() { subResource( CaseLogResource.class ); } @SubResource public void submitformonclose() { subResource( CaseFormOnCloseResource.class ); } @SubResource public void submitformondelete() { subResourceContexts( CaseFormOnDeleteContext.class ); } @SubResource public void note() { subResource( NoteResource.class ); } }