001: /*
002:
003: Licensed to the Apache Software Foundation (ASF) under one or more
004: contributor license agreements. See the NOTICE file distributed with
005: this work for additional information regarding copyright ownership.
006: The ASF licenses this file to You under the Apache License, Version 2.0
007: (the "License"); you may not use this file except in compliance with
008: the License. You may obtain a copy of the License at
009:
010: http://www.apache.org/licenses/LICENSE-2.0
011:
012: Unless required by applicable law or agreed to in writing, software
013: distributed under the License is distributed on an "AS IS" BASIS,
014: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015: See the License for the specific language governing permissions and
016: limitations under the License.
017:
018: */
019: package org.apache.batik.transcoder;
020:
021: import java.util.HashMap;
022: import java.util.Iterator;
023: import java.util.Map;
024:
025: /**
026: * The <tt>TranscodingHints</tt> class defines a way to pass
027: * transcoding parameters or options to any transcoders.
028: *
029: * @author <a href="mailto:Thierry.Kormann@sophia.inria.fr">Thierry Kormann</a>
030: * @version $Id: TranscodingHints.java 475477 2006-11-15 22:44:28Z cam $
031: */
032: public class TranscodingHints extends HashMap {
033:
034: /**
035: * Constructs a new empty <tt>TranscodingHints</tt>.
036: */
037: public TranscodingHints() {
038: this (null);
039: }
040:
041: /**
042: * Constructs a new <tt>TranscodingHints</tt> with keys and values
043: * initialized from the specified Map object (which may be null).
044: *
045: * @param init a map of key/value pairs to initialize the hints
046: * or null if the object should be empty
047: */
048: public TranscodingHints(Map init) {
049: super (7);
050: if (init != null) {
051: putAll(init);
052: }
053: }
054:
055: /**
056: * Returns <tt>true</tt> if this <tt>TranscodingHints</tt> contains a
057: * mapping for the specified key, false otherwise.
058: *
059: * @param key key whose present in this <tt>TranscodingHints</tt>
060: * is to be tested.
061: * @exception ClassCastException key is not of type
062: * <tt>TranscodingHints.Key</tt>
063: */
064: public boolean containsKey(Object key) {
065: return super .containsKey(key);
066: }
067:
068: /**
069: * Returns the value to which the specified key is mapped.
070: *
071: * @param key a trancoding hint key
072: * @exception ClassCastException key is not of type
073: * <tt>TranscodingHints.Key</tt>
074: */
075: public Object get(Object key) {
076: return super .get(key);
077: }
078:
079: /**
080: * Maps the specified <tt>key</tt> to the specified <tt>value</tt>
081: * in this <tt>TranscodingHints</tt> object.
082: *
083: * @param key the trancoding hint key.
084: * @param value the trancoding hint value.
085: * @exception IllegalArgumentException value is not
086: * appropriate for the specified key.
087: * @exception ClassCastException key is not of type
088: * <tt>TranscodingHints.Key</tt>
089: */
090: public Object put(Object key, Object value) {
091: if (!((Key) key).isCompatibleValue(value)) {
092: throw new IllegalArgumentException(value
093: + " incompatible with " + key);
094: }
095: return super .put(key, value);
096: }
097:
098: /**
099: * Removes the key and its corresponding value from this
100: * <tt>TranscodingHints</tt> object.
101: *
102: * @param key the trancoding hints key that needs to be removed
103: * @exception ClassCastException key is not of type
104: * <tt>TranscodingHints.Key</tt>
105: */
106: public Object remove(Object key) {
107: return super .remove(key);
108: }
109:
110: /**
111: * Copies all of the keys and corresponding values from the
112: * specified <tt>TranscodingHints</tt> object to this
113: * <tt>TranscodingHints</tt> object.
114: */
115: public void putAll(TranscodingHints hints) {
116: super .putAll(hints);
117: }
118:
119: /**
120: * Copies all of the mappings from the specified <tt>Map</tt>
121: * to this <tt>TranscodingHints</tt>.
122: *
123: * @param m mappings to be stored in this <tt>TranscodingHints</tt>.
124: * @exception ClassCastException key is not of type
125: * <tt>TranscodingHints.Key</tt>
126: */
127: public void putAll(Map m) {
128: if (m instanceof TranscodingHints) {
129: putAll(((TranscodingHints) m));
130: } else {
131: Iterator iter = m.entrySet().iterator();
132: while (iter.hasNext()) {
133: Map.Entry entry = (Map.Entry) iter.next();
134: put(entry.getKey(), entry.getValue());
135: }
136: }
137: }
138:
139: /**
140: * Defines the base type of all keys used to control various
141: * aspects of the transcoding operations.
142: */
143: public abstract static class Key {
144:
145: /**
146: * Construcst a key.
147: */
148: protected Key() {
149: }
150:
151: /**
152: * Returns true if the specified object is a valid value for
153: * this key, false otherwise.
154: */
155: public abstract boolean isCompatibleValue(Object val);
156: }
157: }
|