
com.liferay.object.service.impl.ObjectViewLocalServiceImpl Maven / Gradle / Ivy
/**
* SPDX-FileCopyrightText: (c) 2000 Liferay, Inc. https://liferay.com
* SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
*/
package com.liferay.object.service.impl;
import com.liferay.object.constants.ObjectFieldConstants;
import com.liferay.object.exception.DefaultObjectViewException;
import com.liferay.object.exception.ObjectDefinitionModifiableException;
import com.liferay.object.exception.ObjectViewColumnFieldNameException;
import com.liferay.object.exception.ObjectViewSortColumnException;
import com.liferay.object.exception.ObjectViewSortColumnObjectFieldNameException;
import com.liferay.object.model.ObjectDefinition;
import com.liferay.object.model.ObjectField;
import com.liferay.object.model.ObjectView;
import com.liferay.object.model.ObjectViewColumn;
import com.liferay.object.model.ObjectViewFilterColumn;
import com.liferay.object.model.ObjectViewSortColumn;
import com.liferay.object.service.ObjectViewFilterColumnLocalService;
import com.liferay.object.service.base.ObjectViewLocalServiceBaseImpl;
import com.liferay.object.service.persistence.ObjectDefinitionPersistence;
import com.liferay.object.service.persistence.ObjectFieldPersistence;
import com.liferay.object.service.persistence.ObjectViewColumnPersistence;
import com.liferay.object.service.persistence.ObjectViewFilterColumnPersistence;
import com.liferay.object.service.persistence.ObjectViewSortColumnPersistence;
import com.liferay.petra.function.transform.TransformUtil;
import com.liferay.portal.aop.AopService;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.model.SystemEventConstants;
import com.liferay.portal.kernel.model.User;
import com.liferay.portal.kernel.search.Indexable;
import com.liferay.portal.kernel.search.IndexableType;
import com.liferay.portal.kernel.service.UserLocalService;
import com.liferay.portal.kernel.systemevent.SystemEvent;
import com.liferay.portal.kernel.util.StringUtil;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
/**
* @author Gabriel Albuquerque
*/
@Component(
property = "model.class.name=com.liferay.object.model.ObjectView",
service = AopService.class
)
public class ObjectViewLocalServiceImpl extends ObjectViewLocalServiceBaseImpl {
@Indexable(type = IndexableType.REINDEX)
@Override
public ObjectView addObjectView(
long userId, long objectDefinitionId, boolean defaultObjectView,
Map nameMap,
List objectViewColumns,
List objectViewFilterColumns,
List objectViewSortColumns)
throws PortalException {
ObjectDefinition objectDefinition =
_objectDefinitionPersistence.findByPrimaryKey(objectDefinitionId);
if (objectDefinition.isUnmodifiableSystemObject()) {
throw new ObjectDefinitionModifiableException.MustBeModifiable();
}
if (defaultObjectView) {
_validateDefaultObjectView(0, objectDefinitionId);
}
ObjectView objectView = objectViewPersistence.create(
counterLocalService.increment());
User user = _userLocalService.getUser(userId);
objectView.setCompanyId(user.getCompanyId());
objectView.setUserId(user.getUserId());
objectView.setUserName(user.getFullName());
objectView.setObjectDefinitionId(
objectDefinition.getObjectDefinitionId());
objectView.setDefaultObjectView(defaultObjectView);
objectView.setNameMap(nameMap);
objectView = objectViewPersistence.update(objectView);
objectView.setObjectViewColumns(
_addObjectViewColumns(
user, objectView.getObjectViewId(), objectViewColumns));
objectView.setObjectViewFilterColumns(
_objectViewFilterColumnLocalService.addObjectViewFilterColumns(
user, objectView, objectViewFilterColumns));
objectView.setObjectViewSortColumns(
_addObjectViewSortColumns(
user, objectView, objectViewColumns, objectViewSortColumns));
return objectView;
}
@Indexable(type = IndexableType.DELETE)
@Override
public ObjectView deleteObjectView(long objectViewId)
throws PortalException {
return deleteObjectView(
objectViewPersistence.findByPrimaryKey(objectViewId));
}
@Indexable(type = IndexableType.DELETE)
@Override
@SystemEvent(type = SystemEventConstants.TYPE_DELETE)
public ObjectView deleteObjectView(ObjectView objectView) {
objectView = objectViewPersistence.remove(objectView);
_objectViewColumnPersistence.removeByObjectViewId(
objectView.getObjectViewId());
_objectViewFilterColumnPersistence.removeByObjectViewId(
objectView.getObjectViewId());
_objectViewSortColumnPersistence.removeByObjectViewId(
objectView.getObjectViewId());
return objectView;
}
@Override
public void deleteObjectViews(long objectDefinitionId)
throws PortalException {
for (ObjectView objectView :
objectViewPersistence.findByObjectDefinitionId(
objectDefinitionId)) {
objectViewLocalService.deleteObjectView(objectView);
}
}
@Override
public ObjectView fetchDefaultObjectView(long objectDefinitionId) {
ObjectView objectView = objectViewPersistence.fetchByODI_DOV_First(
objectDefinitionId, true, null);
if (objectView != null) {
objectView.setObjectViewColumns(
_objectViewColumnPersistence.findByObjectViewId(
objectView.getObjectViewId()));
objectView.setObjectViewFilterColumns(
_objectViewFilterColumnPersistence.findByObjectViewId(
objectView.getObjectViewId()));
objectView.setObjectViewSortColumns(
_objectViewSortColumnPersistence.findByObjectViewId(
objectView.getObjectViewId()));
}
return objectView;
}
@Override
public ObjectView getObjectView(long objectViewId) throws PortalException {
ObjectView objectView = objectViewPersistence.findByPrimaryKey(
objectViewId);
objectView.setObjectViewColumns(
_objectViewColumnPersistence.findByObjectViewId(
objectView.getObjectViewId()));
objectView.setObjectViewFilterColumns(
_objectViewFilterColumnPersistence.findByObjectViewId(
objectView.getObjectViewId()));
objectView.setObjectViewSortColumns(
_objectViewSortColumnPersistence.findByObjectViewId(
objectView.getObjectViewId()));
return objectView;
}
@Override
public List getObjectViews(long objectDefinitionId) {
List objectViews =
objectViewPersistence.findByObjectDefinitionId(objectDefinitionId);
for (ObjectView objectView : objectViews) {
objectView.setObjectViewColumns(
_objectViewColumnPersistence.findByObjectViewId(
objectView.getObjectViewId()));
objectView.setObjectViewFilterColumns(
_objectViewFilterColumnPersistence.findByObjectViewId(
objectView.getObjectViewId()));
objectView.setObjectViewSortColumns(
_objectViewSortColumnPersistence.findByObjectViewId(
objectView.getObjectViewId()));
}
return objectViews;
}
@Override
public void unassociateObjectField(ObjectField objectField) {
List objectViews =
objectViewPersistence.findByObjectDefinitionId(
objectField.getObjectDefinitionId());
for (ObjectView objectView : objectViews) {
_objectViewColumnPersistence.removeByOVI_OFN(
objectView.getObjectViewId(), objectField.getName());
_objectViewFilterColumnPersistence.removeByOVI_OFN(
objectView.getObjectViewId(), objectField.getName());
_objectViewSortColumnPersistence.removeByOVI_OFN(
objectView.getObjectViewId(), objectField.getName());
}
}
@Indexable(type = IndexableType.REINDEX)
@Override
public ObjectView updateObjectView(
long objectViewId, boolean defaultObjectView,
Map nameMap,
List objectViewColumns,
List objectViewFilterColumns,
List objectViewSortColumns)
throws PortalException {
ObjectView objectView = objectViewPersistence.findByPrimaryKey(
objectViewId);
if (defaultObjectView) {
_validateDefaultObjectView(
objectViewId, objectView.getObjectDefinitionId());
}
_objectViewColumnPersistence.removeByObjectViewId(objectViewId);
_objectViewFilterColumnPersistence.removeByObjectViewId(objectViewId);
_objectViewSortColumnPersistence.removeByObjectViewId(objectViewId);
objectView.setDefaultObjectView(defaultObjectView);
objectView.setNameMap(nameMap);
objectView = objectViewPersistence.update(objectView);
User user = _userLocalService.getUser(objectView.getUserId());
objectView.setObjectViewColumns(
_addObjectViewColumns(user, objectViewId, objectViewColumns));
objectView.setObjectViewFilterColumns(
_objectViewFilterColumnLocalService.addObjectViewFilterColumns(
user, objectView, objectViewFilterColumns));
objectView.setObjectViewSortColumns(
_addObjectViewSortColumns(
user, objectView, objectViewColumns, objectViewSortColumns));
return objectView;
}
private List _addObjectViewColumns(
User user, long objectViewId,
List objectViewColumns)
throws PortalException {
try {
_validateObjectViewColumns(objectViewId, objectViewColumns);
}
catch (ObjectViewColumnFieldNameException
objectViewColumnFieldNameException) {
throw new ObjectViewColumnFieldNameException(
objectViewColumnFieldNameException.getMessage());
}
return TransformUtil.transform(
objectViewColumns,
objectViewColumn -> {
ObjectViewColumn newObjectViewColumn =
_objectViewColumnPersistence.create(
counterLocalService.increment());
newObjectViewColumn.setCompanyId(user.getCompanyId());
newObjectViewColumn.setUserId(user.getUserId());
newObjectViewColumn.setUserName(user.getFullName());
newObjectViewColumn.setObjectViewId(objectViewId);
newObjectViewColumn.setLabelMap(objectViewColumn.getLabelMap());
newObjectViewColumn.setObjectFieldName(
objectViewColumn.getObjectFieldName());
newObjectViewColumn.setPriority(objectViewColumn.getPriority());
return _objectViewColumnPersistence.update(newObjectViewColumn);
});
}
private List _addObjectViewSortColumns(
User user, ObjectView objectView,
List objectViewColumns,
List objectViewSortColumns)
throws PortalException {
try {
_validateObjectViewSortColumns(
objectView.getObjectDefinitionId(), objectViewColumns,
objectViewSortColumns);
}
catch (ObjectViewSortColumnException objectViewSortColumnException) {
throw new ObjectViewSortColumnException(
objectViewSortColumnException.getMessage());
}
return TransformUtil.transform(
objectViewSortColumns,
objectViewSortColumn -> {
ObjectViewSortColumn newObjectViewSortColumn =
_objectViewSortColumnPersistence.create(
counterLocalService.increment());
newObjectViewSortColumn.setCompanyId(user.getCompanyId());
newObjectViewSortColumn.setUserId(user.getUserId());
newObjectViewSortColumn.setUserName(user.getFullName());
newObjectViewSortColumn.setObjectViewId(
objectView.getObjectViewId());
newObjectViewSortColumn.setObjectFieldName(
objectViewSortColumn.getObjectFieldName());
newObjectViewSortColumn.setPriority(
objectViewSortColumn.getPriority());
newObjectViewSortColumn.setSortOrder(
objectViewSortColumn.getSortOrder());
return _objectViewSortColumnPersistence.update(
newObjectViewSortColumn);
});
}
private void _validateDefaultObjectView(
long objectViewId, long objectDefinitionId)
throws PortalException {
ObjectView objectView = objectViewPersistence.fetchByODI_DOV_First(
objectDefinitionId, true, null);
if ((objectView != null) &&
(objectView.getObjectViewId() != objectViewId)) {
throw new DefaultObjectViewException(
"There can only be one default object view");
}
}
private void _validateObjectViewColumns(
long objectViewId, List objectViewColumns)
throws PortalException {
ObjectView objectView = objectViewPersistence.findByPrimaryKey(
objectViewId);
Set objectViewColumnFieldNames = new LinkedHashSet<>();
for (ObjectViewColumn objectViewColumn : objectViewColumns) {
ObjectField objectField = _objectFieldPersistence.fetchByODI_N(
objectView.getObjectDefinitionId(),
objectViewColumn.getObjectFieldName());
if (objectField == null) {
throw new ObjectViewColumnFieldNameException(
"There is no object field with the name: " +
objectViewColumn.getObjectFieldName());
}
if (objectViewColumnFieldNames.contains(
objectViewColumn.getObjectFieldName())) {
throw new ObjectViewColumnFieldNameException(
"There is already an object view column with the object " +
"field name: " + objectViewColumn.getObjectFieldName());
}
objectViewColumnFieldNames.add(
objectViewColumn.getObjectFieldName());
}
}
private void _validateObjectViewSortColumns(
long objectDefinitionId, List objectViewColumns,
List objectViewSortColumns)
throws PortalException {
Set objectFieldNames = new LinkedHashSet<>();
for (ObjectViewColumn objectViewColumn : objectViewColumns) {
objectFieldNames.add(objectViewColumn.getObjectFieldName());
}
for (ObjectViewSortColumn objectViewSortColumn :
objectViewSortColumns) {
if (!objectFieldNames.contains(
objectViewSortColumn.getObjectFieldName())) {
throw new ObjectViewSortColumnException(
"There is no object view column with the name: " +
objectViewSortColumn.getObjectFieldName());
}
if (!(StringUtil.equals(
objectViewSortColumn.getSortOrder(), "asc") ||
StringUtil.equals(
objectViewSortColumn.getSortOrder(), "desc"))) {
throw new ObjectViewSortColumnException(
"There is no sort order of type: " +
objectViewSortColumn.getSortOrder());
}
ObjectField objectField = _objectFieldPersistence.findByODI_N(
objectDefinitionId, objectViewSortColumn.getObjectFieldName());
if (objectField.compareBusinessType(
ObjectFieldConstants.BUSINESS_TYPE_AGGREGATION) ||
objectField.compareBusinessType(
ObjectFieldConstants.BUSINESS_TYPE_FORMULA) ||
Objects.equals(
objectField.getBusinessType(),
ObjectFieldConstants.BUSINESS_TYPE_RELATIONSHIP)) {
throw new ObjectViewSortColumnObjectFieldNameException(
"Object field " +
objectViewSortColumn.getObjectFieldName() +
" is not sortable");
}
}
}
@Reference
private ObjectDefinitionPersistence _objectDefinitionPersistence;
@Reference
private ObjectFieldPersistence _objectFieldPersistence;
@Reference
private ObjectViewColumnPersistence _objectViewColumnPersistence;
@Reference
private ObjectViewFilterColumnLocalService
_objectViewFilterColumnLocalService;
@Reference
private ObjectViewFilterColumnPersistence
_objectViewFilterColumnPersistence;
@Reference
private ObjectViewSortColumnPersistence _objectViewSortColumnPersistence;
@Reference
private UserLocalService _userLocalService;
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy