/* Copyright (c) 2008 Google Inc.
*
* Licensed 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 sample.codesearch;
import com.google.gdata.client.codesearch.CodeSearchService;
import com.google.gdata.util.common.xml.XmlWriter;
import com.google.gdata.data.codesearch.CodeSearchFeed;
import com.google.gdata.data.codesearch.CodeSearchEntry;
import com.google.gdata.data.codesearch.Match;
import sample.util.SimpleCommandLineParser;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.net.URL;
/**
* An application that serves as a sample to show how the CodeSearchService
* can be used to retrieve data from Google Code Search.
*
*
*/
public class CodeSearchClient {
private static final String CODESEARCH_FEEDS_URL =
"https://www.google.com/codesearch/feeds/search?";
private CodeSearchService codesearchService;
private URL privateFeedUrl;
public CodeSearchClient(String query, String nresults, String start)
throws Exception {
codesearchService = new CodeSearchService("gdata-sample-codesearch");
privateFeedUrl = new URL(CODESEARCH_FEEDS_URL + "q=" + query
+ "&start-index=" + start +
"&max-results="+ nresults);
}
/**
* Driver for the sample.
*
* @param out outputStream to which to write status and messages
*/
public void run(PrintStream out) throws Exception {
retrieveFeed(out);
}
/**
* Retrieves a query feed.
*
* @param out outputStream on which to write status info
* @throws Exception if error in retrieving feed
*/
private void retrieveFeed(PrintStream out)
throws Exception {
PrintWriter writer = new PrintWriter(out);
XmlWriter xmlWriter = new XmlWriter(writer);
CodeSearchFeed myFeed =
codesearchService.getFeed(privateFeedUrl, CodeSearchFeed.class);
out.println("Retrieved feed: ");
out.println("Title: " + myFeed.getTitle().getPlainText());
out.println("Entries: " + myFeed.getEntries().size());
out.println("Updated: " + myFeed.getUpdated());
out.println("Start in: " + myFeed.getStartIndex());
out.println("Entries:");
for (CodeSearchEntry entry: myFeed.getEntries() ){
// Default Gdata elements
out.println("\tId: " + entry.getId());
out.println("\tTitle: " + entry.getTitle());
out.println("\tLink: " + entry.getHtmlLink().getHref());
out.println("\tUpdated: " + entry.getUpdated());
out.println("\tAuthor: " + entry.getAuthors().get(0).getName());
if (entry.getRights() != null)
out.println("\tLicense:" + entry.getRights().getPlainText());
// Codesearch Elements
out.println("\tPackage: ");
out.println("\t\t Name:" +
entry.getPackage().getName());
out.println("\t\t URI:" +
entry.getPackage().getUri());
entry.getPackage().generate(
xmlWriter,
codesearchService.getExtensionProfile());
out.println("XML: ");
writer.flush();
out.println("");
out.println("\tFile: " + entry.getFile().getName());
entry.getFile().generate(
xmlWriter,
codesearchService.getExtensionProfile());
out.println("XML: ");
writer.flush();
out.println("");
out.println("\tMatches: ");
for (Match m : entry.getMatches()) {
out.println(m.getLineNumber() + ": " +
m.getLineText().getPlainText());
m.generate(
xmlWriter,
codesearchService.getExtensionProfile());
out.println("XML: ");
writer.flush();
out.println("");
}
}
}
/**
* Main entry point. Parses arguments and creates and invokes the
* CodeSearchClient.
*/
public static void main(String[] arg)
throws Exception {
SimpleCommandLineParser parser = new SimpleCommandLineParser(arg);
String query = parser.getValue("query", "query", "q");
String nresults = parser.getValue("nresults", "nresults", "nr");
String start = parser.getValue("start", "index", "start");
boolean help = parser.containsKey("help", "h");
if (help || (query == null)) {
usage();
System.exit(1);
}
CodeSearchClient client = new CodeSearchClient(query, nresults, start);
client.run(System.out);
}
/**
* Prints usage of this application.
*/
private static void usage() {
System.out.println(
"Usage: java CodeSearchClient --query query_regex [--nresults number_of_results]"
+ " [--start start_index] ");
System.out.println(
"\nA simple application that uses the provided query\n" +
"and returns the results provided by the Google CodeSearch Service\n");
}
}