Package com.centraview.home

Source Code of com.centraview.home.HomeHandler

/*
* $RCSfile$    $Revision$  $Date$ - $Author$
*
* The contents of this file are subject to the Open Software License
* Version 2.1 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* http://www.centraview.com/opensource/license.html
*
* Software distributed under the License is distributed on an "AS IS"
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
* License for the specific language governing rights and limitations
* under the License.
*
* The Original Code is: CentraView Open Source.
*
* The developer of the Original Code is CentraView.  Portions of the
* Original Code created by CentraView are Copyright (c) 2004 CentraView,
* LLC; All Rights Reserved.  The terms "CentraView" and the CentraView
* logos are trademarks and service marks of CentraView, LLC.
*/

package com.centraview.home;

import java.text.DateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Locale;
import java.util.Set;
import java.util.TimeZone;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.log4j.Logger;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.util.MessageResources;

import com.centraview.activity.ConstantKeys;
import com.centraview.activity.activityfacade.ActivityFacade;
import com.centraview.calendar.CalendarActivityObject;
import com.centraview.calendar.CalendarList;
import com.centraview.calendar.CalendarListElement;
import com.centraview.calendar.CalendarMember;
import com.centraview.calendar.CalendarUtil;
import com.centraview.common.CVUtility;
import com.centraview.common.GlobalMasterLists;
import com.centraview.common.UserObject;
import com.centraview.mail.Mail;
import com.centraview.mail.MailHome;
import com.centraview.projects.helper.TaskVO;
import com.centraview.sale.opportunity.OpportunityVO;
import com.centraview.sale.salefacade.SaleFacade;
import com.centraview.settings.Settings;
import com.centraview.settings.SettingsInterface;
import com.centraview.settings.SiteInfo;

public class HomeHandler extends org.apache.struts.action.Action {
  // TODO centralize the magic words for the image icon names.
  private static Logger logger = Logger.getLogger(HomeHandler.class);

  /**
   * Gets all the stuff together for the portlets on the home page, and sticks
   * them in requestScope variables for display. email portlet
   * (emailButtonModifier and emailFolders) today's calendar
   * (calendarDisplayList: an arraylist of HomeDisplayItems)
   * @see org.apache.struts.action.Action#execute(org.apache.struts.action.ActionMapping,
   *      org.apache.struts.action.ActionForm,
   *      javax.servlet.http.HttpServletRequest,
   *      javax.servlet.http.HttpServletResponse)
   */
  public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
      HttpServletResponse response) throws RuntimeException, Exception
  {
    String host = CVUtility.getHostName(super.getServlet().getServletContext());
    SettingsInterface settings = Settings.getInstance();
    SiteInfo siteInfo = settings.getSiteInfo(host);
    final String dataSource = siteInfo.getDataSource();

    // Set up search bar
    request.setAttribute("showAdvancedSearch", new Boolean(false));
    request.setAttribute("showCustomViews", new Boolean(false));
    request.setAttribute("showComposeButton", new Boolean(false));
    request.setAttribute("showNewButton", new Boolean(false));
    request.setAttribute("showPrintButton", new Boolean(false));
    // Description must allow i18n
    Locale locale = request.getLocale();
    MessageResources messages = MessageResources.getMessageResources("ApplicationResources");
    String searchButtonDescription = messages.getMessage(locale,
        "label.home.searchbutton.description");
    request.setAttribute("searchButtonDescription", searchButtonDescription);
    request.setAttribute("hideListDropdown", new Boolean(true));

    // Set the moduleId to Entity so search knows where we want to look.
    GlobalMasterLists globalMasterLists = GlobalMasterLists.getGlobalMasterLists(dataSource);
    HashMap moduleList = new HashMap();
    if (globalMasterLists.get("moduleList") != null) {
      moduleList = (HashMap)globalMasterLists.get("moduleList");
    }
    String moduleID = (String)moduleList.get("Entity");
    request.setAttribute("moduleId", moduleID);

    // Now actually get all the stuff that used to be retrieved
    // through the portlet JSPs, and let the JSPs just worry about display

    // First setup for all the work
    HttpSession session = request.getSession(true);
    UserObject user = (UserObject)session.getAttribute("userobject");
    int individualId = user.getIndividualID();
    TimeZone tz = TimeZone.getTimeZone((user.getUserPref()).getTimeZone());

    //UserPrefererences preferences = user.getUserPref();

    GregorianCalendar startTime = new GregorianCalendar(tz, locale);
    startTime.setTime(Calendar.getInstance().getTime());
    startTime.set(startTime.get(Calendar.YEAR), startTime.get(Calendar.MONTH), startTime
        .get(Calendar.DATE), 0, 0);

    GregorianCalendar endTime = new GregorianCalendar(tz, locale);
    endTime.setTime(Calendar.getInstance().getTime());
    endTime.set(startTime.get(Calendar.YEAR), startTime.get(Calendar.MONTH), startTime
        .get(Calendar.DATE), 0, 0);
    endTime.add(Calendar.DATE, 1);
    // The calendar map has a bunch of stuff in it, it will be used for a few of
    // the portlets
    // set up below.
    HashMap calendarMap = CalendarUtil.getCalendarCollection(startTime, endTime, tz, individualId,
        60, "", dataSource);
    // use default formatters for locale
    DateFormat timeFormat = DateFormat.getTimeInstance(DateFormat.SHORT, locale);
    DateFormat dateTimeFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, locale);

    // email portlet
    MailHome home = (MailHome)CVUtility.getHomeObject("com.centraview.mail.MailHome", "Mail");
    Mail remote = home.create();
    remote.setDataSource(dataSource);
    ArrayList emailFolders = remote.getHomeFolderList(individualId);
    // this modifier gets stuck right in the html of the "Compose" button
    String emailButtonModifier = "";
    if ((emailFolders == null) || (emailFolders.size() < 1)) {
      emailButtonModifier = "disabled=\"true\"";
    }
    request.setAttribute("emailFolders", emailFolders);
    request.setAttribute("emailButtonModifier", emailButtonModifier);

    // calendar portlet

    // for every activity on the calendar list, create a display object, and
    // append it to the list. The list will be iterated and displayed on the JSP
    ArrayList calendarDisplayList = new ArrayList();
    CalendarList calendarList = (CalendarList)calendarMap.get("calendarlist");
    Set listkey = calendarList.keySet();
    Iterator it = listkey.iterator();
    while (it.hasNext()) {
      Integer key = (Integer)it.next();
      CalendarListElement ele = (CalendarListElement)calendarList.get(key);
      Set elekey = ele.keySet();
      Iterator eleit = elekey.iterator();
      while (eleit.hasNext()) {
        CalendarMember calmember = (CalendarMember)ele.get(eleit.next());
        CalendarActivityObject activity = calmember.getActivityobject();
        Calendar start = activity.getStartTime();
        start.setTimeZone(tz);
        Calendar end = activity.getEndTime();
        end.setTimeZone(tz);
        String timeRange = dateTimeFormat.format(start.getTime()) + " - "
            + dateTimeFormat.format(end.getTime());
        String activityStartTime = timeFormat.format(start.getTime());
        // type is that stored in the activitytype database table.
        String activityType = activity.getActivityType();
        String icon = this.determineActivityIcon(activityType);
        activityType = this.convertActivityType(activityType);

        ArrayList activitiesAttendeesList = activity.getActivityAttendee();
        if ("PRIVATE".equals(activity.getActivityVisibility())
            && activity.getActivityOwnerId() != individualId
            && !activitiesAttendeesList.contains(String.valueOf(individualId))) {
          activity.setActivity("Private");
          activity.setActivityDetail("Private");
        }

        String requestURL = "";
        if ((activity.getActivity() != null) && (!activity.getActivity().equals("Private"))) {
          requestURL = "c_openPopup('/activities/view_activity.do?rowId="
              + activity.getActivityID() + "&" + ConstantKeys.TYPEOFACTIVITY + "=" + activityType
              + "&activityAction=Home')";
        }
        String activityTitle = activity.getActivity();
        String overLibTitle = CVUtility.cleanStringJS(activityTitle);
        String activityDetails = (activity.getActivityDetail() != null) ? activity
            .getActivityDetail() : "";
        String overLibDetail = CVUtility.cleanStringJS(activityDetails);

        HomeDisplayItem item = new HomeDisplayItem();
        item.setTitle(activityTitle);
        item.setUrl(requestURL);
        item.setOlTitle(overLibTitle);
        item.setOlDescription(overLibDetail);
        item.setOlCaption(timeRange);
        item.setSubTitle(activityStartTime);
        item.setIcon(icon);
        item.setRelatedTitle(activity.getEntityName());
        item.setRelatedId(activity.getEntityID());
        calendarDisplayList.add(item);
      }
    } // end while scheduled activity iterator
    request.setAttribute("calendarDisplayList", calendarDisplayList);

    // unscheduled activities portlet

    ArrayList unscheduledDisplayList = new ArrayList();
    // pull out the unscheduled activities from that stupid map retreived
    // earlier
    HashMap unscheduledActivityMap = (HashMap)calendarMap.get("unscheduledactivity");
    Set unscheduledKeys = unscheduledActivityMap.keySet();
    it = unscheduledKeys.iterator();
    while (it.hasNext()) {
      CalendarActivityObject activity = (CalendarActivityObject)unscheduledActivityMap.get(it
          .next());
      String activityType = activity.getActivityType();
      String icon = this.determineActivityIcon(activityType);
      activityType = this.convertActivityType(activityType);
      // determine requestURL based on the type
      // TODO make view_activity.do do this for me (maybe a dispatcher action
      // first)
      String requestURL;
      if (activityType.equals(ConstantKeys.FORECASTSALE)) {
        requestURL = "/sales/view_opportunity.do?TYPEOFOPERATION=EDIT&activityId=";
        requestURL += activity.getActivityID();
      } else if (activityType.equals(ConstantKeys.LITERATUREREQUEST)) {
        requestURL = "/marketing/view_literaturefulfillment.do?TYPEOFOPERATION=EDIT&activityid=";
        requestURL += activity.getActivityID();
      } else {
        requestURL = "/activities/view_activity.do?rowId=";
        requestURL += activity.getActivityID();
        requestURL += "&activityAction=Home&TYPEOFACTIVITY=";
        requestURL += activityType;
      }
      HomeDisplayItem item = new HomeDisplayItem();
      item.setTitle(activity.getActivity());
      item.setIcon(icon);
      item.setUrl(requestURL);
      item.setRelatedTitle(activity.getEntityName());
      item.setRelatedId(activity.getEntityID());
      unscheduledDisplayList.add(item);
    } // end while unscheduled activity iterator
    request.setAttribute("unscheduledDisplayList", unscheduledDisplayList);

    // project tasks
   
    ArrayList taskDisplayList = new ArrayList();
    // ask the EJB layer to give us a list of relevant TASK VO's
    ActivityFacade activityFacade = null;
    try {
      activityFacade = (ActivityFacade)CVUtility.setupEJB("ActivityFacade",
          "com.centraview.activity.activityfacade.ActivityFacadeHome", dataSource);
    } catch (Exception e) {
      logger.error("[execute] Exception thrown.", e);
      throw new ServletException(e);
    }
    ArrayList taskList = activityFacade.getTaskList(individualId);

    for (int i = 0; i < taskList.size(); i++) {
      TaskVO task = (TaskVO)taskList.get(i);
      String requestURL = "/projects/view_task.do?rowId=";
      requestURL += task.getTaskid();
      HomeDisplayItem item = new HomeDisplayItem();
      item.setTitle(task.getTitle());
      item.setUrl(requestURL);
      taskDisplayList.add(item);
    }
    request.setAttribute("taskDisplayList", taskDisplayList);
   
    // opportunity

    ArrayList opportunityDisplayList = new ArrayList();
    // ask the EJB layer to give us a list of relevant TASK VO's
    SaleFacade saleFacade = null;
    try {
      saleFacade = (SaleFacade)CVUtility.setupEJB("SaleFacade",
          "com.centraview.sale.salefacade.SaleFacadeHome", dataSource);
    } catch (Exception e) {
      logger.error("[execute] Exception thrown.", e);
      throw new ServletException(e);
    }
    ArrayList opportunityList = saleFacade.getInterestingOpportunityList(individualId);

    for (int i = 0; i < opportunityList.size(); i++) {
      OpportunityVO opportunity = (OpportunityVO)opportunityList.get(i);
      // somehow a null opportunity can make it's way onto this list, so
      // quick and dirty fix is to check that here.
      if (CVUtility.notEmpty(opportunity)) {
        String requestURL = "/sales/view_opportunity.do?TYPEOFOPERATION=EDIT&rowId=";
        requestURL += opportunity.getOpportunityID();
        HomeDisplayItem item = new HomeDisplayItem();
        item.setTitle(opportunity.getTitle());
        item.setUrl(requestURL);
        item.setRelatedTitle(opportunity.getEntityname());
        item.setRelatedId(opportunity.getEntityID());
        item.setIcon("icon_sale.gif");
        opportunityDisplayList.add(item);
      }
    }
    request.setAttribute("opportunityDisplayList", opportunityDisplayList);

    // tickets
   
    // Any Open Tickets assigned to the logged in User
    //String query = "ADVANCE: select ticketid,subject from ticket,supportstatus where ticket.status =  supportstatus.statusid and supportstatus.name = 'Open' AND assignedto = "+indvID;

    // company news
    // alerts
    return (mapping.findForward(".view.home"));
  }

  /**
   * Returns the name of the icon file that represents the passed in activity
   * type. The type should be the text from the activityType table in the
   * database.
   * @param activityType
   * @return icon name
   */
  private String determineActivityIcon(String activityType)
  {
    String icon = "icon_file.gif";
    if (activityType.equals(ConstantKeys.DB_APPOINTMENT)) {
      icon = "icon_invitation.gif";
      activityType = ConstantKeys.APPOINTMENT;
    } else if (activityType.equals(ConstantKeys.DB_CALL)) {
      icon = "icon_call.gif";
      activityType = ConstantKeys.CALL;
    } else if (activityType.equals(ConstantKeys.DB_LITERATURE_REQUEST)) {
      icon = "icon_file.gif";
      activityType = ConstantKeys.LITERATUREREQUEST;
    } else if (activityType.equals(ConstantKeys.DB_MEETING)) {
      icon = "icon_invitation.gif";
      activityType = ConstantKeys.MEETING;
    } else if (activityType.equals(ConstantKeys.DB_NEXT_ACTION)) {
      icon = "icon_tasks.gif";
      activityType = ConstantKeys.NEXTACTION;
    } else if (activityType.equals(ConstantKeys.DB_TASK)) {
      icon = "icon_tasks.gif";
      activityType = ConstantKeys.TASK;
    } else if (activityType.equals(ConstantKeys.DB_TODO)) {
      icon = "icon_tasks.gif";
      activityType = ConstantKeys.TODO;
    }
    return icon;
  }

  /**
   * Takes the activity type provided from the database and returns the type in
   * a form that is expected by the struts actions.
   * @param activityType
   * @return the activity type from ConstantKeys
   */
  private String convertActivityType(String activityType)
  {
    String activityReturnType = ConstantKeys.APPOINTMENT;
    if (activityType.equals(ConstantKeys.DB_APPOINTMENT)) {
      activityReturnType = ConstantKeys.APPOINTMENT;
    } else if (activityType.equals(ConstantKeys.DB_CALL)) {
      activityReturnType = ConstantKeys.CALL;
    } else if (activityType.equals(ConstantKeys.DB_LITERATURE_REQUEST)) {
      activityReturnType = ConstantKeys.LITERATUREREQUEST;
    } else if (activityType.equals(ConstantKeys.DB_MEETING)) {
      activityType = ConstantKeys.MEETING;
    } else if (activityType.equals(ConstantKeys.DB_NEXT_ACTION)) {
      activityReturnType = ConstantKeys.NEXTACTION;
    } else if (activityType.equals(ConstantKeys.DB_TASK)) {
      activityReturnType = ConstantKeys.TASK;
    } else if (activityType.equals(ConstantKeys.DB_TODO)) {
      activityReturnType = ConstantKeys.TODO;
    }
    return activityReturnType;
  }
}
TOP

Related Classes of com.centraview.home.HomeHandler

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.