package org.ovirt.mobile.movirt.ui.dashboard.box;
import android.content.Context;
import org.ovirt.mobile.movirt.R;
import org.ovirt.mobile.movirt.model.DataCenter;
import org.ovirt.mobile.movirt.model.Event;
import org.ovirt.mobile.movirt.model.Host;
import org.ovirt.mobile.movirt.model.StorageDomain;
import org.ovirt.mobile.movirt.model.Vm;
import org.ovirt.mobile.movirt.ui.dashboard.DashboardEntityStatus;
import org.ovirt.mobile.movirt.ui.dashboard.maps.DashboardPosition;
import org.ovirt.mobile.movirt.ui.dashboard.maps.DcStatusMap;
import org.ovirt.mobile.movirt.ui.dashboard.maps.HostStatusMap;
import org.ovirt.mobile.movirt.ui.dashboard.maps.StorageStatusMap;
import org.ovirt.mobile.movirt.ui.dashboard.maps.VmStatusMap;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Date;
import java.util.EnumMap;
import java.util.Map;
public class DashboardBoxData {
private DashboardBoxDataLoader.BoxDataEntityClass entityClass;
private int entityCount = 0;
private Map<DashboardPosition, DashboardEntityStatus> positionsStatusMap = new EnumMap<>(DashboardPosition.class);
public DashboardBoxData(DashboardBoxDataLoader.BoxDataEntityClass entityClass) {
this.entityClass = entityClass;
DashboardEntityStatus first = new DashboardEntityStatus();
DashboardEntityStatus second = new DashboardEntityStatus();
DashboardEntityStatus third = new DashboardEntityStatus();
positionsStatusMap.put(DashboardPosition.FIRST, first);
positionsStatusMap.put(DashboardPosition.SECOND, second);
positionsStatusMap.put(DashboardPosition.THIRD, third);
switch (entityClass) {
case DATA_CENTER:
case CLUSTER:
case STORAGE_DOMAIN:
case HOST:
case VM:
first.setIconResourceId(R.drawable.dashboard_warning_white, R.drawable.dashboard_warning);
second.setIconResourceId(R.drawable.dashboard_circle_up);
third.setIconResourceId(R.drawable.dashboard_circle_down);
break;
case EVENT:
first.setIconResourceId(R.drawable.dashboard_bell);
second.setIconResourceId(R.drawable.dashboard_warning_white, R.drawable.dashboard_warning);
third.setIconResourceId(R.drawable.dashboard_circle_error_white, R.drawable.dashboard_circle_error);
break;
}
}
public DashboardBoxDataLoader.BoxDataEntityClass getEntityClass() {
return entityClass;
}
public void setEntityClass(DashboardBoxDataLoader.BoxDataEntityClass entityClass) {
this.entityClass = entityClass;
}
public String getEntityCountFormatStr(Context context) {
int stringId = 0;
switch (entityClass) {
case DATA_CENTER:
stringId = R.string.data_centers;
break;
case CLUSTER:
stringId = R.string.clusters;
break;
case STORAGE_DOMAIN:
stringId = R.string.storage_domains;
break;
case HOST:
stringId = R.string.hosts;
break;
case VM:
stringId = R.string.virtual_machines;
break;
case EVENT:
stringId = R.string.events;
break;
}
return stringId == 0 ? "" : String.format("%d %s", entityCount, context.getString(stringId));
}
public int getEntityImageId() {
switch (entityClass) {
case DATA_CENTER:
return R.drawable.dashboard_globe;
case CLUSTER:
return R.drawable.dashboard_cluster;
case STORAGE_DOMAIN:
return R.drawable.dashboard_storage_domain;
case HOST:
return R.drawable.dashboard_screen;
case VM:
return R.drawable.dashboard_vm;
case EVENT:
return R.drawable.dashboard_flag;
default:
return R.drawable.vm_question_mark;
}
}
public int getEntityCount() {
return entityCount;
}
public void setData(Collection data) {
if (entityClass != DashboardBoxDataLoader.BoxDataEntityClass.EVENT) {
entityCount = data.size();
}
if (entityClass == DashboardBoxDataLoader.BoxDataEntityClass.CLUSTER) {
return;
}
Date today = getToday();
for (Object entity : data) {
DashboardPosition position;
switch (entityClass) {
case DATA_CENTER:
position = DcStatusMap.getDashboardPosition(((DataCenter) entity).getStatus());
break;
case STORAGE_DOMAIN:
position = StorageStatusMap.getDashboardPosition(((StorageDomain) entity).getStatus());
break;
case HOST:
position = HostStatusMap.getDashboardPosition(((Host) entity).getStatus());
break;
case VM:
position = VmStatusMap.getDashboardPosition(((Vm) entity).getStatus());
break;
case EVENT:
position = getEventStatusPosition(today, (Event) entity);
if (position != DashboardPosition.UNKNOWN) {
entityCount++;
}
break;
default:
continue;
}
DashboardEntityStatus status = getStatusOnPosition(position);
if (status != null) {
status.incrementCount();
}
}
}
public DashboardEntityStatus getStatusOnPosition(DashboardPosition position) {
return positionsStatusMap.get(position);
}
private DashboardPosition getEventStatusPosition(Date today, Event event) {
Event.Severity severity = event.getSeverity();
if (severity == Event.Severity.NORMAL || (severity != Event.Severity.ERROR && event.getTime().before(today))) {
return DashboardPosition.UNKNOWN;
}
switch (event.getSeverity()) {
case WARNING:
return DashboardPosition.SECOND;
case ALERT:
return DashboardPosition.FIRST;
case ERROR:
return DashboardPosition.THIRD;
default:
return DashboardPosition.UNKNOWN;
}
}
private Date getToday() {
DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
Date today = new Date();
try {
today = formatter.parse(formatter.format(today));
} catch (ParseException e) {
}
return today;
}
}