/******************************************************************************* * Copyright (c) 2015 * * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. *******************************************************************************/ package jsettlers.graphics.ui.generate; import java.util.ArrayList; import java.util.regex.Pattern; import org.xml.sax.Attributes; public class LayoutPanel { public final int x; public final int y; public final int width; public final int height; private final String id; private final String className; private final ArrayList<LayoutPanel> children = new ArrayList<>(); private final ArrayList<AbstractArgument> arguments = new ArrayList<>(); public LayoutPanel(Attributes attributes) { this.x = getIntAttribute(attributes, "x", 0); this.y = getIntAttribute(attributes, "y", 0); if (attributes.getIndex("width") > 0) { this.width = getIntAttribute(attributes, "width", 100); } else { this.width = getIntAttribute(attributes, "maxx", 100) - x; } if (attributes.getIndex("height") > 0) { this.height = getIntAttribute(attributes, "height", 100); } else { this.height = getIntAttribute(attributes, "maxy", 100) - y; } this.id = attributes.getValue("id"); if (id != null && !Pattern.matches("\\w+", id)) { throw new IllegalArgumentException("Illegal ID: " + id); } this.className = getClassName(attributes); // try { // Class<?> classTest = Class.forName(className); // if (!UIPanel.class.isAssignableFrom(classTest)) { // throw new IllegalArgumentException("This is no valid UI panel: " + className); // } // } catch (ClassNotFoundException e) { // throw new IllegalArgumentException("There is no such class: " + className); // } } private String getClassName(Attributes attributes) { String name = attributes.getValue("class"); if (name == null) { name = "UIPanel"; } if (!name.contains(".")) { name = "jsettlers.graphics.ui." + name; } return name; } private int getIntAttribute(Attributes attributes, String qName, int defaultValue) { String val = attributes.getValue(qName); if (val == null) { return defaultValue; } else { return Integer.parseInt(val); } } public void addChild(LayoutPanel panel) { children.add(panel); } public ArrayList<LayoutPanel> getChildren() { return children; } public String getId() { return id; } public String getClassName() { return className; } public void addArgument(AbstractArgument imageArgument) { arguments.add(imageArgument); } public ArrayList<AbstractArgument> getArguments() { return arguments; } }