⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 recordtimeservlet.java

📁 考勤管理系统源码
💻 JAVA
字号:
package com.wiley.compBooks.EJwithUML.TimecardUI;

import javax.servlet.http.*;
import javax.servlet.*;

import javax.naming.*;
import javax.ejb.*;
import java.rmi.*;
import javax.rmi.PortableRemoteObject;
import javax.servlet.http.*;
import javax.servlet.*;

import javax.naming.*;
import javax.ejb.*;
import java.rmi.*;
import javax.rmi.PortableRemoteObject;

import java.io.*;
import java.util.*;
import java.text.*;

import com.wiley.compBooks.EJwithUML.Base.HtmlPrimitives.Core.*;
import com.wiley.compBooks.EJwithUML.Base.HtmlPrimitives.FormPrimitives.*;
import com.wiley.compBooks.EJwithUML.Base.HtmlPrimitives.Layout.*;
import com.wiley.compBooks.EJwithUML.Base.HtmlPrimitives.ContentElements.*;
import com.wiley.compBooks.EJwithUML.TimeCardWorkflow.*;
import com.wiley.compBooks.EJwithUML.Dtos.*;
import com.wiley.compBooks.EJwithUML.TimecardProducers.*;
import com.wiley.compBooks.EJwithUML.Base.EjbUtil.*;
import com.wiley.compBooks.EJwithUML.Base.ApplicationExceptions.*;


/**
 * The RecordTimeServlet uses the TimecardWorkflow and
 * HtmlProduction packages to create the formatted HTML
 * for the time entry form and to capture the entered hours.
 */
public class RecordTimeServlet extends BasicTimecardServlet
{
  private static final DateFormat longFormat = new SimpleDateFormat("MMM dd, yyyy");
  private static final DateFormat shortFormat = new SimpleDateFormat("MMM dd");
  private static final DateFormat keyFormat = new SimpleDateFormat("MMM.dd.yyyy");
  private static final DateFormat dayOfWeekFormat = new SimpleDateFormat("EE");

  public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
  {
    doPost(request, response);
  }

  /** Overrides method from HttpServlet. doPost is called by the servlet engine. */
  public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
  {
    System.out.println("RecordTimeServlet: doPost");
    try
    {
      PagePrimitive page = null;

      // extract username from session
      HttpSession session = request.getSession(false);
      String username = (String) session.getAttribute(TimecardKey.USERNAME.getKeyText());

      // extract parameters
      String client = request.getParameter(TimecardKey.CLIENT.getKeyText());
      String project = request.getParameter(TimecardKey.PROJECT.getKeyText());
      String code = request.getParameter(TimecardKey.CODE.getKeyText());

      // Get workflow and timecard
      Context initial = new InitialContext();
      Object objref = initial.lookup(EjbReferenceNames.RECORD_TIME_WORKFLOW_HOME);
      RecordTimeWorkflowHome rtwhome = (RecordTimeWorkflowHome)PortableRemoteObject.narrow(objref, RecordTimeWorkflowHome.class);
      RecordTimeWorkflow rtwf = rtwhome.create(username);
      TimecardDTO timecard = rtwf.getCurrentTimecard();

      // update and submit timecard
      if (request.getParameterMap().containsKey(TimecardKey.SUBMIT_TIMECARD.getKeyText()))
      {
        updateTimecardFromRequest(timecard, request);
        rtwf.updateTimecard(timecard);
        rtwf.submitTimecard();
      }

      // save timecard
      else if (request.getParameterMap().containsKey(TimecardKey.SAVE_TIMECARD.getKeyText()))
      {
        updateTimecardFromRequest(timecard, request);
        rtwf.updateTimecard(timecard);
      }

      // add charge code
      if (client != null && !client.trim().equals(""))
      {
        List dates = getDatesInOrder(timecard);
        Iterator date_it = dates.iterator();
        while (date_it.hasNext())
        {
          Date current_date = (Date) date_it.next();
          TimeEntryDTO te = new TimeEntryDTO(client, code, project, 0, current_date);
          timecard.addEntry(te);
        }
        rtwf.updateTimecard(timecard);
      }

      // build page from timecard
      timecard = rtwf.getCurrentTimecard();
      page = buildEntryPage(timecard, username);

      // write page to response
      StringBuffer buffer = new StringBuffer();
      page.buildContent(buffer);
      response.getWriter().println(buffer.toString());
      response.getWriter().flush();
      response.getWriter().close();
    }
    catch (Exception e)
    {
      System.out.println("RecordTimeServlet e:" +e);
      throw new ServletException(e);
    }
  }

  private PagePrimitive buildEntryPage(TimecardDTO timecard, String username)
  {
    PagePrimitive page = new TimecardPageProducer("Enter Hours");

    // add welcome message
    String start_date = this.longFormat.format(timecard.getStartDate());
    String end_date = this.longFormat.format(timecard.getEndDate());
    ParagraphPrimitive welcome = new ParagraphPrimitive(TimecardStyle.IMPORTANT_TEXT, "Welcome " +username+ ". Please enter Hours for " +start_date+ " to " +end_date);
    page.addToBody(welcome);

    // add link to select charge code
    LinkPrimitive select_code_link = new LinkPrimitive("/Timecard/SelectChargeCodeServlet");
    select_code_link.setStyle(TimecardStyle.IMPORTANT_TEXT);
    select_code_link.addText("Select a Charge Code");
    page.addToBody(select_code_link);


    // derive ordered list of dates, ordered list of charge codes and map of date_code to entries
    List dates = getDatesInOrder(timecard);
    List codes = getChargeCodesInOrder(timecard);
    Map entry_map = getEntriesMap(timecard);

    if (!entry_map.isEmpty())
    {
      TablePrimitive table = new TablePrimitive();

      // build column headings from dates
      Iterator date_it = dates.iterator();
      int col_ctr = 1;
      while (date_it.hasNext())
      {
        Date current_date = (Date) date_it.next();
        SpanPrimitive date_span = new SpanPrimitive(TimecardStyle.IMPORTANT_TEXT, "");
        date_span.addText(dayOfWeekFormat.format(current_date));
        date_span.addLineBreak();
        date_span.addText(shortFormat.format(current_date));

        table.setPrimitiveAt(0, col_ctr++, date_span);
      }

      // build row headings from charge codes
      Iterator codes_it = codes.iterator();
      int row_ctr = 1;
      while (codes_it.hasNext())
      {
        String code = (String) codes_it.next();
        SpanPrimitive code_span = new SpanPrimitive(TimecardStyle.IMPORTANT_TEXT, code);
        table.setPrimitiveAt(row_ctr++, 0, code_span);
      }

      // build each text entry field
      date_it = dates.iterator();
      col_ctr = 1;
      while (date_it.hasNext())
      {
        Date date = (Date) date_it.next();
        String date_string = keyFormat.format(date);

        codes_it = codes.iterator();
        row_ctr = 1;
        while (codes_it.hasNext())
        {
          String code = (String) codes_it.next();
          String key = "entry_" +date_string+ "_" +code;
          TimeEntryDTO entry = (TimeEntryDTO) entry_map.get(key);
          String hours = "0";
          if (entry != null)
          {
            hours = "" + entry.getHours();
          }

          TextBoxPrimitive text_box = new TextBoxPrimitive(key);
          text_box.setInitialValue(hours);
          text_box.setWidth(5);
          table.setPrimitiveAt(row_ctr, col_ctr, text_box);
          row_ctr++;
        }
        col_ctr++;
      }

      // add save button
      SubmitPrimitive save_button = new SubmitPrimitive("Save");
      save_button.setName(TimecardKey.SAVE_TIMECARD.getKeyText());
      table.setPrimitiveAt(row_ctr, 1, save_button);

      // add submit button
      SubmitPrimitive submit_button = new SubmitPrimitive("Submit");
      submit_button.setName(TimecardKey.SUBMIT_TIMECARD.getKeyText());
      table.setPrimitiveAt(row_ctr, 2, submit_button);


      FormPrimitive form  = new FormPrimitive("/Timecard/RecordTimeServlet", "rcif");
      form.addPrimitive(table);
      page.addToBody(form);
    }

    return page;
  }

  private List getDatesInOrder(TimecardDTO timecard)
  {
    ArrayList dates = new ArrayList();
    Calendar calendar = Calendar.getInstance();

    // add dates from start to end
    Date current = timecard.getStartDate();
    Date end = timecard.getEndDate();
    while (current.before(end))
    {
      String dbg = longFormat.format(current);
      dates.add(current);
      calendar.setTime(current);
      calendar.add(Calendar.DAY_OF_MONTH, 1);
      current = calendar.getTime();
    }
    dates.add(end);

    return dates;
  }

  private List getChargeCodesInOrder(TimecardDTO timecard)
  {
    ArrayList charge_codes = new ArrayList();

    Iterator entries = timecard.getEntries();
    while (entries.hasNext())
    {
      TimeEntryDTO entry = (TimeEntryDTO) entries.next();
      String code = entry.getClientName()+"."+entry.getProjectName()+"."+entry.getChargeCodeName();
      if (!charge_codes.contains(code))
      {
        charge_codes.add(code);
      }
    }

    Collections.sort(charge_codes);
    return charge_codes;
  }

  /** Build a map of entries with date_chargecode as key*/
  private Map getEntriesMap(TimecardDTO timecard)
  {
    Map entries_map = new HashMap();

    Iterator entries = timecard.getEntries();
    while (entries.hasNext())
    {
      TimeEntryDTO entry = (TimeEntryDTO) entries.next();
      String date = this.keyFormat.format(entry.getDate());
      String code = entry.getClientName()+"."+entry.getProjectName()+"."+entry.getChargeCodeName();
      String key = "entry_" +date+ "_" +code;
      entries_map.put(key, entry);
    }

    return entries_map;
  }

  /** Extract hours from the request. */
  private void updateTimecardFromRequest(TimecardDTO timecard, HttpServletRequest request)
  {
    Map entries_map = getEntriesMap(timecard);

    Enumeration parameters = request.getParameterNames();
    while (parameters.hasMoreElements())
    {
      String parameter = (String) parameters.nextElement();
      if (parameter.startsWith("entry"))
      {
        String key = parameter;
        String hours = request.getParameter(parameter);
        TimeEntryDTO entry = (TimeEntryDTO) entries_map.get(key);
        entry.setHours(Integer.parseInt(hours));
      }
    }
  }


}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -