ch.inofix.timetracker.service.impl.TaskRecordLocalServiceImpl.java Source code

Java tutorial

Introduction

Here is the source code for ch.inofix.timetracker.service.impl.TaskRecordLocalServiceImpl.java

Source

/**
 * Copyright (c) 2000-present Inofix GmbH, Luzern. 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 ch.inofix.timetracker.service.impl;

import java.util.Date;
import java.util.List;

import com.liferay.asset.kernel.model.AssetEntry;
import com.liferay.asset.kernel.model.AssetLinkConstants;
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.ResourceConstants;
import com.liferay.portal.kernel.model.SystemEventConstants;
import com.liferay.portal.kernel.model.User;
import com.liferay.portal.kernel.search.Field;
import com.liferay.portal.kernel.search.Hits;
import com.liferay.portal.kernel.search.Indexable;
import com.liferay.portal.kernel.search.IndexableType;
import com.liferay.portal.kernel.search.Indexer;
import com.liferay.portal.kernel.search.IndexerRegistryUtil;
import com.liferay.portal.kernel.search.SearchContext;
import com.liferay.portal.kernel.search.Sort;
import com.liferay.portal.kernel.service.GroupLocalServiceUtil;
import com.liferay.portal.kernel.service.ServiceContext;
import com.liferay.portal.kernel.service.permission.ModelPermissions;
import com.liferay.portal.kernel.systemevent.SystemEvent;
import com.liferay.portal.kernel.util.ContentTypes;
import com.liferay.portal.kernel.util.HtmlUtil;
import com.liferay.portal.kernel.util.StringUtil;
import com.liferay.portal.kernel.workflow.WorkflowConstants;

import aQute.bnd.annotation.ProviderType;
import ch.inofix.timetracker.model.TaskRecord;
import ch.inofix.timetracker.service.base.TaskRecordLocalServiceBaseImpl;

/**
 * The implementation of the task record local service.
 *
 * <p>
 * All custom service methods should be put in this class. Whenever methods are
 * added, rerun ServiceBuilder to copy their definitions into the
 * {@link ch.inofix.timetracker.service.TaskRecordLocalService} interface.
 *
 * <p>
 * This is a local service. Methods of this service will not have security
 * checks based on the propagated JAAS credentials because this service can only
 * be accessed from within the same VM.
 * </p>
 *
 * @author Christian Berndt
 * @created 2013-10-06 21:24
 * @modified 2017-03-23 10:37
 * @version 1.5.4
 * @see TaskRecordLocalServiceBaseImpl
 * @see ch.inofix.timetracker.service.TaskRecordLocalServiceUtil
 */
@ProviderType
public class TaskRecordLocalServiceImpl extends TaskRecordLocalServiceBaseImpl {
    /*
     * NOTE FOR DEVELOPERS:
     *
     * Never reference this class directly. Always use {@link
     * ch.inofix.timetracker.service.TaskRecordLocalServiceUtil} to access the
     * task record local service.
     */
    @Override
    @Indexable(type = IndexableType.REINDEX)
    public TaskRecord addTaskRecord(long userId, String workPackage, String description, String ticketURL,
            Date endDate, Date startDate, int status, long duration, ServiceContext serviceContext)
            throws PortalException {

        // TaskRecord

        User user = userPersistence.findByPrimaryKey(userId);
        long groupId = serviceContext.getScopeGroupId();

        // TODO
        // validate(groupId, urlTitle);

        long taskRecordId = counterLocalService.increment();

        TaskRecord taskRecord = taskRecordPersistence.create(taskRecordId);

        taskRecord.setUuid(serviceContext.getUuid());
        taskRecord.setGroupId(groupId);
        taskRecord.setCompanyId(user.getCompanyId());
        taskRecord.setUserId(user.getUserId());
        taskRecord.setUserName(user.getFullName());
        taskRecord.setExpandoBridgeAttributes(serviceContext);

        taskRecord.setWorkPackage(workPackage);
        taskRecord.setDescription(description);
        taskRecord.setTicketURL(ticketURL);
        taskRecord.setEndDate(endDate);
        taskRecord.setStartDate(startDate);
        taskRecord.setStatus(status);
        taskRecord.setDuration(duration);

        taskRecord = taskRecordPersistence.update(taskRecord);

        // Resources

        if (serviceContext.isAddGroupPermissions() || serviceContext.isAddGuestPermissions()) {
            addTaskRecordResources(taskRecord, serviceContext.isAddGroupPermissions(),
                    serviceContext.isAddGuestPermissions());
        } else {
            addTaskRecordResources(taskRecord, serviceContext.getModelPermissions());
        }

        // Asset

        updateAsset(userId, taskRecord, serviceContext.getAssetCategoryIds(), serviceContext.getAssetTagNames(),
                serviceContext.getAssetLinkEntryIds(), serviceContext.getAssetPriority());

        return taskRecord;

    }

    @Override
    public void addTaskRecordResources(TaskRecord taskRecord, boolean addGroupPermissions,
            boolean addGuestPermissions) throws PortalException {

        resourceLocalService.addResources(taskRecord.getCompanyId(), taskRecord.getGroupId(),
                taskRecord.getUserId(), TaskRecord.class.getName(), taskRecord.getTaskRecordId(), false,
                addGroupPermissions, addGuestPermissions);
    }

    @Override
    public void addTaskRecordResources(TaskRecord taskRecord, ModelPermissions modelPermissions)
            throws PortalException {

        resourceLocalService.addModelResources(taskRecord.getCompanyId(), taskRecord.getGroupId(),
                taskRecord.getUserId(), TaskRecord.class.getName(), taskRecord.getTaskRecordId(), modelPermissions);
    }

    @Override
    public void addTaskRecordResources(long taskRecordId, boolean addGroupPermissions, boolean addGuestPermissions)
            throws PortalException {

        TaskRecord taskRecord = taskRecordPersistence.findByPrimaryKey(taskRecordId);

        addTaskRecordResources(taskRecord, addGroupPermissions, addGuestPermissions);
    }

    @Override
    public void addTaskRecordResources(long taskRecordId, ModelPermissions modelPermissions)
            throws PortalException {

        TaskRecord taskRecord = taskRecordPersistence.findByPrimaryKey(taskRecordId);

        addTaskRecordResources(taskRecord, modelPermissions);
    }

    /**
     *
     * @param groupId
     * @return
     * @since 1.5.2
     */
    @Override
    public List<TaskRecord> deleteGroupTaskRecords(long groupId) throws PortalException {

        List<TaskRecord> taskRecords = taskRecordPersistence.findByGroupId(groupId);

        for (TaskRecord taskRecord : taskRecords) {

            // TODO differ exception types
            try {
                deleteTaskRecord(taskRecord);
            } catch (Exception e) {
                _log.error(e);
            }
        }

        return taskRecords;

    }

    @Indexable(type = IndexableType.DELETE)
    @Override
    @SystemEvent(type = SystemEventConstants.TYPE_DELETE)
    public TaskRecord deleteTaskRecord(TaskRecord taskRecord) throws PortalException {

        // TaskRecord

        taskRecordPersistence.remove(taskRecord);

        // Resources

        resourceLocalService.deleteResource(taskRecord.getCompanyId(), TaskRecord.class.getName(),
                ResourceConstants.SCOPE_INDIVIDUAL, taskRecord.getTaskRecordId());

        // Asset

        assetEntryLocalService.deleteEntry(TaskRecord.class.getName(), taskRecord.getTaskRecordId());

        // Workflow

        // TODO: add workflow support
        // workflowInstanceLinkLocalService.deleteWorkflowInstanceLinks(
        // taskRecord.getCompanyId(), taskRecord.getGroupId(),
        // TaskRecord.class.getName(), taskRecord.getTaskRecordId());

        return taskRecord;
    }

    @Override
    public TaskRecord deleteTaskRecord(long taskRecordId) throws PortalException {

        TaskRecord taskRecord = taskRecordPersistence.findByPrimaryKey(taskRecordId);

        return deleteTaskRecord(taskRecord);
    }

    /**
     *
     * @param groupId
     * @return
     * @since 1.5.2
     */
    @Override
    public List<TaskRecord> getGroupTaskRecords(long groupId) throws PortalException {

        List<TaskRecord> taskRecords = taskRecordPersistence.findByGroupId(groupId);

        return taskRecords;

    }

    @Override
    public Hits search(long userId, long groupId, String keywords, int start, int end, Sort sort)
            throws PortalException {

        if (sort == null) {
            sort = new Sort(Field.MODIFIED_DATE, true);
        }

        Indexer<TaskRecord> indexer = IndexerRegistryUtil.getIndexer(TaskRecord.class.getName());

        SearchContext searchContext = new SearchContext();

        searchContext.setAttribute(Field.STATUS, WorkflowConstants.STATUS_ANY);

        searchContext.setAttribute("paginationType", "more");

        Group group = GroupLocalServiceUtil.getGroup(groupId);

        searchContext.setCompanyId(group.getCompanyId());

        searchContext.setEnd(end);
        if (groupId > 0) {
            searchContext.setGroupIds(new long[] { groupId });
        }
        searchContext.setSorts(sort);
        searchContext.setStart(start);
        searchContext.setUserId(userId);

        searchContext.setKeywords(keywords);

        return indexer.search(searchContext);

    }

    @Override
    public void updateAsset(long userId, TaskRecord taskRecord, long[] assetCategoryIds, String[] assetTagNames,
            long[] assetLinkEntryIds, Double priority) throws PortalException {

        // TODO
        boolean visible = true;
        // boolean visible = false;
        // if (taskRecord.isApproved()) {
        // visible = true;
        // publishDate = taskRecord.getCreateDate();
        // }

        Date publishDate = null;

        String summary = HtmlUtil.extractText(StringUtil.shorten(taskRecord.getWorkPackage(), 500));

        String className = TaskRecord.class.getName();
        long classPK = taskRecord.getTaskRecordId();

        AssetEntry assetEntry = assetEntryLocalService.updateEntry(userId, taskRecord.getGroupId(),
                taskRecord.getCreateDate(), taskRecord.getModifiedDate(), className, classPK, taskRecord.getUuid(),
                0, assetCategoryIds, assetTagNames, true, visible, null, null, publishDate, null,
                ContentTypes.TEXT_HTML, taskRecord.getWorkPackage(), taskRecord.getWorkPackage(), summary, null,
                null, 0, 0, priority);

        assetLinkLocalService.updateLinks(userId, assetEntry.getEntryId(), assetLinkEntryIds,
                AssetLinkConstants.TYPE_RELATED);
    }

    @Override
    @Indexable(type = IndexableType.REINDEX)
    public TaskRecord updateTaskRecord(long taskRecordId, long userId, String workPackage, String description,
            String ticketURL, Date endDate, Date startDate, int status, long duration,
            ServiceContext serviceContext) throws PortalException {

        // TaskRecord

        User user = userPersistence.findByPrimaryKey(userId);

        TaskRecord taskRecord = taskRecordPersistence.findByPrimaryKey(taskRecordId);

        long groupId = serviceContext.getScopeGroupId();

        // TODO: validate taskRecord

        taskRecord.setUuid(serviceContext.getUuid());
        taskRecord.setGroupId(groupId);
        taskRecord.setCompanyId(user.getCompanyId());
        taskRecord.setUserId(user.getUserId());
        taskRecord.setUserName(user.getFullName());
        taskRecord.setExpandoBridgeAttributes(serviceContext);

        taskRecord.setWorkPackage(workPackage);
        taskRecord.setDescription(description);
        taskRecord.setTicketURL(ticketURL);
        taskRecord.setEndDate(endDate);
        taskRecord.setStartDate(startDate);
        taskRecord.setStatus(status);
        taskRecord.setDuration(duration);

        taskRecordPersistence.update(taskRecord);

        // Resources

        resourceLocalService.addModelResources(taskRecord, serviceContext);

        // Asset

        updateAsset(userId, taskRecord, serviceContext.getAssetCategoryIds(), serviceContext.getAssetTagNames(),
                serviceContext.getAssetLinkEntryIds(), serviceContext.getAssetPriority());

        return taskRecord;

    }

    @Override
    public void updateTaskRecordResources(TaskRecord taskRecord, ModelPermissions modelPermissions)
            throws PortalException {

        resourceLocalService.updateResources(taskRecord.getCompanyId(), taskRecord.getGroupId(),
                TaskRecord.class.getName(), taskRecord.getTaskRecordId(), modelPermissions);
    }

    @Override
    public void updateTaskRecordResources(TaskRecord taskRecord, String[] groupPermissions,
            String[] guestPermissions) throws PortalException {

        resourceLocalService.updateResources(taskRecord.getCompanyId(), taskRecord.getGroupId(),
                TaskRecord.class.getName(), taskRecord.getTaskRecordId(), groupPermissions, guestPermissions);
    }

    private static final Log _log = LogFactoryUtil.getLog(TaskRecordLocalServiceImpl.class.getName());
}