1 /*
2  * Copyright (c) 2012, 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.
8  *
9  * This code is distributed in the hope that it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12  * version 2 for more details (a copy is included in the LICENSE file that
13  * accompanied this code).
14  *
15  * You should have received a copy of the GNU General Public License version
16  * 2 along with this work; if not, write to the Free Software Foundation,
17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18  *
19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20  * or visit www.oracle.com if you need additional information or have any
21  * questions.
22  */
23 
24 /*
25  * @test
26  * @bug 4432628 7186799
27  * @run main RemoveElement
28  * @summary Checks if ImageMetadataFormatImpl.removeElement properly
29  * removes the element from its parent's child list.
30  */
31 
32 import javax.imageio.metadata.IIOMetadataFormatImpl;
33 import javax.imageio.metadata.IIOMetadataFormat;
34 import javax.imageio.ImageTypeSpecifier;
35 
36 public class RemoveElement {
37 
main(String[] args)38     public static void main(String[] args) {
39         String elem = "elem2";
40         int policy = IIOMetadataFormat.CHILD_POLICY_SOME;
41         MyFormatImpl fmt = new MyFormatImpl("root", 1, 10);
42         fmt.addElement("elem1", "root", policy);
43         fmt.addElement(elem, "root", policy);
44         fmt.removeElement("elem1");
45 
46         boolean gotIAE = false;
47         try {
48             fmt.getChildPolicy("elem1");
49         } catch (IllegalArgumentException e) {
50             gotIAE = true;
51         }
52         if (!gotIAE) {
53             throw new RuntimeException("Element is still present!");
54         }
55         String[] chNames = fmt.getChildNames("root");
56         if (chNames.length != 1) {
57             throw new RuntimeException("Root still has more than 1 child!");
58         }
59         if (!elem.equals(chNames[0])) {
60             throw new RuntimeException("Root's remaining child is incorrect!");
61         }
62     }
63 
64     static class MyFormatImpl extends IIOMetadataFormatImpl {
65 
MyFormatImpl(String root, int minChildren, int maxChildren)66         MyFormatImpl(String root, int minChildren, int maxChildren) {
67             super(root, minChildren, maxChildren);
68         }
69 
addElement(String elementName, String parentName, int childPolicy)70         public void addElement(String elementName,
71                                String parentName,
72                                int childPolicy) {
73             super.addElement(elementName, parentName, childPolicy);
74         }
75 
removeElement(String elementName)76         public void removeElement(String elementName) {
77             super.removeElement(elementName);
78         }
79 
canNodeAppear(String elementName, ImageTypeSpecifier imageType)80         public boolean canNodeAppear(String elementName,
81                                      ImageTypeSpecifier imageType) {
82             return true;
83         }
84     }
85 
86 }
87