1 /*
   2  * Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.  Oracle designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 package com.sun.imageio.plugins.wbmp;
  27 
  28 import java.io.UnsupportedEncodingException;
  29 import java.util.ArrayList;
  30 import java.util.Iterator;
  31 import java.util.List;
  32 import javax.imageio.ImageTypeSpecifier;
  33 import javax.imageio.metadata.IIOMetadata;
  34 import javax.imageio.metadata.IIOMetadataNode;
  35 import javax.imageio.metadata.IIOMetadataFormat;
  36 import javax.imageio.metadata.IIOMetadataFormatImpl;
  37 import org.w3c.dom.Node;
  38 import com.sun.imageio.plugins.common.I18N;
  39 
  40 import com.sun.imageio.plugins.common.ImageUtil;
  41 
  42 public class WBMPMetadata extends IIOMetadata {
  43 
  44     static final String nativeMetadataFormatName =
  45         "javax_imageio_wbmp_1.0";
  46 
  47     public int wbmpType;
  48 
  49     public int width;
  50     public int height;
  51 
  52     public WBMPMetadata() {
  53         super(true,
  54               nativeMetadataFormatName,
  55               "com.sun.imageio.plugins.wbmp.WBMPMetadataFormat",
  56               null, null);
  57     }
  58 
  59     public boolean isReadOnly() {
  60         return true;
  61     }
  62 
  63     public Node getAsTree(String formatName) {
  64         if (formatName.equals(nativeMetadataFormatName)) {
  65             return getNativeTree();
  66         } else if (formatName.equals
  67                    (IIOMetadataFormatImpl.standardMetadataFormatName)) {
  68             return getStandardTree();
  69         } else {
  70             throw new IllegalArgumentException(I18N.getString("WBMPMetadata0"));
  71         }
  72     }
  73 
  74     private Node getNativeTree() {
  75         IIOMetadataNode root =
  76             new IIOMetadataNode(nativeMetadataFormatName);
  77 
  78         addChildNode(root, "WBMPType", wbmpType);
  79         addChildNode(root, "Width", width);
  80         addChildNode(root, "Height", height);
  81 
  82         return root;
  83     }
  84 
  85     public void setFromTree(String formatName, Node root) {
  86         throw new IllegalStateException(I18N.getString("WBMPMetadata1"));
  87     }
  88 
  89     public void mergeTree(String formatName, Node root) {
  90         throw new IllegalStateException(I18N.getString("WBMPMetadata1"));
  91     }
  92 
  93     public void reset() {
  94         throw new IllegalStateException(I18N.getString("WBMPMetadata1"));
  95     }
  96 
  97     private IIOMetadataNode addChildNode(IIOMetadataNode root,
  98                                          String name,
  99                                          Object object) {
 100         IIOMetadataNode child = new IIOMetadataNode(name);
 101         if (object != null) {
 102             child.setUserObject(object);
 103             child.setNodeValue(ImageUtil.convertObjectToString(object));
 104         }
 105         root.appendChild(child);
 106         return child;
 107     }
 108 
 109 
 110     protected IIOMetadataNode getStandardChromaNode() {
 111 
 112         IIOMetadataNode node = new IIOMetadataNode("Chroma");
 113         IIOMetadataNode subNode = new IIOMetadataNode("BlackIsZero");
 114         subNode.setAttribute("value", "TRUE");
 115 
 116         node.appendChild(subNode);
 117         return node;
 118     }
 119 
 120 
 121     protected IIOMetadataNode getStandardDimensionNode() {
 122         IIOMetadataNode dimension_node = new IIOMetadataNode("Dimension");
 123         IIOMetadataNode node = null; // scratch node
 124 
 125         // PixelAspectRatio not in image
 126 
 127         node = new IIOMetadataNode("ImageOrientation");
 128         node.setAttribute("value", "Normal");
 129         dimension_node.appendChild(node);
 130 
 131         return dimension_node;
 132     }
 133 
 134 }