1 package org.apache.maven.search;
2
3 /*
4 * Licensed to the Apache Software Foundation (ASF) under one
5 * or more contributor license agreements. See the NOTICE file
6 * distributed with this work for additional information
7 * regarding copyright ownership. The ASF licenses this file
8 * to you under the Apache License, Version 2.0 (the
9 * "License"); you may not use this file except in compliance
10 * with the License. You may obtain a copy of the License at
11 *
12 * http://www.apache.org/licenses/LICENSE-2.0
13 *
14 * Unless required by applicable law or agreed to in writing,
15 * software distributed under the License is distributed on an
16 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 * KIND, either express or implied. See the License for the
18 * specific language governing permissions and limitations
19 * under the License.
20 */
21
22 import java.util.Collections;
23 import java.util.Map;
24 import java.util.Set;
25
26 import org.apache.maven.search.request.Field;
27
28 import static java.util.Objects.requireNonNull;
29
30 /**
31 * A search response record.
32 */
33 public final class Record
34 {
35 private final String backendId;
36
37 private final String repositoryId;
38
39 private final String uid;
40
41 private final Long lastUpdated;
42
43 private final Map<Field, Object> fields;
44
45 public Record( String backendId,
46 String repositoryId,
47 String uid,
48 Long lastUpdated,
49 Map<Field, Object> fields )
50 {
51 this.backendId = requireNonNull( backendId );
52 this.repositoryId = requireNonNull( repositoryId );
53 this.uid = uid;
54 this.lastUpdated = lastUpdated;
55 this.fields = Collections.unmodifiableMap( fields );
56 }
57
58 /**
59 * Returns {@link SearchBackend#getBackendId()} of originating search backend. Never {@code null}.
60 */
61 public String getBackendId()
62 {
63 return backendId;
64 }
65
66 /**
67 * Returns {@link SearchBackend#getRepositoryId()}) of originating search backend. Never {@code null}.
68 */
69 public String getRepositoryId()
70 {
71 return repositoryId;
72 }
73
74 /**
75 * Returns UID (unique if combined with {@link #getBackendId()}) of search result record, if provided by backend.
76 * May be {@code null} if not provided.
77 */
78 public String getUid()
79 {
80 return uid;
81 }
82
83 /**
84 * Returns {@link Long}, representing "last updated" timestamp as epoch millis if provided by backend. May be
85 * {@code null} if not provided.
86 */
87 public Long getLastUpdated()
88 {
89 return lastUpdated;
90 }
91
92 /**
93 * Returns unmodifiable map of all values keyed by {@link Field} backing this record.
94 */
95 public Map<Field, Object> getFields()
96 {
97 return fields;
98 }
99
100 /**
101 * Returns unmodifiable set of present fields in this record, never {@code null}.
102 */
103 public Set<Field> fieldSet()
104 {
105 return fields.keySet();
106 }
107
108 /**
109 * Returns {@code true} if given field is present in this record.
110 */
111 public boolean hasField( Field field )
112 {
113 return fields.containsKey( field );
114 }
115
116 /**
117 * Returns the value belonging to given field in this record, or {@code null} if field not present.
118 */
119 public String getValue( Field.StringField field )
120 {
121 return field.getFieldValue( fields );
122 }
123
124 /**
125 * Returns the value belonging to given field in this record, or {@code null} if field not present.
126 */
127 public Number getValue( Field.NumberField field )
128 {
129 return field.getFieldValue( fields );
130 }
131
132 /**
133 * Returns the value belonging to given field in this record, or {@code null} if field not present.
134 */
135 public Boolean getValue( Field.BooleanField field )
136 {
137 return field.getFieldValue( fields );
138 }
139 }