/* * (C) Copyright 2014 Nuxeo SA (http://nuxeo.com/) and others. * * 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. * * Contributors: * Thierry Delprat */ package org.nuxeo.ecm.platform.rendition.service; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuxeo.ecm.automation.core.Constants; import org.nuxeo.ecm.automation.core.annotations.Context; import org.nuxeo.ecm.automation.core.annotations.Operation; import org.nuxeo.ecm.automation.core.annotations.OperationMethod; import org.nuxeo.ecm.core.api.Blob; import org.nuxeo.ecm.core.api.Blobs; import org.nuxeo.ecm.core.api.CoreSession; import org.nuxeo.ecm.core.api.DocumentModel; import org.nuxeo.ecm.core.api.DocumentRef; import org.nuxeo.ecm.core.api.PropertyException; import org.nuxeo.runtime.transaction.TransactionHelper; import java.text.SimpleDateFormat; import java.util.Calendar; @Operation(id = DummyDocToTxt.ID, category = Constants.CAT_CONVERSION, label = "Convert Doc To Txt", description = "very dummy just for tests !") public class DummyDocToTxt { public static final String ID = "DummyDoc.ToTxt"; private static final Log log = LogFactory.getLog(DummyDocToTxt.class); @Context protected CoreSession session; @OperationMethod public Blob run(DocumentModel doc) throws Exception { DocumentRef docRef = doc.getRef(); String content = doc.getTitle(); String desc = ""; Calendar issued = null; Boolean delayed = null; try { desc = (String) doc.getPropertyValue("dc:description"); issued = (Calendar) doc.getPropertyValue("dc:issued"); delayed = (Boolean) doc.getContextData("delayed"); } catch (PropertyException ignored) {} if (StringUtils.isNotBlank(desc)) { content += String.format("%n" + desc); } if (desc != null && desc.startsWith(TestRenditionService.CYCLIC_BARRIER_DESCRIPTION)) { for (int i = 0; i < 3; i++) { if (log.isDebugEnabled()) { log.debug(formatLogEntry(docRef, content, desc, issued) + " before barrier " + i); } TestRenditionService.CYCLIC_BARRIERS[i].await(); } } if (delayed != null) { // Sync #1 TestRenditionService.RenditionThread.cyclicBarrier.await(); // Sync #2 TestRenditionService.RenditionThread.cyclicBarrier.await(); nextTransaction(); if (Boolean.TRUE.equals(delayed)) { // Delayed Sync #3 TestRenditionService.RenditionThread.cyclicBarrier.await(); nextTransaction(); } else { doc = session.getDocument(docRef); desc = (String) doc.getPropertyValue("dc:description"); if (StringUtils.isNotBlank(desc)) { content += String.format("%n" + desc); } } } return Blobs.createBlob(content); } public static String formatLogEntry(DocumentRef docRef, String content, String desc, Calendar issued) { return String.format("Doc with id '%s', content '%s', description '%s', issued '%s'", docRef, StringUtils.defaultString(content), StringUtils.defaultString(desc), issued == null ? "" : new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS").format(issued.getTime())); } protected void nextTransaction() { if (TransactionHelper.isTransactionActiveOrMarkedRollback()) { TransactionHelper.commitOrRollbackTransaction(); TransactionHelper.startTransaction(); } } }