/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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.apache.vysper.xmpp.stanza.dataforms; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.apache.vysper.compliance.SpecCompliant; import org.apache.vysper.compliance.SpecCompliant.ComplianceCoverage; import org.apache.vysper.compliance.SpecCompliant.ComplianceStatus; /** * object model for data forms, according to XEP-0004, as used by many XMPP extensions (and the core). * * to encode this model, use {@link org.apache.vysper.xmpp.stanza.dataforms.DataFormEncoder} */ @SpecCompliant(spec = "XEP-0004", status = ComplianceStatus.IN_PROGRESS, coverage = ComplianceCoverage.PARTIAL) public class DataForm { public static enum Type { cancel, form, result, submit; public String value() { return name(); } } protected Type type; protected List<String> instructions = new ArrayList<String>(); protected String title; protected final List<Field> fields = new ArrayList<Field>(); protected final List<List<Field>> items = new ArrayList<List<Field>>(); public Type getType() { return type; } public void setType(Type type) { this.type = type; } public Iterator<String> getInstructionIterator() { return instructions.iterator(); } public void addInstruction(String instructions) { this.instructions.add(instructions); } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public Iterator<Field> getFieldIterator() { return fields.iterator(); } public void addField(Field field) { fields.add(field); } public Iterator<List<Field>> getItemIterator() { return items.iterator(); } public void addItem(List<Field> item) { items.add(item); } public Iterator<Field> getReportedIterator() { List<Field> reportedFields = new ArrayList<Field>(); if (items.size() == 0) return reportedFields.iterator(); // reported fields are implicitly defined by item fields // here, reported fields are only taken from the first item. // there is no consistency check if the remaining fields report the same fields, // as the spec requires (XEP-004#3.4, last sentence). List<Field> fieldPrototype = items.get(0); for (Field field : fieldPrototype) { // copy the relevant reported information reportedFields.add(new Field(field.getLabel(), field.getType(), field.getVar())); } return reportedFields.iterator(); } }