com.gcrm.action.crm.EditDocumentAction.java Source code

Java tutorial

Introduction

Here is the source code for com.gcrm.action.crm.EditDocumentAction.java

Source

/**
 * Copyright (C) 2012 - 2013, Grass CRM Studio
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.gcrm.action.crm;

import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;
import org.springframework.core.task.TaskExecutor;

import com.gcrm.domain.Account;
import com.gcrm.domain.Attachment;
import com.gcrm.domain.CaseInstance;
import com.gcrm.domain.ChangeLog;
import com.gcrm.domain.Contact;
import com.gcrm.domain.Document;
import com.gcrm.domain.DocumentCategory;
import com.gcrm.domain.DocumentStatus;
import com.gcrm.domain.DocumentSubCategory;
import com.gcrm.domain.Opportunity;
import com.gcrm.domain.User;
import com.gcrm.security.AuthenticationSuccessListener;
import com.gcrm.service.IBaseService;
import com.gcrm.service.IOptionService;
import com.gcrm.util.BeanUtil;
import com.gcrm.util.CommonUtil;
import com.gcrm.util.Constant;
import com.gcrm.util.security.UserUtil;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.Preparable;

/**
 * Edits Document
 * 
 */
public class EditDocumentAction extends BaseEditAction implements Preparable {

    private static final long serialVersionUID = -2404576552417042445L;

    private IBaseService<Document> baseService;
    private IOptionService<DocumentStatus> documentStatusService;
    private IOptionService<DocumentCategory> documentCategoryService;
    private IOptionService<DocumentSubCategory> documentSubCategoryService;
    private IBaseService<Account> accountService;
    private IBaseService<Contact> contactService;
    private IBaseService<Opportunity> opportunityService;
    private IBaseService<CaseInstance> caseService;
    private IBaseService<User> userService;
    private IBaseService<ChangeLog> changeLogService;
    private TaskExecutor taskExecutor;
    private Document document;
    private List<DocumentStatus> statuses;
    private List<DocumentCategory> categories;
    private List<DocumentSubCategory> subCategories;
    private Integer statusID = null;
    private Integer categoryID = null;
    private Integer subCategoryID = null;
    private Integer relatedDocumentID = null;
    private String relatedDocumentText = null;
    private String publishDateS = null;
    private String expirationDateS = null;
    private File upload;
    private String uploadFileName;
    private String uploadContentType;
    private String fileName;

    /**
     * Saves the entity.
     * 
     * @return the SUCCESS result
     */
    public String save() throws Exception {
        Document originalDocument = saveEntity();
        final Collection<ChangeLog> changeLogs = changeLog(originalDocument, document);
        document = getBaseService().makePersistent(document);
        this.setId(document.getId());
        this.setSaveFlag("true");
        if (changeLogs != null) {
            taskExecutor.execute(new Runnable() {
                public void run() {
                    batchInserChangeLogs(changeLogs);
                }
            });
        }
        return SUCCESS;
    }

    /**
     * Batch update change log
     * 
     * @param changeLogs
     *            change log collection
     */
    private void batchInserChangeLogs(Collection<ChangeLog> changeLogs) {
        this.getChangeLogService().batchUpdate(changeLogs);
    }

    /**
     * Creates change log
     * 
     * @param originalDocument
     *            original document record
     * @param document
     *            current document record
     * @return change log collections
     */
    private Collection<ChangeLog> changeLog(Document originalDocument, Document document) {
        Collection<ChangeLog> changeLogs = null;
        if (originalDocument != null) {
            ActionContext context = ActionContext.getContext();
            Map<String, Object> session = context.getSession();
            String entityName = Document.class.getSimpleName();
            Integer recordID = document.getId();
            User loginUser = (User) session.get(AuthenticationSuccessListener.LOGIN_USER);
            changeLogs = new ArrayList<ChangeLog>();

            String oldName = CommonUtil.fromNullToEmpty(originalDocument.getName());
            String newName = CommonUtil.fromNullToEmpty(document.getName());
            createChangeLog(changeLogs, entityName, recordID, "entity.name.label", oldName, newName, loginUser);

            String oldFileName = CommonUtil.fromNullToEmpty(originalDocument.getFileName());
            String newFileName = CommonUtil.fromNullToEmpty(document.getFileName());

            createChangeLog(changeLogs, entityName, recordID, "document.file.label", oldFileName, newFileName,
                    loginUser);

            String oldRevision = String.valueOf(originalDocument.getRevision());
            String newRevision = String.valueOf(document.getRevision());
            createChangeLog(changeLogs, entityName, recordID, "document.revision.label", oldRevision, newRevision,
                    loginUser);

            SimpleDateFormat dateFormat = new SimpleDateFormat(Constant.DATE_EDIT_FORMAT);
            String oldPublishDateValue = "";
            Date oldPublishDate = originalDocument.getPublish_date();
            if (oldPublishDate != null) {
                oldPublishDateValue = dateFormat.format(oldPublishDate);
            }
            String newPublishDateValue = "";
            Date newPublishDate = document.getPublish_date();
            if (newPublishDate != null) {
                newPublishDateValue = dateFormat.format(newPublishDate);
            }
            createChangeLog(changeLogs, entityName, recordID, "document.publish_date.label", oldPublishDateValue,
                    newPublishDateValue, loginUser);

            String oldExpirationDateValue = "";
            Date oldExpirationDate = originalDocument.getExpiration_date();
            if (oldExpirationDate != null) {
                oldExpirationDateValue = dateFormat.format(oldExpirationDate);
            }
            String newExpirationDateValue = "";
            Date newExpirationDate = document.getExpiration_date();
            if (newExpirationDate != null) {
                newExpirationDateValue = dateFormat.format(newExpirationDate);
            }
            createChangeLog(changeLogs, entityName, recordID, "document.expiration_date.label",
                    oldExpirationDateValue, newExpirationDateValue, loginUser);

            String oldCategory = getOptionValue(originalDocument.getCategory());
            String newCategory = getOptionValue(document.getCategory());
            createChangeLog(changeLogs, entityName, recordID, "document.category.label", oldCategory, newCategory,
                    loginUser);

            String oldSubCategory = getOptionValue(originalDocument.getSub_category());
            String newSubCategory = getOptionValue(document.getSub_category());
            createChangeLog(changeLogs, entityName, recordID, "document.sub_category.label", oldSubCategory,
                    newSubCategory, loginUser);

            String oldRelatedDocumentName = "";
            Document oldRelatedDocument = originalDocument.getRelated_document();
            if (oldRelatedDocument != null) {
                oldRelatedDocumentName = CommonUtil.fromNullToEmpty(oldRelatedDocument.getName());
            }
            String newRelatedDocumentName = "";
            Document newRelatedDocument = document.getRelated_document();
            if (newRelatedDocument != null) {
                newRelatedDocumentName = CommonUtil.fromNullToEmpty(newRelatedDocument.getName());
            }
            createChangeLog(changeLogs, entityName, recordID, "document.related_document.label",
                    oldRelatedDocumentName, newRelatedDocumentName, loginUser);

            String oldNotes = CommonUtil.fromNullToEmpty(originalDocument.getNotes());
            String newNotes = CommonUtil.fromNullToEmpty(document.getNotes());
            createChangeLog(changeLogs, entityName, recordID, "entity.notes.label", oldNotes, newNotes, loginUser);

            String oldAssignedToName = "";
            User oldAssignedTo = originalDocument.getAssigned_to();
            if (oldAssignedTo != null) {
                oldAssignedToName = oldAssignedTo.getName();
            }
            String newAssignedToName = "";
            User newAssignedTo = document.getAssigned_to();
            if (newAssignedTo != null) {
                newAssignedToName = newAssignedTo.getName();
            }
            createChangeLog(changeLogs, entityName, recordID, "entity.assigned_to.label",
                    CommonUtil.fromNullToEmpty(oldAssignedToName), CommonUtil.fromNullToEmpty(newAssignedToName),
                    loginUser);
        }
        return changeLogs;
    }

    /**
     * Gets the entity.
     * 
     * @return the SUCCESS result
     */
    public String get() throws Exception {
        if (this.getId() != null) {
            document = baseService.getEntityById(Document.class, this.getId());
            DocumentStatus status = document.getStatus();
            if (status != null) {
                statusID = status.getId();
            }
            DocumentCategory category = document.getCategory();
            if (category != null) {
                categoryID = category.getId();
            }

            DocumentSubCategory subCategory = document.getSub_category();
            if (subCategory != null) {
                subCategoryID = subCategory.getId();
            }

            User assignedTo = document.getAssigned_to();
            if (assignedTo != null) {
                this.setAssignedToID(assignedTo.getId());
                this.setAssignedToText(assignedTo.getName());
            }
            Document relatedDocument = document.getRelated_document();
            if (relatedDocument != null) {
                relatedDocumentID = relatedDocument.getId();
                relatedDocumentText = relatedDocument.getName();
            }
            Date publishDate = document.getPublish_date();
            SimpleDateFormat dateFormat = new SimpleDateFormat(Constant.DATE_EDIT_FORMAT);
            if (publishDate != null) {
                publishDateS = dateFormat.format(publishDate);
            }
            Date expirationDate = document.getExpiration_date();
            if (expirationDate != null) {
                expirationDateS = dateFormat.format(expirationDate);
            }
            this.getBaseInfo(document, Document.class.getSimpleName(), Constant.CRM_NAMESPACE);
        } else {
            this.initBaseInfo();
        }
        return SUCCESS;
    }

    /**
     * Mass update entity record information
     */
    public String massUpdate() throws Exception {
        saveEntity();
        String[] fieldNames = this.massUpdate;
        if (fieldNames != null) {
            String[] selectIDArray = this.seleteIDs.split(",");
            Collection<Document> documents = new ArrayList<Document>();
            User loginUser = this.getLoginUser();
            User user = userService.getEntityById(User.class, loginUser.getId());
            Collection<ChangeLog> allChangeLogs = new ArrayList<ChangeLog>();
            for (String IDString : selectIDArray) {
                int id = Integer.parseInt(IDString);
                Document documentInstance = this.baseService.getEntityById(Document.class, id);
                Document originalDocument = documentInstance.clone();
                for (String fieldName : fieldNames) {
                    Object value = BeanUtil.getFieldValue(document, fieldName);
                    BeanUtil.setFieldValue(documentInstance, fieldName, value);
                }
                documentInstance.setUpdated_by(user);
                documentInstance.setUpdated_on(new Date());
                Collection<ChangeLog> changeLogs = changeLog(originalDocument, documentInstance);
                allChangeLogs.addAll(changeLogs);
                documents.add(documentInstance);
            }
            final Collection<ChangeLog> changeLogsForSave = allChangeLogs;
            if (documents.size() > 0) {
                this.baseService.batchUpdate(documents);
                taskExecutor.execute(new Runnable() {
                    public void run() {
                        batchInserChangeLogs(changeLogsForSave);
                    }
                });
            }
        }
        return SUCCESS;
    }

    /**
     * Saves entity field
     * 
     * @return original document record
     * @throws ParseException
     */
    private Document saveEntity() throws Exception {
        Document originalDocument = null;
        if (document.getId() == null) {
            UserUtil.permissionCheck("create_document");
        } else {
            UserUtil.permissionCheck("update_document");
            originalDocument = baseService.getEntityById(Document.class, document.getId());
            document.setAttachment(originalDocument.getAttachment());
            document.setContacts(originalDocument.getContacts());
            document.setCases(originalDocument.getCases());
            document.setAccounts(originalDocument.getAccounts());
            document.setOpportunities(originalDocument.getOpportunities());
            document.setCreated_on(originalDocument.getCreated_on());
            document.setCreated_by(originalDocument.getCreated_by());
        }

        DocumentStatus status = null;
        if (statusID != null) {
            status = documentStatusService.getEntityById(DocumentStatus.class, statusID);
        }
        document.setStatus(status);

        DocumentCategory category = null;
        if (categoryID != null) {
            category = documentCategoryService.getEntityById(DocumentCategory.class, categoryID);
        }
        document.setCategory(category);

        DocumentSubCategory subCategory = null;
        if (subCategoryID != null) {
            subCategory = documentSubCategoryService.getEntityById(DocumentSubCategory.class, subCategoryID);
        }
        document.setSub_category(subCategory);
        User assignedTo = null;
        if (this.getAssignedToID() != null) {
            assignedTo = userService.getEntityById(User.class, this.getAssignedToID());
        }
        document.setAssigned_to(assignedTo);
        User owner = null;
        if (this.getOwnerID() != null) {
            owner = userService.getEntityById(User.class, this.getOwnerID());
        }
        document.setOwner(owner);
        Document relatedDocument = null;
        if (relatedDocumentID != null) {
            relatedDocument = baseService.getEntityById(Document.class, relatedDocumentID);
        }
        document.setRelated_document(relatedDocument);
        SimpleDateFormat dateFormat = new SimpleDateFormat(Constant.DATE_EDIT_FORMAT);
        Date publishDate = null;
        if (!CommonUtil.isNullOrEmpty(publishDateS)) {
            publishDate = dateFormat.parse(publishDateS);
        }
        document.setPublish_date(publishDate);
        Date expirationDate = null;
        if (!CommonUtil.isNullOrEmpty(expirationDateS)) {
            expirationDate = dateFormat.parse(expirationDateS);
        }
        document.setExpiration_date(expirationDate);

        File file = this.getUpload();
        if (file != null) {
            InputStream stream = null;
            byte[] input = null;
            try {
                stream = new BufferedInputStream(new FileInputStream(file));
                input = new byte[stream.available()];
                stream.read(input);
            } finally {
                stream.close();
            }
            Attachment attachment = null;
            attachment = document.getAttachment();
            if (attachment == null) {
                attachment = new Attachment();
                document.setAttachment(attachment);
            }
            attachment.setName(this.uploadFileName);
            document.setFileName(this.uploadFileName);
            attachment.setContent(input);
        }

        if ("Account".equals(this.getRelationKey())) {
            Account account = accountService.getEntityById(Account.class, Integer.valueOf(this.getRelationValue()));
            Set<Account> accounts = document.getAccounts();
            if (accounts == null) {
                accounts = new HashSet<Account>();
            }
            accounts.add(account);
        } else if ("Contact".equals(this.getRelationKey())) {
            Contact contact = contactService.getEntityById(Contact.class, Integer.valueOf(this.getRelationValue()));
            Set<Contact> contacts = document.getContacts();
            if (contacts == null) {
                contacts = new HashSet<Contact>();
            }
            contacts.add(contact);
        } else if ("Opportunity".equals(this.getRelationKey())) {
            Opportunity opportunity = opportunityService.getEntityById(Opportunity.class,
                    Integer.valueOf(this.getRelationValue()));
            Set<Opportunity> opportunities = document.getOpportunities();
            if (opportunities == null) {
                opportunities = new HashSet<Opportunity>();
            }
            opportunities.add(opportunity);
        } else if ("CaseInstance".equals(this.getRelationKey())) {
            CaseInstance caseInstance = caseService.getEntityById(CaseInstance.class,
                    Integer.valueOf(this.getRelationValue()));
            Set<CaseInstance> cases = document.getCases();
            if (cases == null) {
                cases = new HashSet<CaseInstance>();
            }
            cases.add(caseInstance);
        }
        super.updateBaseInfo(document);
        return originalDocument;
    }

    /**
     * Gets Document Relation Counts
     * 
     * @return null
     */
    public String getDocumentRelationCounts() throws Exception {
        long accountNumber = this.baseService.countsByParams(
                "select count(*) from Document document join document.accounts where document.id = ?",
                new Integer[] { this.getId() });
        long contactNumber = this.baseService.countsByParams(
                "select count(*) from Document document join document.contacts where document.id = ?",
                new Integer[] { this.getId() });
        long opportunitiyNumber = this.baseService.countsByParams(
                "select count(*) from Document document join document.opportunities where document.id = ?",
                new Integer[] { this.getId() });
        long caseNumber = this.baseService.countsByParams(
                "select count(*) from Document document join document.cases where document.id = ?",
                new Integer[] { this.getId() });

        StringBuilder jsonBuilder = new StringBuilder("");
        jsonBuilder.append("{\"accountNumber\":\"").append(accountNumber).append("\",\"contactNumber\":\"")
                .append(contactNumber).append("\",\"opportunitiyNumber\":\"").append(opportunitiyNumber)
                .append("\",\"caseNumber\":\"").append(caseNumber).append("\"}");
        // Returns JSON data back to page
        HttpServletResponse response = ServletActionContext.getResponse();
        response.setContentType("text/html;charset=UTF-8");
        response.getWriter().write(jsonBuilder.toString());
        return null;
    }

    /**
     * Prepares the list
     * 
     */
    public void prepare() throws Exception {
        ActionContext context = ActionContext.getContext();
        Map<String, Object> session = context.getSession();
        String local = (String) session.get("locale");
        this.statuses = documentStatusService.getOptions(DocumentStatus.class.getSimpleName(), local);
        this.categories = documentCategoryService.getOptions(DocumentCategory.class.getSimpleName(), local);
        this.subCategories = documentSubCategoryService.getOptions(DocumentSubCategory.class.getSimpleName(),
                local);
    }

    /**
     * Imports the document
     * 
     * @return document inputStream
     * 
     */
    public InputStream getInputStream() throws Exception {
        byte[] fileBytes = null;
        if (this.getId() != null) {
            Document document = baseService.getEntityById(Document.class, this.getId());
            Attachment attachment = document.getAttachment();
            if (attachment != null) {
                fileBytes = attachment.getContent();
            }
        }
        InputStream in = new ByteArrayInputStream(fileBytes);
        return in;
    }

    /**
     * @return the userService
     */
    public IBaseService<User> getUserService() {
        return userService;
    }

    /**
     * @param userService
     *            the userService to set
     */
    public void setUserService(IBaseService<User> userService) {
        this.userService = userService;
    }

    /**
     * @return the document
     */
    public Document getDocument() {
        return document;
    }

    /**
     * @param document
     *            the document to set
     */
    public void setDocument(Document document) {
        this.document = document;
    }

    /**
     * @return the statuses
     */
    public List<DocumentStatus> getStatuses() {
        return statuses;
    }

    /**
     * @param statuses
     *            the statuses to set
     */
    public void setStatuses(List<DocumentStatus> statuses) {
        this.statuses = statuses;
    }

    /**
     * @return the categories
     */
    public List<DocumentCategory> getCategories() {
        return categories;
    }

    /**
     * @param categories
     *            the categories to set
     */
    public void setCategories(List<DocumentCategory> categories) {
        this.categories = categories;
    }

    /**
     * @return the subCategories
     */
    public List<DocumentSubCategory> getSubCategories() {
        return subCategories;
    }

    /**
     * @param subCategories
     *            the subCategories to set
     */
    public void setSubCategories(List<DocumentSubCategory> subCategories) {
        this.subCategories = subCategories;
    }

    /**
     * @return the statusID
     */
    public Integer getStatusID() {
        return statusID;
    }

    /**
     * @param statusID
     *            the statusID to set
     */
    public void setStatusID(Integer statusID) {
        this.statusID = statusID;
    }

    /**
     * @return the categoryID
     */
    public Integer getCategoryID() {
        return categoryID;
    }

    /**
     * @param categoryID
     *            the categoryID to set
     */
    public void setCategoryID(Integer categoryID) {
        this.categoryID = categoryID;
    }

    /**
     * @return the subCategoryID
     */
    public Integer getSubCategoryID() {
        return subCategoryID;
    }

    /**
     * @param subCategoryID
     *            the subCategoryID to set
     */
    public void setSubCategoryID(Integer subCategoryID) {
        this.subCategoryID = subCategoryID;
    }

    /**
     * @return the relatedDocumentID
     */
    public Integer getRelatedDocumentID() {
        return relatedDocumentID;
    }

    /**
     * @param relatedDocumentID
     *            the relatedDocumentID to set
     */
    public void setRelatedDocumentID(Integer relatedDocumentID) {
        this.relatedDocumentID = relatedDocumentID;
    }

    /**
     * @return the publishDate
     */
    public String getPublishDateS() {
        return publishDateS;
    }

    /**
     * @param publishDate
     *            the publishDate to set
     */
    public void setPublishDateS(String publishDateS) {
        this.publishDateS = publishDateS;
    }

    /**
     * @return the expirationDate
     */
    public String getExpirationDateS() {
        return expirationDateS;
    }

    /**
     * @param expirationDate
     *            the expirationDate to set
     */
    public void setExpirationDateS(String expirationDateS) {
        this.expirationDateS = expirationDateS;
    }

    /**
     * @return the upload
     */
    public File getUpload() {
        return upload;
    }

    /**
     * @param upload
     *            the upload to set
     */
    public void setUpload(File upload) {
        this.upload = upload;
    }

    /**
     * @return the uploadFileName
     */
    public String getUploadFileName() {
        return uploadFileName;
    }

    /**
     * @param uploadFileName
     *            the uploadFileName to set
     */
    public void setUploadFileName(String uploadFileName) {
        this.uploadFileName = uploadFileName;
    }

    /**
     * @return the uploadContentType
     */
    public String getUploadContentType() {
        return uploadContentType;
    }

    /**
     * @param uploadContentType
     *            the uploadContentType to set
     */
    public void setUploadContentType(String uploadContentType) {
        this.uploadContentType = uploadContentType;
    }

    /**
     * @return the fileName
     */
    public String getFileName() {
        return fileName;
    }

    /**
     * @param fileName
     *            the fileName to set
     */
    public void setFileName(String fileName) {
        this.fileName = fileName;
    }

    /**
     * @return the accountService
     */
    public IBaseService<Account> getAccountService() {
        return accountService;
    }

    /**
     * @param accountService
     *            the accountService to set
     */
    public void setAccountService(IBaseService<Account> accountService) {
        this.accountService = accountService;
    }

    /**
     * @return the contactService
     */
    public IBaseService<Contact> getContactService() {
        return contactService;
    }

    /**
     * @param contactService
     *            the contactService to set
     */
    public void setContactService(IBaseService<Contact> contactService) {
        this.contactService = contactService;
    }

    /**
     * @return the opportunityService
     */
    public IBaseService<Opportunity> getOpportunityService() {
        return opportunityService;
    }

    /**
     * @param opportunityService
     *            the opportunityService to set
     */
    public void setOpportunityService(IBaseService<Opportunity> opportunityService) {
        this.opportunityService = opportunityService;
    }

    /**
     * @return the caseService
     */
    public IBaseService<CaseInstance> getCaseService() {
        return caseService;
    }

    /**
     * @param caseService
     *            the caseService to set
     */
    public void setCaseService(IBaseService<CaseInstance> caseService) {
        this.caseService = caseService;
    }

    /**
     * @return the relatedDocumentText
     */
    public String getRelatedDocumentText() {
        return relatedDocumentText;
    }

    /**
     * @return the documentStatusService
     */
    public IOptionService<DocumentStatus> getDocumentStatusService() {
        return documentStatusService;
    }

    /**
     * @param documentStatusService
     *            the documentStatusService to set
     */
    public void setDocumentStatusService(IOptionService<DocumentStatus> documentStatusService) {
        this.documentStatusService = documentStatusService;
    }

    /**
     * @return the documentCategoryService
     */
    public IOptionService<DocumentCategory> getDocumentCategoryService() {
        return documentCategoryService;
    }

    /**
     * @param documentCategoryService
     *            the documentCategoryService to set
     */
    public void setDocumentCategoryService(IOptionService<DocumentCategory> documentCategoryService) {
        this.documentCategoryService = documentCategoryService;
    }

    /**
     * @return the documentSubCategoryService
     */
    public IOptionService<DocumentSubCategory> getDocumentSubCategoryService() {
        return documentSubCategoryService;
    }

    /**
     * @param documentSubCategoryService
     *            the documentSubCategoryService to set
     */
    public void setDocumentSubCategoryService(IOptionService<DocumentSubCategory> documentSubCategoryService) {
        this.documentSubCategoryService = documentSubCategoryService;
    }

    public IBaseService<ChangeLog> getChangeLogService() {
        return changeLogService;
    }

    public void setChangeLogService(IBaseService<ChangeLog> changeLogService) {
        this.changeLogService = changeLogService;
    }

    public TaskExecutor getTaskExecutor() {
        return taskExecutor;
    }

    public void setTaskExecutor(TaskExecutor taskExecutor) {
        this.taskExecutor = taskExecutor;
    }

    /**
     * @return the baseService
     */
    public IBaseService<Document> getBaseService() {
        return baseService;
    }

    /**
     * @param baseService
     *            the baseService to set
     */
    public void setBaseService(IBaseService<Document> baseService) {
        this.baseService = baseService;
    }
}