/**
* 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.exportimport.staged.model.repository.base;
import com.liferay.exportimport.kernel.lar.PortletDataContext;
import com.liferay.exportimport.kernel.lar.PortletDataException;
import com.liferay.exportimport.staged.model.repository.StagedModelRepository;
import com.liferay.portal.kernel.dao.orm.ExportActionableDynamicQuery;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.model.Group;
import com.liferay.portal.kernel.model.StagedGroupedModel;
import com.liferay.portal.kernel.model.StagedModel;
import com.liferay.portal.kernel.model.TrashedModel;
import com.liferay.portal.kernel.service.GroupLocalServiceUtil;
import java.util.List;
/**
* @author Daniel Kocsis
*
* @deprecated As of 4.0.0
*/
@Deprecated
public abstract class BaseStagedModelRepository<T extends StagedModel>
implements StagedModelRepository<T> {
@Override
public abstract T addStagedModel(
PortletDataContext portletDataContext, T stagedModel)
throws PortalException;
@Override
public abstract void deleteStagedModel(
String uuid, long groupId, String className, String extraData)
throws PortalException;
@Override
public abstract void deleteStagedModel(T stagedModel)
throws PortalException;
@Override
public abstract void deleteStagedModels(
PortletDataContext portletDataContext)
throws PortalException;
@Override
public T fetchMissingReference(String uuid, long groupId) {
// Try to fetch the existing staged model from the importing group
T existingStagedModel = fetchStagedModelByUuidAndGroupId(uuid, groupId);
if ((existingStagedModel != null) &&
!isStagedModelInTrash(existingStagedModel)) {
return existingStagedModel;
}
try {
// Try to fetch the existing staged model from parent sites
Group originalGroup = GroupLocalServiceUtil.getGroup(groupId);
Group group = originalGroup.getParentGroup();
while (group != null) {
existingStagedModel = fetchStagedModelByUuidAndGroupId(
uuid, group.getGroupId());
if (existingStagedModel != null) {
break;
}
group = group.getParentGroup();
}
if ((existingStagedModel != null) &&
!isStagedModelInTrash(existingStagedModel)) {
return existingStagedModel;
}
List<T> existingStagedModels = fetchStagedModelsByUuidAndCompanyId(
uuid, originalGroup.getCompanyId());
for (T stagedModel : existingStagedModels) {
try {
if (stagedModel instanceof StagedGroupedModel) {
StagedGroupedModel stagedGroupedModel =
(StagedGroupedModel)stagedModel;
group = GroupLocalServiceUtil.getGroup(
stagedGroupedModel.getGroupId());
if (!group.isStagingGroup() &&
!isStagedModelInTrash(stagedModel)) {
return stagedModel;
}
}
else if (!isStagedModelInTrash(stagedModel)) {
return stagedModel;
}
}
catch (PortalException pe) {
if (_log.isDebugEnabled()) {
_log.debug(pe, pe);
}
}
}
}
catch (Exception e) {
if (_log.isDebugEnabled()) {
_log.debug(e, e);
}
else if (_log.isWarnEnabled()) {
_log.warn(
"Unable to fetch missing reference staged model from " +
"group " + groupId);
}
}
return null;
}
@Override
public T fetchStagedModelByUuidAndGroupId(String uuid, long groupId) {
return null;
}
@Override
public abstract List<T> fetchStagedModelsByUuidAndCompanyId(
String uuid, long companyId);
@Override
public abstract ExportActionableDynamicQuery
getExportActionableDynamicQuery(PortletDataContext portletDataContext);
@Override
public void restoreStagedModel(
PortletDataContext portletDataContext, T stagedModel)
throws PortletDataException {
}
@Override
public abstract T saveStagedModel(T stagedModel) throws PortalException;
@Override
public abstract T updateStagedModel(
PortletDataContext portletDataContext, T stagedModel)
throws PortalException;
protected boolean isStagedModelInTrash(T stagedModel) {
if (!(stagedModel instanceof TrashedModel)) {
return false;
}
TrashedModel trashedModel = (TrashedModel)stagedModel;
return trashedModel.isInTrash();
}
private static final Log _log = LogFactoryUtil.getLog(
BaseStagedModelRepository.class);
}