View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.apache.maven.search.backend.smo.internal;
20  
21  import java.io.IOException;
22  import java.time.Instant;
23  import java.util.ArrayList;
24  import java.util.List;
25  import java.util.concurrent.atomic.AtomicInteger;
26  
27  import org.apache.maven.search.api.MAVEN;
28  import org.apache.maven.search.api.Record;
29  import org.apache.maven.search.api.SearchRequest;
30  import org.apache.maven.search.api.request.BooleanQuery;
31  import org.apache.maven.search.api.request.FieldQuery;
32  import org.apache.maven.search.api.request.Query;
33  import org.apache.maven.search.backend.smo.SmoSearchBackend;
34  import org.apache.maven.search.backend.smo.SmoSearchBackendFactory;
35  import org.apache.maven.search.backend.smo.SmoSearchResponse;
36  import org.junit.Ignore;
37  import org.junit.Test;
38  
39  @Ignore("This is not a test, is more a showcase")
40  public class SmoSearchBackendImplTest {
41      private final SmoSearchBackend backend = SmoSearchBackendFactory.createDefault();
42  
43      private void dumpSingle(AtomicInteger counter, List<Record> page) {
44          for (Record record : page) {
45              StringBuilder sb = new StringBuilder();
46              sb.append(record.getValue(MAVEN.GROUP_ID))
47                      .append(":")
48                      .append(record.getValue(MAVEN.ARTIFACT_ID))
49                      .append(":")
50                      .append(record.getValue(MAVEN.VERSION));
51              if (record.hasField(MAVEN.PACKAGING)) {
52                  if (record.hasField(MAVEN.CLASSIFIER)) {
53                      sb.append(":").append(record.getValue(MAVEN.CLASSIFIER));
54                  }
55                  sb.append(":").append(record.getValue(MAVEN.PACKAGING));
56              }
57  
58              List<String> remarks = new ArrayList<>();
59              if (record.getLastUpdated() != null) {
60                  remarks.add("lastUpdate=" + Instant.ofEpochMilli(record.getLastUpdated()));
61              }
62              if (record.hasField(MAVEN.VERSION_COUNT)) {
63                  remarks.add("versionCount=" + record.getValue(MAVEN.VERSION_COUNT));
64              }
65              if (record.hasField(MAVEN.HAS_SOURCE)) {
66                  remarks.add("hasSource=" + record.getValue(MAVEN.HAS_SOURCE));
67              }
68              if (record.hasField(MAVEN.HAS_JAVADOC)) {
69                  remarks.add("hasJavadoc=" + record.getValue(MAVEN.HAS_JAVADOC));
70              }
71  
72              System.out.print(counter.incrementAndGet() + ". " + sb);
73              if (!remarks.isEmpty()) {
74                  System.out.print(" " + remarks);
75              }
76              System.out.println();
77          }
78      }
79  
80      private void dumpPage(SmoSearchResponse searchResponse) throws IOException {
81          AtomicInteger counter = new AtomicInteger(0);
82          System.out.println(
83                  "QUERY: " + searchResponse.getSearchRequest().getQuery().toString());
84          System.out.println("URL: " + searchResponse.getSearchUri());
85          dumpSingle(counter, searchResponse.getPage());
86          while (searchResponse.getTotalHits() > searchResponse.getCurrentHits()) {
87              System.out.println("NEXT PAGE (size "
88                      + searchResponse.getSearchRequest().getPaging().getPageSize() + ")");
89              searchResponse = backend.search(searchResponse.getSearchRequest().nextPage());
90              dumpSingle(counter, searchResponse.getPage());
91              if (counter.get() > 50) {
92                  System.out.println("ABORTED TO NOT SPAM");
93                  break; // do not spam the SMO service
94              }
95          }
96          System.out.println();
97      }
98  
99      @Test
100     public void smoke() throws IOException {
101         SearchRequest searchRequest = new SearchRequest(Query.query("smoke"));
102         SmoSearchResponse searchResponse = backend.search(searchRequest);
103         System.out.println("TOTAL HITS: " + searchResponse.getTotalHits());
104         dumpPage(searchResponse);
105     }
106 
107     @Test
108     public void g() throws IOException {
109         SearchRequest searchRequest =
110                 new SearchRequest(FieldQuery.fieldQuery(MAVEN.GROUP_ID, "org.apache.maven.plugins"));
111         SmoSearchResponse searchResponse = backend.search(searchRequest);
112         System.out.println("TOTAL HITS: " + searchResponse.getTotalHits());
113         dumpPage(searchResponse);
114     }
115 
116     @Test
117     public void ga() throws IOException {
118         SearchRequest searchRequest = new SearchRequest(BooleanQuery.and(
119                 FieldQuery.fieldQuery(MAVEN.GROUP_ID, "org.apache.maven.plugins"),
120                 FieldQuery.fieldQuery(MAVEN.ARTIFACT_ID, "maven-clean-plugin")));
121         SmoSearchResponse searchResponse = backend.search(searchRequest);
122         System.out.println("TOTAL HITS: " + searchResponse.getTotalHits());
123         dumpPage(searchResponse);
124     }
125 
126     @Test
127     public void gav() throws IOException {
128         SearchRequest searchRequest = new SearchRequest(BooleanQuery.and(
129                 FieldQuery.fieldQuery(MAVEN.GROUP_ID, "org.apache.maven.plugins"),
130                 FieldQuery.fieldQuery(MAVEN.ARTIFACT_ID, "maven-clean-plugin"),
131                 FieldQuery.fieldQuery(MAVEN.VERSION, "3.1.0")));
132         SmoSearchResponse searchResponse = backend.search(searchRequest);
133         System.out.println("TOTAL HITS: " + searchResponse.getTotalHits());
134         dumpPage(searchResponse);
135     }
136 
137     @Test
138     public void sha1() throws IOException {
139         SearchRequest searchRequest =
140                 new SearchRequest(FieldQuery.fieldQuery(MAVEN.SHA1, "8ac9e16d933b6fb43bc7f576336b8f4d7eb5ba12"));
141         SmoSearchResponse searchResponse = backend.search(searchRequest);
142         System.out.println("TOTAL HITS: " + searchResponse.getTotalHits());
143         dumpPage(searchResponse);
144     }
145 
146     @Test
147     public void cn() throws IOException {
148         SearchRequest searchRequest =
149                 new SearchRequest(FieldQuery.fieldQuery(MAVEN.CLASS_NAME, "MavenRepositorySystem"));
150         SmoSearchResponse searchResponse = backend.search(searchRequest);
151         System.out.println("TOTAL HITS: " + searchResponse.getTotalHits());
152         dumpPage(searchResponse);
153     }
154 
155     @Test
156     public void fqcn() throws IOException {
157         SearchRequest searchRequest = new SearchRequest(
158                 FieldQuery.fieldQuery(MAVEN.FQ_CLASS_NAME, "org.apache.maven.bridge.MavenRepositorySystem"));
159         SmoSearchResponse searchResponse = backend.search(searchRequest);
160         System.out.println("TOTAL HITS: " + searchResponse.getTotalHits());
161         dumpPage(searchResponse);
162     }
163 }