1818 */
1919package org .apache .cloudstack .vm .schedule ;
2020
21- import com .cloud .api .query .MutualExclusiveIdsManagerBase ;
22- import com .cloud .event .ActionEvent ;
23- import com .cloud .event .EventTypes ;
24- import com .cloud .exception .InvalidParameterValueException ;
25- import com .cloud .user .AccountManager ;
26- import com .cloud .utils .DateUtil ;
27- import com .cloud .utils .Pair ;
28- import com .cloud .utils .component .PluggableService ;
29- import com .cloud .utils .db .SearchCriteria ;
30- import com .cloud .utils .db .Transaction ;
31- import com .cloud .utils .db .TransactionCallback ;
32- import com .cloud .utils .exception .CloudRuntimeException ;
33- import com .cloud .vm .UserVmManager ;
34- import com .cloud .vm .VirtualMachine ;
21+ import java .time .ZonedDateTime ;
22+ import java .util .ArrayList ;
23+ import java .util .Date ;
24+ import java .util .List ;
25+ import java .util .Objects ;
26+ import java .util .TimeZone ;
27+
28+ import javax .inject .Inject ;
29+
3530import org .apache .cloudstack .api .ApiCommandResourceType ;
3631import org .apache .cloudstack .api .command .user .vm .CreateVMScheduleCmd ;
3732import org .apache .cloudstack .api .command .user .vm .DeleteVMScheduleCmd ;
4237import org .apache .cloudstack .context .CallContext ;
4338import org .apache .cloudstack .vm .schedule .dao .VMScheduleDao ;
4439import org .apache .commons .lang .time .DateUtils ;
40+ import org .apache .commons .lang3 .ObjectUtils ;
4541import org .apache .commons .lang3 .StringUtils ;
4642import org .apache .log4j .Logger ;
4743import org .springframework .scheduling .support .CronExpression ;
4844
49- import javax .inject .Inject ;
50- import java .time .ZonedDateTime ;
51- import java .util .ArrayList ;
52- import java .util .Date ;
53- import java .util .List ;
54- import java .util .Objects ;
55- import java .util .TimeZone ;
45+ import com .cloud .api .query .MutualExclusiveIdsManagerBase ;
46+ import com .cloud .event .ActionEvent ;
47+ import com .cloud .event .EventTypes ;
48+ import com .cloud .exception .InvalidParameterValueException ;
49+ import com .cloud .user .AccountManager ;
50+ import com .cloud .utils .DateUtil ;
51+ import com .cloud .utils .Pair ;
52+ import com .cloud .utils .component .PluggableService ;
53+ import com .cloud .utils .db .SearchCriteria ;
54+ import com .cloud .utils .db .Transaction ;
55+ import com .cloud .utils .db .TransactionCallback ;
56+ import com .cloud .utils .exception .CloudRuntimeException ;
57+ import com .cloud .vm .UserVmManager ;
58+ import com .cloud .vm .VirtualMachine ;
5659
5760public class VMScheduleManagerImpl extends MutualExclusiveIdsManagerBase implements VMScheduleManager , PluggableService {
5861
@@ -208,6 +211,9 @@ public VMScheduleResponse updateSchedule(UpdateVMScheduleCmd cmd) {
208211 Date cmdStartDate = cmd .getStartDate ();
209212 Date cmdEndDate = cmd .getEndDate ();
210213 Boolean enabled = cmd .getEnabled ();
214+ final String originalTimeZone = vmSchedule .getTimeZone ();
215+ final Date originalStartDate = vmSchedule .getStartDate ();
216+ final Date originalEndDate = vmSchedule .getEndDate ();
211217
212218 TimeZone timeZone ;
213219 String timeZoneId ;
@@ -234,7 +240,13 @@ public VMScheduleResponse updateSchedule(UpdateVMScheduleCmd cmd) {
234240 startDate = Date .from (DateUtil .getZoneDateTime (cmdStartDate , timeZone .toZoneId ()).toInstant ());
235241 }
236242
237- validateStartDateEndDate (Objects .requireNonNullElse (startDate , DateUtils .addMinutes (new Date (), 1 )), endDate , timeZone );
243+ if (ObjectUtils .anyNotNull (cmdStartDate , cmdEndDate , cmdTimeZone ) &&
244+ (!Objects .equals (originalTimeZone , timeZoneId ) ||
245+ !Objects .equals (originalStartDate , startDate ) ||
246+ !Objects .equals (originalEndDate , endDate ))) {
247+ validateStartDateEndDate (Objects .requireNonNullElse (startDate , DateUtils .addMinutes (new Date (), 1 )),
248+ endDate , timeZone );
249+ }
238250
239251 if (enabled != null ) {
240252 vmSchedule .setEnabled (enabled );
0 commit comments