KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > openlaszlo > iv > flash > util > FlashOutput


1 /*
2  * $Id: FlashOutput.java,v 1.3 2002/05/16 05:08:41 skavish Exp $
3  *
4  * ===========================================================================
5  *
6  * The JGenerator Software License, Version 1.0
7  *
8  * Copyright (c) 2000 Dmitry Skavish (skavish@usa.net). All rights reserved.
9  *
10  * Redistribution and use in source and binary forms, with or without
11  * modification, are permitted provided that the following conditions are met:
12  *
13  * 1. Redistributions of source code must retain the above copyright
14  * notice, this list of conditions and the following disclaimer.
15  *
16  * 2. Redistributions in binary form must reproduce the above copyright
17  * notice, this list of conditions and the following disclaimer in
18  * the documentation and/or other materials provided with the
19  * distribution.
20  *
21  * 3. The end-user documentation included with the redistribution, if
22  * any, must include the following acknowlegement:
23  * "This product includes software developed by Dmitry Skavish
24  * (skavish@usa.net, http://www.flashgap.com/)."
25  * Alternately, this acknowlegement may appear in the software itself,
26  * if and wherever such third-party acknowlegements normally appear.
27  *
28  * 4. The name "The JGenerator" must not be used to endorse or promote
29  * products derived from this software without prior written permission.
30  * For written permission, please contact skavish@usa.net.
31  *
32  * 5. Products derived from this software may not be called "The JGenerator"
33  * nor may "The JGenerator" appear in their names without prior written
34  * permission of Dmitry Skavish.
35  *
36  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
37  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
38  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
39  * DISCLAIMED. IN NO EVENT SHALL DMITRY SKAVISH OR THE OTHER
40  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
41  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
42  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
43  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
44  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
45  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
46  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
47  * SUCH DAMAGE.
48  *
49  */

50
51 package org.openlaszlo.iv.flash.util;
52
53 import java.io.*;
54 import java.util.*;
55 import org.openlaszlo.iv.flash.api.*;
56 import org.openlaszlo.iv.flash.api.text.*;
57
58 /**
59  * This class is basically a {@link FlashBuffer} which
60  * tracks flash definitions written into the buffer and
61  * provides unique IDs for them.
62  * <P>
63  * The class also supports hierarchy of flash buffers
64  *
65  * @author Dmitry Skavish
66  * @see FlashBuffer
67  */

68 public class FlashOutput extends FlashBuffer {
69
70     // definitions caches
71
private FlashItem jpegTables;
72     private Hashtable hashTable = new Hashtable();
73     private FlashOutput main;
74     private int currentID = 1;
75     private Object JavaDoc userData;
76     private FlashFile file;
77
78     public FlashOutput( int size ) {
79         super(size);
80     }
81
82     public FlashOutput( FlashFile file, int size ) {
83         super(size);
84         this.file = file;
85     }
86
87     public FlashOutput( FlashOutput main, int size ) {
88         super(size);
89         this.main = main;
90     }
91
92     public FlashFile getFlashFile() {
93         if( main != null ) return main.getFlashFile();
94         return file;
95     }
96
97     /**
98      * Gets ID of flash definition.
99      *
100      * @param def flash definition ID of which is requisted
101      * @return unique ID
102      */

103     public int getDefID( FlashDef def ) {
104         return getObjID( def );
105     }
106
107     private synchronized int getObjID( Object JavaDoc key ) {
108         if( main != null ) return main.getObjID( key );
109         Integer JavaDoc id = (Integer JavaDoc) hashTable.get( key );
110         if( id != null ) return id.intValue();
111         hashTable.put( key, new Integer JavaDoc(currentID) );
112         /*if( key instanceof FlashDef ) {
113             FlashDef def = (FlashDef) key;
114             System.out.println( "FlashOutput.getDefID: oldID="+def.getID()+", newID="+currentID );
115         }*/

116         return currentID++;
117     }
118
119     public synchronized boolean defined( Object JavaDoc key ) {
120         if (main != null) return main.defined(key);
121         return (hashTable.get( key ) != null );
122     }
123
124     /**
125      * Writes ID of flash definiton into the buffer.
126      *
127      * @param def flash definiton, ID of which will be written
128      */

129     public void writeDefID( FlashDef def ) {
130         writeWord( getObjID( def ) );
131     }
132
133     /**
134      * Writes ID of font into the buffer.
135      *
136      * @param font font, ID of which will be written
137      */

138     public void writeFontID( Font font ) {
139         writeWord( getObjID( font ) );
140     }
141
142     public void writeJPegTables( FlashItem jt ) {
143         if( main != null ) {
144             main.writeJPegTables( jt );
145         } else {
146             if( jpegTables != null ) return;
147             jpegTables = jt;
148             jt.write( this );
149         }
150     }
151
152     public void setUserData( Object JavaDoc data ) {
153         userData = data;
154     }
155
156     public Object JavaDoc getUserData() {
157         return userData;
158     }
159 }
160
Popular Tags