/**
* Copyright (c) 2009-2014 Câmara dos Deputados. Todos os direitos reservados.
*
* e-Democracia é um software livre; você pode redistribuí-lo e/ou modificá-lo dentro
* dos termos da Licença Pública Geral Menor GNU como publicada pela Fundação do
* Software Livre (FSF); na versão 2.1 da Licença, ou (na sua opinião) qualquer versão.
*
* Este programa é distribuído na esperança de que possa ser útil, mas SEM NENHUMA GARANTIA;
* sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou APLICAÇÃO EM PARTICULAR.
* Veja a Licença Pública Geral Menor GNU para maiores detalhes.
*/
package br.gov.camara.edemocracia.portlets.comunidades.portlet;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.portlet.PortletException;
import javax.portlet.PortletRequest;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
import br.gov.camara.edemocracia.portlets.comunidades.ElementoComunidade;
import com.liferay.portal.kernel.dao.orm.DynamicQuery;
import com.liferay.portal.kernel.dao.orm.DynamicQueryFactoryUtil;
import com.liferay.portal.kernel.dao.orm.OrderFactoryUtil;
import com.liferay.portal.kernel.dao.orm.RestrictionsFactoryUtil;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.util.PortalClassLoaderUtil;
import com.liferay.portal.kernel.util.WebKeys;
import com.liferay.portal.model.Group;
import com.liferay.portal.model.GroupConstants;
import com.liferay.portal.model.Layout;
import com.liferay.portal.service.GroupLocalServiceUtil;
import com.liferay.portal.service.LayoutLocalServiceUtil;
import com.liferay.portal.theme.ThemeDisplay;
import com.liferay.portal.util.PortalUtil;
import com.liferay.util.bridges.mvc.MVCPortlet;
public class TodasComunidades extends MVCPortlet {
private static Log _log = LogFactoryUtil.getLog(TodasComunidades.class);
@Override
public void doView(RenderRequest renderRequest, RenderResponse renderResponse) throws IOException, PortletException {
ThemeDisplay td = (ThemeDisplay) renderRequest.getAttribute(WebKeys.THEME_DISPLAY);
List<Group> comunidadesAtivas = getComunidadesAtivas(renderRequest, td);
List<ElementoComunidade> page = getPage(comunidadesAtivas, td);
renderRequest.setAttribute("comunidadesAtivas", page);
renderRequest.setAttribute("pageSize", comunidadesAtivas.size());
renderRequest.setAttribute("currentPage", 1);
renderRequest.setAttribute("pageTotal", 1);
List<Group> comunidadesEncerradas = getComunidadesEncerradas(renderRequest, td);
List<ElementoComunidade> pageEncerradas = getPage(comunidadesEncerradas, td);
renderRequest.setAttribute("comunidadesEncerradas", pageEncerradas);
renderRequest.setAttribute("pageSize", comunidadesEncerradas.size());
renderRequest.setAttribute("currentPage", 1);
renderRequest.setAttribute("pageTotal", 1);
super.doView(renderRequest, renderResponse);
}
private ElementoComunidade makeElementoComunidade(Group grp, ThemeDisplay td) throws SystemException, PortalException {
long plid;
long grpId = grp.getGroupId();
if (grp.getPrivateLayoutsPageCount() > 0)
plid = LayoutLocalServiceUtil.getDefaultPlid(grpId, true);
else
plid = LayoutLocalServiceUtil.getDefaultPlid(grpId, false);
Layout layout = LayoutLocalServiceUtil.getLayout(plid);
String grpUrl = PortalUtil.getLayoutURL(layout, td, true);
String grpName = grp.getName();
String grpImgUrl = CommunityIconFinder.findUrl(td, grpId);
return new ElementoComunidade(grpUrl, grpName, grpImgUrl);
}
private List<ElementoComunidade> getPage(List<Group> page, ThemeDisplay td) {
ArrayList<ElementoComunidade> ret = new ArrayList<ElementoComunidade>();
for (Group group : page) {
try {
ret.add(makeElementoComunidade(group, td));
} catch (PortalException e) {
// TODO LOG
e.printStackTrace();
} catch (SystemException e) {
// TODO LOG
e.printStackTrace();
}
}
return ret;
}
private List<Group> getComunidadesAtivas(PortletRequest renderRequest, ThemeDisplay td) {
List<Group> comunidades = Collections.<Group> emptyList();
try {
DynamicQuery query = DynamicQueryFactoryUtil.forClass(Group.class, PortalClassLoaderUtil.getClassLoader());
query.add(RestrictionsFactoryUtil.eq("companyId", td.getCompanyId()));
query.add(RestrictionsFactoryUtil.eq("active", true));
query.add(RestrictionsFactoryUtil.in("type", new Object[] { GroupConstants.TYPE_SITE_OPEN, GroupConstants.TYPE_SITE_RESTRICTED }));
query.add(RestrictionsFactoryUtil.not(RestrictionsFactoryUtil.in("name", new Object[] { GroupConstants.GUEST, GroupConstants.CONTROL_PANEL, "" })));
// query.add(RestrictionsFactoryUtil.ne("groupId",
// td.getScopeGroupId()));
query.add(RestrictionsFactoryUtil.eq("classNameId", PortalUtil.getClassNameId(Group.class)));
query.addOrder(OrderFactoryUtil.desc("name"));
@SuppressWarnings("unchecked")
List<Group> groups = GroupLocalServiceUtil.dynamicQuery(query);
comunidades = new ArrayList<Group>(groups.size());
for (Group grp : groups) {
if (grp.getPublicLayoutsPageCount() != 0) {
Boolean finished = (Boolean) grp.getExpandoBridge().getAttribute("Encerrada");
if (finished == null || !finished)
comunidades.add(grp);
}
}
} catch (SystemException e) {
_log.error(e);
}
return comunidades;
}
private List<Group> getComunidadesEncerradas(PortletRequest renderRequest, ThemeDisplay td) {
List<Group> comunidades = Collections.<Group> emptyList();
try {
DynamicQuery query = DynamicQueryFactoryUtil.forClass(Group.class, PortalClassLoaderUtil.getClassLoader());
query.add(RestrictionsFactoryUtil.eq("companyId", td.getCompanyId()));
query.add(RestrictionsFactoryUtil.eq("active", true));
query.add(RestrictionsFactoryUtil.in("type", new Object[] { GroupConstants.TYPE_SITE_OPEN, GroupConstants.TYPE_SITE_RESTRICTED }));
query.add(RestrictionsFactoryUtil.not(RestrictionsFactoryUtil.in("name", new Object[] { GroupConstants.GUEST, GroupConstants.CONTROL_PANEL, "" })));
// query.add(RestrictionsFactoryUtil.ne("groupId",
// td.getScopeGroupId()));
query.add(RestrictionsFactoryUtil.eq("classNameId", PortalUtil.getClassNameId(Group.class)));
query.addOrder(OrderFactoryUtil.desc("name"));
@SuppressWarnings("unchecked")
List<Group> groups = GroupLocalServiceUtil.dynamicQuery(query);
comunidades = new ArrayList<Group>(groups.size());
for (Group grp : groups) {
if (grp.getPublicLayoutsPageCount() != 0) {
Boolean finished = (Boolean) grp.getExpandoBridge().getAttribute("Encerrada");
if (finished != null && finished)
comunidades.add(grp);
}
}
} catch (SystemException e) {
_log.error(e);
}
return comunidades;
}
}