1818 */
1919package org .apache .cloudstack .vm .schedule ;
2020
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+
30+ import org .apache .cloudstack .api .ApiCommandResourceType ;
31+ import org .apache .cloudstack .api .command .user .vm .CreateVMScheduleCmd ;
32+ import org .apache .cloudstack .api .command .user .vm .DeleteVMScheduleCmd ;
33+ import org .apache .cloudstack .api .command .user .vm .ListVMScheduleCmd ;
34+ import org .apache .cloudstack .api .command .user .vm .UpdateVMScheduleCmd ;
35+ import org .apache .cloudstack .api .response .ListResponse ;
36+ import org .apache .cloudstack .api .response .VMScheduleResponse ;
37+ import org .apache .cloudstack .context .CallContext ;
38+ import org .apache .cloudstack .vm .schedule .dao .VMScheduleDao ;
39+ import org .apache .commons .lang .time .DateUtils ;
40+ import org .apache .commons .lang3 .ObjectUtils ;
41+ import org .apache .commons .lang3 .StringUtils ;
42+ import org .apache .log4j .Logger ;
43+ import org .springframework .scheduling .support .CronExpression ;
44+
2145import com .cloud .api .query .MutualExclusiveIdsManagerBase ;
2246import com .cloud .event .ActionEvent ;
2347import com .cloud .event .EventTypes ;
3256import com .cloud .utils .exception .CloudRuntimeException ;
3357import com .cloud .vm .UserVmManager ;
3458import com .cloud .vm .VirtualMachine ;
35- import org .apache .cloudstack .api .ApiCommandResourceType ;
36- import org .apache .cloudstack .api .command .user .vm .CreateVMScheduleCmd ;
37- import org .apache .cloudstack .api .command .user .vm .DeleteVMScheduleCmd ;
38- import org .apache .cloudstack .api .command .user .vm .ListVMScheduleCmd ;
39- import org .apache .cloudstack .api .command .user .vm .UpdateVMScheduleCmd ;
40- import org .apache .cloudstack .api .response .ListResponse ;
41- import org .apache .cloudstack .api .response .VMScheduleResponse ;
42- import org .apache .cloudstack .context .CallContext ;
43- import org .apache .cloudstack .vm .schedule .dao .VMScheduleDao ;
44- import org .apache .commons .lang .time .DateUtils ;
45- import org .apache .commons .lang3 .StringUtils ;
46- import org .springframework .scheduling .support .CronExpression ;
47-
48- import javax .inject .Inject ;
49- import java .time .ZonedDateTime ;
50- import java .util .ArrayList ;
51- import java .util .Date ;
52- import java .util .List ;
53- import java .util .Objects ;
54- import java .util .TimeZone ;
5559
5660public class VMScheduleManagerImpl extends MutualExclusiveIdsManagerBase implements VMScheduleManager , PluggableService {
5761
@@ -205,6 +209,9 @@ public VMScheduleResponse updateSchedule(UpdateVMScheduleCmd cmd) {
205209 Date cmdStartDate = cmd .getStartDate ();
206210 Date cmdEndDate = cmd .getEndDate ();
207211 Boolean enabled = cmd .getEnabled ();
212+ final String originalTimeZone = vmSchedule .getTimeZone ();
213+ final Date originalStartDate = vmSchedule .getStartDate ();
214+ final Date originalEndDate = vmSchedule .getEndDate ();
208215
209216 TimeZone timeZone ;
210217 String timeZoneId ;
@@ -231,7 +238,13 @@ public VMScheduleResponse updateSchedule(UpdateVMScheduleCmd cmd) {
231238 startDate = Date .from (DateUtil .getZoneDateTime (cmdStartDate , timeZone .toZoneId ()).toInstant ());
232239 }
233240
234- validateStartDateEndDate (Objects .requireNonNullElse (startDate , DateUtils .addMinutes (new Date (), 1 )), endDate , timeZone );
241+ if (ObjectUtils .anyNotNull (cmdStartDate , cmdEndDate , cmdTimeZone ) &&
242+ (!Objects .equals (originalTimeZone , timeZoneId ) ||
243+ !Objects .equals (originalStartDate , startDate ) ||
244+ !Objects .equals (originalEndDate , endDate ))) {
245+ validateStartDateEndDate (Objects .requireNonNullElse (startDate , DateUtils .addMinutes (new Date (), 1 )),
246+ endDate , timeZone );
247+ }
235248
236249 if (enabled != null ) {
237250 vmSchedule .setEnabled (enabled );
0 commit comments