blob: c432c6ac2afc84406da887925875361d5ac44e22 [file] [log] [blame]
/*
* Copyright 2008 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.gwt.sample.showcase.client.content.other;
import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.RunAsyncCallback;
import com.google.gwt.core.client.Scheduler;
import com.google.gwt.core.client.Scheduler.ScheduledCommand;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.i18n.client.Constants;
import com.google.gwt.sample.showcase.client.ContentWidget;
import com.google.gwt.sample.showcase.client.ShowcaseAnnotations.ShowcaseData;
import com.google.gwt.sample.showcase.client.ShowcaseAnnotations.ShowcaseSource;
import com.google.gwt.user.client.Cookies;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Widget;
import java.util.Collection;
import java.util.Date;
/**
* Example file.
*/
public class CwCookies extends ContentWidget {
/**
* The constants used in this Content Widget.
*/
@ShowcaseSource
public static interface CwConstants extends Constants {
String cwCookiesDeleteCookie();
String cwCookiesDescription();
String cwCookiesExistingLabel();
String cwCookiesInvalidCookie();
String cwCookiesName();
String cwCookiesNameLabel();
String cwCookiesSetCookie();
String cwCookiesValueLabel();
}
/**
* The timeout before a cookie expires, in milliseconds. Current one day.
*/
@ShowcaseData
private static final int COOKIE_TIMEOUT = 1000 * 60 * 60 * 24;
/**
* An instance of the constants.
*/
@ShowcaseData
private final CwConstants constants;
/**
* A {@link TextBox} that holds the name of the cookie.
*/
@ShowcaseData
private TextBox cookieNameBox = null;
/**
* A {@link TextBox} that holds the value of the cookie.
*/
@ShowcaseData
private TextBox cookieValueBox = null;
/**
* The {@link ListBox} containing existing cookies.
*/
@ShowcaseData
private ListBox existingCookiesBox = null;
/**
* Constructor.
*
* @param constants the constants
*/
public CwCookies(CwConstants constants) {
super(constants.cwCookiesName(), constants.cwCookiesDescription(), false);
this.constants = constants;
}
/**
* Initialize this example.
*/
@ShowcaseSource
@Override
public Widget onInitialize() {
// Create the panel used to layout the content
Grid mainLayout = new Grid(3, 3);
// Display the existing cookies
existingCookiesBox = new ListBox();
Button deleteCookieButton = new Button(constants.cwCookiesDeleteCookie());
deleteCookieButton.addStyleName("sc-FixedWidthButton");
mainLayout.setHTML(
0, 0, "<b>" + constants.cwCookiesExistingLabel() + "</b>");
mainLayout.setWidget(0, 1, existingCookiesBox);
mainLayout.setWidget(0, 2, deleteCookieButton);
// Display the name of the cookie
cookieNameBox = new TextBox();
mainLayout.setHTML(1, 0, "<b>" + constants.cwCookiesNameLabel() + "</b>");
mainLayout.setWidget(1, 1, cookieNameBox);
// Display the name of the cookie
cookieValueBox = new TextBox();
Button setCookieButton = new Button(constants.cwCookiesSetCookie());
setCookieButton.addStyleName("sc-FixedWidthButton");
mainLayout.setHTML(2, 0, "<b>" + constants.cwCookiesValueLabel() + "</b>");
mainLayout.setWidget(2, 1, cookieValueBox);
mainLayout.setWidget(2, 2, setCookieButton);
// Add a handler to set the cookie value
setCookieButton.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
String name = cookieNameBox.getText();
String value = cookieValueBox.getText();
Date expires = new Date((new Date()).getTime() + COOKIE_TIMEOUT);
// Verify the name is valid
if (name.length() < 1) {
Window.alert(constants.cwCookiesInvalidCookie());
return;
}
// Set the cookie value
Cookies.setCookie(name, value, expires);
refreshExistingCookies(name);
}
});
// Add a handler to select an existing cookie
existingCookiesBox.addChangeHandler(new ChangeHandler() {
public void onChange(ChangeEvent event) {
updateExstingCookie();
}
});
// Add a handler to delete an existing cookie
deleteCookieButton.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
int selectedIndex = existingCookiesBox.getSelectedIndex();
if (selectedIndex > -1
&& selectedIndex < existingCookiesBox.getItemCount()) {
String cookieName = existingCookiesBox.getValue(selectedIndex);
Cookies.removeCookie(cookieName);
existingCookiesBox.removeItem(selectedIndex);
updateExstingCookie();
}
}
});
// Return the main layout
refreshExistingCookies(null);
return mainLayout;
}
@Override
protected void asyncOnInitialize(final AsyncCallback<Widget> callback) {
GWT.runAsync(CwCookies.class, new RunAsyncCallback() {
public void onFailure(Throwable caught) {
callback.onFailure(caught);
}
public void onSuccess() {
callback.onSuccess(onInitialize());
}
});
}
/**
* Refresh the list of existing cookies.
*
* @param selectedCookie the cookie to select by default
*/
@ShowcaseSource
private void refreshExistingCookies(String selectedCookie) {
// Clear the existing cookies
existingCookiesBox.clear();
// Add the cookies
int selectedIndex = 0;
Collection<String> cookies = Cookies.getCookieNames();
for (String cookie : cookies) {
existingCookiesBox.addItem(cookie);
if (cookie.equals(selectedCookie)) {
selectedIndex = existingCookiesBox.getItemCount() - 1;
}
}
// Select the index of the selectedCookie. Use a ScheduledCommand to give
// the options time to register in Opera.
final int selectedIndexFinal = selectedIndex;
Scheduler.get().scheduleDeferred(new ScheduledCommand() {
public void execute() {
// Select the default cookie
if (selectedIndexFinal < existingCookiesBox.getItemCount()) {
existingCookiesBox.setSelectedIndex(selectedIndexFinal);
}
// Display the selected cookie value
updateExstingCookie();
}
});
}
/**
* Retrieve the value of the existing cookie and put it into to value label.
*/
@ShowcaseSource
private void updateExstingCookie() {
// Cannot update if there are no items
if (existingCookiesBox.getItemCount() < 1) {
cookieNameBox.setText("");
cookieValueBox.setText("");
return;
}
int selectedIndex = existingCookiesBox.getSelectedIndex();
String cookieName = existingCookiesBox.getValue(selectedIndex);
String cookieValue = Cookies.getCookie(cookieName);
cookieNameBox.setText(cookieName);
cookieValueBox.setText(cookieValue);
}
}