CalendarControl.java
package com.mycim.webapp;
import com.mycim.framework.logging.Logger;
import com.mycim.framework.logging.LoggerFactory;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpUtils;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Hashtable;
@WebServlet(value = "/calendar")
public class CalendarControl extends HttpServlet {
private static final String BGCOLOR1 = "bgcolor1";
private static final String BGCOLOR2 = "bgcolor2";
private static final String SIZE1 = "size1";
private static final String BORDER = "border";
private static final String BASE = "base";
private static final String STYLE = "style";
private static final String CONFIG = "config";
private static final String ACTION = "deal";
private static final String LEFT = "left";
private static final String RIGHT = "right";
private static final String DATE = "date";
private static final String NEW = "new";
private static final String SHOW = "show";
private static final String MSG = "msg";
private static final String MNT = "mnt";
private static final String[] Mnth = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov"
, "Dec"};
private static final String[] wkdays = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
public static Object forLock = new Object();
private static String NEWLINE = "\n";
private static String SEPARATOR = "/";
private static String EXT = ".htm";
private static Hashtable cnf;
private Logger log = LoggerFactory.getLogger(CalendarControl.class);
@Override
public void init(ServletConfig servletconfig) throws ServletException {
debug("start here $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$S");
super.init(servletconfig);
NEWLINE = System.getProperty("line.separator");
SEPARATOR = System.getProperty("file.separator");
cnf = new Hashtable();
}
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter printwriter = response.getWriter();
String s = "";
String s10 = "";
Object obj = new GregorianCalendar();
s10 = HttpUtils.getRequestURL(request).toString();
debug("request param s10 is ............................. " + s10);
int i;
if ((i = s10.indexOf("?")) > 0) {
s10 = s10.substring(0, i);
}
response.setContentType("text/html");
// ? why and where to get the parameters
s = request.getQueryString();
debug("request param s is ............................. " + s);
// config file is required or we could hardcode here
Hashtable h = initConfig();
String s2 = getFromQuery(s, "date=");
debug("param s2 is " + s2);
if (s2.length() == 0) {
((Calendar) obj).setTime(new Date());
} else {
if (s2.indexOf("/") > 0) {
obj = parseDateWithSymbol(s2);
} else {
obj = parseDate(s2);
}
}
printwriter.println("<body bgcolor=\"" + h.get("bgcolor1") + "\" onLoad=\"setTimeout(window.focus,0);\">");
String s3 = (String) h.get("size1");
if (s3 != null) {
printwriter.println("<font size=" + s3 + ">");
}
String config = request.getParameter("config");
printwriter.println(getMonthTable(h, config, s10, (Calendar) obj));
if (s3 != null) {
printwriter.println("</font>");
}
printwriter.println("</body>");
printwriter.flush();
printwriter.close();
}
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
private void debug(String s) {
log.debug(s);
}
private String stringDate(Calendar calendar) {
String s = String.valueOf(calendar.get(1));
String s1 = String.valueOf(calendar.get(2));
if (s1.length() == 1) {
s1 = "0" + s1;
}
s = s + s1;
s1 = String.valueOf(calendar.get(5));
if (s1.length() == 1) {
s1 = "0" + s1;
}
s = s + s1;
return s;
}
// format as dd/mm/yyyy
// format as yyyy/mm/dd
private String stringDateFormat(Calendar calendar) {
String ret = "";
// year
String yyyy = String.valueOf(calendar.get(1));
// month
String mm = String.valueOf(calendar.get(2) + 1);
// day
String dd = String.valueOf(calendar.get(5));
if (dd.length() == 1) {
dd = "0" + dd;
}
if (mm.length() == 1) {
mm = "0" + mm;
}
// ret = dd + "/" + mm + "/" + yyyy;
ret = yyyy + "/" + mm + "/" + dd;
return ret;
}
private int getDay(Calendar calendar, String s) {
if (s.compareTo("2") == 0) {
return calendar.get(7) - 1;
} else {
return (calendar.get(7) + 5) % 7;
}
}
private String getMonthTable(Hashtable hashtable, String s, String s1, Calendar calendar) {
int i = calendar.get(2);
StringBuffer sb = new StringBuffer();
String s2 = (String) hashtable.get("style");
String s3 = (String) hashtable.get("size1");
GregorianCalendar gCalendar = new GregorianCalendar(calendar.get(1), calendar.get(2), 1);
GregorianCalendar gCalendar1 = new GregorianCalendar(calendar.get(1) + 1, calendar.get(2), 1);
GregorianCalendar gCalendar2 = new GregorianCalendar(calendar.get(1) - 1, calendar.get(2), 1);
// generate years
sb.append("<table width=100%>");
sb.append("<tr>");
sb.append("<td nowrap>");
// generate months
showMonth(s3, s, s1, sb, gCalendar);
Calendar c = Calendar.getInstance();
int day = c.get(Calendar.DAY_OF_MONTH);
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
sb.append("<input type=text readonly size=6 value=" + gCalendar.get(1) + ">");
sb.append("<img src=\"img/icon.gif\" width=\"17\" height=\"18\" border=\"0\" usemap=\"#Map\">");
sb.append("<map name=\"Map\">");
sb.append("<area shape=\"rect\" coords=\"1,1,17,9\" href=\"" + s1 + "?" + "config" + "=" + s + "&" + "deal" +
"=" + "left" + "&" + "date" + "=" + gCalendar2.get(1) + twoDigits(calendar.get(2)) +
twoDigits(calendar.get(5)) + "\">");
sb.append("<area shape=\"rect\" coords=\"1,9,17,17\" href=\"" + s1 + "?" + "config" + "=" + s + "&" + "deal" +
"=" + "left" + "&" + "date" + "=" + gCalendar1.get(1) + twoDigits(calendar.get(2)) +
twoDigits(calendar.get(5)) + "\">");
sb.append("</map>");
sb.append("</td>");
sb.append("</tr>");
sb.append("</table>");
sb.append("<table width=100%> <tr style=\"font-family: Arial, Helvetica, sans-serif, font-size: " + "12px; " +
"font-weight: bold; color: #FFFFFF; background-color: #005BB7\">\n");
if (s2.compareTo("2") == 0) {
sb.append("<th align=right>" + formatObject(s3, wkdays[0]) + "</th>\n");
for (int j = 1; j < 7; j++) {
sb.append("<th align=right>" + formatObject(s3, wkdays[j]) + "</th>\n");
}
} else {
sb.append("<th align=right>" + formatObject(s3, wkdays[1]) + "</th>" + NEWLINE);
for (int k = 2; k < 8; k++) {
sb.append("<th align=right>" + formatObject(s3, wkdays[k % 7]) + "</th>" + NEWLINE);
}
}
sb.append(" </tr>" + NEWLINE);
int l = 0;
if (getDay(gCalendar, s2) > 0) {
sb.append(" <tr style=\"font-family: Arial, Helvetica, sans-serif, font-size: 10pt; font-weight:" + " " +
"normal; color: #000000\">");
for (; l < getDay(gCalendar, s2); l++) {
sb.append("<td align=right>");
if (s3 != null) {
sb.append("<font size=" + s3 + "></font>");
}
sb.append("</td>" + NEWLINE);
}
}
for (; gCalendar.get(2) == i; gCalendar.add(5, 1)) {
int i1 = (l + gCalendar.get(5)) % 7;
if (i1 == 1) {
sb.append(
" <tr style=\"font-family: Arial, Helvetica, sans-serif, font-size: 10pt; " + "font-weight:" +
" normal; color: #000000\">" + NEWLINE);
}
if (gCalendar.get(5) == day && gCalendar.get(2) == month && gCalendar.get(1) == year) {
sb.append("<td align=right>").append("<span style= 'background-color: red'>");
} else {
sb.append("<td align=right>");
}
if (s3 != null) {
sb.append("<font size=" + s3 + ">");
}
sb.append("<a href=\"javascript:opener.document.forms[0].elements['" + s + "'].value='" +
stringDateFormat(gCalendar) + "';window.close();\">" + gCalendar.get(5) + "</a>\n");
if (s3 != null) {
sb.append("</font>");
}
sb.append("</td>" + NEWLINE);
if (i1 == 0) {
sb.append(" </tr>" + NEWLINE);
}
}
l = (gCalendar.get(5) - 1) + l;
if ((l % 7) != 0) {
for (; (l % 7) != 0; l++) {
sb.append("<td align=right>");
if (s3 != null) {
sb.append("<font size=" + s3 + "></font>");
}
sb.append("</td>" + NEWLINE);
}
sb.append(" </tr>" + NEWLINE);
}
sb.append("</table></center>" + NEWLINE);
return sb.toString();
}
private void showMonth(String s, String s1, String s2, StringBuffer sb, Calendar calendar) {
int j = calendar.get(2);
GregorianCalendar gCalendar = new GregorianCalendar(calendar.get(1), 0, 1);
sb.append("<select style=\"width=100px\" onChange=\"location=this.options[this.selectedIndex]" + ".value\">");
for (int i = 0; i < 12; i++) {
if (gCalendar.get(2) == j) {
sb.append(" <option selected><b>" + getMnth(s, gCalendar) + "</b></option>\n");
} else {
sb.append(" <option value=\"" + s2 + "?" + "config" + "=" + s1 + "&" + "deal" + "=" + "left" + "&" +
"date" + "=" + stringDate(gCalendar) + "\">" + getMnth(s, gCalendar) + "</option>\n");
}
gCalendar.add(2, 1);
}
sb.append("</select>");
}
private String getMnth(String s, Calendar calendar) {
return formatObject(s, Mnth[calendar.get(2)]);
}
private String formatObject(String s, Object obj) {
String s1 = "";
if (obj != null) {
s1 = String.valueOf(obj);
}
if (s == null) {
return s1;
} else {
return "<font size=" + s + ">" + s1 + "</font>";
}
}
private Calendar parseDate(String s) {
String s1 = s;
String s2 = s1.substring(0, 4);
String s3 = s1.substring(4, 6);
String s4 = s1.substring(6, 8);
return new GregorianCalendar(Integer.parseInt(s2), Integer.parseInt(s3), Integer.parseInt(s4));
}
private Calendar parseDateWithSymbol(String s) {
String s1 = s;
String s2 = s1.substring(s1.lastIndexOf("/") + 1, s1.lastIndexOf("/") + 5);
String s3 = s1.substring(s1.lastIndexOf("/") - 2, s1.lastIndexOf("/"));
String s4 = s1.substring(0, 2);
return new GregorianCalendar(Integer.parseInt(s2), Integer.parseInt(s3) - 1, Integer.parseInt(s4));
}
private String twoDigits(int i) {
String s = String.valueOf(i);
if (s.length() == 1) {
s = "0" + s;
}
return s;
}
private Hashtable initConfig() {
Hashtable h = new Hashtable();
h.put("border", "0");
h.put("style", "1");
h.put("add", "1");
h.put("edit", "0");
h.put("delete", "0");
h.put("share", "0");
h.put("bgcolor1", "#FFFFFF");
h.put("bgcolor2", "#FFFFFF");
h.put("title", "");
return h;
}
private String getFromQuery(String s, String s1) {
int i = s.indexOf(s1);
if (i < 0) {
return "";
}
String s2 = s.substring(i + s1.length());
if ((i = s2.indexOf("&")) < 0) {
return s2;
} else {
return s2.substring(0, i);
}
}
}