package m.szajowski.schedule;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.Map;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.invient.vaadin.charts.InvientCharts.DecimalPoint;
import com.invient.vaadin.charts.InvientCharts.XYSeries;
import com.vaadin.data.util.BeanItem;
import com.vaadin.data.validator.DoubleValidator;
import com.vaadin.terminal.Sizeable;
import com.vaadin.terminal.ThemeResource;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.DateField;
import com.vaadin.ui.Form;
import com.vaadin.ui.InlineDateField;
import com.vaadin.ui.TextField;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.Window;
public class UserDataSettings {
private final Window mainWindow;
private final HttpServletRequest request;
private final HttpServletResponse response;
private final Main main;
private final BeanItem<UserData> userData;
public UserDataSettings(final Main main, final HttpServletRequest request,
final HttpServletResponse response) {
this.main = main;
this.mainWindow = main.getMainWindow();
this.request = request;
this.response = response;
this.userData = main.userData;
}
public void checkData() {
boolean show = true;
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
if (cookie.getName().equals("schedule")) {
UserData userData = new UserData(cookie.getValue());
mainWindow.showNotification("Witaj " + userData.getName(),
Window.Notification.TYPE_TRAY_NOTIFICATION);
show = false;
UserData bean = main.userData.getBean();
bean.setName(cookie.getValue().split("-")[0]);
bean.setDefaultWork(cookie.getValue().split("-")[1]);
bean.setLogin(cookie.getValue().split("-")[2]);
refreshTable();
show = false;
}
}
}
if (show) {
showSettingsWindow();
}
}
public void showSettingsWindow() {
final Window window = new Window("Dane użytkownika");
window.setModal(true);
window.setWidth(400, Sizeable.UNITS_PIXELS);
window.center();
final Form form = new Form();
form.setFooter(new VerticalLayout());
form.setItemDataSource(userData, userData.getBean().FIELDS_ORDER);
userData.getBean().addCaptions(form);
for (String id : UserData.FIELDS_ORDER) {
form.getField(id).setRequired(true);
form.getField(id).setRequiredError("Wartosc wymagana");
}
window.addComponent(form);
Button button = new Button("Zapisz", form, "commit");
button.setIcon(new ThemeResource("../runo/icons/16/ok.png"));
button.addListener(new ClickListener() {
public void buttonClick(final ClickEvent event) {
String value = form.getField("name") + "-" + form.getField("defaultWork") + "-"
+ form.getField("login");
Cookie cookie = new Cookie("schedule", value);
cookie.setPath("/schedule");
cookie.setMaxAge(-1);
response.addCookie(cookie);
mainWindow.showNotification("Witaj " + form.getField("name"),
Window.Notification.TYPE_TRAY_NOTIFICATION);
mainWindow.removeWindow(window);
refreshTable();
}
});
VerticalLayout formFooterLayout = new VerticalLayout();
form.setFooter(formFooterLayout);
form.getFooter().addComponent(button);
formFooterLayout.setComponentAlignment(button, Alignment.MIDDLE_RIGHT);
mainWindow.addWindow(window);
}
public void showUValue() {
final Window window = new Window("Wartość U");
window.setModal(true);
window.setWidth(400, Sizeable.UNITS_PIXELS);
window.center();
final Form form = new Form();
form.setFooter(new VerticalLayout());
final InlineDateField dateField = new InlineDateField("Miesiąc");
dateField.setResolution(DateField.RESOLUTION_MONTH);
form.addField("month", dateField);
final TextField textField = new TextField("Wartość");
textField.setRequired(true);
textField.setValue("100.99");
textField.addValidator(new DoubleValidator("Tylko wartości liczbowe"));
form.addField("value", textField);
window.addComponent(form);
Button button = new Button("Zapisz", form, "commit");
button.setIcon(new ThemeResource("../runo/icons/16/ok.png"));
button.addListener(new ClickListener() {
public void buttonClick(final ClickEvent event) {
double parseDouble = Double.parseDouble(textField.getValue().toString());
Date date = (Date) dateField.getValue();
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
DecimalPoint p = new DecimalPoint(new XYSeries("2008"), Double.parseDouble(date
.getMonth() + ""), parseDouble);
int year = calendar.get(Calendar.YEAR);
Map<Integer, DecimalPoint> map = main.points.get(year);
if (map == null) {
main.points.put(year, new LinkedHashMap<Integer, DecimalPoint>());
map = main.points.get(year);
}
map.put(date.getMonth(), p);
main.refreshGraph();
mainWindow.removeWindow(window);
}
});
VerticalLayout formFooterLayout = new VerticalLayout();
form.setFooter(formFooterLayout);
form.getFooter().addComponent(button);
formFooterLayout.setComponentAlignment(button, Alignment.MIDDLE_RIGHT);
mainWindow.addWindow(window);
}
private void refreshTable() {
Collection<Day> itemIds = main.days.getItemIds();
for (Day day : itemIds) {
if (!day.isWeekend()) {
day.setProgram(userData.getBean().getDefaultWork());
}
}
if (main.daysTable != null) {
main.daysTable.requestRepaintAll();
}
}
}