Inital commit
This commit is contained in:
@@ -0,0 +1,250 @@
|
||||
/* Copyright (c) 2006 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.gbase.cmdline;
|
||||
|
||||
import com.google.api.gbase.client.FeedURLFactory;
|
||||
import com.google.api.gbase.client.GoogleBaseService;
|
||||
import com.google.gdata.client.Service;
|
||||
import com.google.gdata.util.AuthenticationException;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
|
||||
|
||||
/**
|
||||
* One command that is part of CustomerTool.
|
||||
* This class contains code that is common to all
|
||||
* commands. It deals, in particular, with the creation
|
||||
* of the GData service object.
|
||||
*/
|
||||
abstract class Command {
|
||||
|
||||
/**
|
||||
* URL of the google authentication server to use for log in.
|
||||
*/
|
||||
private static final String DEFAULT_AUTH_HOSTNAME = "www.google.com";
|
||||
|
||||
/**
|
||||
* Username for google base (e-mail address).
|
||||
*/
|
||||
protected String username;
|
||||
|
||||
/**
|
||||
* The user's password.
|
||||
*/
|
||||
protected String password;
|
||||
|
||||
/**
|
||||
* Base url of the google base server.
|
||||
*/
|
||||
protected FeedURLFactory urlFactory = FeedURLFactory.getDefault();
|
||||
|
||||
/**
|
||||
* Base url of the google authentication server.
|
||||
*/
|
||||
private String authenticationServer = DEFAULT_AUTH_HOSTNAME;
|
||||
|
||||
/**
|
||||
* Protocol (http or https) to use to connect to the authentication server.
|
||||
*/
|
||||
private String authenticationProtocol = "https";
|
||||
|
||||
/**
|
||||
* Developer key used for identification against the Google Base data API
|
||||
* servers.
|
||||
*/
|
||||
private String key;
|
||||
|
||||
/**
|
||||
* Enables dry-run mode for edit operations.
|
||||
*/
|
||||
private boolean dryRun;
|
||||
|
||||
/**
|
||||
* Executes the command.
|
||||
*
|
||||
* Call this method only after setting the username and password.
|
||||
*/
|
||||
public abstract void execute() throws Exception;
|
||||
|
||||
/**
|
||||
* Sets the username, which is required for {@link #execute()} to work.
|
||||
*/
|
||||
public void setUsername(String username) {
|
||||
this.username = username;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the password, which is required for {@link #execute()} to work.
|
||||
*/
|
||||
public void setPassword(String password) {
|
||||
this.password = password;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the Url of the google base server to connect to.
|
||||
*/
|
||||
public void setGoogleBaseServerUrl(String url) throws MalformedURLException {
|
||||
this.urlFactory = new FeedURLFactory(url);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the name of the google authentication server to connect to.
|
||||
*/
|
||||
public void setAuthenticationServerUrl(String urlString)
|
||||
throws MalformedURLException {
|
||||
URL url = new URL(urlString);
|
||||
this.authenticationProtocol = url.getProtocol();
|
||||
this.authenticationServer = url.getHost();
|
||||
if (url.getPort() != -1) {
|
||||
this.authenticationServer += ":" + url.getPort();
|
||||
}
|
||||
}
|
||||
|
||||
public void setKey(String key) {
|
||||
this.key = key;
|
||||
}
|
||||
|
||||
/**
|
||||
* Makes sure username and password have been set.
|
||||
*/
|
||||
public boolean hasAllIdentificationInformation() {
|
||||
return username != null && password != null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates the service and sets the username and password for
|
||||
* authentication.
|
||||
*
|
||||
* @return the GData service object to use
|
||||
* @throws com.google.gdata.util.AuthenticationException
|
||||
* if authentication failed
|
||||
*/
|
||||
protected GoogleBaseService createService()
|
||||
throws AuthenticationException {
|
||||
GoogleBaseService service =
|
||||
new GoogleBaseService("Google.-CustomerTool-1.0",
|
||||
key,
|
||||
authenticationProtocol,
|
||||
authenticationServer);
|
||||
service.setUserCredentials(username, password);
|
||||
return service;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the URL of the customer feed.
|
||||
*
|
||||
* The feed contains only the items uploaded by this
|
||||
* specific customer. This is also the feed that is
|
||||
* used to upload customer data.
|
||||
*
|
||||
* @return the url to the customer feed
|
||||
*/
|
||||
protected URL getCustomerFeedURL() throws MalformedURLException {
|
||||
return urlFactory.getItemsFeedURL();
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes the response (XML feed) to standard output.
|
||||
*/
|
||||
protected void outputRawResponse(Service.GDataRequest request)
|
||||
throws IOException {
|
||||
InputStream responseStream = request.getResponseStream();
|
||||
try {
|
||||
copyStreamContent(responseStream, System.out);
|
||||
} finally {
|
||||
responseStream.close();
|
||||
}
|
||||
System.out.println();
|
||||
}
|
||||
|
||||
/**
|
||||
* Reads data from in input stream and write it into an
|
||||
* output stream.
|
||||
*/
|
||||
protected void copyStreamContent(InputStream in, OutputStream out)
|
||||
throws IOException {
|
||||
byte[] buffer = new byte[1024];
|
||||
int l;
|
||||
while ( (l=in.read(buffer)) > 0 ) {
|
||||
out.write(buffer, 0, l);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Reads data from standard input and use it in the request.
|
||||
*
|
||||
* The data must be the XML feed appropriate for the command.
|
||||
* For update, get or insert it should be one Atom XML entry.
|
||||
*/
|
||||
protected void inputRawRequest(Service.GDataRequest request)
|
||||
throws IOException {
|
||||
OutputStream outputStream = request.getRequestStream();
|
||||
try {
|
||||
copyStreamContent(System.in, outputStream);
|
||||
} finally {
|
||||
outputStream.close();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Puts the command in dry-run mode, in which nothing will
|
||||
* really happen on the server.
|
||||
*
|
||||
* @param dryRun
|
||||
*/
|
||||
public void setDryRun(boolean dryRun) {
|
||||
this.dryRun = dryRun;
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds an edit URL from a string, adding the dry-run parameter
|
||||
* if necessary.
|
||||
*
|
||||
* This method is not applicable to query URLs, for which the dry-run
|
||||
* parameter is not supported.
|
||||
*
|
||||
* @param url the original url
|
||||
* @return the same URL with maybe some parameters
|
||||
* @throws MalformedURLException
|
||||
*/
|
||||
protected URL fixEditUrl(URL url) throws MalformedURLException {
|
||||
return fixEditUrl(url.toExternalForm());
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds an edit URL from a string, adding the dry-run parameter
|
||||
* if necessary.
|
||||
*
|
||||
* This method is not applicable to query URLs, for which the dry-run
|
||||
* parameter is not supported.
|
||||
*
|
||||
* @param url the original url, as a string
|
||||
* @return the same URL with maybe some parameters
|
||||
* @throws MalformedURLException
|
||||
*/
|
||||
protected URL fixEditUrl(String url) throws MalformedURLException {
|
||||
if (dryRun) {
|
||||
char separator = url.contains("?") ? '&' : '?';
|
||||
url = url + separator + "dry-run=true";
|
||||
}
|
||||
return new URL(url);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user