blob: 45e071568acbb01a3df5b99ed51623f6ef7c33c3 [file] [log] [blame]
/*
* Copyright (C) 2009 The Android Open Source Project
*
* 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.cooliris.picasa;
import org.xml.sax.Attributes;
/**
* This class models the album entry kind in the Picasa GData API.
*/
@Entry.Table("albums")
public final class AlbumEntry extends Entry {
public static final EntrySchema SCHEMA = new EntrySchema(AlbumEntry.class);
/**
* The user account that is the sync source for this entry. Must be set
* before insert/update.
*/
@Column(Columns.SYNC_ACCOUNT)
public String syncAccount;
/**
* The ETag for the album/photos GData feed.
*/
@Column(Columns.PHOTOS_ETAG)
public String photosEtag = null;
/**
* True if the contents of the album need to be synchronized. Must be set
* before insert/update.
*/
@Column(Columns.PHOTOS_DIRTY)
public boolean photosDirty;
/**
* The "edit" URI of the album.
*/
@Column(Columns.EDIT_URI)
public String editUri;
/**
* The album owner.
*/
@Column(Columns.USER)
public String user;
/**
* The title of the album.
*/
@Column(value = Columns.TITLE)
public String title;
/**
* A short summary of the contents of the album.
*/
@Column(value = Columns.SUMMARY)
public String summary;
/**
* The date the album was created.
*/
@Column(Columns.DATE_PUBLISHED)
public long datePublished;
/**
* The date the album was last updated.
*/
@Column(Columns.DATE_UPDATED)
public long dateUpdated;
/**
* The date the album entry was last edited. May be more recent than
* dateUpdated.
*/
@Column(Columns.DATE_EDITED)
public long dateEdited;
/**
* The number of photos in the album.
*/
@Column(Columns.NUM_PHOTOS)
public int numPhotos;
/**
* The number of bytes of storage that this album uses.
*/
@Column(Columns.BYTES_USED)
public long bytesUsed;
/**
* The user-specified location associated with the album.
*/
@Column(Columns.LOCATION_STRING)
public String locationString;
/**
* The thumbnail URL associated with the album.
*/
@Column(Columns.THUMBNAIL_URL)
public String thumbnailUrl;
/**
* A link to the HTML page associated with the album.
*/
@Column(Columns.HTML_PAGE_URL)
public String htmlPageUrl;
/**
* Column names specific to album entries.
*/
public static final class Columns extends PicasaApi.Columns {
public static final String PHOTOS_ETAG = "photos_etag";
public static final String USER = "user";
public static final String BYTES_USED = "bytes_used";
public static final String NUM_PHOTOS = "num_photos";
public static final String LOCATION_STRING = "location_string";
public static final String PHOTOS_DIRTY = "photos_dirty";
}
/**
* Resets values to defaults for object reuse.
*/
@Override
public void clear() {
super.clear();
syncAccount = null;
photosDirty = false;
editUri = null;
user = null;
title = null;
summary = null;
datePublished = 0;
dateUpdated = 0;
dateEdited = 0;
numPhotos = 0;
bytesUsed = 0;
locationString = null;
thumbnailUrl = null;
htmlPageUrl = null;
}
/**
* Sets the property value corresponding to the given XML element, if
* applicable.
*/
@Override
public void setPropertyFromXml(String uri, String localName, Attributes attrs, String content) {
char localNameChar = localName.charAt(0);
if (uri.equals(GDataParser.GPHOTO_NAMESPACE)) {
switch (localNameChar) {
case 'i':
if (localName.equals("id")) {
id = Long.parseLong(content);
}
break;
case 'u':
if (localName.equals("user")) {
user = content;
}
break;
case 'n':
if (localName.equals("numphotos")) {
numPhotos = Integer.parseInt(content);
}
break;
case 'b':
if (localName.equals("bytesUsed")) {
bytesUsed = Long.parseLong(content);
}
break;
}
} else if (uri.equals(GDataParser.ATOM_NAMESPACE)) {
switch (localNameChar) {
case 't':
if (localName.equals("title")) {
title = content;
}
break;
case 's':
if (localName.equals("summary")) {
summary = content;
}
break;
case 'p':
if (localName.equals("published")) {
datePublished = GDataParser.parseAtomTimestamp(content);
}
break;
case 'u':
if (localName.equals("updated")) {
dateUpdated = GDataParser.parseAtomTimestamp(content);
}
break;
case 'l':
if (localName.equals("link")) {
String rel = attrs.getValue("", "rel");
String href = attrs.getValue("", "href");
if (rel.equals("alternate") && attrs.getValue("", "type").equals("text/html")) {
htmlPageUrl = href;
} else if (rel.equals("edit")) {
editUri = href;
}
}
break;
}
} else if (uri.equals(GDataParser.APP_NAMESPACE)) {
if (localName.equals("edited")) {
dateEdited = GDataParser.parseAtomTimestamp(content);
}
} else if (uri.equals(GDataParser.MEDIA_RSS_NAMESPACE)) {
if (localName == "thumbnail") {
thumbnailUrl = attrs.getValue("", "url");
}
}
}
}