package org.ovirt.engine.ui.uicommonweb.models.storage;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.ovirt.engine.core.common.businessentities.StorageDomain;
import org.ovirt.engine.core.common.businessentities.gluster.GlusterGeoRepSession;
import org.ovirt.engine.core.common.businessentities.gluster.StorageSyncSchedule;
import org.ovirt.engine.core.common.businessentities.gluster.StorageSyncSchedule.Frequency;
import org.ovirt.engine.ui.uicommonweb.models.EntityModel;
import org.ovirt.engine.ui.uicommonweb.models.ListModel;
import org.ovirt.engine.ui.uicommonweb.models.Model;
import org.ovirt.engine.ui.uicommonweb.validation.IValidation;
import org.ovirt.engine.ui.uicommonweb.validation.IntegerValidation;
import org.ovirt.engine.ui.uicommonweb.validation.NotEmptyValidation;
/*
* Disaster Recovery configuration for Storage Domain that setups up
* syncing of data to remote site
*/
public class StorageDRModel extends Model {
private static final int MAX_MINUTE = 60;
private static final int MAX_HOUR = 24;
ListModel<StorageSyncSchedule.Frequency> frequency;
ListModel<List<StorageSyncSchedule.Day>> days;
ListModel<Integer> hour;
ListModel<Integer> mins;
ListModel<GlusterGeoRepSession> geoRepSession;
EntityModel<Boolean> noSync;
EntityModel<StorageDomain> storageDomain;
public ListModel<StorageSyncSchedule.Frequency> getFrequency() {
return frequency;
}
public void setFrequency(ListModel<StorageSyncSchedule.Frequency> frequency) {
this.frequency = frequency;
}
public ListModel<Integer> getHour() {
return hour;
}
public void setHour(ListModel<Integer> hour) {
this.hour = hour;
}
public ListModel<Integer> getMins() {
return mins;
}
public void setMins(ListModel<Integer> mins) {
this.mins = mins;
}
public ListModel<GlusterGeoRepSession> getGeoRepSession() {
return geoRepSession;
}
public void setGeoRepSession(ListModel<GlusterGeoRepSession> geoRepSession) {
this.geoRepSession = geoRepSession;
}
public EntityModel<Boolean> getNoSync() {
return noSync;
}
public void setNoSync(EntityModel<Boolean> noSync) {
this.noSync = noSync;
}
public EntityModel<StorageDomain> getStorageDomain() {
return storageDomain;
}
public void setStorageDomain(EntityModel<StorageDomain> storageDomain) {
this.storageDomain = storageDomain;
}
public ListModel<List<StorageSyncSchedule.Day>> getDays() {
return days;
}
public void setDays(ListModel<List<StorageSyncSchedule.Day>> days) {
this.days = days;
}
public StorageDRModel() {
setFrequency(new ListModel<StorageSyncSchedule.Frequency>());
setHour(new ListModel<Integer>());
setMins(new ListModel<Integer>());
setGeoRepSession(new ListModel<GlusterGeoRepSession>());
setNoSync(new EntityModel<Boolean>());
setStorageDomain(new EntityModel<StorageDomain>());
getNoSync().setEntity(false);
frequency.setItems(Arrays.asList(StorageSyncSchedule.Frequency.values()));
days = new ListModel<>();
List<StorageSyncSchedule.Day> daysList = Arrays.asList(StorageSyncSchedule.Day.values());
List<List<StorageSyncSchedule.Day>> list = new ArrayList<>();
list.add(daysList);
days.setItems(list, new ArrayList<StorageSyncSchedule.Day>());
List<Integer> hours = new ArrayList<>();
for (int i = 0; i < MAX_HOUR; i++) {
hours.add(i);
}
hour.setItems(hours);
List<Integer> minutes = new ArrayList<>();
for (int i = 0; i < MAX_MINUTE; i++) {
minutes.add(i);
}
mins.setItems(minutes);
getFrequency().getSelectedItemChangedEvent().addListener((ev, sender, args) -> {
boolean weekly = getFrequency().getSelectedItem() == Frequency.WEEKLY;
boolean daily = getFrequency().getSelectedItem() == Frequency.DAILY;
getDays().setIsAvailable(weekly);
getHour().setIsAvailable(weekly || daily);
getMins().setIsAvailable(weekly || daily);
});
}
public boolean validate() {
getGeoRepSession().validateSelectedItem(new IValidation[] { new NotEmptyValidation() });
getFrequency().validateSelectedItem(new IValidation[] { new NotEmptyValidation() });
getHour().validateSelectedItem(
new IValidation[] { new NotEmptyValidation(), new IntegerValidation(0, MAX_HOUR) }
);
getMins().validateSelectedItem(
new IValidation[] { new NotEmptyValidation(), new IntegerValidation(0, MAX_MINUTE) }
);
boolean ret = getGeoRepSession().getIsValid() && getFrequency().getIsValid();
if (!getFrequency().getSelectedItem().equals(Frequency.NONE)) {
return ret && getHour().getIsValid() && getMins().getIsValid();
}
return ret;
}
}