package org.activityinfo.legacy.shared.adapter.bindings;
import com.google.common.base.Preconditions;
import org.activityinfo.legacy.shared.model.ActivityFormDTO;
import org.activityinfo.legacy.shared.model.LocationTypeDTO;
import org.activityinfo.legacy.shared.model.SiteDTO;
import org.activityinfo.model.form.FormInstance;
import org.activityinfo.model.legacy.CuidAdapter;
import org.activityinfo.model.resource.ResourceId;
import static org.activityinfo.model.legacy.CuidAdapter.getLegacyIdFromCuid;
import static org.activityinfo.model.legacy.CuidAdapter.locationField;
/**
* Defines a two-way binding between Sites and FormInstances
*/
public class SiteBinding extends ModelBinding<SiteDTO> {
private final ActivityFormDTO activity;
protected SiteBinding(ActivityFormDTO activity) {
super(CuidAdapter.activityFormClass(activity.getId()), CuidAdapter.SITE_DOMAIN);
this.activity = activity;
}
public ActivityFormDTO getActivity() {
return activity;
}
public ResourceId getLocationField() {
return locationField(activity.getId());
}
public int getAdminEntityId(FormInstance instance) {
return getLegacyIdFromCuid(instance.getInstanceId(getLocationField()));
}
public LocationTypeDTO getLocationType() {
return activity.getLocationType();
}
public int getDefaultPartnerId() {
if(activity.getCurrentPartnerId() == 0) {
// for database owners, return the first partner arbitrarily
Preconditions.checkState(activity.isEditAllAllowed(), "user has no partnerId and does not have editAll permission");
Preconditions.checkState(!activity.getPartnerRange().isEmpty());
return activity.getPartnerRange().get(0).getId();
} else {
return activity.getCurrentPartnerId();
}
}
}