| /* |
| * 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); |
| } |
| } |