blob: 7b0ac4bf13b0ece591b867350090e9f227a627b3 [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 photo entry kind in the Picasa GData API.
*/
@Entry.Table("photos")
public final class PhotoEntry extends Entry {
public static final EntrySchema SCHEMA = new EntrySchema(PhotoEntry.class);
/**
* The user account that is the sync source for this entry. Must be set
* before insert/update.
*/
@Column("sync_account")
public String syncAccount;
/**
* The "edit" URI of the photo.
*/
@Column("edit_uri")
public String editUri;
/**
* The containing album ID.
*/
@Column(value = "album_id", indexed = true)
public long albumId;
/**
* The display index of the photo within the album. Must be set before
* insert/update.
*/
@Column(value = "display_index", indexed = true)
public int displayIndex;
/**
* The title of the photo.
*/
@Column("title")
public String title;
/**
* A short summary of the photo.
*/
@Column("summary")
public String summary;
/**
* The date the photo was added.
*/
@Column("date_published")
public long datePublished;
/**
* The date the photo was last updated.
*/
@Column("date_updated")
public long dateUpdated;
/**
* The date the photo entry was last edited. May be more recent than
* dateUpdated.
*/
@Column("date_edited")
public long dateEdited;
/**
* The date the photo was captured as specified in the EXIF data.
*/
@Column("date_taken")
public long dateTaken;
/**
* The number of comments associated with the photo.
*/
@Column("comment_count")
public int commentCount;
/**
* The width of the photo in pixels.
*/
@Column("width")
public int width;
/**
* The height of the photo in pixels.
*/
@Column("height")
public int height;
/**
* The rotation of the photo in degrees, if rotation has not already been
* applied.
*/
@Column("rotation")
public int rotation;
/**
* The size of the photo is bytes.
*/
@Column("size")
public int size;
/**
* The latitude associated with the photo.
*/
@Column("latitude")
public double latitude;
/**
* The longitude associated with the photo.
*/
@Column("longitude")
public double longitude;
/**
* The "mini-thumbnail" URL for the photo (currently 144px-cropped).
*/
@Column("thumbnail_url")
public String thumbnailUrl;
/**
* The "screennail" URL for the photo (currently 800px).
*/
@Column("screennail_url")
public String screennailUrl;
/**
* The "content" URL for the photo (currently 1280px, or a video). The
* original image URL is not fetched since "imgmax" accepts one size, used
* to get this resource.
*/
@Column("content_url")
public String contentUrl;
/**
* The MIME type of the content URL.
*/
@Column("content_type")
public String contentType;
/**
* A link to the HTML page associated with the album.
*/
@Column("html_page_url")
public String htmlPageUrl;
/**
* Resets values to defaults for object reuse.
*/
@Override
public void clear() {
super.clear();
syncAccount = null;
editUri = null;
albumId = 0;
displayIndex = 0;
title = null;
summary = null;
datePublished = 0;
dateUpdated = 0;
dateEdited = 0;
dateTaken = 0;
commentCount = 0;
width = 0;
height = 0;
rotation = 0;
size = 0;
latitude = 0;
longitude = 0;
thumbnailUrl = null;
screennailUrl = null;
contentUrl = null;
contentType = 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) {
try {
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 'a':
if (localName.equals("albumid")) {
albumId = Long.parseLong(content);
}
break;
case 't':
if (localName.equals("timestamp")) {
dateTaken = Long.parseLong(content);
}
break;
case 'c':
if (localName.equals("commentCount")) {
commentCount = Integer.parseInt(content);
}
break;
case 'w':
if (localName.equals("width")) {
width = Integer.parseInt(content);
}
break;
case 'h':
if (localName.equals("height")) {
height = Integer.parseInt(content);
}
break;
case 'r':
if (localName.equals("rotation")) {
rotation = Integer.parseInt(content);
}
break;
case 's':
if (localName.equals("size")) {
size = Integer.parseInt(content);
}
break;
case 'l':
if (localName.equals("latitude")) {
latitude = Double.parseDouble(content);
} else if (localName.equals("longitude")) {
longitude = Double.parseDouble(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.equals("thumbnail")) {
int width = Integer.parseInt(attrs.getValue("", "width"));
int height = Integer.parseInt(attrs.getValue("", "height"));
int dimension = Math.max(width, height);
String url = attrs.getValue("", "url");
if (dimension <= 300) {
thumbnailUrl = url;
} else {
screennailUrl = url;
}
} else if (localName.equals("content")) {
// Only replace an existing URL if the MIME type is video.
String type = attrs.getValue("", "type");
if (contentUrl == null || type.startsWith("video/")) {
contentUrl = attrs.getValue("", "url");
contentType = type;
}
}
} else if (uri.equals(GDataParser.GML_NAMESPACE)) {
if (localName.equals("pos")) {
int spaceIndex = content.indexOf(' ');
if (spaceIndex != -1) {
latitude = Double.parseDouble(content.substring(0, spaceIndex));
longitude = Double.parseDouble(content.substring(spaceIndex + 1));
}
}
}
} catch (Exception e) {
return;
}
}
}