/**
*
*/
package br.gov.camara.edemocracia.portlets.inscricaoforum;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.markup.repeater.data.DataView;
import org.apache.wicket.markup.repeater.data.IDataProvider;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.protocol.http.WebRequestCycle;
import org.apache.wicket.protocol.http.servlet.ServletWebRequest;
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.PropertyFactoryUtil;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.util.PortalClassLoaderUtil;
import com.liferay.portal.kernel.util.WebKeys;
import com.liferay.portal.kernel.workflow.WorkflowConstants;
import com.liferay.portal.model.Subscription;
import com.liferay.portal.model.User;
import com.liferay.portal.service.ClassNameLocalServiceUtil;
import com.liferay.portal.service.SubscriptionLocalServiceUtil;
import com.liferay.portal.service.UserLocalServiceUtil;
import com.liferay.portal.theme.ThemeDisplay;
import com.liferay.portal.util.comparator.UserLoginDateComparator;
import com.liferay.portlet.messageboards.model.MBCategory;
import com.liferay.portlet.messageboards.model.MBCategoryConstants;
/**
* @author P_7339
*
*/
public class HomePage extends WebPage {
private ThemeDisplay getThemeDislay() {
HttpServletRequest req = ((ServletWebRequest) WebRequestCycle.get()
.getRequest()).getHttpServletRequest();
return (ThemeDisplay) req.getAttribute(WebKeys.THEME_DISPLAY);
}
public HomePage() {
initUsuariosList();
initInscreverLink();
}
/**
* Inscreve os usuarios na lista do forum
*/
private void initInscreverLink() {
add(new Link<Void>("inscreverTodosLink") {
private static final long serialVersionUID = 1L;
@Override
public void onClick() {
// Lista os usuários desta comunidade
ThemeDisplay td = getThemeDislay();
LinkedHashMap<String, Object> userParams = new LinkedHashMap<String, Object>();
userParams.put("usersGroups", new Long(td.getScopeGroupId()));
try {
int total = UserLocalServiceUtil.searchCount(
td.getCompanyId(), null, WorkflowConstants.STATUS_APPROVED, userParams);
List<User> results = UserLocalServiceUtil.search(
td.getCompanyId(), null, WorkflowConstants.STATUS_APPROVED, userParams,
0, total, new UserLoginDateComparator());
// Acrescenta no forum
for (User user : results) {
if (!SubscriptionLocalServiceUtil.isSubscribed(
user.getCompanyId(), user.getUserId(),
MBCategory.class.getName(),
td.getScopeGroupId())) {
SubscriptionLocalServiceUtil.addSubscription(
user.getUserId(),
td.getScopeGroupId(),
MBCategory.class.getName(),
td.getScopeGroupId());
}
}
} catch (SystemException e) {
throw new RuntimeException(e);
} catch (PortalException e) {
throw new RuntimeException(e);
}
}
});
}
/**
* Obtém a lista de membros do forum
*/
private void initUsuariosList() {
IDataProvider<User> idp = new IDataProvider<User>() {
/**
*
*/
private static final long serialVersionUID = 1L;
public void detach() {
}
private DynamicQuery buildQuery() {
long classNameId = ClassNameLocalServiceUtil
.getClassNameId(MBCategory.class);
DynamicQuery query = DynamicQueryFactoryUtil.forClass(
Subscription.class,
PortalClassLoaderUtil.getClassLoader());
query.add(PropertyFactoryUtil.forName("classNameId").eq(
classNameId));
query.add(PropertyFactoryUtil.forName("classPK").eq(
getThemeDislay().getScopeGroupId()));
return query;
}
public Iterator<User> iterator(int first, int count) {
DynamicQuery query = buildQuery();
query.addOrder(OrderFactoryUtil.asc("userName"));
List<User> usuarios;
try {
@SuppressWarnings("unchecked")
List<Subscription> assinaturas = SubscriptionLocalServiceUtil
.dynamicQuery(buildQuery(), first, count + first);
usuarios = new ArrayList<User>();
for (Subscription assinatura : assinaturas) {
User usuario = UserLocalServiceUtil.getUser(assinatura
.getUserId());
if (usuario != null && !usuario.isDefaultUser())
usuarios.add(usuario);
}
} catch (SystemException e) {
throw new RuntimeException(e);
} catch (PortalException e) {
throw new RuntimeException(e);
}
return usuarios.iterator();
}
public int size() {
try {
return (int) SubscriptionLocalServiceUtil
.dynamicQueryCount(buildQuery());
} catch (SystemException e) {
throw new RuntimeException(e);
}
}
public IModel<User> model(User object) {
final long userId = object.getUserId();
return new LoadableDetachableModel<User>(object) {
private static final long serialVersionUID = 1L;
@Override
protected User load() {
try {
return UserLocalServiceUtil.getUser(userId);
} catch (PortalException e) {
throw new RuntimeException(e);
} catch (SystemException e) {
throw new RuntimeException(e);
}
}
};
}
};
add(new DataView<User>("usuariosList", idp) {
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
protected void populateItem(Item<User> item) {
Label lbl;
String userName = item.getModelObject().getFirstName().trim();
if (userName.length() > 0)
userName += " ";
userName += item.getModelObject().getMiddleName().trim();
if (userName.length() > 0)
userName += " ";
userName += item.getModelObject().getLastName();
lbl = new Label("contact.userName", userName);
item.add(lbl);
}
});
}
}