1d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** 2d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * $RCSfile$ 3d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * $Revision$ 4d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * $Date$ 5d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 6d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Copyright 2003-2007 Jive Software. 7d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 8d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); 9d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * you may not use this file except in compliance with the License. 10d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * You may obtain a copy of the License at 11d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 12d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * http://www.apache.org/licenses/LICENSE-2.0 13d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 14d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Unless required by applicable law or agreed to in writing, software 15d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * distributed under the License is distributed on an "AS IS" BASIS, 16d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * See the License for the specific language governing permissions and 18d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * limitations under the License. 19d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 20d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 21d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpackage org.jivesoftware.smackx; 22d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 23d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport org.jivesoftware.smack.packet.Packet; 24d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport org.jivesoftware.smack.packet.PacketExtension; 25d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport org.jivesoftware.smackx.packet.DataForm; 26d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 27d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport java.util.ArrayList; 28d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport java.util.Collections; 29d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport java.util.Iterator; 30d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport java.util.List; 31d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 32d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** 33d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Represents a set of data results returned as part of a search. The report is structured 34d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * in columns and rows. 35d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 36d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @author Gaston Dombiak 37d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 38d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic class ReportedData { 39d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 40d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private List<Column> columns = new ArrayList<Column>(); 41d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private List<Row> rows = new ArrayList<Row>(); 42d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private String title = ""; 43d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 44d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 45d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Returns a new ReportedData if the packet is used for reporting data and includes an 46d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * extension that matches the elementName and namespace "x","jabber:x:data". 47d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 48d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param packet the packet used for reporting data. 49d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 50d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public static ReportedData getReportedDataFrom(Packet packet) { 51d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen // Check if the packet includes the DataForm extension 52d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen PacketExtension packetExtension = packet.getExtension("x","jabber:x:data"); 53d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen if (packetExtension != null) { 54d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen // Check if the existing DataForm is a result of a search 55d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen DataForm dataForm = (DataForm) packetExtension; 56d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen if (dataForm.getReportedData() != null) 57d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return new ReportedData(dataForm); 58d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 59d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen // Otherwise return null 60d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return null; 61d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 62d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 63d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 64d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 65d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Creates a new ReportedData based on the returned dataForm from a search 66d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen *(namespace "jabber:iq:search"). 67d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 68d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param dataForm the dataForm returned from a search (namespace "jabber:iq:search"). 69d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 70d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private ReportedData(DataForm dataForm) { 71d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen // Add the columns to the report based on the reported data fields 72d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen for (Iterator fields = dataForm.getReportedData().getFields(); fields.hasNext();) { 73d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen FormField field = (FormField)fields.next(); 74d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen columns.add(new Column(field.getLabel(), field.getVariable(), field.getType())); 75d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 76d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 77d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen // Add the rows to the report based on the form's items 78d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen for (Iterator items = dataForm.getItems(); items.hasNext();) { 79d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen DataForm.Item item = (DataForm.Item)items.next(); 80d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen List<Field> fieldList = new ArrayList<Field>(columns.size()); 81d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen FormField field; 82d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen for (Iterator fields = item.getFields(); fields.hasNext();) { 83d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen field = (FormField) fields.next(); 84d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen // The field is created with all the values of the data form's field 85d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen List<String> values = new ArrayList<String>(); 86d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen for (Iterator<String> it=field.getValues(); it.hasNext();) { 87d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen values.add(it.next()); 88d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 89d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen fieldList.add(new Field(field.getVariable(), values)); 90d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 91d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen rows.add(new Row(fieldList)); 92d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 93d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 94d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen // Set the report's title 95d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.title = dataForm.getTitle(); 96d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 97d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 98d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 99d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public ReportedData(){ 100d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen // Allow for model creation of ReportedData. 101d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 102d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 103d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 104d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Adds a new <code>Row</code>. 105d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param row the new row to add. 106d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 107d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public void addRow(Row row){ 108d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen rows.add(row); 109d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 110d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 111d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 112d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Adds a new <code>Column</code> 113d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param column the column to add. 114d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 115d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public void addColumn(Column column){ 116d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen columns.add(column); 117d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 118d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 119d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 120d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 121d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Returns an Iterator for the rows returned from a search. 122d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 123d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return an Iterator for the rows returned from a search. 124d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 125d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public Iterator<Row> getRows() { 126d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return Collections.unmodifiableList(new ArrayList<Row>(rows)).iterator(); 127d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 128d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 129d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 130d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Returns an Iterator for the columns returned from a search. 131d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 132d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return an Iterator for the columns returned from a search. 133d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 134d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public Iterator<Column> getColumns() { 135d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return Collections.unmodifiableList(new ArrayList<Column>(columns)).iterator(); 136d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 137d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 138d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 139d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 140d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Returns the report's title. It is similar to the title on a web page or an X 141d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * window. 142d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 143d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return title of the report. 144d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 145d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public String getTitle() { 146d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return title; 147d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 148d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 149d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 150d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 151d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Represents the columns definition of the reported data. 152d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 153d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @author Gaston Dombiak 154d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 155d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public static class Column { 156d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private String label; 157d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private String variable; 158d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private String type; 159d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 160d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 161d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Creates a new column with the specified definition. 162d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 163d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param label the columns's label. 164d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param variable the variable name of the column. 165d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param type the format for the returned data. 166d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 167d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public Column(String label, String variable, String type) { 168d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.label = label; 169d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.variable = variable; 170d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.type = type; 171d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 172d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 173d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 174d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Returns the column's label. 175d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 176d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return label of the column. 177d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 178d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public String getLabel() { 179d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return label; 180d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 181d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 182d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 183d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 184d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Returns the column's data format. Valid formats are: 185d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 186d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * <ul> 187d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * <li>text-single -> single line or word of text 188d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * <li>text-private -> instead of showing the user what they typed, you show ***** to 189d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * protect it 190d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * <li>text-multi -> multiple lines of text entry 191d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * <li>list-single -> given a list of choices, pick one 192d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * <li>list-multi -> given a list of choices, pick one or more 193d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * <li>boolean -> 0 or 1, true or false, yes or no. Default value is 0 194d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * <li>fixed -> fixed for putting in text to show sections, or just advertise your web 195d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * site in the middle of the form 196d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * <li>hidden -> is not given to the user at all, but returned with the questionnaire 197d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * <li>jid-single -> Jabber ID - choosing a JID from your roster, and entering one based 198d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * on the rules for a JID. 199d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * <li>jid-multi -> multiple entries for JIDs 200d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * </ul> 201d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 202d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return format for the returned data. 203d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 204d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public String getType() { 205d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return type; 206d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 207d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 208d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 209d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 210d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Returns the variable name that the column is showing. 211d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 212d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return the variable name of the column. 213d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 214d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public String getVariable() { 215d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return variable; 216d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 217d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 218d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 219d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 220d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 221d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public static class Row { 222d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private List<Field> fields = new ArrayList<Field>(); 223d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 224d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public Row(List<Field> fields) { 225d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.fields = fields; 226d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 227d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 228d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 229d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Returns the values of the field whose variable matches the requested variable. 230d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 231d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param variable the variable to match. 232d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return the values of the field whose variable matches the requested variable. 233d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 234d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public Iterator getValues(String variable) { 235d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen for(Iterator<Field> it=getFields();it.hasNext();) { 236d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen Field field = it.next(); 237d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen if (variable.equalsIgnoreCase(field.getVariable())) { 238d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return field.getValues(); 239d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 240d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 241d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return null; 242d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 243d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 244d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 245d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Returns the fields that define the data that goes with the item. 246d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 247d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return the fields that define the data that goes with the item. 248d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 249d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private Iterator<Field> getFields() { 250d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return Collections.unmodifiableList(new ArrayList<Field>(fields)).iterator(); 251d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 252d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 253d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 254d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public static class Field { 255d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private String variable; 256d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private List<String> values; 257d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 258d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public Field(String variable, List<String> values) { 259d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.variable = variable; 260d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.values = values; 261d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 262d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 263d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 264d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Returns the variable name that the field represents. 265d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 266d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return the variable name of the field. 267d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 268d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public String getVariable() { 269d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return variable; 270d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 271d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 272d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 273d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Returns an iterator on the values reported as part of the search. 274d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 275d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return the returned values of the search. 276d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 277d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public Iterator<String> getValues() { 278d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return Collections.unmodifiableList(values).iterator(); 279d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 280d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 281d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 282