XMPArrayImpl.java 6.41 KB
/*
 * Decompiled with CFR 0_118.
 */
package com.adobe.xmp.core.impl;

import com.adobe.xmp.core.XMPArray;
import com.adobe.xmp.core.XMPLanguageAlternative;
import com.adobe.xmp.core.XMPNode;
import com.adobe.xmp.core.XMPNodeVisitor;
import com.adobe.xmp.core.XMPSimple;
import com.adobe.xmp.core.XMPStruct;
import com.adobe.xmp.core.impl.XMPNodeImpl;
import com.adobe.xmp.core.impl.XMPSimpleImpl;
import com.adobe.xmp.core.impl.XMPStructImpl;
import java.util.ArrayList;
import java.util.Iterator;

/*
 * This class specifies class file version 49.0 but uses Java 6 signatures.  Assumed Java 6.
 */
class XMPArrayImpl
extends XMPNodeImpl
implements XMPArray {
    private ArrayList<XMPNode> array = new ArrayList();
    private XMPArray.Form arrayForm;

    XMPArrayImpl(XMPNodeImpl parent, String namespace, String name, XMPArray.Form form) {
        super(parent, namespace, name);
        if (form == null) {
            throw new IllegalArgumentException("An array form must be provided");
        }
        this.arrayForm = form;
    }

    @Override
    public XMPArray.Form getForm() {
        return this.arrayForm;
    }

    @Override
    public int size() {
        return this.array.size();
    }

    @Override
    public void clear() {
        this.array.clear();
    }

    @Override
    public boolean isEmpty() {
        return this.array.isEmpty();
    }

    @Override
    public XMPNode get(int index) {
        return this.array.get(index);
    }

    @Override
    public XMPNode remove(int index) {
        return this.array.remove(index);
    }

    @Override
    public XMPSimple appendSimple(String value) {
        XMPSimpleImpl newSimple = new XMPSimpleImpl(this, null, null, value);
        this.array.add(newSimple);
        return newSimple;
    }

    @Override
    public XMPStruct appendStruct() {
        XMPStructImpl newStruct = new XMPStructImpl(this, null, null);
        this.array.add(newStruct);
        return newStruct;
    }

    @Override
    public XMPArray appendArray(XMPArray.Form form) {
        XMPArrayImpl newArray = new XMPArrayImpl(this, null, null, form);
        if (this.array.add(newArray)) {
            return newArray;
        }
        return null;
    }

    @Override
    public XMPLanguageAlternative appendLanguageAlternative() {
        XMPArray array = this.appendArray(XMPArray.Form.ALTERNATIVE);
        XMPLanguageAlternative newLangAlt = null;
        newLangAlt = XMPLanguageAlternative.newInstance(array);
        if (newLangAlt != null) {
            return newLangAlt;
        }
        this.remove(this.size() - 1);
        return null;
    }

    @Override
    public XMPSimple setSimple(int index, String value) {
        if (index == this.array.size()) {
            return this.appendSimple(value);
        }
        XMPSimpleImpl newSimple = new XMPSimpleImpl(this, null, null, value);
        this.array.set(index, newSimple);
        return newSimple;
    }

    @Override
    public XMPStruct setStruct(int index) {
        if (index == this.array.size()) {
            return this.appendStruct();
        }
        XMPStructImpl newStruct = new XMPStructImpl(this, null, null);
        this.array.set(index, newStruct);
        return newStruct;
    }

    @Override
    public XMPArray setArray(int index, XMPArray.Form form) {
        if (index == this.array.size()) {
            return this.appendArray(form);
        }
        XMPArrayImpl newArray = new XMPArrayImpl(this, null, null, form);
        this.array.set(index, newArray);
        return newArray;
    }

    @Override
    public XMPLanguageAlternative setLanguageAlternative(int index) {
        XMPArray array = this.setArray(index, XMPArray.Form.ALTERNATIVE);
        XMPLanguageAlternative newLangAlt = XMPLanguageAlternative.newInstance(array);
        if (newLangAlt != null) {
            return newLangAlt;
        }
        this.remove(index);
        return null;
    }

    @Override
    public XMPSimple insertSimple(int index, String value) {
        XMPSimpleImpl newSimple = new XMPSimpleImpl(this, null, null, value);
        this.array.add(index, newSimple);
        return newSimple;
    }

    @Override
    public XMPStruct insertStruct(int index) {
        XMPStructImpl newStruct = new XMPStructImpl(this, null, null);
        this.array.add(index, newStruct);
        return newStruct;
    }

    @Override
    public XMPArray insertArray(int index, XMPArray.Form form) {
        XMPArrayImpl newArray = new XMPArrayImpl(this, null, null, form);
        this.array.add(index, newArray);
        return newArray;
    }

    @Override
    public XMPLanguageAlternative insertLanguageAlternative(int index) {
        XMPArray array = this.insertArray(index, XMPArray.Form.ALTERNATIVE);
        XMPLanguageAlternative newLangAlt = XMPLanguageAlternative.newInstance(array);
        if (newLangAlt != null) {
            return newLangAlt;
        }
        this.remove(index);
        return null;
    }

    @Override
    public Iterator<XMPNode> iterator() {
        return this.array.iterator();
    }

    @Override
    public XMPSimple getSimple(int index) {
        try {
            XMPNode node = this.array.get(index);
            if (node != null) {
                return node.adaptTo(XMPSimple.class);
            }
            return null;
        }
        catch (Exception e) {
            return null;
        }
    }

    @Override
    public XMPStruct getStruct(int index) {
        try {
            XMPNode node = this.array.get(index);
            if (node != null) {
                return node.adaptTo(XMPStruct.class);
            }
            return null;
        }
        catch (Exception e) {
            return null;
        }
    }

    @Override
    public XMPArray getArray(int index) {
        try {
            XMPNode node = this.array.get(index);
            if (node != null) {
                return node.adaptTo(XMPArray.class);
            }
            return null;
        }
        catch (Exception e) {
            return null;
        }
    }

    @Override
    public XMPLanguageAlternative getLanguageAlternative(int index) {
        XMPArray array = this.getArray(index);
        return XMPLanguageAlternative.newInstance(array);
    }

    @Override
    public <AdapterType> AdapterType adaptTo(Class<AdapterType> type) {
        if (!type.equals(XMPArray.class)) {
            return null;
        }
        return (AdapterType)this;
    }

    @Override
    public void accept(XMPNodeVisitor visitor) {
        visitor.visit(this);
    }
}