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 .springframework .scheduling .support .CronExpression ;
43+
2144import com .cloud .api .query .MutualExclusiveIdsManagerBase ;
2245import com .cloud .event .ActionEvent ;
2346import com .cloud .event .EventTypes ;
3255import com .cloud .utils .exception .CloudRuntimeException ;
3356import com .cloud .vm .UserVmManager ;
3457import 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 ;
5558
5659public class VMScheduleManagerImpl extends MutualExclusiveIdsManagerBase implements VMScheduleManager , PluggableService {
5760
@@ -205,6 +208,9 @@ public VMScheduleResponse updateSchedule(UpdateVMScheduleCmd cmd) {
205208 Date cmdStartDate = cmd .getStartDate ();
206209 Date cmdEndDate = cmd .getEndDate ();
207210 Boolean enabled = cmd .getEnabled ();
211+ final String originalTimeZone = vmSchedule .getTimeZone ();
212+ final Date originalStartDate = vmSchedule .getStartDate ();
213+ final Date originalEndDate = vmSchedule .getEndDate ();
208214
209215 TimeZone timeZone ;
210216 String timeZoneId ;
@@ -231,7 +237,13 @@ public VMScheduleResponse updateSchedule(UpdateVMScheduleCmd cmd) {
231237 startDate = Date .from (DateUtil .getZoneDateTime (cmdStartDate , timeZone .toZoneId ()).toInstant ());
232238 }
233239
234- validateStartDateEndDate (Objects .requireNonNullElse (startDate , DateUtils .addMinutes (new Date (), 1 )), endDate , timeZone );
240+ if (ObjectUtils .anyNotNull (cmdStartDate , cmdEndDate , cmdTimeZone ) &&
241+ (!Objects .equals (originalTimeZone , timeZoneId ) ||
242+ !Objects .equals (originalStartDate , startDate ) ||
243+ !Objects .equals (originalEndDate , endDate ))) {
244+ validateStartDateEndDate (Objects .requireNonNullElse (startDate , DateUtils .addMinutes (new Date (), 1 )),
245+ endDate , timeZone );
246+ }
235247
236248 if (enabled != null ) {
237249 vmSchedule .setEnabled (enabled );
0 commit comments