1 package com.hammurapi.jcapture;
2 import java.io.IOException;
3 import java.net.URL;
4 import java.util.ArrayList;
5 import java.util.HashMap;
6 import java.util.Iterator;
7 import java.util.List;
8 import java.util.Map;
9 import java.util.zip.DataFormatException;
10 
11 import com.flagstone.transform.DefineTag;
12 import com.flagstone.transform.Movie;
13 import com.flagstone.transform.MovieTag;
14 import com.flagstone.transform.Place2;
15 import com.flagstone.transform.datatype.CoordTransform;
16 
17 
18 public class ButtonManager {
19 
20 	private final Map<String, Place2> buttons;
21 	private final List<DefineTag> definitions;
22 
ButtonManager()23 	public ButtonManager() {
24 		buttons = new HashMap<String, Place2>();
25 		definitions = new ArrayList<DefineTag>();
26 	}
27 
loadLibrary(URL libUrl)28 	public void loadLibrary(URL libUrl) throws IOException, DataFormatException {
29 		Movie movie = new Movie();
30 		movie.decodeFromUrl(libUrl);
31 		findDefinitions(movie, definitions);
32 		findButtons(movie, buttons);
33 	}
34 
maxIdentifier()35 	public int maxIdentifier() {
36 		int identifier = 0;
37 		DefineTag object;
38 		for (Iterator<DefineTag>iter = definitions.iterator(); iter.hasNext();) {
39 			object = iter.next();
40 			if (object.getIdentifier() > identifier) {
41 				identifier = object.getIdentifier();
42 			}
43 		}
44 		return identifier;
45 	}
46 
getDefinitions()47 	public List<DefineTag> getDefinitions() {
48 		List<DefineTag> list = new ArrayList<DefineTag>(definitions.size());
49 		for (Iterator<DefineTag>iter = definitions.iterator(); iter.hasNext();) {
50 			list.add((DefineTag) iter.next().copy());
51 		}
52 		return list;
53 	}
54 
getButton(final String name, final int layer, final int xpos, final int ypos)55 	public Place2 getButton(final String name, final int layer, final int xpos, final int ypos) {
56 		Place2 place = (Place2)buttons.get(name).copy();
57 		place.setLayer(layer);
58 		place.setTransform(new CoordTransform(1, 1, 0, 0, xpos, ypos));
59 		return place;
60 	}
61 
findDefinitions(final Movie movie, final List<DefineTag> list)62 	private void findDefinitions(final Movie movie, final List<DefineTag> list) {
63 		MovieTag object;
64 		for (Iterator<MovieTag> iter = movie.getObjects().iterator(); iter.hasNext();) {
65 			object = iter.next();
66 			if (object instanceof DefineTag) {
67 				list.add((DefineTag)object);
68 			}
69 		}
70 	}
71 
findButtons(final Movie movie, final Map<String, Place2> list)72 	private void findButtons(final Movie movie, final Map<String, Place2> list) {
73 		MovieTag object;
74 		Place2 place;
75 		for (Iterator<MovieTag>iter = movie.getObjects().iterator(); iter.hasNext();) {
76 			object = iter.next();
77 			if (object instanceof Place2) {
78 				place = (Place2)object;
79 				if (place.getName() != null) {
80 					list.put(place.getName(), place);
81 				}
82 			}
83 		}
84 	}
85 }
86