package org.fluxtream.core.mvc.models;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.wordnik.swagger.annotations.ApiModel;
import com.wordnik.swagger.annotations.ApiModelProperty;
import org.codehaus.jackson.annotate.JsonRawValue;
import org.fluxtream.core.Configuration;
import org.fluxtream.core.TimeUnit;
import org.fluxtream.core.connectors.vos.AbstractFacetVO;
import org.fluxtream.core.domain.AbstractFacet;
import org.fluxtream.core.metadata.AbstractTimespanMetadata;
@ApiModel(value = "Generic data model for CalendarData Store operations")
public class DigestModel {
@JsonRawValue
public String calendar;
public TimeBoundariesModel tbounds;
public int nApis;
@ApiModelProperty(value="The list of this user's addresses", required=true)
public Map<String,List<AddressModel>> addresses;
@ApiModelProperty(value="The list of this user's trustingBuddies", required=true)
public SettingsModel settings;
@ApiModelProperty(value="Background updates notifications, if any", required=false)
public List<NotificationModel> notifications;
@ApiModelProperty(value="List of names of connectors that have data for the given time boundaries", required=true)
public List<String> haveDataConnectors = new ArrayList<String>();
@ApiModelProperty(value="List of names of connectors that don't have any data for the given time boundaries", required=true)
public List<String> haveNoDataConnectors = new ArrayList<String>();
@ApiModelProperty(value="List of currently selected connectors", required=true)
public List<ConnectorDigestModel> selectedConnectors = new ArrayList<ConnectorDigestModel>();
@ApiModelProperty(value="The list of this user's trustingBuddies", required=true)
public List<GuestModel> trustingBuddies;
@ApiModelProperty(value="UTC timestamp of this model's generation", required=true)
public long generationTimestamp;
public Map<String,Collection<AbstractFacetVO<AbstractFacet>>> facets
= new HashMap<String,Collection<AbstractFacetVO<AbstractFacet>>>();
public Metadata metadata;
public DigestModel(TimeUnit timeUnit, AbstractTimespanMetadata metadata, Configuration env, CalendarModel calendarModel) {
VisitedCityModel nic = null, pic = null;
if (metadata.nextInferredCity!=null)
nic = new VisitedCityModel(metadata.nextInferredCity, env);
if (metadata.previousInferredCity!=null)
pic = new VisitedCityModel(metadata.previousInferredCity, env);
this.metadata = new Metadata(timeUnit.toString(), pic, nic);
this.calendar = calendarModel.toJSONString(env);
}
public class Metadata {
public SolarInfoModel solarInfo;
Metadata(String timeUnit, VisitedCityModel previousInferredCity, VisitedCityModel nextInferredCity) {
this.timeUnit = timeUnit;
this.previousInferredCity = previousInferredCity;
this.nextInferredCity = nextInferredCity;
}
public String timeUnit;
public List<VisitedCityModel> cities = new ArrayList<VisitedCityModel>();
public List<VisitedCityModel> consensusCities = new ArrayList<VisitedCityModel>();
public VisitedCityModel previousInferredCity;
public VisitedCityModel nextInferredCity;
public VisitedCityModel mainCity;
}
public void addNotification(NotificationModel nm) {
if (notifications == null)
notifications = new ArrayList<NotificationModel>();
notifications.add(nm);
}
public void hasData(String connectorName, boolean b) {
if (b) {
haveDataConnectors.add(connectorName);
if (haveNoDataConnectors.contains(connectorName))
haveNoDataConnectors.remove(connectorName);
}
if (!b && !haveDataConnectors.contains(connectorName))
haveNoDataConnectors.add(connectorName);
}
}