/** * 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.asset.categories.admin.web.internal.exportimport.data.handler; import com.liferay.asset.exportimport.staged.model.repository.StagedAssetLinkStagedModelRepository; import com.liferay.asset.kernel.model.AssetEntry; import com.liferay.asset.kernel.model.AssetRenderer; import com.liferay.asset.kernel.model.adapter.StagedAssetLink; import com.liferay.asset.kernel.service.AssetEntryLocalService; import com.liferay.exportimport.data.handler.base.BaseStagedModelDataHandler; import com.liferay.exportimport.kernel.lar.ExportImportPathUtil; import com.liferay.exportimport.kernel.lar.PortletDataContext; import com.liferay.exportimport.kernel.lar.StagedModelDataHandler; import com.liferay.exportimport.staged.model.repository.StagedModelRepository; import com.liferay.portal.kernel.model.StagedModel; import com.liferay.portal.kernel.xml.Element; import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.Reference; /** * @author Mate Thurzo */ @Component(immediate = true, service = StagedModelDataHandler.class) public class StagedAssetLinkStagedModelDataHandler extends BaseStagedModelDataHandler<StagedAssetLink> { public static final String[] CLASS_NAMES = {StagedAssetLink.class.getName()}; @Override public String[] getClassNames() { return CLASS_NAMES; } protected void addAssetReference( PortletDataContext portletDataContext, StagedAssetLink stagedAssetLink, Element stagedAssetLinkElement, AssetEntry assetEntry) { AssetRenderer<? extends StagedModel> assetRenderer = null; StagedModel stagedModel = null; try { assetRenderer = (AssetRenderer<? extends StagedModel>) assetEntry.getAssetRenderer(); stagedModel = assetRenderer.getAssetObject(); } catch (Exception e) { return; } if (stagedModel == null) { return; } portletDataContext.addReferenceElement( stagedAssetLink, stagedAssetLinkElement, stagedModel, PortletDataContext.REFERENCE_TYPE_DEPENDENCY_DISPOSABLE, true); } @Override protected void doExportStagedModel( PortletDataContext portletDataContext, StagedAssetLink stagedAssetLink) throws Exception { Element stagedAssetLinkElement = portletDataContext.getExportDataElement(stagedAssetLink); AssetEntry assetEntry1 = _assetEntryLocalService.fetchEntry( stagedAssetLink.getEntryId1()); addAssetReference( portletDataContext, stagedAssetLink, stagedAssetLinkElement, assetEntry1); AssetEntry assetEntry2 = _assetEntryLocalService.fetchEntry( stagedAssetLink.getEntryId2()); addAssetReference( portletDataContext, stagedAssetLink, stagedAssetLinkElement, assetEntry2); portletDataContext.addClassedModel( stagedAssetLinkElement, ExportImportPathUtil.getModelPath(stagedAssetLink), stagedAssetLink); } @Override protected void doImportStagedModel( PortletDataContext portletDataContext, StagedAssetLink stagedAssetLink) throws Exception { StagedAssetLink existingStagedAssetLink = _stagedAssetLinkStagedModelRepository.fetchExistingAssetLink( portletDataContext.getScopeGroupId(), stagedAssetLink.getEntry1Uuid(), stagedAssetLink.getEntry2Uuid()); if ((existingStagedAssetLink == null) || !portletDataContext.isDataStrategyMirror()) { _stagedAssetLinkStagedModelRepository.addStagedModel( portletDataContext, stagedAssetLink); } else { _stagedAssetLinkStagedModelRepository.updateStagedModel( portletDataContext, existingStagedAssetLink); } } @Override protected StagedModelRepository<StagedAssetLink> getStagedModelRepository() { return _stagedAssetLinkStagedModelRepository; } @Reference(unbind = "-") protected void setAssetEntryLocalService( AssetEntryLocalService assetEntryLocalService) { _assetEntryLocalService = assetEntryLocalService; } @Reference( target = "(model.class.name=com.liferay.asset.kernel.model.adapter.StagedAssetLink)", unbind = "-" ) protected void setStagedAssetLinkStagedModelRepository( StagedAssetLinkStagedModelRepository stagedAssetLinkStagedModelRepository) { _stagedAssetLinkStagedModelRepository = stagedAssetLinkStagedModelRepository; } private AssetEntryLocalService _assetEntryLocalService; private StagedAssetLinkStagedModelRepository _stagedAssetLinkStagedModelRepository; }