LicenseBean.java 3.87 KB
package fi.codecrew.moya.beans;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Stateless;

import fi.codecrew.moya.facade.LicenseCodeFacade;
import fi.codecrew.moya.facade.LicenseTargetFacade;
import fi.codecrew.moya.model.EventMap;
import fi.codecrew.moya.model.EventUser;
import fi.codecrew.moya.model.LicenseTarget;
import fi.codecrew.moya.model.LicenseCode;
import fi.codecrew.moya.model.GroupMembership;
import fi.codecrew.moya.model.LanEvent;
import fi.codecrew.moya.model.Place;

/**
 * Session Bean implementation class GameBean
 */
@Stateless
public class LicenseBean implements LicenseBeanLocal {

	@EJB
	LicenseCodeFacade gameCodeFacade;

	@EJB
	LicenseTargetFacade gameFacade;
	
	
	@EJB
	EventBeanLocal eventBean;
	
	@EJB
	PlaceBeanLocal placeBean;

	
	public List<LicenseCode> findUserCodes(EventUser user) {
		ArrayList<LicenseCode> returnCodes = new ArrayList<LicenseCode>();
		
		for(LicenseCode userGameCode : user.getUser().getGameCodes()) {
			returnCodes.add(userGameCode);
		}
		
		return returnCodes;
	}

	/**
	 * Check, and if needed generate code for gamecode.
	 * 
	 * @param code
	 */
	private boolean generateCode(LicenseCode code) {

		if (code.getCode() == null || code.getCode().trim().equals("")) {
			if (code.getGame().getCodeUrl() == null || code.getGame().getCodeUrl().trim().equals(""))
				return false;

			try {
				URL url = new URL(code.getGame().getCodeUrl());

				URLConnection uc;

				uc = url.openConnection();

				BufferedReader in = new BufferedReader(new InputStreamReader(uc.getInputStream()));
				String codeString = "";
				String tmpLine;

				while ((tmpLine = in.readLine()) != null) {
					if (!codeString.equals("")) {
						codeString += "\n";
					}
					codeString += tmpLine;
				}
				
				if(codeString.trim().equals("0") || codeString.trim().equals("")) {
					return false;
				}

				code.setCode(codeString);

				code = gameCodeFacade.merge(code);
				
				return true;

			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return false;
	}

	public boolean accessCode(LicenseCode code, EventUser user) {
		
		if(code.getUser() != null)
			return false;
		
		if(!generateCode(code)) {
			return false;
		}
		
		if (!code.isAccessed()) {
			code.setAccessed(Calendar.getInstance());
			code.setUser(user.getUser());
			code = gameCodeFacade.merge(code);
			user.getUser().getGameCodes().add(code);
		}
		
		return true;
	}

	public List<LicenseTarget> findAll(LanEvent event) {
		return event.getGames();
	}

	public void saveOrCreateLicense(LicenseTarget game) {
		if (game.getId() == null) {
			game.setEvent(eventBean.getCurrentEvent());
			eventBean.getCurrentEvent().getGames().add(game);
			gameFacade.create(game);
			game = gameFacade.merge(game);
		}
		else {
			game = gameFacade.merge(game);
		}
	}

	/**
	 * Default constructor.
	 */
	public LicenseBean() {
		// TODO Auto-generated constructor stub
	}

	@Override
	public List<LicenseTarget> findUserGames(EventUser user) {
		
		ArrayList<LicenseTarget> returnLicenses = new ArrayList<LicenseTarget>();  
		
		if(user.getCurrentPlaces() != null) {
			for(GroupMembership memberShip : user.getGroupMemberships()) { 
				if(memberShip.getPlaceReservation() == null)
					continue;
				
				for(LicenseTarget license : memberShip.getPlaceReservation().getProduct().getLicenseTargets()) {
					if(license.isActive())
						returnLicenses.add(license);
				}
			}
		}
		
		return returnLicenses;
	}

	@Override
	public List<LicenseTarget> findUnopenedUserGames(EventUser user) {

		List<LicenseTarget> returnLicenses = findUserGames(user);
		
		
		for(LicenseCode code : findUserCodes(user)) {
			returnLicenses.remove(code);
		}
		
		return returnLicenses;
	}

}