package models.dynamo;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBAttribute;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBRangeKey;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTable;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import play.Logger;
import play.libs.XPath;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
/**
* Stores photos related to a tag
* User: pvillega
*/
@DynamoDBTable(tableName = "photo")
public class Photo {
private static final String THUMBNAIL_URL_TEMPLATE = "http://farm%s.staticflickr.com/%s/%s_%s_m.jpg";
private static final String IMG_URL_TEMPLATE = "http://farm%s.staticflickr.com/%s/%s_%s.jpg";
private String idTag;
private String dateStored;
private String text;
private String imageUrl;
private String thumbnailUrl;
@DynamoDBHashKey
public String getIdTag() { return idTag; }
public void setIdTag(String idTag) { this.idTag = idTag; }
@DynamoDBRangeKey
public String getDateStored() { return dateStored; }
public void setDateStored(String dateStored) { this.dateStored = dateStored; }
@DynamoDBAttribute
public String getText() { return text; }
public void setText(String text) { this.text = text; }
@DynamoDBAttribute
public String getImageUrl() { return imageUrl; }
public void setImageUrl(String imageUrl) { this.imageUrl = imageUrl; }
@DynamoDBAttribute
public String getThumbnailUrl() { return thumbnailUrl; }
public void setThumbnailUrl(String thumbnailUrl) { this.thumbnailUrl = thumbnailUrl; }
public static List<Photo> convertToPhotoList(Document xml, String idTag) {
long startNanoseconds = System.nanoTime();
List<Photo> photos = new ArrayList<>();
NodeList xmlPhotos = XPath.selectNodes("//photo", xml);
Logger.debug("Photos number: " + xmlPhotos.getLength());
for(int i = 0; i < xmlPhotos.getLength(); i++) {
Node n = xmlPhotos.item(i);
NamedNodeMap attr = n.getAttributes();
String farm = "1";
String serverId = attr.getNamedItem("server").getTextContent();
String id = attr.getNamedItem("id").getTextContent();
String secret = attr.getNamedItem("secret").getTextContent();
// to avoid duplicate keys we have to store values in a higher than milli resolution
long microSeconds = (System.nanoTime() - startNanoseconds) / 1000 ;
String dateStored = String.valueOf( System.currentTimeMillis()*1000 + (microSeconds % 1000) );
Logger.debug("Photo: " + id);
Photo p = new Photo();
p.setIdTag(idTag);
p.setDateStored(dateStored);
p.setText(attr.getNamedItem("title").getTextContent());
p.setThumbnailUrl(String.format(THUMBNAIL_URL_TEMPLATE, farm, serverId, id, secret));
p.setImageUrl(String.format(IMG_URL_TEMPLATE, farm, serverId, id, secret));
Logger.debug("Photo: " + p.getText()+" | " + p.getImageUrl());
photos.add(p);
}
return photos;
}
}