/**
* Copyright 2010 Mark Wyszomierski
*/
package com.joelapenna.foursquared.util;
import android.os.Parcel;
import android.text.TextUtils;
import com.joelapenna.foursquare.types.Group;
import com.joelapenna.foursquare.types.Tip;
import com.joelapenna.foursquare.types.Todo;
import com.joelapenna.foursquare.types.Venue;
/**
* @date September 16, 2010
* @author Mark Wyszomierski (markww@gmail.com)
*/
public class VenueUtils {
public static void handleTipChange(Venue venue, Tip tip, Todo todo) {
// Update the tip in the tips group, if it exists.
updateTip(venue, tip);
// If it is a to-do, then make sure a to-do exists for it
// in the to-do group.
if (TipUtils.isTodo(tip)) {
addTodo(venue, tip, todo);
} else {
// If it is not a to-do, make sure it does not exist in the
// to-do group.
removeTodo(venue, tip);
}
}
private static void updateTip(Venue venue, Tip tip) {
if (venue.getTips() != null) {
for (Tip it : venue.getTips()) {
if (it.getId().equals(tip.getId())) {
it.setStatus(tip.getStatus());
break;
}
}
}
}
public static void addTodo(Venue venue, Tip tip, Todo todo) {
venue.setHasTodo(true);
if (venue.getTodos() == null) {
venue.setTodos(new Group<Todo>());
}
// If found a to-do linked to the tip ID, then overwrite to-do attributes
// with newer to-do object.
for (Todo it : venue.getTodos()) {
if (it.getTip().getId().equals(tip.getId())) {
it.setId(todo.getId());
it.setCreated(todo.getCreated());
return;
}
}
venue.getTodos().add(todo);
}
public static void addTip(Venue venue, Tip tip) {
if (venue.getTips() == null) {
venue.setTips(new Group<Tip>());
}
for (Tip it : venue.getTips()) {
if (it.getId().equals(tip.getId())) {
return;
}
}
venue.getTips().add(tip);
}
private static void removeTodo(Venue venue, Tip tip) {
for (Todo it : venue.getTodos()) {
if (it.getTip().getId().equals(tip.getId())) {
venue.getTodos().remove(it);
break;
}
}
if (venue.getTodos().size() > 0) {
venue.setHasTodo(true);
} else {
venue.setHasTodo(false);
}
}
public static void replaceTipsAndTodos(Venue venueTarget, Venue venueSource) {
if (venueTarget.getTips() == null) {
venueTarget.setTips(new Group<Tip>());
}
if (venueTarget.getTodos() == null) {
venueTarget.setTodos(new Group<Todo>());
}
if (venueSource.getTips() == null) {
venueSource.setTips(new Group<Tip>());
}
if (venueSource.getTodos() == null) {
venueSource.setTodos(new Group<Todo>());
}
venueTarget.getTips().clear();
venueTarget.getTips().addAll(venueSource.getTips());
venueTarget.getTodos().clear();
venueTarget.getTodos().addAll(venueSource.getTodos());
if (venueTarget.getTodos().size() > 0) {
venueTarget.setHasTodo(true);
} else {
venueTarget.setHasTodo(false);
}
}
public static boolean getSpecialHere(Venue venue) {
if (venue != null && venue.getSpecials() != null && venue.getSpecials().size() > 0) {
Venue specialVenue = venue.getSpecials().get(0).getVenue();
if (specialVenue == null || specialVenue.getId().equals(venue.getId())) {
return true;
}
}
return false;
}
/**
* Creates a copy of the passed venue. This should really be implemented
* as a copy constructor.
*/
public static Venue cloneVenue(Venue venue) {
Parcel p1 = Parcel.obtain();
Parcel p2 = Parcel.obtain();
byte[] bytes = null;
p1.writeValue(venue);
bytes = p1.marshall();
p2.unmarshall(bytes, 0, bytes.length);
p2.setDataPosition(0);
Venue venueNew = (Venue)p2.readValue(Venue.class.getClassLoader());
p1.recycle();
p2.recycle();
return venueNew;
}
public static String toStringVenueShare(Venue venue) {
StringBuilder sb = new StringBuilder();
sb.append(venue.getName()); sb.append("\n");
sb.append(StringFormatters.getVenueLocationFull(venue));
if (!TextUtils.isEmpty(venue.getPhone())) {
sb.append("\n");
sb.append(venue.getPhone());
}
return sb.toString();
}
/**
* Dumps some info about a venue. This can be moved into the Venue class.
*/
public static String toString(Venue venue) {
StringBuilder sb = new StringBuilder();
sb.append(venue.toString()); sb.append(":\n");
sb.append(" id: "); sb.append(venue.getId()); sb.append("\n");
sb.append(" name: "); sb.append(venue.getName()); sb.append("\n");
sb.append(" address: "); sb.append(venue.getAddress()); sb.append("\n");
sb.append(" cross: "); sb.append(venue.getCrossstreet()); sb.append("\n");
sb.append(" hastodo: "); sb.append(venue.getHasTodo()); sb.append("\n");
sb.append(" tips: "); sb.append(venue.getTips() == null ? "(null)" : venue.getTips().size()); sb.append("\n");
sb.append(" todos: "); sb.append(venue.getTodos() == null ? "(null)" : venue.getTodos().size()); sb.append("\n");
sb.append(" specials: "); sb.append(venue.getSpecials() == null ? "(null)" : venue.getSpecials().size()); sb.append("\n");
return sb.toString();
}
}