com.wcs.newsletter.controller.ConfigController.java Source code

Java tutorial

Introduction

Here is the source code for com.wcs.newsletter.controller.ConfigController.java

Source

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.wcs.newsletter.controller;

/*
 * #%L
 * Webstar Newsletter
 * %%
 * Copyright (C) 2013 Webstar Csoport Kft.
 * %%
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as
 * published by the Free Software Foundation, either version 3 of the 
 * License, or (at your option) any later version.
 * 
 * This program 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 General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public 
 * License along with this program.  If not, see
 * <http://www.gnu.org/licenses/gpl-3.0.html>.
 * #L%
 */
import com.liferay.counter.service.CounterLocalServiceUtil;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.repository.model.FileEntry;
import com.liferay.portal.kernel.util.GetterUtil;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.kernel.util.StringUtil;
import com.liferay.portal.kernel.util.Validator;
import com.liferay.portal.model.Layout;
import com.liferay.portal.model.LayoutConstants;
import com.liferay.portal.security.permission.ActionKeys;

import com.liferay.portal.service.LayoutLocalServiceUtil;
import com.liferay.portal.service.ServiceContext;

import com.liferay.portal.theme.ThemeDisplay;
import com.liferay.portal.util.LayoutLister;
import com.liferay.portal.util.LayoutView;
import com.liferay.portal.util.PortalUtil;
import com.liferay.portlet.documentlibrary.model.DLFileEntry;
import com.liferay.portlet.documentlibrary.model.DLFolder;
import com.liferay.portlet.documentlibrary.model.DLFolderConstants;
import com.liferay.portlet.documentlibrary.model.DLSync;
import com.liferay.portlet.documentlibrary.service.DLAppServiceUtil;
import com.liferay.portlet.documentlibrary.service.DLFileEntryLocalServiceUtil;
import com.liferay.portlet.documentlibrary.service.DLFileEntryServiceUtil;
import com.liferay.portlet.documentlibrary.service.DLFolderLocalServiceUtil;
import com.liferay.portlet.documentlibrary.service.DLSyncLocalServiceUtil;
import com.wcs.newsletter.model.Category;
import com.wcs.newsletter.model.NewsletterConfig;
import com.wcs.newsletter.model.Subscription;
import com.wcs.newsletter.model.SubscriptionCategory;
import com.wcs.newsletter.model.impl.CategoryImpl;
import com.wcs.newsletter.model.impl.NewsletterConfigImpl;
import com.wcs.newsletter.service.CategoryLocalServiceUtil;
import com.wcs.newsletter.service.NewsletterConfigLocalServiceUtil;
import com.wcs.newsletter.service.SubscriptionCategoryLocalServiceUtil;
import com.wcs.newsletter.util.AppMessageBundle;
import com.wcs.newsletter.util.LiferayUtil;
import java.io.File;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.model.SelectItem;
import org.apache.commons.io.IOUtils;

/**
 *
 * @author csaba
 */
@ManagedBean
@ViewScoped
public class ConfigController extends AbstractController {

    private static final String SAVE_SUCCESS = "admin_newsletters_save_success";
    private static final String CLEAR_SUCCESS = "admin_newsletters_clear_success";
    private boolean updateTemplate;
    private List<FileEntry> templateList;
    private FileEntry selectedTemplate;
    private boolean syncUsers;
    private boolean installedDefaults;
    private SelectItem[] layoutsForSelect;
    private String selectedLayout;

    public String getSelectedLayout() {
        return selectedLayout;
    }

    public void setSelectedLayout(String selectedLayout) {
        this.selectedLayout = selectedLayout;
    }

    public SelectItem[] getLayoutsForSelect() {
        return layoutsForSelect;
    }

    public void setLayoutsForSelect(SelectItem[] layoutsForSelect) {
        this.layoutsForSelect = layoutsForSelect;
    }

    public boolean isInstalledDefaults() {
        return installedDefaults;
    }

    public void setInstalledDefaults(boolean installedDefaults) {
        this.installedDefaults = installedDefaults;
    }

    public void save() {
        try {

            if (selectedTemplate != null) {
                List<NewsletterConfig> configs = NewsletterConfigLocalServiceUtil.findByConfigKey("emailTemplate");
                NewsletterConfig emailTemplateConfig;

                if (configs.isEmpty()) {
                    emailTemplateConfig = new NewsletterConfigImpl();
                    emailTemplateConfig.setConfigKey("emailTemplate");
                    emailTemplateConfig.setConfigValue(String.valueOf(selectedTemplate.getFileEntryId()));
                    NewsletterConfigLocalServiceUtil.addNewsletterConfig(emailTemplateConfig);
                } else {
                    emailTemplateConfig = configs.get(0);
                    emailTemplateConfig.setConfigValue(String.valueOf(selectedTemplate.getFileEntryId()));
                    NewsletterConfigLocalServiceUtil.updateNewsletterConfig(emailTemplateConfig);
                }
            }
            //configs
            List<NewsletterConfig> configs = NewsletterConfigLocalServiceUtil.findByConfigKey("syncUsers");
            NewsletterConfig syncUserConfig;

            if (configs.isEmpty()) {
                syncUserConfig = new NewsletterConfigImpl();
                syncUserConfig.setConfigKey("syncUsers");
                syncUserConfig.setConfigValue(syncUsers ? "1" : "0");
                NewsletterConfigLocalServiceUtil.addNewsletterConfig(syncUserConfig);
            } else {
                syncUserConfig = configs.get(0);
                syncUserConfig.setConfigValue(syncUsers ? "1" : "0");
                NewsletterConfigLocalServiceUtil.updateNewsletterConfig(syncUserConfig);
            }

            //configs
            configs = NewsletterConfigLocalServiceUtil.findByConfigKey("subscriptionActionLayout");
            NewsletterConfig subscriptionActionLayout;

            if (configs.isEmpty()) {
                subscriptionActionLayout = new NewsletterConfigImpl();
                subscriptionActionLayout.setConfigKey("subscriptionActionLayout");
                subscriptionActionLayout.setConfigValue(selectedLayout);
                NewsletterConfigLocalServiceUtil.addNewsletterConfig(subscriptionActionLayout);
            } else {
                subscriptionActionLayout = configs.get(0);
                subscriptionActionLayout.setConfigValue(selectedLayout);
                NewsletterConfigLocalServiceUtil.updateNewsletterConfig(subscriptionActionLayout);
            }
            //end configs

            addSuccessMessage(SAVE_SUCCESS);
        } catch (Exception ex) {
            logger.error(ex);
            addErrorMessage(ex);
        }
    }

    public boolean isSyncUsers() {
        return syncUsers;
    }

    public void setSyncUsers(boolean syncUsers) {
        this.syncUsers = syncUsers;
    }

    @Override
    public void initController() {
        listLayouts();
        initConfigs();
    }

    public void canSetTemplate() {
        updateTemplate = true;
    }

    public void initConfigs() {
        try {

            List<NewsletterConfig> configs = NewsletterConfigLocalServiceUtil.getNewsletterConfigs(0,
                    NewsletterConfigLocalServiceUtil.getNewsletterConfigsCount());
            if (!configs.isEmpty()) {
                HashMap<String, String> configMap = new HashMap<String, String>();
                for (NewsletterConfig conf : configs) {
                    configMap.put(conf.getConfigKey(), conf.getConfigValue());
                }
                syncUsers = "1".equals(configMap.get("syncUsers"));
                installedDefaults = "1".equals(configMap.get("defaultsInstalled"));
                if (!updateTemplate) {
                    selectedTemplate = DLAppServiceUtil.getFileEntry(Long.valueOf(configMap.get("emailTemplate")));
                }
                selectedLayout = "";
                selectedLayout = configMap.get("subscriptionActionLayout");
            }
        } catch (PortalException ex) {
            Logger.getLogger(ConfigController.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SystemException ex) {
            Logger.getLogger(ConfigController.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public FileEntry getSelectedTemplate() {
        return selectedTemplate;
    }

    public void setSelectedTemplate(FileEntry selectedTemplate) {
        this.selectedTemplate = selectedTemplate;
    }

    public List<FileEntry> getTemplateList() {
        if (templateList == null || !(templateList.size() > 0)) {
            templateList = new ArrayList<FileEntry>();
            long galleryRootFolder = 0;
            try {
                List<DLFileEntry> files = DLFileEntryLocalServiceUtil.getDLFileEntries(0,
                        DLFileEntryLocalServiceUtil.getDLFileEntriesCount());//getFileEntries(getThemeDisplay().getScopeGroupId(), DLFolderConstants.DEFAULT_PARENT_FOLDER_ID);//.getFileEntries(templateFolder.getRepositoryId(), folderId);
                for (DLFileEntry fil : files) {
                    FileEntry newsletterTemplate = DLAppServiceUtil.getFileEntry(fil.getFileEntryId());
                    if (newsletterTemplate.getMimeType().equals("text/html")) {
                        templateList.add(newsletterTemplate);
                    }
                }
            } catch (PortalException ex) {
                logger.error(ex);
            } catch (SystemException ex) {
                logger.error(ex);
            }
        }
        return templateList;
    }

    public void setTemplateList(List<FileEntry> templateList) {
        this.templateList = templateList;
    }

    public void installDefaultContents() {
        try {

            long id = CounterLocalServiceUtil.increment();
            ThemeDisplay themeDisplay = LiferayUtil.getThemeDisplay();
            DLFolder folder = DLFolderLocalServiceUtil.createDLFolder(id);
            folder.setName("Webstar-Newsletter");
            folder.setParentFolderId(0);
            folder.setDescription("Folder for default Webstar-Newsletter contents");
            folder.setGroupId(themeDisplay.getScopeGroupId());
            folder.setCompanyId(themeDisplay.getCompanyId());
            folder.setUserId(themeDisplay.getRealUserId());
            folder.setParentFolderId(DLFolderConstants.DEFAULT_PARENT_FOLDER_ID);
            long defaultRepoId = DLFolderConstants.getDataRepositoryId(themeDisplay.getScopeGroupId(),
                    DLFolderConstants.DEFAULT_PARENT_FOLDER_ID);
            folder.setRepositoryId(defaultRepoId);
            Date allDate = new Date();
            folder.setCreateDate(allDate);
            folder.setModifiedDate(allDate);
            folder.setLastPostDate(allDate);
            folder = DLFolderLocalServiceUtil.addDLFolder(folder);
            ServiceContext serviceContext = new ServiceContext();
            serviceContext.setScopeGroupId(folder.getGroupId());
            serviceContext.setAddGuestPermissions(true);
            serviceContext.setGuestPermissions(new String[] { ActionKeys.ACCESS });

            long syncId = CounterLocalServiceUtil.increment();
            DLSync foldersSync = DLSyncLocalServiceUtil.createDLSync(syncId);
            foldersSync.setFileId(folder.getFolderId());
            foldersSync.setParentFolderId(folder.getParentFolderId());
            foldersSync.setCompanyId(folder.getCompanyId());
            foldersSync.setFileUuid(folder.getUuid());
            foldersSync.setRepositoryId(folder.getRepositoryId());
            foldersSync.setName(folder.getName());
            foldersSync.setEvent("add");
            foldersSync.setType("folder");
            foldersSync.setVersion("-1");
            foldersSync.setCreateDate(allDate);
            foldersSync.setModifiedDate(allDate);
            DLSyncLocalServiceUtil.updateDLSync(foldersSync);

            /* Confirm tempalte 1*/
            long fileId = CounterLocalServiceUtil.increment();
            InputStream inputStream = getClass().getClassLoader()
                    .getResourceAsStream("install/HU_Confirm_Email.html");
            String filename = "Confirm_Template_HU.html";
            File confTemp1 = File.createTempFile("temp", ".tmp");
            FileOutputStream out = new FileOutputStream(confTemp1);
            IOUtils.copy(inputStream, out);

            DLFileEntry templateFile = DLFileEntryServiceUtil.addFileEntry(folder.getGroupId(),
                    folder.getRepositoryId(), folder.getFolderId(), confTemp1.getName(), "text/html", filename,
                    filename, "", folder.getDefaultFileEntryTypeId(), null, confTemp1, null,
                    confTemp1.getUsableSpace(), serviceContext);
            DLFileEntryLocalServiceUtil.updateFileEntry(folder.getUserId(), templateFile.getFileEntryId(), filename,
                    "text/html", filename, filename, "", true, templateFile.getFileEntryTypeId(), null, confTemp1,
                    null, confTemp1.getUsableSpace(), serviceContext);
            confTemp1.deleteOnExit();

            /* Confirm tempalte 2*/
            fileId = CounterLocalServiceUtil.increment();
            inputStream = getClass().getClassLoader().getResourceAsStream("install/EN_Confirm_Email.html");
            filename = "Confirm_Template_EN.html";
            File confTemp2 = File.createTempFile("temp2", ".tmp");
            out = new FileOutputStream(confTemp2);
            IOUtils.copy(inputStream, out);

            templateFile = DLFileEntryServiceUtil.addFileEntry(folder.getGroupId(), folder.getRepositoryId(),
                    folder.getFolderId(), confTemp2.getName(), "text/html", filename, filename, "",
                    folder.getDefaultFileEntryTypeId(), null, confTemp2, null, confTemp2.getUsableSpace(),
                    serviceContext);
            DLFileEntryLocalServiceUtil.updateFileEntry(folder.getUserId(), templateFile.getFileEntryId(), filename,
                    "text/html", filename, filename, "", true, templateFile.getFileEntryTypeId(), null, confTemp2,
                    null, confTemp2.getUsableSpace(), serviceContext);
            confTemp2.deleteOnExit();

            /*Set default confirm template to EN version */

            List<NewsletterConfig> configs = NewsletterConfigLocalServiceUtil.findByConfigKey("emailTemplate");
            NewsletterConfig defaultTemplate;
            if (configs.isEmpty()) {
                defaultTemplate = new NewsletterConfigImpl();
                defaultTemplate.setConfigKey("emailTemplate");
                defaultTemplate.setConfigValue(String.valueOf(templateFile.getFileEntryId()));
                NewsletterConfigLocalServiceUtil.addNewsletterConfig(defaultTemplate);
            } else {
                defaultTemplate = configs.get(0);
                defaultTemplate.setConfigValue(String.valueOf(templateFile.getFileEntryId()));
                NewsletterConfigLocalServiceUtil.updateNewsletterConfig(defaultTemplate);
            }

            /* Newsletter tempalte 1*/
            fileId = CounterLocalServiceUtil.increment();
            inputStream = getClass().getClassLoader().getResourceAsStream("install/HU_newsletterTemplate.html");
            filename = "Newsletter_Template_HU.html";
            File newsletterTemp1 = File.createTempFile("temp3", ".tmp");
            out = new FileOutputStream(newsletterTemp1);
            IOUtils.copy(inputStream, out);

            templateFile = DLFileEntryServiceUtil.addFileEntry(folder.getGroupId(), folder.getRepositoryId(),
                    folder.getFolderId(), newsletterTemp1.getName(), "text/html", filename, filename, "",
                    folder.getDefaultFileEntryTypeId(), null, newsletterTemp1, null,
                    newsletterTemp1.getUsableSpace(), serviceContext);
            DLFileEntryLocalServiceUtil.updateFileEntry(folder.getUserId(), templateFile.getFileEntryId(), filename,
                    "text/html", filename, filename, "", true, templateFile.getFileEntryTypeId(), null,
                    newsletterTemp1, null, newsletterTemp1.getUsableSpace(), serviceContext);
            newsletterTemp1.deleteOnExit();

            /* Newsletter tempalte 2*/
            fileId = CounterLocalServiceUtil.increment();
            inputStream = getClass().getClassLoader().getResourceAsStream("install/EN_newsletterTemplate.html");
            filename = "Newsletter_Template_EN.html";
            File newsletterTemp2 = File.createTempFile("temp4", ".tmp");
            out = new FileOutputStream(newsletterTemp2);
            IOUtils.copy(inputStream, out);

            templateFile = DLFileEntryServiceUtil.addFileEntry(folder.getGroupId(), folder.getRepositoryId(),
                    folder.getFolderId(), newsletterTemp2.getName(), "text/html", filename, filename, "",
                    folder.getDefaultFileEntryTypeId(), null, newsletterTemp2, null,
                    newsletterTemp2.getUsableSpace(), serviceContext);
            DLFileEntryLocalServiceUtil.updateFileEntry(folder.getUserId(), templateFile.getFileEntryId(), filename,
                    "text/html", filename, filename, "", true, templateFile.getFileEntryTypeId(), null,
                    newsletterTemp2, null, newsletterTemp2.getUsableSpace(), serviceContext);
            newsletterTemp2.deleteOnExit();

            NewsletterConfig defaultsInstalledConfig = new NewsletterConfigImpl();
            defaultsInstalledConfig.setConfigKey("defaultsInstalled");
            defaultsInstalledConfig.setConfigValue("1");
            NewsletterConfigLocalServiceUtil.addNewsletterConfig(defaultsInstalledConfig);

            Category actualCategory = null;
            Locale[] localesForDefaultCategories = LiferayUtil.getAvailableLocales();
            for (Locale local : localesForDefaultCategories) {
                actualCategory = new CategoryImpl();
                actualCategory.setLocale(local.toString());
                actualCategory.setName("Default_" + local);
                CategoryLocalServiceUtil.addCategory(actualCategory);
            }

        } catch (IOException ex) {
            Logger.getLogger(ConfigController.class.getName()).log(Level.SEVERE, null, ex);
        } catch (PortalException ex) {
            Logger.getLogger(ConfigController.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SystemException ex) {
            Logger.getLogger(ConfigController.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void listLayouts() {
        try {
            Layout rootLayout = null;

            long rootLayoutId = LayoutConstants.DEFAULT_PARENT_LAYOUT_ID;

            LayoutLister layoutLister = new LayoutLister();

            String rootNodeName = StringPool.BLANK;
            LayoutView layoutView = layoutLister.getLayoutView(getThemeDisplay().getScopeGroupId(), false,
                    rootNodeName, getThemeDisplay().getLocale());

            List layoutList = layoutView.getList();
            Map<String, String> layoutMap = new HashMap<String, String>();
            layoutMap.put("", AppMessageBundle.getString("choose"));
            for (int i = 0; i < layoutList.size(); i++) {
                // id | parentId | ls | obj id | name | img | depth
                String layoutDesc = (String) layoutList.get(i);

                String[] nodeValues = StringUtil.split(layoutDesc, '|');

                long objId = GetterUtil.getLong(nodeValues[3]);
                String name = nodeValues[4];

                int depth = 0;

                if (i != 0) {
                    depth = GetterUtil.getInteger(nodeValues[6]);
                }

                for (int j = 0; j < depth; j++) {
                    name = "- " + name;
                }
                Layout curRootLayout = null;
                try {
                    curRootLayout = LayoutLocalServiceUtil.getLayout(objId);
                } catch (Exception e) {
                }
                if (curRootLayout != null) {
                    layoutMap.put(String.valueOf(curRootLayout.getPlid()), name);
                }

            }
            layoutsForSelect = new SelectItem[layoutMap.size()];
            int arrayHelper = 0;
            for (String key : layoutMap.keySet()) {
                layoutsForSelect[arrayHelper] = new SelectItem(key, layoutMap.get(key));
                arrayHelper++;
            }
        } catch (PortalException ex) {
            Logger.getLogger(ConfigController.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SystemException ex) {
            Logger.getLogger(ConfigController.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void clearCategorySubscriptions() {
        try {
            List<Category> categoryList = CategoryLocalServiceUtil.getCategories();
            List<SubscriptionCategory> subscriptionList = SubscriptionCategoryLocalServiceUtil
                    .getSubscriptionCategories(0,
                            SubscriptionCategoryLocalServiceUtil.getSubscriptionCategoriesCount());
            //            System.out.println("categoryList" + categoryList);
            //            System.out.println("subscriptionList" + subscriptionList);
            List<Long> catIds = new ArrayList<Long>();
            for (Category cat : categoryList) {
                catIds.add(cat.getCategoryId());
            }
            for (SubscriptionCategory sCat : subscriptionList) {
                if (!catIds.contains(sCat.getCategoryId())) {
                    SubscriptionCategoryLocalServiceUtil.deleteSubscriptionCategory(sCat);
                }
            }
            addSuccessMessage(CLEAR_SUCCESS);
        } catch (SystemException ex) {
            Logger.getLogger(ConfigController.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}