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.portal.kernel.exception.SystemException; import com.liferay.portlet.asset.model.AssetTag; import com.liferay.portlet.asset.service.AssetTagLocalServiceUtil; import com.wcs.newsletter.comparator.AssetTagComparator; import com.wcs.newsletter.dto.NewsletterListElem; import com.wcs.newsletter.dto.NewsletterListElemDataModel; import com.wcs.newsletter.model.Label; import com.wcs.newsletter.model.Newsletter; import com.wcs.newsletter.service.NewsletterLocalServiceUtil; import com.wcs.newsletter.util.LiferayUtil; import com.wcs.tool.StringUtil; import java.util.ArrayList; import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; import javax.faces.bean.ManagedBean; import javax.faces.bean.ViewScoped; @ManagedBean @ViewScoped public class NewsletterListController extends AbstractListController<NewsletterListElem, NewsletterListElemDataModel> { private Map<Long, AssetTag> tagsMap; private boolean isListView; public boolean isIsListView() { return isListView; } public void setIsListView(boolean isListView) { this.isListView = isListView; } @Override protected void init() { initModel(); } public void resetController() { model = null; } public void initModel() { if (model == null) { List<NewsletterListElem> elems = new ArrayList<NewsletterListElem>(); try { List<Newsletter> newsletters = NewsletterLocalServiceUtil.getNewsletters(0, NewsletterLocalServiceUtil.getNewslettersCount()); for (Newsletter newsletter : newsletters) { if (!newsletter.isRoot()) { continue; } long newsletterId = newsletter.getNewsletterId(); String subject = newsletter.getSubject(); String sender = newsletter.getSender(); Date creationDate = null; String tags = getTags(newsletter); List<Newsletter> childNws = NewsletterLocalServiceUtil.findByParentId(newsletter.getNewsletterId()); if (childNws.size() > 0) { creationDate = childNws.get(childNws.size()-1).getCreationTime(); } elems.add(new NewsletterListElem(newsletterId, subject, sender, tags, creationDate)); } } catch (Exception ex) { logger.error(ex); addErrorMessage(ex); } model = new NewsletterListElemDataModel(elems); isListView = true; } } private Map<Long, AssetTag> getTagsMap() { if (tagsMap == null) { tagsMap = new HashMap<Long, AssetTag>(); List<AssetTag> tags = null; try { tags = AssetTagLocalServiceUtil.getAssetTags(0, AssetTagLocalServiceUtil.getAssetTagsCount()); } catch (Exception e) { logger.error(e); } if (tags == null) { tags = new ArrayList<AssetTag>(); } for (AssetTag assetTag : tags) { tagsMap.put(assetTag.getTagId(), assetTag); } } return tagsMap; } private List<AssetTag> getAssetTags(Newsletter newsletter) throws SystemException { List<AssetTag> assetTags = new ArrayList<AssetTag>(); if (newsletter == null) { return assetTags; } List<Label> labels = newsletter.getLabels(); for (Label label : labels) { Long tagId = label.getTagId(); AssetTag assetTag = getTagsMap().get(tagId); if (assetTag != null) { assetTags.add(assetTag); } } Locale locale = LiferayUtil.getThemeDisplay().getLocale(); Collections.sort(assetTags, new AssetTagComparator(locale)); return assetTags; } private String getTags(Newsletter newsletter) throws SystemException { List<String> tagNames = new ArrayList<String>(); List<AssetTag> assetTags = getAssetTags(newsletter); for (AssetTag assetTag : assetTags) { tagNames.add(assetTag.getName()); } return StringUtil.toCSV(tagNames); } @Override public String edit(NewsletterListElem elem) { return getNavigationController().navigateToNewsletterEdit(elem.getNewsletterId()); } @Override public String create() { return getNavigationController().navigateToNewsletterCreate(); } @Override public void delete(NewsletterListElem elem) throws Exception { Long id = elem.getNewsletterId(); NewsletterLocalServiceUtil.deleteNewsletter(id); } }