r4fterman/pdf.forms

View on GitHub
src/main/java/org/pdf/forms/model/des/Widget.java

Summary

Maintainability
A
25 mins
Test Coverage
F
58%
package org.pdf.forms.model.des;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.StringJoiner;

import jakarta.xml.bind.annotation.XmlAccessType;
import jakarta.xml.bind.annotation.XmlAccessorType;
import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlRootElement;
import jakarta.xml.bind.annotation.XmlType;

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType
public class Widget {

    private static final String NAME = "name";
    private static final String TYPE = "type";

    private List<Property> property;
    private Properties properties;
    @XmlElement(name = "javascript")
    private JavaScriptContent javaScript;
    private Widgets widgets;

    public Widget() {
        this.property = new ArrayList<>();
        this.properties = new Properties();
    }

    public List<Property> getProperty() {
        return property;
    }

    public void setProperty(final List<Property> property) {
        this.property = property;
    }

    public Properties getProperties() {
        return properties;
    }

    public void setProperties(final Properties properties) {
        this.properties = properties;
    }

    public JavaScriptContent getJavaScript() {
        return javaScript;
    }

    public void setJavaScript(final JavaScriptContent javaScript) {
        this.javaScript = javaScript;
    }

    public Widgets getWidgets() {
        return widgets;
    }

    public void setWidgets(final Widgets widgets) {
        this.widgets = widgets;
    }

    public Optional<String> getType() {
        return getPropertyValue(TYPE);
    }

    public void setType(final String type) {
        setPropertyValue(TYPE, type);
    }

    public Optional<String> getName() {
        return getPropertyValue(NAME);
    }

    public void setName(final String name) {
        setPropertyValue(NAME, name);
    }

    private Optional<String> getPropertyValue(final String propertyName) {
        return getProperty(propertyName)
                .map(Property::getValue);
    }

    private void setPropertyValue(
            final String propertyName,
            final String propertyValue) {
        getProperty(propertyName)
                .ifPresentOrElse(
                        p -> p.setValue(propertyValue),
                        () -> property.add(new Property(propertyName, propertyValue))
                );
    }

    private Optional<Property> getProperty(final String propertyName) {
        return property.stream()
                .filter(p -> p.getName().equals(propertyName))
                .findFirst();
    }



    @Override
    public boolean equals(final Object o) {
        if (o instanceof Widget) {
            final Widget widget = (Widget) o;
            return Objects.equals(property, widget.property)
                    && Objects.equals(properties, widget.properties)
                    && Objects.equals(javaScript, widget.javaScript)
                    && Objects.equals(widgets, widget.widgets);
        }
        return false;
    }

    @Override
    public int hashCode() {
        return Objects.hash(property, properties, javaScript, widgets);
    }

    @Override
    public String toString() {
        return new StringJoiner(", ", Widget.class.getSimpleName() + "[", "]")
                .add("property=" + property)
                .add("properties=" + properties)
                .add("javascript=" + javaScript)
                .add("widgets=" + widgets)
                .toString();
    }
}