📄 recordtimeservlet.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 + -