1 // ========================================================================
2 // $Id: FrameSet.java,v 1.4 2004/11/20 13:32:33 gregwilkins Exp $
3 // Copyright 1996-2004 Mort Bay Consulting Pty. Ltd.
4 // ------------------------------------------------------------------------
5 // Licensed under the Apache License, Version 2.0 (the "License");
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 // http://www.apache.org/licenses/LICENSE-2.0
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 // ========================================================================
15
16 package org.mortbay.html;
17 import java.io.IOException;
18 import java.io.Writer;
19 import java.util.Enumeration;
20 import java.util.Hashtable;
21 import java.util.Vector;
22
23 /* ---------------------------------------------------------------- */
24 /** FrameSet.
25 * <p>
26 * Usage
27 * <pre>
28 * FrameSet set = new FrameSet("FrameTest","*,*","*,*");
29 * set.frame(0,0).name("Frame1",req.getRequestPath()+"?Frame=1");
30 * set.frame(0,1).name("Frame2",req.getRequestPath()+"?Frame=2");
31 * set.frame(1,0).name("Frame3",req.getRequestPath()+"?Frame=3");
32 * set.frame(1,1).name("Frame4",req.getRequestPath()+"?Frame=4");
33 * set.write(new Writer(res.getOutputStream()));
34 * </pre>
35 * @version $Id: FrameSet.java,v 1.4 2004/11/20 13:32:33 gregwilkins Exp $
36 * @author Greg Wilkins
37 */
38 public class FrameSet extends Page
39 {
40 Frame[][] frames=null;
41 String colSpec=null;
42 String rowSpec=null;
43 int cols;
44 int rows;
45 String border="";
46 Vector frameNames=null;
47 Hashtable frameMap=null;
48
49 /* ------------------------------------------------------------ */
50 /** FrameSet constructor.
51 * @param colSpec Comma separated list of column widths specified
52 * as pixels, percentage or '*' for variable
53 */
54 public FrameSet(String title, String colSpec, String rowSpec)
55 {
56 super(title);
57
58 this.colSpec=colSpec;
59 this.rowSpec=rowSpec;
60
61 cols=1;
62 rows=1;
63
64 int i=-1;
65 while(colSpec != null && (i=colSpec.indexOf(",",i+1))>=0)
66 cols++;
67
68 i=-1;
69 while(rowSpec != null && (i=rowSpec.indexOf(",",i+1))>=0)
70 rows++;
71
72 frames=new Frame[cols][rows];
73 for(int c=0;c<cols;c++)
74 for(int r=0;r<rows;r++)
75 frames[c][r]=new Frame();
76 }
77
78 /* ------------------------------------------------------------ */
79 public Frame frame(int col, int row)
80 {
81 return frames[col][row];
82 }
83
84 /* ------------------------------------------------------------ */
85 public FrameSet border(boolean threeD, int width, String color)
86 {
87 border=" frameborder=\""+(threeD?"yes":"no")+"\"";
88 if (width>=0)
89 border+=" border=\""+width+"\"";
90
91 if (color!=null)
92 border+=" bordercolor=\""+color+"\"";
93 return this;
94 }
95
96 /* ----------------------------------------------------------------- */
97 public Enumeration namedFrames()
98 {
99 if (frameNames==null)
100 return new Vector().elements();
101 return frameNames.elements();
102 }
103
104 /* ----------------------------------------------------------------- */
105 public Frame frame(String name)
106 {
107 if (frameMap==null)
108 return null;
109 return (Frame) frameMap.get(name);
110 }
111
112 /* ----------------------------------------------------------------- */
113 /** Name a frame.
114 * By convention, frame names match Page section names
115 */
116 public Frame nameFrame(String name,int col, int row)
117 {
118 if (frameMap==null)
119 {
120 frameMap=new Hashtable(10);
121 frameNames=new Vector(10);
122 }
123
124 Frame frame = frames[col][row];
125 if (frame==null)
126 frame = frames[col][row] = new Frame();
127
128 if (frameMap.get(name)==null)
129 frameNames.addElement(name);
130 frameMap.put(name,frame);
131 frame.name(name);
132
133 return frame;
134 }
135
136
137 /* ----------------------------------------------------------------- */
138 public void write(Writer out)
139 throws IOException
140 {
141 writeHtmlHead(out);
142
143 out.write("<frameset "+border);
144
145 if(colSpec!=null)
146 out.write(" cols=\""+colSpec+"\"");
147 if(rowSpec!=null)
148 out.write(" rows=\""+rowSpec+"\"");
149 out.write(">");
150
151 for(int r=0;r<rows;r++)
152 for(int c=0;c<cols;c++)
153 frames[c][r].write(out);
154
155 out.write("<noframes>");
156 writeElements(out);
157 out.write("</noframes>");
158
159 out.write("</frameset>");
160 out.write("</html>");
161 }
162 };
163
164