/*
 * $Id: ShowRecentNewsAction.java,v 1.17 2007/08/08 12:14:47 marbobo Exp $
 *
 * Copyright (c) Siemens AG 2008 
 *           (c) Universität Paderborn 2008 
 * Licensed under EUPL 1.1. 
 *
 * $Log: ShowRecentNewsAction.java,v $
 * Revision 1.17  2007/08/08 12:14:47  marbobo
 * + License-Funktionalität komplett umgeschrieben
 * + Bugfix bzgl. Beschreibungsfelder von Entitäten
 * + Bugfix mailing
 *
 * Revision 1.16  2006/10/04 03:15:07  marbobo
 * + Vollständige Unterstützung für Templates implementiert
 * + Alles von Virtoweb auf ProCoBa umgestellt
 *
 * Revision 1.15  2006/04/29 18:39:49  marbobo
 * + Refactoriengs und eine Ausgaben vereinheitlicht
 *
 * Revision 1.14  2006/02/27 16:15:49  marbobo
 * + Systemsichten hinzugefügt
 * + SysLinks angepasst
 * + Benutzer können falls gewünscht Dokumentqueries anlegen
 *
 * Revision 1.13  2005/12/16 11:49:27  lawern
 * *** empty log message ***
 *
 * Revision 1.12  2005/10/03 17:34:21  marbobo
 * + Nur zur Projektsicht leiten wenn Projektmanagment aktiv ist
 *
 * Revision 1.11  2005/09/01 08:32:03  korowa
 * Es werden mehrere URL angeboten, welche direkten Zugriff auf Dateien
 *  und automatisches Anmelden als Gast erlauben.
 *
 * Revision 1.10  2005/03/16 15:48:47  jonyp
 * getLastnameLabel for user tracking infos
 *
 * Revision 1.9  2005/03/16 15:03:58  jonyp
 * *** empty log message ***
 *
 * Revision 1.8  2005/02/14 14:01:50  bigmac
 * Applikationsweites CSS konfigurierbar gemacht + Refactorings
 *
 * Revision 1.7  2004/10/28 19:44:01  marbobo
 * + Anpassung wegen Loginseite
 *
 * Revision 1.6  2004/09/05 19:18:16  marbobo
 * + Redirectanpassung ( Loginseite )
 *
 * Revision 1.5  2004/08/05 11:38:32  marbobo
 * + Richtige Sprache für den eingeloggten Benutzer setzen
 *
 * Revision 1.4  2004/07/26 13:31:41  marbobo
 * + Fehlermeldung korrigiert
 *
 * Revision 1.3  2004/07/26 01:31:04  marbobo
 * + Überprüfung des Systemparameters angepasst
 *
 * Revision 1.2  2004/07/22 22:11:40  marbobo
 * + Bugfix
 *
 * Revision 1.1  2004/07/22 13:18:22  marbobo
 * + Initiale Version
 *
 */
package vkc.news.action;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import vkc.db.entities.VKCUser;
import vkc.db.entities.VKCCategory;
import vkc.db.serializer.VKCSysParameterSerializer;
import vkc.db.serializer.VKCUserSerializer;
import vkc.exception.DBException;
import vkc.misc.VKCLogManager;
import vkc.news.form.ShowRecentNewsForm;
import vkc.view.PageId;
import vkc.view.WebShare;
import vkc.view.bean.UserTrackingInfo;
import vkc.view.form.SysLinkForm;

import java.sql.Timestamp;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * Klasse zum Darstellen der aktuellen News
 *
 * @author marbobo
 */
public final class ShowRecentNewsAction extends Action {
    private ActionForward DEFAULT_FORWARD = new ActionForward("/templates/${template.name}/news/showRecentNews.jsp");

    private ActionForward INFO_FORWARD = new ActionForward("/templates/${template.name}/common/InfoPage.jsp");

    public ActionForward execute(ActionMapping mapping, 
            					 ActionForm f,
            					 HttpServletRequest request, 
            					 HttpServletResponse response)
    throws Exception {
		if (VKCSysParameterSerializer.retrieveIntValue("NEWS", "EnableNews", 0) == 0) {
			request.setAttribute(WebShare.INFO_KEY, "vkc.info.action_not_allowed");
            
			return INFO_FORWARD;
		}

		ShowRecentNewsForm form = (ShowRecentNewsForm) f;

        VKCUser user = form.getUser();
        
        if (user == null) {
    		return new ActionForward(WebShare.getLoginPage(), true);
        }

        if (request.getParameter("action.redirect") != null)  {
			return handleRedirectAction(form, request);
		}
        
        // Sprache wechseln
        setLocale(request, user.getLanguage().getLocale());

        return DEFAULT_FORWARD;
        
	}

    private ActionForward handleRedirectAction(ShowRecentNewsForm form, HttpServletRequest request) throws DBException {
        VKCUser user = form.getUser();
        
        user.setMostRecentNews(new Timestamp(System.currentTimeMillis()));
        VKCUserSerializer.saveUser(user);
        
        // Validate the request parameters specified by the user
        HttpSession session = request.getSession();

		// Session-Timeout setzen
        if (user.getSessionTimeout() != null && user.getSessionTimeout().intValue() != 0) {
            session.setMaxInactiveInterval(user.getSessionTimeout().intValue() * 60);
        }

        // Eingeloggten User in der Session speichern
        vkc.util.ServletUtils.removeSessionAttributes(session);
        Timestamp loginTime = new Timestamp(System.currentTimeMillis());
        user.setMostRecentLogin(loginTime);
        session.setAttribute(WebShare.USER_KEY, user);
        session.setAttribute(WebShare.LOCALE_KEY, user.getLanguage().getLocale());

        // Sprache wechseln
        setLocale(request, user.getLanguage().getLocale());

        String log = "User '" + user.getUser();
        log += "' logged in (userId = " +  user.getUserId();
		log += ", session timeout = " + (session.getMaxInactiveInterval() / 60) + "min)";

        // track users login time
        VKCUserSerializer.saveMostRecentLogin(user.getUserId());

        VKCLogManager.infoLog(this, log);

        UserTrackingInfo bean = new UserTrackingInfo(user.getUserId(),
                									 user.getLastnameLabel(),
                									 request.getSession(), 
                									 request.getRemoteAddr(), 
                									 new Date(loginTime.getTime()));

        session.setAttribute(WebShare.USER_TRACKING_KEY, bean);
        session.setAttribute(WebShare.SYSTEMVIEWTYPEID_KEY, user.getSystemViewTypeId());

        //externer Linkaufruf
        if (form.isSysLink()) {
            return new ActionForward(form.getSysLink());
        }

        //Procoba-Start
        if (PageId.FUNCTIONAL_VIEW.equals(user.getSystemViewTypeId()) && VKCSysParameterSerializer.isProjectManagementEnabled()) {
			return new ActionForward(SysLinkForm.getProcobaFunctionalSysLink());
        }

		if (PageId.PROJECT_VIEW.equals(user.getSystemViewTypeId()) && VKCSysParameterSerializer.isProjectManagementEnabled()) {
			return new ActionForward(SysLinkForm.getProcobaProjectSysLink());
		} 

		//by default: startCategory is root
		Integer startCategoryId = new Integer(VKCCategory.ROOT_CATEGORY_ID); 
	    
		// if user has another take it...
		if (user.getHomeCategoryId() != null && user.getHomeCategoryId().intValue() > VKCCategory.ROOT_CATEGORY_ID) {
			startCategoryId = user.getHomeCategoryId();
		}
	
		return new ActionForward(SysLinkForm.getCategorySysLink(startCategoryId, SysLinkForm.LOGINTYPE_NORMAL_USER), true);
    }
}