Project

General

Profile

1
package eu.dnetlib.pace.model;
2

    
3
import java.util.Collection;
4
import java.util.Iterator;
5
import java.util.List;
6
import java.util.ListIterator;
7

    
8
import com.google.common.base.Function;
9
import com.google.common.base.Joiner;
10
import com.google.common.base.Predicate;
11
import com.google.common.collect.Iterables;
12
import com.google.common.collect.Lists;
13

    
14
import com.google.gson.Gson;
15
import com.google.gson.GsonBuilder;
16
import com.google.gson.JsonObject;
17
import eu.dnetlib.pace.config.Type;
18

    
19
/**
20
 * The Class FieldListImpl.
21
 */
22
public class FieldListImpl extends AbstractField implements FieldList {
23

    
24
	/** The fields. */
25
	private List<Field> fields;
26

    
27
	/**
28
	 * Instantiates a new field list impl.
29
	 */
30
	public FieldListImpl() {
31
		fields = Lists.newArrayList();
32
	}
33

    
34
	/**
35
	 * Instantiates a new field list impl.
36
	 *
37
	 * @param name
38
	 *            the name
39
	 */
40
	public FieldListImpl(final String name, final Type type) {
41
		super(type, name);
42
		fields = Lists.newArrayList();
43
	}
44

    
45
	/*
46
	 * (non-Javadoc)
47
	 * 
48
	 * @see java.util.List#add(java.lang.Object)
49
	 */
50
	@Override
51
	public boolean add(final Field f) {
52
		return fields.add(f);
53
	}
54

    
55
	/*
56
	 * (non-Javadoc)
57
	 * 
58
	 * @see java.util.List#add(int, java.lang.Object)
59
	 */
60
	@Override
61
	public void add(final int i, final Field f) {
62
		fields.add(i, f);
63
	}
64

    
65
	/*
66
	 * (non-Javadoc)
67
	 * 
68
	 * @see java.util.List#addAll(java.util.Collection)
69
	 */
70
	@Override
71
	public boolean addAll(final Collection<? extends Field> f) {
72
		return fields.addAll(f);
73
	}
74

    
75
	/*
76
	 * (non-Javadoc)
77
	 * 
78
	 * @see java.util.List#addAll(int, java.util.Collection)
79
	 */
80
	@Override
81
	public boolean addAll(final int i, final Collection<? extends Field> f) {
82
		return fields.addAll(i, f);
83
	}
84

    
85
	/*
86
	 * (non-Javadoc)
87
	 * 
88
	 * @see java.util.List#clear()
89
	 */
90
	@Override
91
	public void clear() {
92
		fields.clear();
93
	}
94

    
95
	/*
96
	 * (non-Javadoc)
97
	 * 
98
	 * @see java.util.List#contains(java.lang.Object)
99
	 */
100
	@Override
101
	public boolean contains(final Object o) {
102
		return fields.contains(o);
103
	}
104

    
105
	/*
106
	 * (non-Javadoc)
107
	 * 
108
	 * @see java.util.List#containsAll(java.util.Collection)
109
	 */
110
	@Override
111
	public boolean containsAll(final Collection<?> f) {
112
		return fields.containsAll(f);
113
	}
114

    
115
	/*
116
	 * (non-Javadoc)
117
	 * 
118
	 * @see java.util.List#get(int)
119
	 */
120
	@Override
121
	public Field get(final int i) {
122
		return fields.get(i);
123
	}
124

    
125
	/*
126
	 * (non-Javadoc)
127
	 * 
128
	 * @see java.util.List#indexOf(java.lang.Object)
129
	 */
130
	@Override
131
	public int indexOf(final Object o) {
132
		return fields.indexOf(o);
133
	}
134

    
135
	/*
136
	 * (non-Javadoc)
137
	 * 
138
	 * @see eu.dnetlib.pace.model.Field#isEmpty()
139
	 */
140
	@Override
141
	public boolean isEmpty() {
142
		return Iterables.all(fields, new Predicate<Field>() {
143

    
144
			@Override
145
			public boolean apply(final Field f) {
146
				return f.isEmpty();
147
			}
148
		});
149
	}
150

    
151
	/*
152
	 * (non-Javadoc)
153
	 * 
154
	 * @see java.lang.Iterable#iterator()
155
	 */
156
	@Override
157
	public Iterator<Field> iterator() {
158
		return fields.iterator();
159
	}
160

    
161
	/*
162
	 * (non-Javadoc)
163
	 * 
164
	 * @see java.util.List#lastIndexOf(java.lang.Object)
165
	 */
166
	@Override
167
	public int lastIndexOf(final Object o) {
168
		return fields.lastIndexOf(o);
169
	}
170

    
171
	/*
172
	 * (non-Javadoc)
173
	 * 
174
	 * @see java.util.List#listIterator()
175
	 */
176
	@Override
177
	public ListIterator<Field> listIterator() {
178
		return fields.listIterator();
179
	}
180

    
181
	/*
182
	 * (non-Javadoc)
183
	 * 
184
	 * @see java.util.List#listIterator(int)
185
	 */
186
	@Override
187
	public ListIterator<Field> listIterator(final int i) {
188
		return fields.listIterator(i);
189
	}
190

    
191
	/*
192
	 * (non-Javadoc)
193
	 * 
194
	 * @see java.util.List#remove(java.lang.Object)
195
	 */
196
	@Override
197
	public boolean remove(final Object o) {
198
		return fields.remove(o);
199
	}
200

    
201
	/*
202
	 * (non-Javadoc)
203
	 * 
204
	 * @see java.util.List#remove(int)
205
	 */
206
	@Override
207
	public Field remove(final int i) {
208
		return fields.remove(i);
209
	}
210

    
211
	/*
212
	 * (non-Javadoc)
213
	 * 
214
	 * @see java.util.List#removeAll(java.util.Collection)
215
	 */
216
	@Override
217
	public boolean removeAll(final Collection<?> f) {
218
		return fields.removeAll(f);
219
	}
220

    
221
	/*
222
	 * (non-Javadoc)
223
	 * 
224
	 * @see java.util.List#retainAll(java.util.Collection)
225
	 */
226
	@Override
227
	public boolean retainAll(final Collection<?> f) {
228
		return fields.retainAll(f);
229
	}
230

    
231
	/*
232
	 * (non-Javadoc)
233
	 * 
234
	 * @see java.util.List#set(int, java.lang.Object)
235
	 */
236
	@Override
237
	public Field set(final int i, final Field f) {
238
		return fields.set(i, f);
239
	}
240

    
241
	/*
242
	 * (non-Javadoc)
243
	 * 
244
	 * @see java.util.List#size()
245
	 */
246
	@Override
247
	public int size() {
248
		return fields.size();
249
	}
250

    
251
	/*
252
	 * (non-Javadoc)
253
	 * 
254
	 * @see java.util.List#subList(int, int)
255
	 */
256
	@Override
257
	public List<Field> subList(final int from, final int to) {
258
		return fields.subList(from, to);
259
	}
260

    
261
	/*
262
	 * (non-Javadoc)
263
	 * 
264
	 * @see java.util.List#toArray()
265
	 */
266
	@Override
267
	public Object[] toArray() {
268
		return fields.toArray();
269
	}
270

    
271
	/*
272
	 * (non-Javadoc)
273
	 * 
274
	 * @see java.util.List#toArray(java.lang.Object[])
275
	 */
276
	@Override
277
	public <T> T[] toArray(final T[] t) {
278
		return fields.toArray(t);
279
	}
280

    
281
	/*
282
	 * (non-Javadoc)
283
	 * 
284
	 * @see eu.dnetlib.pace.model.Field#stringValue()
285
	 */
286
	@Override
287
	public String stringValue() {
288
		switch (getType()) {
289

    
290
		case List:
291
		case Int:
292
		case String:
293
			return Joiner.on(" ").join(stringList());
294
		case JSON:
295
			final String json = new Gson().toJson(stringList());
296
			return json;
297
		default:
298
			throw new IllegalArgumentException("Unknown type: " + getType().toString());
299
		}
300
	}
301

    
302
	/*
303
	 * (non-Javadoc)
304
	 * 
305
	 * @see eu.dnetlib.pace.model.FieldList#stringList()
306
	 */
307
	@Override
308
	public List<String> stringList() {
309
		return Lists.newArrayList(Iterables.transform(fields, getValuesTransformer()));
310
	}
311

    
312
	private Function<Field, String> getValuesTransformer() {
313
		return new Function<Field, String>() {
314

    
315
			@Override
316
			public String apply(final Field f) {
317
				return f.stringValue();
318
			}
319
		};
320
	}
321

    
322
	@Override
323
	public String toString() {
324
		return stringList().toString();
325
	}
326

    
327
}
(8-8/15)