271 lines
8.1 KiB
Java
271 lines
8.1 KiB
Java
/* 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.health;
|
|
|
|
import com.google.gdata.client.health.HealthService;
|
|
import sample.util.SimpleCommandLineParser;
|
|
import com.google.gdata.data.health.ProfileFeed;
|
|
import com.google.gdata.data.health.ProfileEntry;
|
|
import com.google.gdata.data.health.RegisterFeed;
|
|
import com.google.gdata.data.health.RegisterEntry;
|
|
import com.google.gdata.data.Feed;
|
|
import com.google.gdata.data.Entry;
|
|
import com.google.gdata.data.TextContent;
|
|
import com.google.gdata.util.ServiceException;
|
|
import com.google.gdata.util.AuthenticationException;
|
|
|
|
import java.io.PrintStream;
|
|
import java.io.IOException;
|
|
import java.io.BufferedReader;
|
|
import java.io.InputStreamReader;
|
|
import java.net.MalformedURLException;
|
|
import java.net.URL;
|
|
import java.util.logging.Logger;
|
|
import java.util.logging.Level;
|
|
import java.util.logging.ConsoleHandler;
|
|
import java.util.List;
|
|
import java.util.ArrayList;
|
|
|
|
/**
|
|
* A demo for GData Health API.
|
|
*
|
|
*
|
|
*/
|
|
public class HealthDemo {
|
|
|
|
/** The message for displaying the usage parameters. */
|
|
private static final String[] USAGE_MESSAGE = {
|
|
"Usage: java HealthDemo.jar --username <user> --password <pass>",
|
|
" [--log] Enable logging of requests"
|
|
};
|
|
|
|
/** Help on all available commands. */
|
|
private static final String[] COMMAND_HELP_MESSAGE = {
|
|
"Commands:",
|
|
" profile [[Prints all of user's medical profiles]]",
|
|
" register [[Prints all of user's external notices]]",
|
|
" exit [[quit sample]]"};
|
|
|
|
|
|
/** Welcome message, introducing the program. */
|
|
private static final String[] WELCOME_MESSAGE = {
|
|
"This is a demo of the Google health Profile Feed!", "",
|
|
"Using this interface, you can view list of Profile entries.",
|
|
""};
|
|
|
|
private static final String FEED_BASE_PATH =
|
|
"https://www.google.com/health/feeds/";
|
|
|
|
private static final String PROFILE_FEED_PATH = FEED_BASE_PATH + "profile/";
|
|
private static final String REGISTER_FEED_PATH = FEED_BASE_PATH + "register/";
|
|
|
|
private static final String PROFILE_LIST_URL_PATH = PROFILE_FEED_PATH + "list";
|
|
|
|
private HealthService service;
|
|
|
|
private List<String> profileIds = null;
|
|
|
|
private PrintStream out;
|
|
|
|
public HealthDemo() {
|
|
}
|
|
|
|
public HealthDemo(HealthService service, PrintStream outputStream)
|
|
throws MalformedURLException {
|
|
this.service = service;
|
|
this.out = outputStream;
|
|
}
|
|
|
|
private List<String> getAllProfileIds() throws IOException, ServiceException {
|
|
if (profileIds != null) {
|
|
return profileIds;
|
|
}
|
|
profileIds = new ArrayList<String>();
|
|
Feed profileListFeed = service.getFeed(
|
|
new URL(PROFILE_LIST_URL_PATH), Feed.class);
|
|
for (Entry profileListEntry : profileListFeed.getEntries()) {
|
|
profileIds.add(
|
|
((TextContent) profileListEntry.getContent()).
|
|
getContent().getPlainText());
|
|
}
|
|
return profileIds;
|
|
}
|
|
|
|
/**
|
|
* Prints the CCR record for specified profile id.
|
|
*
|
|
* @param profileId for which ccr record is requested
|
|
* @throws IOException
|
|
* @throws ServiceException
|
|
*/
|
|
public void showProfileForId(String profileId)
|
|
throws IOException, ServiceException {
|
|
|
|
out.println("CCR records for profile id: " + profileId);
|
|
ProfileFeed feed = service.getFeed(
|
|
new URL(PROFILE_FEED_PATH + "ui/" + profileId), ProfileFeed.class);
|
|
for (ProfileEntry entry : feed.getEntries()) {
|
|
out.println(entry.getContinuityOfCareRecord().getXmlBlob().getBlob());
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* Prints notices corresponding to specified profile.
|
|
*
|
|
* @param profileId whose notices need to be printed.
|
|
* @throws IOException
|
|
* @throws ServiceException
|
|
*/
|
|
public void showNoticesForId(String profileId)
|
|
throws IOException, ServiceException {
|
|
|
|
out.println("Notices for profile id: " + profileId);
|
|
RegisterFeed feed = service.getFeed(
|
|
new URL(REGISTER_FEED_PATH + "ui/" + profileId), RegisterFeed.class);
|
|
|
|
if (feed.getEntries().size() == 0) {
|
|
out.println("There are no notices for this profile");
|
|
}
|
|
|
|
int noticeIndex = 1;
|
|
for (RegisterEntry entry : feed.getEntries()) {
|
|
out.println(noticeIndex + ")" + entry.getTitle().getPlainText());
|
|
noticeIndex++;
|
|
}
|
|
}
|
|
|
|
private String selectProfile(BufferedReader reader)
|
|
throws IOException, ServiceException {
|
|
int profileIndex = 1;
|
|
out.println("Please select a profile from the following list: ");
|
|
for (String e : getAllProfileIds()) {
|
|
out.println(profileIndex++ + ") " + e);
|
|
}
|
|
int choice = -1;
|
|
while (choice < 1 || choice > profileIds.size()) {
|
|
out.println("Select a profile: ");
|
|
choice = Integer.parseInt(reader.readLine());
|
|
}
|
|
return getAllProfileIds().get(choice - 1);
|
|
}
|
|
|
|
/**
|
|
* Reads and executes one command.
|
|
*
|
|
* @param reader to read input from the keyboard
|
|
* @return false if the user quits, true on exception
|
|
*/
|
|
private boolean executeCommand(BufferedReader reader) {
|
|
for (String s : COMMAND_HELP_MESSAGE) {
|
|
out.println(s);
|
|
}
|
|
|
|
System.err.print("Command: ");
|
|
|
|
try {
|
|
String name = reader.readLine();
|
|
|
|
if (name.equals("profile")) {
|
|
showProfileForId(selectProfile(reader));
|
|
} else if (name.equals("register")) {
|
|
showNoticesForId(selectProfile(reader));
|
|
} else if (name.startsWith("q") || name.startsWith("exit")) {
|
|
return false;
|
|
} else {
|
|
out.println("Unknown command.");
|
|
}
|
|
} catch (Exception e) {
|
|
// Show *exactly* what went wrong.
|
|
e.printStackTrace();
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Starts up the demo and prompts for commands.
|
|
*
|
|
* @param username name of user to authenticate (e.g. yourname@gmail.com)
|
|
* @param password password to use for authentication
|
|
* @throws com.google.gdata.util.AuthenticationException
|
|
* if the service is unable to validate the username and password.
|
|
*/
|
|
private void run(String username, String password)
|
|
throws AuthenticationException {
|
|
for (String s : WELCOME_MESSAGE) {
|
|
out.println(s);
|
|
}
|
|
|
|
BufferedReader reader =
|
|
new BufferedReader(new InputStreamReader(System.in));
|
|
|
|
service.setUserCredentials(username, password);
|
|
|
|
while (executeCommand(reader)) {
|
|
}
|
|
}
|
|
|
|
public static void main(String[] args)
|
|
throws IOException, ServiceException {
|
|
SimpleCommandLineParser parser = new SimpleCommandLineParser(args);
|
|
String username = parser.getValue("username", "user", "u");
|
|
String password = parser.getValue("password", "pass", "p");
|
|
boolean help = parser.containsKey("help", "h");
|
|
|
|
if (help || username == null || password == null) {
|
|
usage();
|
|
System.exit(1);
|
|
}
|
|
|
|
if (parser.containsKey("log", "l")) {
|
|
turnOnLogging();
|
|
}
|
|
|
|
HealthDemo demo = new HealthDemo(
|
|
new HealthService("Sample Health Client"), System.out);
|
|
demo.run(username, password);
|
|
}
|
|
|
|
private static void turnOnLogging() {
|
|
|
|
// Configure the logging mechanisms
|
|
Logger httpLogger =
|
|
Logger.getLogger("com.google.gdata.client.http.HttpGDataRequest");
|
|
httpLogger.setLevel(Level.ALL);
|
|
Logger xmlLogger = Logger.getLogger("com.google.gdata.util.XmlParser");
|
|
xmlLogger.setLevel(Level.ALL);
|
|
|
|
// Create a log handler which prints all log events to the console
|
|
ConsoleHandler logHandler = new ConsoleHandler();
|
|
logHandler.setLevel(Level.ALL);
|
|
httpLogger.addHandler(logHandler);
|
|
xmlLogger.addHandler(logHandler);
|
|
}
|
|
|
|
/**
|
|
* Prints out the usage.
|
|
*/
|
|
private static void usage() {
|
|
for (String s : USAGE_MESSAGE) {
|
|
System.out.println(s);
|
|
}
|
|
for (String s : WELCOME_MESSAGE) {
|
|
System.out.println(s);
|
|
}
|
|
}
|
|
}
|