/*
* Copyright (c) 2011 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 com.google.api.services.samples.shared.gdata.xml;
import com.google.api.client.googleapis.GoogleUrl;
import com.google.api.client.googleapis.xml.atom.AtomPatchRelativeToOriginalContent;
import com.google.api.client.googleapis.xml.atom.GoogleAtom;
import com.google.api.client.http.HttpRequest;
import com.google.api.client.http.HttpRequestFactory;
import com.google.api.client.http.xml.atom.AtomContent;
import com.google.api.client.http.xml.atom.AtomParser;
import com.google.api.client.xml.XmlNamespaceDictionary;
import com.google.api.services.samples.shared.gdata.GDataClient;
import java.io.IOException;
/**
* GData XML client.
*
* @author Yaniv Inbar
*/
public abstract class GDataXmlClient extends GDataClient {
private final XmlNamespaceDictionary namespaceDictionary;
private boolean partialResponse = true;
protected GDataXmlClient(String gdataVersion, HttpRequestFactory requestFactory,
XmlNamespaceDictionary namespaceDictionary) {
super(gdataVersion, requestFactory);
this.namespaceDictionary = namespaceDictionary;
}
public XmlNamespaceDictionary getNamespaceDictionary() {
return namespaceDictionary;
}
@Override
protected void prepare(HttpRequest request) {
super.prepare(request);
request.addParser(new AtomParser(namespaceDictionary));
}
public final boolean getPartialResponse() {
return partialResponse;
}
public final void setPartialResponse(boolean partialResponse) {
this.partialResponse = partialResponse;
}
@Override
protected void prepareUrl(GoogleUrl url, Class<?> parseAsType) {
super.prepareUrl(url, parseAsType);
if (partialResponse && parseAsType != null) {
url.setFields(GoogleAtom.getFieldsFor(parseAsType));
}
}
protected final <T> T executePatchRelativeToOriginal(
GoogleUrl url, T original, T updated, String etag) throws IOException {
AtomPatchRelativeToOriginalContent content =
new AtomPatchRelativeToOriginalContent(namespaceDictionary, original, updated);
@SuppressWarnings("unchecked")
Class<T> parseAsType = (Class<T>) updated.getClass();
return executePatchRelativeToOriginal(url, content, parseAsType, etag);
}
protected final <T> T executePost(GoogleUrl url, boolean isFeed, T content) throws IOException {
AtomContent atomContent = isFeed ? AtomContent.forFeed(namespaceDictionary, content)
: AtomContent.forEntry(namespaceDictionary, content);
@SuppressWarnings("unchecked")
Class<T> parseAsType = (Class<T>) content.getClass();
return executePost(url, atomContent, parseAsType);
}
}