8187599: Remove dependency of Building Nimbus L&F on JAXB

Reviewed-by: serb, prr
This commit is contained in:
Semyon Sadetsky 2017-10-16 08:47:59 -07:00
parent e363c824b5
commit 74e234cb58
29 changed files with 772 additions and 262 deletions

View File

@ -25,16 +25,41 @@
package build.tools.generatenimbus;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlElement;
class AbstractGradient extends Paint {
public static enum CycleMethod {
public enum CycleMethod {
NO_CYCLE, REFLECT, REPEAT
}
@XmlElement(name="stop") private ArrayList<GradientStop> stops;
private ArrayList<GradientStop> stops;
public List<GradientStop> getStops() { return stops; }
AbstractGradient(XMLStreamReader reader) throws XMLStreamException {
stops = new ArrayList<>();
while (reader.hasNext()) {
int eventType = reader.next();
switch (eventType) {
case XMLStreamReader.START_ELEMENT:
switch (reader.getLocalName()) {
case "stop":
stops.add(new GradientStop(reader));
break;
}
break;
case XMLStreamReader.END_ELEMENT:
switch (reader.getLocalName()) {
case "stop":
break;
default:
return;
}
break;
}
}
}
}

View File

@ -25,20 +25,41 @@
package build.tools.generatenimbus;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlEnumValue;
import javax.xml.stream.XMLStreamReader;
class Border {
enum BorderType {
@XmlEnumValue("empty") EMPTY,
@XmlEnumValue("painter") PAINTER
EMPTY,
PAINTER
}
private BorderType type;
private String painter;
private int top;
private int left;
private int bottom;
private int right;
Border(XMLStreamReader reader) {
switch (reader.getAttributeValue(null, "type")) {
case "empty":
type = BorderType.EMPTY;
break;
case "painter":
type =BorderType.PAINTER;
break;
}
painter = reader.getAttributeValue(null, "painter");
top = Integer.parseInt(reader.getAttributeValue(null, "top"));
left = Integer.parseInt(reader.getAttributeValue(null, "left"));
bottom = Integer.parseInt(reader.getAttributeValue(null, "bottom"));
right = Integer.parseInt(reader.getAttributeValue(null, "right"));
}
@XmlAttribute private BorderType type;
@XmlAttribute private String painter;
@XmlAttribute private int top;
@XmlAttribute private int left;
@XmlAttribute private int bottom;
@XmlAttribute private int right;
public String write() {
switch (type) {

View File

@ -25,18 +25,49 @@
package build.tools.generatenimbus;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlElement;
class Canvas {
@XmlElement private Dimension size;
private Dimension size;
public Dimension getSize() { return size; }
@XmlElement(name="layer") private List<Layer> layers;
private List<Layer> layers;
public List<Layer> getLayers() { return layers; }
@XmlElement private Insets stretchingInsets = null;
private Insets stretchingInsets = null;
Canvas(XMLStreamReader reader) throws XMLStreamException {
layers = new ArrayList<>();
while (reader.hasNext()) {
int eventType = reader.next();
switch (eventType) {
case XMLStreamReader.START_ELEMENT:
switch (reader.getLocalName()) {
case "size":
size = new Dimension(reader);
break;
case "layer":
layers.add(new Layer(reader));
break;
case "stretchingInsets":
stretchingInsets = new Insets(reader);
break;
}
break;
case XMLStreamReader.END_ELEMENT:
switch (reader.getLocalName()) {
case "canvas":
return;
}
break;
}
}
}
public Insets getStretchingInsets() { return stretchingInsets; }
public boolean isBlank() {

View File

@ -25,11 +25,16 @@
package build.tools.generatenimbus;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.stream.XMLStreamReader;
class Dimension {
@XmlAttribute int width;
@XmlAttribute int height;
int width;
int height;
Dimension(XMLStreamReader reader) {
width = Integer.parseInt(reader.getAttributeValue(null, "width"));
height = Integer.parseInt(reader.getAttributeValue(null, "height"));
}
public String write(boolean uiResource) {
String uiSuffix = (uiResource ? "UIResource" : "");

View File

@ -25,18 +25,55 @@
package build.tools.generatenimbus;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
class Ellipse extends Shape {
@XmlAttribute private double x1;
private double x1;
public double getX1() { return x1; }
@XmlAttribute private double x2;
private double x2;
public double getX2() { return x2; }
@XmlAttribute private double y1;
private double y1;
public double getY1() { return y1; }
@XmlAttribute private double y2;
private double y2;
public double getY2() { return y2; }
Ellipse(XMLStreamReader reader) throws XMLStreamException {
x1 = Double.parseDouble(reader.getAttributeValue(null, "x1"));
x2 = Double.parseDouble(reader.getAttributeValue(null, "x2"));
y1 = Double.parseDouble(reader.getAttributeValue(null, "y1"));
y2 = Double.parseDouble(reader.getAttributeValue(null, "y2"));
while (reader.hasNext()) {
int eventType = reader.next();
switch (eventType) {
case XMLStreamReader.START_ELEMENT:
switch (reader.getLocalName()) {
case "matte":
paint = new Matte(reader);
break;
case "gradient":
paint = new Gradient(reader);
break;
case "radialGradient":
paint = new RadialGradient(reader);
break;
case "paintPoints":
paintPoints = new PaintPoints(reader);
break;
}
break;
case XMLStreamReader.END_ELEMENT:
switch (reader.getLocalName()) {
case "ellipse":
return;
}
break;
}
}
}
}

View File

@ -24,11 +24,12 @@
*/
package build.tools.generatenimbus;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import java.io.*;
import java.util.HashMap;
import java.util.Map;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
/**
* Generates the various Java artifacts based on a SynthModel.
@ -105,9 +106,14 @@ public class Generator {
System.out.println(" packagePrefix :" +packagePrefix);
System.out.println(" lafName :" +lafName);
JAXBContext ctx = JAXBContext.newInstance("build.tools.generatenimbus");
Unmarshaller u = ctx.createUnmarshaller();
SynthModel model = (SynthModel) u.unmarshal(skinFile);
SynthModel model;
XMLInputFactory inputFactory = XMLInputFactory.newInstance();
XMLStreamReader reader;
try( InputStream fis = new FileInputStream(skinFile);
InputStream is = new BufferedInputStream(fis)) {
reader = inputFactory.createXMLStreamReader(is);
model = new SynthModel(reader);
}
Generator.init(full, buildDir, packagePrefix, lafName, model);
Generator.getInstance().generate();
}

View File

@ -25,5 +25,11 @@
package build.tools.generatenimbus;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
class Gradient extends AbstractGradient {
Gradient(XMLStreamReader reader) throws XMLStreamException {
super(reader);
}
}

View File

@ -25,16 +25,32 @@
package build.tools.generatenimbus;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
class GradientStop {
@XmlAttribute private float position;
private float position;
public float getPosition() { return position; }
@XmlAttribute private float midpoint;
private float midpoint;
public float getMidpoint() { return midpoint; }
@XmlElement private Matte matte;
private Matte matte;
public Matte getColor() { return matte; }
GradientStop(XMLStreamReader reader) throws XMLStreamException {
position = Float.parseFloat(reader.getAttributeValue(null, "position"));
midpoint = Float.parseFloat(reader.getAttributeValue(null, "midpoint"));
while (reader.hasNext()) {
int eventType = reader.next();
switch (eventType) {
case XMLStreamReader.START_ELEMENT:
matte = new Matte(reader);
break;
case XMLStreamReader.END_ELEMENT:
return;
}
}
}
}

View File

@ -25,13 +25,13 @@
package build.tools.generatenimbus;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.stream.XMLStreamReader;
class Insets {
@XmlAttribute int top;
@XmlAttribute int left;
@XmlAttribute int bottom;
@XmlAttribute int right;
int top;
int left;
int bottom;
int right;
public Insets() {
this(0, 0, 0, 0);
@ -44,6 +44,13 @@ class Insets {
this.right = right;
}
Insets(XMLStreamReader reader) {
top = Integer.parseInt(reader.getAttributeValue(null, "top"));
left = Integer.parseInt(reader.getAttributeValue(null, "left"));
bottom = Integer.parseInt(reader.getAttributeValue(null, "bottom"));
right = Integer.parseInt(reader.getAttributeValue(null, "right"));
}
public String write(boolean uiResource) {
String uiSuffix = (uiResource ? "UIResource" : "");
return String.format("new Insets%s(%d, %d, %d, %d)",

View File

@ -25,22 +25,45 @@
package build.tools.generatenimbus;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlElements;
class Layer {
/** List of shapes in this layer, first shape is painted on top */
@XmlElements({
@XmlElement(name = "ellipse", type = Ellipse.class),
@XmlElement(name = "path", type = Path.class),
@XmlElement(name = "rectangle", type = Rectangle.class)
})
@XmlElementWrapper(name="shapes")
private List<Shape> shapes = new ArrayList<Shape>();
Layer(XMLStreamReader reader) throws XMLStreamException {
while (reader.hasNext()) {
int eventType = reader.next();
switch (eventType) {
case XMLStreamReader.START_ELEMENT:
switch (reader.getLocalName()) {
case "shapes":
shapes = new ArrayList<>();
break;
case "ellipse":
shapes.add(new Ellipse(reader));
break;
case "path":
shapes.add(new Path(reader));
break;
case "rectangle":
shapes.add(new Rectangle(reader));
break;
}
break;
case XMLStreamReader.END_ELEMENT:
switch (reader.getLocalName()) {
case "layer":
return;
}
break;
}
}
}
public List<Shape> getShapes() { return shapes; }
public boolean isEmpty() {

View File

@ -25,24 +25,47 @@
package build.tools.generatenimbus;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.stream.XMLStreamReader;
import java.util.Optional;
class Matte extends Paint {
@XmlAttribute private int red;
@XmlAttribute private int green;
@XmlAttribute private int blue;
@XmlAttribute private int alpha;
private int red;
private int green;
private int blue;
private int alpha;
@XmlAttribute private String uiDefaultParentName = null;
@XmlAttribute private float hueOffset = 0;
@XmlAttribute private float saturationOffset = 0;
@XmlAttribute private float brightnessOffset = 0;
@XmlAttribute private int alphaOffset = 0;
private String uiDefaultParentName = null;
private float hueOffset = 0;
private float saturationOffset = 0;
private float brightnessOffset = 0;
private int alphaOffset = 0;
private String componentPropertyName = null;
@XmlAttribute private String componentPropertyName = null;
public String getComponentPropertyName() { return componentPropertyName; }
@XmlAttribute private boolean uiResource = true;
private boolean uiResource = true;
Matte(XMLStreamReader reader) {
red = Integer.parseInt(reader.getAttributeValue(null, "red"));
green = Integer.parseInt(reader.getAttributeValue(null, "green"));
blue = Integer.parseInt(reader.getAttributeValue(null, "blue"));
alpha = Integer.parseInt(reader.getAttributeValue(null, "alpha"));
uiDefaultParentName = reader.getAttributeValue(null,
"uiDefaultParentName");
hueOffset = Float.parseFloat(reader.getAttributeValue(null,
"hueOffset"));
saturationOffset = Float.parseFloat(reader.getAttributeValue(null,
"saturationOffset"));
brightnessOffset = Float.parseFloat(reader.getAttributeValue(null,
"brightnessOffset"));
alphaOffset = Integer.parseInt(reader.getAttributeValue(null,
"alphaOffset"));
componentPropertyName = reader.getAttributeValue(null,
"componentPropertyName");
uiResource = Boolean.parseBoolean(Optional.ofNullable(
reader.getAttributeValue(null, "uiResource")).orElse("true"));
}
public boolean isAbsolute() {
return uiDefaultParentName == null;

View File

@ -1,62 +0,0 @@
/*
* Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package build.tools.generatenimbus;
import javax.xml.bind.annotation.XmlRegistry;
/**
* This object contains factory methods for each
* Java content interface and Java element interface
* generated in the test package.
* <p>An ObjectFactory allows you to programatically
* construct new instances of the Java representation
* for XML content. The Java representation of XML
* content can consist of schema derived interfaces
* and classes representing the binding of schema
* type definitions, element declarations and model
* groups. Factory methods for each of these are
* provided in this class.
*
*/
@XmlRegistry
public class ObjectFactory {
/**
* Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: test
*
*/
public ObjectFactory() {
}
/**
* Create an instance of {@link SynthModel }
*
*/
public SynthModel createSynthModel() {
return new SynthModel();
}
}

View File

@ -25,15 +25,49 @@
package build.tools.generatenimbus;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
class Path extends Shape {
@XmlElement(name="point")
@XmlElementWrapper(name="points")
private List<Point> controlPoints = new ArrayList<Point>();
Path(XMLStreamReader reader) throws XMLStreamException {
while (reader.hasNext()) {
int eventType = reader.next();
switch (eventType) {
case XMLStreamReader.START_ELEMENT:
switch (reader.getLocalName()) {
case "points":
controlPoints = new ArrayList<>();
break;
case "point":
controlPoints.add(new Point(reader));
break;
case "matte":
paint = new Matte(reader);
break;
case "gradient":
paint = new Gradient(reader);
break;
case "radialGradient":
paint = new RadialGradient(reader);
break;
case "paintPoints":
paintPoints = new PaintPoints(reader);
break;
}
break;
case XMLStreamReader.END_ELEMENT:
switch (reader.getLocalName()) {
case "path":
return;
}
break;
}
}
}
public List<Point> getControlPoints() { return controlPoints; }
}

View File

@ -25,27 +25,37 @@
package build.tools.generatenimbus;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.stream.XMLStreamReader;
class Point {
@XmlAttribute private double x;
private double x;
public double getX() { return x; }
@XmlAttribute private double y;
private double y;
public double getY() { return y; }
@XmlAttribute(name="cp1x") private double cp1x;
private double cp1x;
public double getCp1X() { return cp1x; }
@XmlAttribute(name="cp1y") private double cp1y;
private double cp1y;
public double getCp1Y() { return cp1y; }
@XmlAttribute(name="cp2x") private double cp2x;
private double cp2x;
public double getCp2X() { return cp2x; }
@XmlAttribute(name="cp2y") private double cp2y;
private double cp2y;
public double getCp2Y() { return cp2y; }
Point(XMLStreamReader reader) {
x = Double.parseDouble(reader.getAttributeValue(null, "x"));
y = Double.parseDouble(reader.getAttributeValue(null, "y"));
cp1x = Double.parseDouble(reader.getAttributeValue(null, "cp1x"));
cp1y = Double.parseDouble(reader.getAttributeValue(null, "cp1y"));
cp2x = Double.parseDouble(reader.getAttributeValue(null, "cp2x"));
cp2y = Double.parseDouble(reader.getAttributeValue(null, "cp2y"));
}
public boolean isP1Sharp() {
return cp1x == x && cp1y == y;
}

View File

@ -25,5 +25,11 @@
package build.tools.generatenimbus;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
class RadialGradient extends AbstractGradient {
RadialGradient(XMLStreamReader reader) throws XMLStreamException {
super(reader);
}
}

View File

@ -25,22 +25,23 @@
package build.tools.generatenimbus;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
class Rectangle extends Shape {
@XmlAttribute private double x1;
private double x1;
public double getX1() { return x1; }
@XmlAttribute private double x2;
private double x2;
public double getX2() { return x2; }
@XmlAttribute private double y1;
private double y1;
public double getY1() { return y1; }
@XmlAttribute private double y2;
private double y2;
public double getY2() { return y2; }
@XmlAttribute
public double getRounding() {
double rounding = Math.abs(roundingX - x1) * 2;
return rounding > 2 ? rounding : 0;
@ -58,4 +59,38 @@ class Rectangle extends Shape {
return getRounding() > 0;
}
Rectangle(XMLStreamReader reader) throws XMLStreamException {
x1 = Double.parseDouble(reader.getAttributeValue(null, "x1"));
x2 = Double.parseDouble(reader.getAttributeValue(null, "x2"));
y1 = Double.parseDouble(reader.getAttributeValue(null, "y1"));
y2 = Double.parseDouble(reader.getAttributeValue(null, "y2"));
setRounding(Double.parseDouble(reader.getAttributeValue(null, "rounding")));
while (reader.hasNext()) {
int eventType = reader.next();
switch (eventType) {
case XMLStreamReader.START_ELEMENT:
switch (reader.getLocalName()) {
case "matte":
paint = new Matte(reader);
break;
case "gradient":
paint = new Gradient(reader);
break;
case "radialGradient":
paint = new RadialGradient(reader);
break;
case "paintPoints":
paintPoints = new PaintPoints(reader);
break;
}
break;
case XMLStreamReader.END_ELEMENT:
switch (reader.getLocalName()) {
case "rectangle":
return;
}
break;
}
}
}
}

View File

@ -25,31 +25,30 @@
package build.tools.generatenimbus;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElements;
import javax.xml.stream.XMLStreamReader;
public abstract class Shape {
@XmlElement
private PaintPoints paintPoints;
PaintPoints paintPoints;
public double getPaintX1() { return paintPoints.x1; }
public double getPaintX2() { return paintPoints.x2; }
public double getPaintY1() { return paintPoints.y1; }
public double getPaintY2() { return paintPoints.y2; }
@XmlElements({
@XmlElement(name = "matte", type = Matte.class),
@XmlElement(name = "gradient", type = Gradient.class),
@XmlElement(name = "radialGradient", type = RadialGradient.class)
})
private Paint paint;
Paint paint;
public Paint getPaint() { return paint; }
static class PaintPoints {
@XmlAttribute double x1;
@XmlAttribute double y1;
@XmlAttribute double x2;
@XmlAttribute double y2;
double x1;
double y1;
double x2;
double y2;
PaintPoints(XMLStreamReader reader) {
x1 = Double.parseDouble(reader.getAttributeValue(null, "x1"));
x2 = Double.parseDouble(reader.getAttributeValue(null, "x2"));
y1 = Double.parseDouble(reader.getAttributeValue(null, "y1"));
y2 = Double.parseDouble(reader.getAttributeValue(null, "y2"));
}
}
}

View File

@ -25,26 +25,54 @@
package build.tools.generatenimbus;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import java.util.ArrayList;
import javax.xml.bind.annotation.*;
@XmlRootElement(name="synthModel")
public class SynthModel {
@XmlElement private UIStyle style;
private UIStyle style;
@XmlElement(name="uiColor")
@XmlElementWrapper(name="colors")
private ArrayList<UIColor> colors;
@XmlElement(name="uiFont")
@XmlElementWrapper(name="fonts")
private ArrayList<UIFont> fonts;
@XmlElement(name="uiComponent")
@XmlElementWrapper(name="components")
private ArrayList<UIComponent> components;
SynthModel(XMLStreamReader reader) throws XMLStreamException {
while (reader.hasNext()) {
int eventType = reader.next();
switch (eventType) {
case XMLStreamReader.START_ELEMENT:
switch (reader.getLocalName()) {
case "style":
style = new UIStyle(reader);
break;
case "colors":
colors = new ArrayList<>();
break;
case "fonts":
fonts = new ArrayList<>();
break;
case "components":
components = new ArrayList<>();
break;
case "uiColor":
colors.add(new UIColor(reader));
break;
case "uiFont":
fonts.add(new UIFont(reader));
break;
case "uiComponent":
components.add(new UIComponent(reader));
break;
}
break;
case XMLStreamReader.END_ELEMENT:
break;
}
}
}
public void initStyles() {
for (UIComponent c: components) {
c.initStyles(this.style);

View File

@ -25,11 +25,11 @@
package build.tools.generatenimbus;
import java.awt.Font;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.stream.XMLStreamReader;
import java.awt.*;
class Typeface {
public enum DeriveStyle {
Default, Off, On;
@ -42,12 +42,30 @@ class Typeface {
}
}
@XmlAttribute private String uiDefaultParentName;
@XmlAttribute(name="family") private String name;
@XmlAttribute private int size;
@XmlAttribute private DeriveStyle bold = DeriveStyle.Default;
@XmlAttribute private DeriveStyle italic = DeriveStyle.Default;
@XmlAttribute private float sizeOffset = 1f;
private String uiDefaultParentName;
private String name;
private int size;
private DeriveStyle bold = DeriveStyle.Default;
private DeriveStyle italic = DeriveStyle.Default;
private float sizeOffset = 1f;
Typeface(XMLStreamReader reader) {
uiDefaultParentName = reader.getAttributeValue(null, "uiDefaultParentName");
name = reader.getAttributeValue(null, "family");
try {
size = Integer.parseInt(reader.getAttributeValue(null, "size"));
} catch (Exception e) {}
try {
bold = DeriveStyle.valueOf(reader.getAttributeValue(null, "bold"));
} catch (Exception e) {}
try {
italic = DeriveStyle.valueOf(reader.getAttributeValue(null, "italic"));
} catch (Exception e) {}
try {
sizeOffset = Float.parseFloat(reader.getAttributeValue(null, "sizeOffset"));
} catch (Exception e) {}
}
public boolean isAbsolute() {
return uiDefaultParentName == null;

View File

@ -25,13 +25,23 @@
package build.tools.generatenimbus;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
class UIColor extends UIDefault<Matte> {
@XmlElement
public void setMatte(Matte m) {
setValue(m);
UIColor(XMLStreamReader reader) throws XMLStreamException {
name = reader.getAttributeValue(null, "name");
while (reader.hasNext()) {
int eventType = reader.next();
switch (eventType) {
case XMLStreamReader.START_ELEMENT:
setValue(new Matte(reader));
break;
case XMLStreamReader.END_ELEMENT:
return;
}
}
}
public String write() {

View File

@ -25,19 +25,41 @@
package build.tools.generatenimbus;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
class UIComponent extends UIRegion {
@XmlAttribute private String componentName;
private String componentName;
private List<UIStateType> stateTypes = new ArrayList<>();
UIComponent(XMLStreamReader reader) throws XMLStreamException {
super(reader, false);
componentName = reader.getAttributeValue(null, "componentName");
while (reader.hasNext()) {
int eventType = reader.next();
switch (eventType) {
case XMLStreamReader.START_ELEMENT:
switch (reader.getLocalName()) {
case "stateType":
stateTypes.add(new UIStateType(reader));
break;
default:
parse(reader);
}
break;
case XMLStreamReader.END_ELEMENT:
switch (reader.getLocalName()) {
case "uiComponent":
return;
}
break;
}
}
}
@XmlElement(name="stateType")
@XmlElementWrapper(name="stateTypes")
private List<UIStateType> stateTypes = new ArrayList<UIStateType>();
public List<UIStateType> getStateTypes() { return stateTypes; }
@Override public String getKey() {

View File

@ -25,10 +25,8 @@
package build.tools.generatenimbus;
import javax.xml.bind.annotation.XmlAttribute;
public class UIDefault<T> {
@XmlAttribute private String name;
String name;
private T value;
public String getName() {

View File

@ -25,12 +25,22 @@
package build.tools.generatenimbus;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
class UIFont extends UIDefault<Typeface> {
@XmlElement
public void setTypeface(Typeface t) {
setValue(t);
UIFont(XMLStreamReader reader) throws XMLStreamException {
name = reader.getAttributeValue(null, "name");
while (reader.hasNext()) {
int eventType = reader.next();
switch (eventType) {
case XMLStreamReader.START_ELEMENT:
setValue(new Typeface(reader));
break;
case XMLStreamReader.END_ELEMENT:
return;
}
}
}
public String write() {

View File

@ -25,10 +25,31 @@
package build.tools.generatenimbus;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
class UIIconRegion extends UIRegion {
@XmlAttribute private String basicKey;
private String basicKey;
UIIconRegion(XMLStreamReader reader) throws XMLStreamException {
super(reader, false);
basicKey = reader.getAttributeValue(null, "basicKey");
while (reader.hasNext()) {
int eventType = reader.next();
switch (eventType) {
case XMLStreamReader.START_ELEMENT:
parse(reader);
break;
case XMLStreamReader.END_ELEMENT:
switch (reader.getLocalName()) {
case "uiIconRegion":
return;
}
break;
}
}
}
@Override public void write(StringBuilder sb, StringBuilder styleBuffer, UIComponent comp, String prefix, String pkg) {
Dimension size = null;

View File

@ -25,22 +25,60 @@
package build.tools.generatenimbus;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
class UIProperty extends UIDefault<String> {
public static enum PropertyType {
public enum PropertyType {
BOOLEAN, INT, FLOAT, DOUBLE, STRING, FONT, COLOR, INSETS, DIMENSION, BORDER
}
@XmlAttribute private PropertyType type;
private PropertyType type;
@XmlElement private Border border;
@XmlElement private Dimension dimension;
@XmlElement private Insets insets;
@XmlElement private Matte matte;
@XmlElement private Typeface typeface;
private Border border;
private Dimension dimension;
private Insets insets;
private Matte matte;
private Typeface typeface;
UIProperty(XMLStreamReader reader) throws XMLStreamException {
name = reader.getAttributeValue(null, "name");
setValue(reader.getAttributeValue(null, "value"));
try {
type = PropertyType.valueOf(reader.getAttributeValue(null, "type"));
} catch (Exception e) {}
while (reader.hasNext()) {
int eventType = reader.next();
switch (eventType) {
case XMLStreamReader.START_ELEMENT:
switch (reader.getLocalName()) {
case "border":
border = new Border(reader);
break;
case "dimension":
dimension = new Dimension(reader);
break;
case "insets":
insets = new Insets(reader);
break;
case "matte":
matte = new Matte(reader);
break;
case "typeface":
typeface = new Typeface(reader);
break;
}
break;
case XMLStreamReader.END_ELEMENT:
switch (reader.getLocalName()) {
case "uiProperty":
return;
}
break;
}
}
}
@XmlAttribute
@Override public void setValue(String value) {
super.setValue(value);
}

View File

@ -25,48 +25,92 @@
package build.tools.generatenimbus;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlElements;
class UIRegion {
@XmlAttribute protected String name;
@XmlAttribute protected String key;
@XmlAttribute private boolean opaque = false;
String name;
String key;
private boolean opaque = false;
@XmlElement private Insets contentMargins = new Insets(0, 0, 0, 0);
private Insets contentMargins = new Insets(0, 0, 0, 0);
@XmlElement(name="state")
@XmlElementWrapper(name="backgroundStates")
protected List<UIState> backgroundStates = new ArrayList<UIState>();
public List<UIState> getBackgroundStates() { return backgroundStates; }
@XmlElement(name="state")
@XmlElementWrapper(name="foregroundStates")
protected List<UIState> foregroundStates = new ArrayList<UIState>();
public List<UIState> getForegroundStates() { return foregroundStates; }
@XmlElement(name="state")
@XmlElementWrapper(name="borderStates")
protected List<UIState> borderStates = new ArrayList<UIState>();
public List<UIState> getBorderStates() { return borderStates; }
@XmlElement private UIStyle style = new UIStyle();
UIStyle style = new UIStyle();
@XmlElements({
@XmlElement(name = "region", type = UIRegion.class),
@XmlElement(name = "uiComponent", type = UIComponent.class),
@XmlElement(name = "uiIconRegion", type = UIIconRegion.class)
})
@XmlElementWrapper(name="regions")
private List<UIRegion> subRegions = new ArrayList<UIRegion>();
List<UIRegion> subRegions = new ArrayList<>();
public List<UIRegion> getSubRegions() { return subRegions; }
UIRegion(XMLStreamReader reader, boolean parse)
throws XMLStreamException {
name = reader.getAttributeValue(null, "name");
key = reader.getAttributeValue(null, "key");
opaque = Boolean.parseBoolean(reader.getAttributeValue(null, "opaque"));
if (!parse) {
return;
}
while (reader.hasNext()) {
int eventType = reader.next();
switch (eventType) {
case XMLStreamReader.START_ELEMENT:
parse(reader);
break;
case XMLStreamReader.END_ELEMENT:
switch (reader.getLocalName()) {
case "region":
return;
}
break;
}
}
}
private List<UIState> states = new ArrayList<UIState>();
void parse(XMLStreamReader reader) throws XMLStreamException {
switch (reader.getLocalName()) {
case "backgroundStates":
backgroundStates = states = new ArrayList<>();
break;
case "foregroundStates":
foregroundStates = states = new ArrayList<>();
break;
case "borderStates":
borderStates = states = new ArrayList<>();
break;
case "style":
style = new UIStyle(reader);
break;
case "region":
subRegions.add(new UIRegion(reader, true));
break;
case "uiComponent":
subRegions.add(new UIComponent(reader));
break;
case "uiIconRegion":
subRegions.add(new UIIconRegion(reader));
break;
case "contentMargins":
contentMargins = new Insets(reader);
break;
case "state":
states.add(new UIState(reader));
break;
}
}
protected void initStyles(UIStyle parentStyle) {
style.setParentStyle(parentStyle);
for (UIState state: backgroundStates) {

View File

@ -25,30 +25,56 @@
package build.tools.generatenimbus;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
class UIState {
@XmlAttribute private String stateKeys;
private String stateKeys;
public String getStateKeys() { return stateKeys; }
/** Indicates whether to invert the meaning of the 9-square stretching insets */
@XmlAttribute private boolean inverted;
private boolean inverted;
/** A cached string representing the list of stateKeys deliminated with "+" */
private String cachedName = null;
@XmlElement private Canvas canvas;
private Canvas canvas;
public Canvas getCanvas() { return canvas; }
@XmlElement private UIStyle style;
private UIStyle style;
public UIStyle getStyle() { return style; }
UIState(XMLStreamReader reader) throws XMLStreamException {
stateKeys = reader.getAttributeValue(null, "stateKeys");
inverted = Boolean.parseBoolean(reader.getAttributeValue(null, "inverted"));
while (reader.hasNext()) {
int eventType = reader.next();
switch (eventType) {
case XMLStreamReader.START_ELEMENT:
switch (reader.getLocalName()) {
case "canvas":
canvas = new Canvas(reader);
break;
case "style":
style = new UIStyle(reader);
break;
}
break;
case XMLStreamReader.END_ELEMENT:
switch (reader.getLocalName()) {
case "state":
return;
}
break;
}
}
}
public boolean hasCanvas() {
return ! canvas.isBlank();
}

View File

@ -25,13 +25,37 @@
package build.tools.generatenimbus;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
class UIStateType {
@XmlAttribute private String key;
public String getKey() { return key; }
private String key;
@XmlElement private String codeSnippet;
public String
getKey() { return key; }
private String codeSnippet;
public String getCodeSnippet() { return codeSnippet; }
UIStateType(XMLStreamReader reader) throws XMLStreamException {
key = reader.getAttributeValue(null, "key");
while (reader.hasNext()) {
int eventType = reader.next();
switch (eventType) {
case XMLStreamReader.START_ELEMENT:
switch (reader.getLocalName()) {
case "codeSnippet":
codeSnippet = reader.getElementText();
break;
}
break;
case XMLStreamReader.END_ELEMENT:
switch (reader.getLocalName()) {
case "stateType":
return;
}
break;
}
}
}
}

View File

@ -25,37 +25,86 @@
package build.tools.generatenimbus;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
class UIStyle {
public static enum CacheMode {
public enum CacheMode {
NO_CACHING, FIXED_SIZES, NINE_SQUARE_SCALE
}
@XmlElement private UIColor textForeground = null;
@XmlElement(name="inherit-textForeground")
private UIColor textForeground = null;
private boolean textForegroundInherited = true;
@XmlElement private UIColor textBackground = null;
@XmlElement(name="inherit-textBackground")
private UIColor textBackground = null;
private boolean textBackgroundInherited = true;
@XmlElement private UIColor background = null;
@XmlElement(name="inherit-background")
private UIColor background = null;
private boolean backgroundInherited = true;
@XmlElement private boolean cacheSettingsInherited = true;
@XmlElement CacheMode cacheMode = CacheMode.FIXED_SIZES;
@XmlElement String maxHozCachedImgScaling = "1.0";
@XmlElement String maxVertCachedImgScaling = "1.0";
private boolean cacheSettingsInherited = true;
CacheMode cacheMode = CacheMode.FIXED_SIZES;
String maxHozCachedImgScaling = "1.0";
String maxVertCachedImgScaling = "1.0";
@XmlElement(name="uiProperty")
@XmlElementWrapper(name="uiproperties")
private List<UIProperty> uiProperties = new ArrayList<UIProperty>();
private List<UIProperty> uiProperties = new ArrayList<>();
UIStyle() {
}
UIStyle(XMLStreamReader reader) throws XMLStreamException {
while (reader.hasNext()) {
int eventType = reader.next();
switch (eventType) {
case XMLStreamReader.START_ELEMENT:
switch (reader.getLocalName()) {
case "textForeground":
textForeground = new UIColor(reader);
break;
case "textBackground":
textBackground = new UIColor(reader);
break;
case "background":
background = new UIColor(reader);
break;
case "uiProperty":
uiProperties.add(new UIProperty(reader));
break;
case "inherit-textForeground":
textForegroundInherited = Boolean.parseBoolean(reader.getElementText());
break;
case "inherit-textBackground":
textBackgroundInherited = Boolean.parseBoolean(reader.getElementText());
break;
case "cacheSettingsInherited":
cacheSettingsInherited = Boolean.parseBoolean(reader.getElementText());
break;
case "inherit-background":
backgroundInherited = Boolean.parseBoolean(reader.getElementText());
break;
case "cacheMode":
cacheMode = CacheMode.valueOf(reader.getElementText());
break;
case "maxHozCachedImgScaling":
maxHozCachedImgScaling = reader.getElementText();
break;
case "maxVertCachedImgScaling":
maxVertCachedImgScaling = reader.getElementText();
break;
}
break;
case XMLStreamReader.END_ELEMENT:
switch (reader.getLocalName()) {
case "style":
return;
}
break;
}
}
}
private UIStyle parentStyle = null;
public void setParentStyle(UIStyle parentStyle) {