001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017:
018: /* $Id$ */
019:
020: package org.apache.xmlgraphics.ps.dsc.events;
021:
022: import java.io.IOException;
023: import java.util.Iterator;
024: import java.util.List;
025:
026: import org.apache.xmlgraphics.ps.DSCConstants;
027: import org.apache.xmlgraphics.ps.PSGenerator;
028: import org.apache.xmlgraphics.ps.PSProcSet;
029: import org.apache.xmlgraphics.ps.PSResource;
030:
031: /**
032: * Represents a %BeginResource DSC comment.
033: */
034: public class DSCCommentBeginResource extends AbstractDSCComment {
035:
036: private PSResource resource;
037: private Integer min;
038: private Integer max;
039:
040: /**
041: * Creates a new instance
042: */
043: public DSCCommentBeginResource() {
044: }
045:
046: /**
047: * Creates a new instance for a given PSResource instance
048: * @param resource the resource
049: */
050: public DSCCommentBeginResource(PSResource resource) {
051: this .resource = resource;
052: }
053:
054: /**
055: * Creates a new instance for a given PSResource instance
056: * @param resource the resource
057: * @param min Minimum VM used by the resource
058: * @param max Maximum VM used by the resource
059: */
060: public DSCCommentBeginResource(PSResource resource, int min, int max) {
061: this .resource = resource;
062: this .min = new Integer(min);
063: this .max = new Integer(max);
064: }
065:
066: /**
067: * Returns the associated PSResource.
068: * @return the resource
069: */
070: public PSResource getResource() {
071: return this .resource;
072: }
073:
074: /**
075: * Returns the minimum VM used by the resource.
076: * @return the minimum VM used by the resource
077: */
078: public Integer getMin() {
079: return this .min;
080: }
081:
082: /**
083: * Returns the maximum VM used by the resource.
084: * @return the maximum VM used by the resource
085: */
086: public Integer getMax() {
087: return this .max;
088: }
089:
090: /**
091: * @see org.apache.xmlgraphics.ps.dsc.events.DSCComment#getName()
092: */
093: public String getName() {
094: return DSCConstants.BEGIN_RESOURCE;
095: }
096:
097: /**
098: * @see org.apache.xmlgraphics.ps.dsc.events.DSCComment#hasValues()
099: */
100: public boolean hasValues() {
101: return true;
102: }
103:
104: /**
105: * @see org.apache.xmlgraphics.ps.dsc.events.DSCComment#parseValue(java.lang.String)
106: */
107: public void parseValue(String value) {
108: List params = splitParams(value);
109: Iterator iter = params.iterator();
110: String name = (String) iter.next();
111: if (PSResource.TYPE_FONT.equals(name)) {
112: String fontname = (String) iter.next();
113: this .resource = new PSResource(name, fontname);
114: } else if (PSResource.TYPE_PROCSET.equals(name)) {
115: String procname = (String) iter.next();
116: String version = (String) iter.next();
117: String revision = (String) iter.next();
118: this .resource = new PSProcSet(procname, Float
119: .parseFloat(version), Integer.parseInt(revision));
120: } else if (PSResource.TYPE_FILE.equals(name)) {
121: String filename = (String) iter.next();
122: this .resource = new PSResource(name, filename);
123: } else {
124: throw new IllegalArgumentException(
125: "Invalid resource type: " + name);
126: }
127: }
128:
129: /**
130: * @see org.apache.xmlgraphics.ps.dsc.events.DSCEvent#generate(
131: * org.apache.xmlgraphics.ps.PSGenerator)
132: */
133: public void generate(PSGenerator gen) throws IOException {
134: if (getMin() != null) {
135: Object[] params = new Object[] { getResource(), getMin(),
136: getMax() };
137: gen.writeDSCComment(getName(), params);
138: } else {
139: gen.writeDSCComment(getName(), getResource());
140: }
141: }
142:
143: }
|