UserCartView.java 5.74 KB
package fi.codecrew.moya.web.cdiview.user;

import java.io.ByteArrayInputStream;
import java.nio.charset.Charset;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

import javax.enterprise.context.ConversationScoped;
import javax.inject.Inject;
import javax.inject.Named;

import org.primefaces.model.DefaultStreamedContent;
import org.primefaces.model.StreamedContent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import fi.codecrew.moya.model.EventUser;
import fi.codecrew.moya.model.GroupMembership;
import fi.codecrew.moya.model.LanEvent;
import fi.codecrew.moya.web.cdiview.GenericCDIView;

@Named
@ConversationScoped
public class UserCartView extends GenericCDIView {

	private static final String CSV_SEPARATOR = ";";

	private static final long serialVersionUID = 5294631925744474031L;

	private static final Charset UTF8 = Charset.forName("UTF-8");

	private Integer current = 0;

	@Inject
	private UserView userview;
	@Inject
	private CreditTransferView credTransfer;

	@Inject
	private UserOverviewView userOverviewView;

	private List<EventUser> usercart;

	private SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd");

	public StreamedContent getUserExport()
	{
		StringBuilder sb = new StringBuilder();
		DefaultStreamedContent ret = null;
		if (usercart.size() > 0) {
			LanEvent event = usercart.get(0).getEvent();
			for (EventUser uc : usercart) {
				sb.append(uc.getUser().getId()).append(";");
			}

			ret = new DefaultStreamedContent(new ByteArrayInputStream(sb.toString().getBytes(UTF8)));
			ret.setContentType("text/csv");
			ret.setName(event.getName() + "userexport.dat");
		}
		return ret;
	}

	public StreamedContent getDownloadCsv() {
		StringBuilder sb = new StringBuilder();

		sb.append("Firstname").append(CSV_SEPARATOR);
		sb.append("Lastname").append(CSV_SEPARATOR);
		sb.append("Nick").append(CSV_SEPARATOR);
		sb.append("Login").append(CSV_SEPARATOR);
		sb.append("Birthday").append(CSV_SEPARATOR);
		sb.append("Age").append(CSV_SEPARATOR);
		sb.append("Phone").append(CSV_SEPARATOR);
		sb.append("Email").append(CSV_SEPARATOR);
		sb.append("Street").append(CSV_SEPARATOR);
		sb.append("Zip").append(CSV_SEPARATOR);
		sb.append("City").append(CSV_SEPARATOR);
		sb.append("Places").append(CSV_SEPARATOR);

		sb.append("\n");
		for (EventUser uc : usercart)
		{
			sb.append(uc.getFirstnames()).append(CSV_SEPARATOR);
			sb.append(uc.getLastname()).append(CSV_SEPARATOR);
			sb.append(uc.getNick()).append(CSV_SEPARATOR);
			sb.append(uc.getLogin()).append(CSV_SEPARATOR);
			sb.append(uc.getBirthday() != null ? dateformat.format(uc.getBirthday()) : "").append(CSV_SEPARATOR);
			sb.append(uc.getUser().getAge()).append(CSV_SEPARATOR);
			sb.append(uc.getPhone()).append(CSV_SEPARATOR);
			sb.append(uc.getEmail()).append(CSV_SEPARATOR);
			sb.append(uc.getAddress()).append(CSV_SEPARATOR);
			sb.append(uc.getZip()).append(CSV_SEPARATOR);
			sb.append(uc.getUser().getTown()).append(CSV_SEPARATOR);
			for (GroupMembership gm : uc.getGroupMemberships())
			{
				if (gm.getPlaceReservation() != null)
				{
					sb.append(gm.getPlaceReservation().getName()).append(", ");
				}
			}
			sb.append(CSV_SEPARATOR);

			sb.append("\n");
		}
		DefaultStreamedContent ret = new DefaultStreamedContent(new ByteArrayInputStream(sb.toString().getBytes(UTF8)));
		ret.setContentType("text/csv");
		return ret;
	}

	private static final Logger logger = LoggerFactory.getLogger(UserCartView.class);

	public String next() {
		++current;
		updateCurrent();
		return null;
	}

	public String transferCredits() {
		credTransfer.init(usercart);
		return "/useradmin/transferCredits";
	}

	public String prev() {
		--current;
		updateCurrent();
		return null;
	}

	public String getUserCartSize() {
		String ret = "0";
		if (usercart != null) {
			ret = Integer.toString(usercart.size());
		}
		return ret;
	}

	public String removeCurrent() {
		EventUser removed = usercart.remove(current.intValue());
		logger.debug("Removed idx {} from usercart {}", current, removed);

		if (!usercart.isEmpty()) {
			updateCurrent();
		}
		return null;
	}

	public String traverse() {
		if (usercart != null) {
			current = 0;
			updateCurrent();
			return "/useradmin/userCartShow";
		}
		else
			return "/useradmin/list";
	}

	public String showOverview() {
		userOverviewView.initView();
		return "/useradmin/overview";
	}

	public String saveUser() {
		userview.saveUser();
		return null;
	}

	private void updateCurrent() {
		logger.debug("Updating current user to {}", current);
		if (current >= usercart.size()) {
			current = usercart.size() - 1;
		} else if (current < 0) {
			current = 0;
		}
		EventUser u = usercart.get(current);
		logger.debug("usercart current {}, got {}", current, u);
		if (u != null) {
			userview.setUserid(u.getUser().getId());
			userview.setUser(null);
			userview.setPrintedCard(null);
			userview.initView();
		}
	}

	public void addUsers(List<EventUser> results) {
		if (usercart == null) {
			usercart = new ArrayList<EventUser>();
		}
		usercart.removeAll(results);
		usercart.addAll(results);

	}

	public String clearCart() {
		if (usercart != null)
			usercart.clear();
		return null;
	}

	public boolean isEmpty() {
		return usercart == null || usercart.isEmpty();
	}

	public UserView getUserview() {
		return userview;
	}

	public void setUserview(UserView userview) {
		this.userview = userview;
	}

	public List<EventUser> getUsercart() {
		return usercart;
	}

	public void setUsercart(List<EventUser> usercart) {
		this.usercart = usercart;
	}

	public Integer getCurrent() {
		return current;
	}

	public void setCurrent(Integer current) {
		this.current = current;
	}

	public CreditTransferView getCredTransfer() {
		return credTransfer;
	}

	public void setCredTransfer(CreditTransferView credTransfer) {
		this.credTransfer = credTransfer;
	}

}