All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jivesoftware.smackx.xdatalayout.packet.DataLayout Maven / Gradle / Ivy

/**
 *
 * Copyright 2014 Anno van Vliet
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.jivesoftware.smackx.xdatalayout.packet;

import java.util.ArrayList;
import java.util.List;

import org.jivesoftware.smack.packet.ExtensionElement;
import org.jivesoftware.smack.packet.NamedElement;
import org.jivesoftware.smack.util.XmlStringBuilder;

/**
 * DataLayout Extension according to XEP-0141: Data Forms Layout.
 * Defines a backwards-compatible extension to the XMPP Data Forms protocol that
 * enables an application to specify form layouts, including the layout of
 * form fields, sections within pages, and subsections within sections.
 *
 * @author Anno van Vliet
 */
public class DataLayout implements ExtensionElement {

    public static final String ELEMENT = "page";
    public static final String NAMESPACE = "http://jabber.org/protocol/xdata-layout";

    private final List pageLayout = new ArrayList<>();
    private final String label;

    /**
     * Data layout constructor.
     * @param label
     */
    public DataLayout(String label) {
        this.label = label;
    }

    /**
     * Gets the value of the pageLayout property.
     * 

* Objects of the following type(s) are allowed in the list: {@link String }, * {@link Section }, {@link Fieldref } and {@link Reportedref } * * @return list of DataFormLayoutElements. */ public List getPageLayout() { return this.pageLayout; } /** * Gets the value of the label property. * * @return possible object is {@link String } */ public String getLabel() { return label; } /* * (non-Javadoc) * @see org.jivesoftware.smack.packet.PacketExtension#getElementName() */ @Override public String getElementName() { return ELEMENT; } /* * (non-Javadoc) * @see org.jivesoftware.smack.packet.PacketExtension#getNamespace() */ @Override public String getNamespace() { return NAMESPACE; } /* * (non-Javadoc) * @see org.jivesoftware.smack.packet.PacketExtension#toXML() */ @Override public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { XmlStringBuilder buf = new XmlStringBuilder(this); buf.optAttribute("label", getLabel()); buf.rightAngleBracket(); walkList(buf, getPageLayout()); buf.closeElement(this); return buf; } /** * @param buf * @param pageLayout */ private static void walkList(XmlStringBuilder buf, List pageLayout) { for (DataFormLayoutElement object : pageLayout) { buf.append(object.toXML()); } } public static class Fieldref implements DataFormLayoutElement{ public static final String ELEMENT = "fieldref"; private final String var; /** * Field ref constructor. * @param var reference to a field */ public Fieldref(String var) { this.var = var; } @Override public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { XmlStringBuilder buf = new XmlStringBuilder(this); buf.attribute("var", getVar()); buf.closeEmptyElement(); return buf; } /** * Gets the value of the var property. * * @return possible object is {@link String } */ public String getVar() { return var; } @Override public String getElementName() { return ELEMENT; } } public static class Section implements DataFormLayoutElement{ public static final String ELEMENT = "section"; private final List sectionLayout = new ArrayList<>(); private final String label; /** * Section constructor. * @param label */ public Section(String label) { this.label = label; } /** * Gets the value of the sectionLayout property. *

* This accessor method returns a reference to the live list, not a snapshot. Therefore any modification you * make to the returned list will be present inside the object. This is why there is not a set * method for the sectionLayout property. *

* For example, to add a new item, do as follows: * *

         * getSectionLayout().add(newItem);
         * 
*

* Objects of the following type(s) are allowed in the list: {@link String }, * {@link Section }, {@link Fieldref } and {@link Reportedref } * * @return list of DataFormLayoutElements. */ public List getSectionLayout() { return this.sectionLayout; } @Override public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { XmlStringBuilder buf = new XmlStringBuilder(this); buf.optAttribute("label", getLabel()); buf.rightAngleBracket(); walkList(buf, getSectionLayout()); buf.closeElement(ELEMENT); return buf; } /** * Gets the value of the label property. * * @return possible object is {@link String } */ public String getLabel() { return label; } @Override public String getElementName() { return ELEMENT; } } public static class Reportedref implements DataFormLayoutElement{ public static final String ELEMENT = "reportedref"; @Override public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { XmlStringBuilder buf = new XmlStringBuilder(this); buf.closeEmptyElement(); return buf; } @Override public String getElementName() { return ELEMENT; } } public static class Text implements DataFormLayoutElement{ public static final String ELEMENT = "text"; private final String text; /** * Text constructor. * @param text reference to a field */ public Text(String text) { this.text = text; } @Override public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { XmlStringBuilder buf = new XmlStringBuilder(); buf.element(ELEMENT, getText()); return buf; } /** * Gets the value of the var property. * * @return possible object is {@link String } */ public String getText() { return text; } @Override public String getElementName() { return ELEMENT; } } public interface DataFormLayoutElement extends NamedElement { } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy