/* * Copyright 2016 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. * * 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.kie.server.services.jbpm; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import org.jbpm.document.Document; import org.jbpm.document.service.DocumentStorageService; import org.jbpm.document.service.DocumentStorageServiceProvider; import org.jbpm.document.service.impl.DocumentStorageServiceImpl; import org.kie.server.api.model.instance.DocumentInstance; import org.kie.server.api.model.instance.DocumentInstanceList; import org.kie.server.services.api.KieServerRegistry; import org.kie.server.services.api.KieServerRuntimeException; import org.kie.server.services.impl.marshal.MarshallerHelper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class DocumentServiceBase { private static final Logger logger = LoggerFactory.getLogger(DocumentServiceBase.class); private DocumentStorageService documentStorageService = DocumentStorageServiceProvider.get().getStorageService(); private MarshallerHelper marshallerHelper; public DocumentServiceBase(KieServerRegistry context) { this.marshallerHelper = new MarshallerHelper(context); } public DocumentServiceBase(DocumentStorageService documentStorageService, KieServerRegistry context) { this.documentStorageService = documentStorageService; this.marshallerHelper = new MarshallerHelper(context); } public DocumentInstance getDocument(String documentId) { logger.debug("About to load document with id {}", documentId); final Document document = documentStorageService.getDocument(documentId); logger.debug("Document loaded from repository {}", document); if (document == null) { throw new KieServerRuntimeException("No document found with id " + documentId); } return convertDocument(document, true); } public String storeDocument(String documentPayload, String marshallingType) { logger.debug("About to unmarshal document payload '{}' with marshaling type {}", documentPayload, marshallingType); DocumentInstance documentInstance = marshallerHelper.unmarshal(documentPayload, marshallingType, DocumentInstance.class); logger.debug("Document created from payload {}", documentInstance); Document document = documentStorageService.buildDocument(documentInstance.getName(), documentInstance.getSize(), documentInstance.getLastModified(), new HashMap<String, String>()); logger.debug("Document created by the service {}", document); documentStorageService.saveDocument(document, documentInstance.getContent()); logger.debug("Document {} stored successfully", document); return document.getIdentifier(); } public void updateDocument(String documentId, String documentPayload, String marshallingType) { logger.debug("About to unmarshal document payload '{}' with marshaling type {}", documentPayload, marshallingType); DocumentInstance documentInstance = marshallerHelper.unmarshal(documentPayload, marshallingType, DocumentInstance.class); logger.debug("Document created from payload {}", documentInstance); Document document = documentStorageService.getDocument(documentId); logger.debug("Document found {}", documentInstance != null); if (document == null) { throw new KieServerRuntimeException("No document found with id " + documentId); } documentStorageService.saveDocument(document, documentInstance.getContent()); logger.debug("Document {} updated successfully", document); } public void deleteDocument(String documentId) { logger.debug("About to delete document with id {}", documentId); Document document = documentStorageService.getDocument(documentId); logger.debug("Document found {}", document != null); if (document == null) { throw new KieServerRuntimeException("No document found with id " + documentId); } documentStorageService.deleteDocument(document); logger.debug("Document {} deleted successfully", document); } public DocumentInstanceList listDocuments(Integer page, Integer pageSize) { logger.debug("About to list documents with page {} and pageSize {}", page, pageSize); final List<Document> documents = documentStorageService.listDocuments(page, pageSize); logger.debug("Documents loaded from repository {}", documents); DocumentInstanceList result = new DocumentInstanceList(Collections.emptyList()); if (documents == null) { return result; } List<DocumentInstance> list = convertDocumentList(documents); result.setDocumentInstances(list.toArray(new DocumentInstance[list.size()])); return result; } protected List<DocumentInstance> convertDocumentList(List<Document> documents) { List<DocumentInstance> list = new ArrayList<DocumentInstance>(); for (Document doc : documents) { list.add(convertDocument(doc, false)); } return list; } protected DocumentInstance convertDocument(Document document, boolean withContent) { if (document == null) { return null; } DocumentInstance documentInstance = DocumentInstance.builder() .id(document.getIdentifier()) .name(document.getName()) .link(document.getLink()) .size(document.getSize()) .lastModified(document.getLastModified()) .content(document.getContent()) .build(); if (!withContent) { documentInstance.setContent(null); } return documentInstance; } }