Source code: jac/aspects/gui/web/Customized.java
1 /*
2 Copyright (C) 2002-2003 Renaud Pawlak <renaud@aopsys.com>,
3 Laurent Martelli <laurent@aopsys.com>
4
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU Lesser General Public License as
7 published by the Free Software Foundation; either version 2 of the
8 License, or (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU Lesser General Public License for more details.
14
15 You should have received a copy of the GNU Lesser General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
18
19 package jac.aspects.gui.web;
20
21 import jac.aspects.gui.*;
22 import jac.core.NameRepository;
23 import jac.core.rtti.AbstractMethodItem;
24 import jac.util.Log;
25 import java.io.IOException;
26 import java.io.PrintWriter;
27 import java.util.Arrays;
28 import java.util.Collection;
29 import java.util.Iterator;
30 import java.util.List;
31 import java.util.Map;
32 import java.util.Vector;
33
34
35 public class Customized extends AbstractCompositeView
36 implements CustomizedView, HTMLViewer {
37
38 CustomizedGUI customized;
39 // JPanel contentPanel;
40 PanelView mainView;
41
42 /**
43 * Builds a customized view.
44 * @param factory the view factory
45 * @param context the display context
46 * @param customized the customized GUI to build a view of
47 * @param panels if not null, overrides the content of the view
48 * (panelID -> PanelContent)
49 */
50 public Customized(ViewFactory factory, DisplayContext context,
51 CustomizedGUI customized, Map panels) {
52 this.factory = factory;
53 this.customized = customized;
54 this.context = context;
55 context.setCustomizedView(this);
56
57 Log.trace("web","building cutomized...");
58 try {
59 mainView = (PanelView)factory.createCompositeView(
60 "main",
61 "Panel",
62 new Object[] {
63 new Integer(customized.getSubPanesCount()),
64 new Integer(customized.getGeometry()),
65 customized.getPaneContainers(),
66 customized.getScrollings(),
67 customized.getSplitters() },
68 context
69 );
70 } catch (ViewFactory.UnhandledViewTypeException e) {
71 e.printStackTrace();
72 }
73
74 // setPosition(customized.getLeft(),customized.getUp(),
75 // customized.getWidth(),customized.getHeight());
76 try {
77 GenericFactory.initCustomized(factory, context, mainView,
78 customized, panels);
79 if(customized.hasMenuBar())
80 GenericFactory.setMenuBars(factory, context,
81 this, customized.getMenus());
82 if(customized.hasToolBar())
83 GenericFactory.setToolBar(factory, context,
84 this, customized.getToolbar());
85 if(customized.hasStatusBar())
86 GenericFactory.setStatusBar(factory, context,
87 this, customized.getStatusBarMethod(),
88 customized.getStatusPosition());
89
90 } catch (Exception e) {
91 e.printStackTrace();
92 }
93 Log.trace("web","building cutomized DONE");
94 }
95
96 public void close() {
97 mainView.close();
98 }
99
100 // View interface
101
102 public void setContext(DisplayContext context) {
103 super.setContext(context);
104 Log.trace("display",2,"setContext on "+getClass().getName());
105 // recursively set the display of inner components
106 Iterator i = mainView.getViews().iterator();
107 while (i.hasNext()) {
108 View view = (View)i.next();
109 Log.trace("display",2,"set context on subView "+view);
110 view.setContext(context);
111 }
112 }
113
114 public void addView(View view, Object extraInfos) {
115 view.setContext(context);
116 mainView.addView(view,extraInfos);
117 }
118
119 public void addView(View view) {
120 addView(view,null);
121 }
122
123 public Collection getViews() {
124 return mainView.getViews();
125 }
126
127 public View getView(Object id) {
128 return mainView.getView(id);
129 }
130
131 public void removeAllViews() {
132 mainView.removeAllViews();
133 }
134
135 // CustomizedView interface
136
137 public CustomizedGUI getCustomizedGUI() {
138 return customized;
139 }
140
141 Vector menuBars = new Vector();
142 MenuView topMenuBar;
143 MenuView bottomMenuBar;
144 MenuView leftMenuBar;
145 MenuView rightMenuBar;
146
147 public void setMenuBar(MenuView menuBar,String position) {
148 if (position==null)
149 position = MenuBar.LEFT;
150 menuBar.setPosition(position);
151 if (position.equals(MenuBar.TOP)) {
152 topMenuBar=menuBar;
153 } else if(position.equals(MenuBar.BOTTOM)) {
154 bottomMenuBar=menuBar;
155 } else if(position.equals(MenuBar.LEFT)) {
156 leftMenuBar=menuBar;
157 } else if(position.equals(MenuBar.RIGHT)) {
158 rightMenuBar=menuBar;
159 }
160 this.menuBars.add(menuBar);
161 }
162
163 public MenuView getTopMenuBar() {
164 return topMenuBar;
165 }
166
167 public MenuView getBottomMenuBar() {
168 return bottomMenuBar;
169 }
170
171 public MenuView getLeftMenuBar() {
172 return leftMenuBar;
173 }
174
175 public MenuView getRightMenuBar() {
176 return rightMenuBar;
177 }
178
179 MenuView toolBar;
180 public void setToolBar(MenuView toolBar) {
181 this.toolBar = toolBar;
182 }
183
184 StatusView statusBar;
185 public void setStatusBar(StatusView statusBar,String position) {
186 this.statusBar=statusBar;
187 statusBar.setPosition(position);
188 }
189
190 public void showStatus(String message) {
191 statusBar.showMessage(message);
192 }
193
194 public PanelView getPanelView() {
195 return mainView;
196 }
197
198 public void requestFocus() {
199 }
200
201 // HTMLViewer interface
202
203 public void genHTML(PrintWriter out) throws IOException {
204 out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">");
205 out.println("<html>");
206 out.println(" <head>");
207 out.println(" <title>"+label+"</title>");
208 out.println(" <meta name=\"Author\" content=\"JAC web-gui server\">" );
209 out.println(" <script type=\"text/javascript\" src=\""+javascript+"\"></script>");
210 if (customized.getIcon()!=null) {
211 String resource = ResourceManager.getResource(customized.getIcon());
212 if (resource!=null)
213 out.println(" <link rel=\"icon\" href=\"resources/"+resource+"\" />");
214 }
215 out.println(" <link rel=\"stylesheet\" type=\"text/css\" "+
216 "href=\""+styleSheet+"\" title=JAC>");
217 out.println(" <style type=\"text/css\">");
218 Iterator it=customized.getStyleSheetURLs().iterator();
219 while(it.hasNext()) {
220 String url=(String)it.next();
221 out.println(" @import \""+url+"\";");
222 }
223 out.println(" </style>");
224 out.println(" </head>");
225 out.println(" <body>");
226 genBody(out);
227 out.println(" </body>");
228 out.println("</html>");
229 }
230
231 protected void genBody(PrintWriter out) throws IOException {
232 out.println("<table class=\"customized\">");
233 if(statusBar!=null && statusBar.getPosition().equals(CustomizedGUI.TOP)) {
234 out.println("<tr><td class=\"statusBar\" colspan=\"3\">");
235 ((HTMLViewer)statusBar).genHTML(out);
236 out.println("</td></tr>");
237 }
238 out.println("<tr><td class=\"menuBarT\" colspan=\"3\">");
239 if(topMenuBar!=null)
240 ((HTMLViewer)topMenuBar).genHTML(out);
241 if (toolBar!=null)
242 ((HTMLViewer)toolBar).genHTML(out);
243 out.println("</td></tr>");
244 out.println("<tr><td class=\"menuBarL\">");
245 if(leftMenuBar!=null)
246 ((HTMLViewer)leftMenuBar).genHTML(out);
247 out.println("</td><td class=\"mainView\"><div class=\"mainView\">");
248 // out.println(" ");
249 ((HTMLViewer)mainView).genHTML(out);
250 out.println(" ");
251 out.println("</div></td><td class=\"menuBarR\">");
252 if(rightMenuBar!=null)
253 ((HTMLViewer)rightMenuBar).genHTML(out);
254 out.println("</td></tr>");
255 out.println("<tr><td class=\"menuBarB\" colspan=\"3\">");
256 if(bottomMenuBar!=null)
257 ((HTMLViewer)bottomMenuBar).genHTML(out);
258 out.println("</td></tr>");
259 if(statusBar!=null && statusBar.getPosition().equals(CustomizedGUI.BOTTOM)) {
260 out.println("<tr><td class=\"statusBar\" colspan=\"3\">");
261 ((HTMLViewer)statusBar).genHTML(out);
262 out.println("</td></tr>");
263 }
264 out.println("</table>");
265 }
266 }
267