KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > nextapp > echo2 > webcontainer > syncpeer > BrowserCommandPeer


1 /*
2  * This file is part of the Echo Web Application Framework (hereinafter "Echo").
3  * Copyright (C) 2002-2005 NextApp, Inc.
4  *
5  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
6  *
7  * The contents of this file are subject to the Mozilla Public License Version
8  * 1.1 (the "License"); you may not use this file except in compliance with
9  * the License. You may obtain a copy of the License at
10  * http://www.mozilla.org/MPL/
11  *
12  * Software distributed under the License is distributed on an "AS IS" basis,
13  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
14  * for the specific language governing rights and limitations under the
15  * License.
16  *
17  * Alternatively, the contents of this file may be used under the terms of
18  * either the GNU General Public License Version 2 or later (the "GPL"), or
19  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
20  * in which case the provisions of the GPL or the LGPL are applicable instead
21  * of those above. If you wish to allow use of your version of this file only
22  * under the terms of either the GPL or the LGPL, and not to allow others to
23  * use your version of this file under the terms of the MPL, indicate your
24  * decision by deleting the provisions above and replace them with the notice
25  * and other provisions required by the GPL or the LGPL. If you do not delete
26  * the provisions above, a recipient may use your version of this file under
27  * the terms of any one of the MPL, the GPL or the LGPL.
28  */

29
30 package nextapp.echo2.webcontainer.syncpeer;
31
32 import org.w3c.dom.Element JavaDoc;
33
34 import nextapp.echo2.app.Command;
35 import nextapp.echo2.webcontainer.CommandSynchronizePeer;
36 import nextapp.echo2.webcontainer.RenderContext;
37 import nextapp.echo2.webcontainer.command.BrowserOpenWindowCommand;
38 import nextapp.echo2.webcontainer.command.BrowserRedirectCommand;
39 import nextapp.echo2.webcontainer.command.BrowserSetCookieCommand;
40 import nextapp.echo2.webrender.ServerMessage;
41 import nextapp.echo2.webrender.Service;
42 import nextapp.echo2.webrender.WebRenderServlet;
43 import nextapp.echo2.webrender.service.JavaScriptService;
44
45 /**
46  * A <code>CommandSynchronizePeer</code> implementation for
47  * browser control commands.
48  * <p>
49  * This class should not be extended or used by classes outside of the
50  * Echo framework.
51  */

52 public class BrowserCommandPeer
53 implements CommandSynchronizePeer {
54
55     /**
56      * Service to provide supporting JavaScript library.
57      */

58     private static final Service BROWSER_COMMAND_SERVICE = JavaScriptService.forResource("Echo.BrowserCommand",
59             "/nextapp/echo2/webcontainer/resource/js/BrowserCommand.js");
60
61     static {
62         WebRenderServlet.getServiceRegistry().add(BROWSER_COMMAND_SERVICE);
63     }
64     
65     /**
66      * @see nextapp.echo2.webcontainer.CommandSynchronizePeer#render(
67      * nextapp.echo2.webcontainer.RenderContext, nextapp.echo2.app.Command)
68      */

69     public void render(RenderContext rc, Command command) {
70         if (command instanceof BrowserOpenWindowCommand) {
71             renderOpenWindow(rc, (BrowserOpenWindowCommand) command);
72         } else if (command instanceof BrowserRedirectCommand) {
73             renderRedirect(rc, (BrowserRedirectCommand) command);
74         } else if (command instanceof BrowserSetCookieCommand) {
75             renderSetCookie(rc, (BrowserSetCookieCommand) command);
76         } else {
77             throw new IllegalArgumentException JavaDoc();
78         }
79     }
80     
81     /**
82      * Renders a <code>BrowserSetCookieCommand</code>.
83      *
84      * @param rc the relevant <code>RenderContext</code>
85      * @param command the command
86      */

87     private void renderSetCookie(RenderContext rc, BrowserSetCookieCommand command) {
88         rc.getConnection().getResponse().addCookie(command.getCookie());
89     }
90     
91     /**
92      * Renders a <code>BrowserOpenWindowCommand</code>.
93      *
94      * @param rc the relevant <code>RenderContext</code>
95      * @param command the command
96      */

97     private void renderOpenWindow(RenderContext rc, BrowserOpenWindowCommand command) {
98         ServerMessage serverMessage = rc.getServerMessage();
99         serverMessage.addLibrary(BROWSER_COMMAND_SERVICE.getId());
100         Element JavaDoc openWindowElement = serverMessage.appendPartDirective(ServerMessage.GROUP_ID_POSTUPDATE,
101                 "EchoBrowserCommand.MessageProcessor", "open-window");
102         openWindowElement.setAttribute("uri", command.getUri());
103         if (command.getName() != null) {
104             openWindowElement.setAttribute("name", command.getName());
105         }
106         if (command.getFeatures() != null) {
107             openWindowElement.setAttribute("features", command.getFeatures());
108         }
109         openWindowElement.setAttribute("replace", command.isReplace() ? "true" : "false");
110     }
111
112     /**
113      * Renders a <code>BrowserRedirectCommand</code>.
114      *
115      * @param rc the relevant <code>RenderContext</code>
116      * @param command the command
117      */

118     private void renderRedirect(RenderContext rc, BrowserRedirectCommand command) {
119         ServerMessage serverMessage = rc.getServerMessage();
120         serverMessage.addLibrary(BROWSER_COMMAND_SERVICE.getId());
121         Element JavaDoc redirectElement = serverMessage.appendPartDirective(ServerMessage.GROUP_ID_POSTUPDATE,
122                 "EchoBrowserCommand.MessageProcessor", "redirect");
123         redirectElement.setAttribute("uri", command.getUri());
124     }
125 }
126
Popular Tags