com.google.gdata.data.photos.GphotoFeed Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of core Show documentation
Show all versions of core Show documentation
The Google Data Java client library is written by Google.
It supports the latest major version of the following Google Data API's.
The newest version!
/* 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 com.google.gdata.data.photos;
import com.google.gdata.util.common.xml.XmlWriter;
import com.google.gdata.data.BaseFeed;
import com.google.gdata.data.Extension;
import com.google.gdata.data.ExtensionProfile;
import com.google.gdata.data.Link;
import com.google.gdata.data.TextConstruct;
import com.google.gdata.data.media.MediaFeed;
import com.google.gdata.data.photos.impl.GphotoDataImpl;
import com.google.gdata.util.XmlParser.ElementHandler;
import org.xml.sax.Attributes;
import java.io.IOException;
/**
* This class customizes the generic MediaFeed class to define a feed of
* GphotoEntries. It also adds support for the GphotoData interface methods so
* all subclasses have the base access methods available. In addition it
* provides access to a consistent description field across both RSS and ATOM.
*
*
*/
public class GphotoFeed extends MediaFeed
implements GphotoData, AtomData {
// The delegating instance to deal with extensions.
private final GphotoData delegate;
/**
* Construct a new {@code GphotoFeed} instance that is parameterized to
* contain {@code GphotoEntry} instances.
*/
public GphotoFeed() {
this(GphotoEntry.class);
}
/**
* Construct a new {@code GphotoFeed} instance parameterized to contain the
* given {@code GphotoEntry} type. This should be used by subclasses to set up
* subclassed entry types as needed.
*/
protected GphotoFeed(Class entryClass) {
super(entryClass);
this.delegate = new GphotoDataImpl(this);
}
/**
* Construct a new {@code GphotoFeed} instance parameterized to contain
* {@code GphotoEntry} instances. The source data for the feed will be pulled
* from the {@code BaseFeed} instance that was passed as source.
*/
public GphotoFeed(BaseFeed sourceFeed) {
this(GphotoEntry.class, sourceFeed);
}
/**
* Construct a new {@code GphotoFeed} instance parameterized to contain the
* given {@code GphotoEntry} subclass. The base state of the feed will be
* drawn from the passed in {@code BaseFeed} instance. This constructor should
* be used by subclasses to change the entry type supported by the feed.
*/
protected GphotoFeed(Class entryClass,
BaseFeed sourceFeed) {
super(entryClass, sourceFeed);
this.delegate = new GphotoDataImpl(this);
}
/*
* Declare the extensions that are valid on every feed.
*/
@Override
public void declareExtensions(ExtensionProfile extProfile) {
delegate.declareExtensions(extProfile);
super.declareExtensions(extProfile);
}
/*
* Override generating rss to add some extra atom fields into the rss output
* that we want, in particular some links that are useful for api access.
*/
@Override
public void generateRss(XmlWriter w, ExtensionProfile extProfile)
throws IOException {
// Add atom:link elements for next and previous.
Link prevLink = getLink(Link.Rel.PREVIOUS, Link.Type.ATOM);
Link nextLink = getLink(Link.Rel.NEXT, Link.Type.ATOM);
if (prevLink != null) {
delegate.addRepeatingExtension(new RssLink(prevLink));
}
if (nextLink != null) {
delegate.addRepeatingExtension(new RssLink(nextLink));
}
super.generateRss(w, extProfile);
}
/**
* Wrapper around a regular link that will generate the atom:link for
* rss feeds correctly. Generate just calls to the
* {@link Link#generateAtom(XmlWriter, ExtensionProfile)} method to generate
* the output.
*/
private static final class RssLink implements Extension {
private final Link link;
public RssLink(Link link) {
this.link = link;
}
public void generate(XmlWriter w, ExtensionProfile extProfile)
throws IOException {
link.generateAtom(w, extProfile);
}
public ElementHandler getHandler(ExtensionProfile extProfile,
String namespace, String localName, Attributes attrs) {
return null;
}
}
/**
* Description on a feed is just the subtitle.
*/
public TextConstruct getDescription() {
return getSubtitle();
}
/**
* Description on a feed is just the subtitle.
*/
public void setDescription(TextConstruct description) {
setSubtitle(description);
}
/**
* Return the gphoto:id of this feed.
*/
public String getGphotoId() {
return delegate.getGphotoId();
}
/**
* Set the gphoto:id of this feed as a long.
*/
public void setGphotoId(Long id) {
delegate.setGphotoId(id);
}
/**
* Set the gphoto:id of this feed as a string.
*/
public void setGphotoId(String id) {
delegate.setGphotoId(id);
}
}