/** * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. */ package com.liferay.portal.lar.test; import com.liferay.exportimport.kernel.lar.ExportImportPathUtil; import com.liferay.exportimport.kernel.lar.PortletDataContext; import com.liferay.exportimport.kernel.lar.PortletDataException; import com.liferay.exportimport.kernel.lar.StagedModelDataHandler; import com.liferay.exportimport.kernel.lar.StagedModelDataHandlerRegistryUtil; import com.liferay.exportimport.kernel.lar.StagedModelDataHandlerUtil; import com.liferay.portal.kernel.model.Group; import com.liferay.portal.kernel.model.StagedModel; import com.liferay.portal.kernel.model.WorkflowedModel; import com.liferay.portal.kernel.util.ArrayUtil; import com.liferay.portal.kernel.workflow.WorkflowThreadLocal; import com.liferay.portal.kernel.xml.Element; import com.liferay.portal.kernel.xml.SAXReaderUtil; import com.liferay.portal.kernel.xml.XPath; import java.util.List; import org.junit.Assert; import org.junit.Test; /** * @author Daniel Kocsis */ public abstract class BaseWorkflowedStagedModelDataHandlerTestCase extends BaseStagedModelDataHandlerTestCase { @Test public void testExportWorkflowedStagedModels() throws Exception { initExport(); List<StagedModel> stagedModels = null; boolean workflowEnabled = WorkflowThreadLocal.isEnabled(); try { WorkflowThreadLocal.setEnabled(true); stagedModels = addWorkflowedStagedModels(stagingGroup); } finally { WorkflowThreadLocal.setEnabled(workflowEnabled); } for (StagedModel stagedModel : stagedModels) { Assert.assertTrue( "Staged model is not a workflowed model", stagedModel instanceof WorkflowedModel); try { StagedModelDataHandlerUtil.exportStagedModel( portletDataContext, stagedModel); } catch (PortletDataException pde) { Assert.assertEquals( "An unexpected error occurred during the export", PortletDataException.STATUS_UNAVAILABLE, pde.getType()); } validateWorkflowedExport(portletDataContext, stagedModel); } } protected abstract List<StagedModel> addWorkflowedStagedModels(Group group) throws Exception; protected Element getExportStagedModelElement( PortletDataContext portletDataContext, StagedModel stagedModel) { Element rootElement = portletDataContext.getExportDataRootElement(); Class<?> modelClass = stagedModel.getModelClass(); Element modelElement = rootElement.element(modelClass.getSimpleName()); Assert.assertNotNull("Unable to find model element", modelElement); XPath xPath = SAXReaderUtil.createXPath( "staged-model[@path ='" + ExportImportPathUtil.getModelPath(stagedModel) + "']"); return (Element)xPath.selectSingleNode(modelElement); } protected void validateWorkflowedExport( PortletDataContext portletDataContext, StagedModel stagedModel) throws Exception { StagedModelDataHandler<?> stagedModelDataHandler = StagedModelDataHandlerRegistryUtil.getStagedModelDataHandler( stagedModel.getModelClassName()); WorkflowedModel workflowedModel = (WorkflowedModel)stagedModel; Element exportStagedModelElement = getExportStagedModelElement( portletDataContext, stagedModel); if (ArrayUtil.contains( stagedModelDataHandler.getExportableStatuses(), workflowedModel.getStatus())) { Assert.assertNotNull( "Staged model should be exported", exportStagedModelElement); } else { Assert.assertNull( "Staged model should not be exported", exportStagedModelElement); } } }