/* * Copyright (c) 2015 EMC Corporation * All Rights Reserved */ package controllers.api; import static com.emc.vipr.client.core.util.ResourceUtils.uri; import static render.RenderApiModel.renderApi; import static util.api.ApiMapperUtils.getValidationErrors; import static util.api.ExecutionWindowApiMapperUtils.copyExecutionWindowInfoToExecutionWindow; import static util.api.ExecutionWindowApiMapperUtils.newExecutionWindowInfo; import static util.api.ExecutionWindowApiMapperUtils.newExecutionWindowReferenceList; import java.net.URI; import java.util.Date; import java.util.List; import org.apache.http.HttpStatus; import play.i18n.Messages; import play.mvc.Controller; import play.mvc.With; import util.ExecutionWindowUtils; import util.TimeUtils; import com.emc.vipr.model.catalog.ExecutionWindowCommonParam; import com.emc.vipr.model.catalog.ExecutionWindowCreateParam; import com.emc.vipr.model.catalog.ExecutionWindowInfo; import com.emc.vipr.model.catalog.ExecutionWindowRestRep; import com.emc.vipr.model.catalog.ExecutionWindowUpdateParam; import com.emc.vipr.model.catalog.Reference; import com.emc.vipr.model.catalog.ValidationError; import controllers.Common; import controllers.catalog.ExecutionWindows.ExecutionWindowForm; import controllers.deadbolt.Restrict; import controllers.deadbolt.Restrictions; @With(Common.class) @Restrictions({ @Restrict("TENANT_ADMIN") }) public class ExecutionWindowsApi extends Controller { // list all execution windows public static void executionwindows() { List<Reference> windows = newExecutionWindowReferenceList(ExecutionWindowUtils.getExecutionWindows()); renderApi(windows); } public static void executionwindow(String executionWindowId) { ExecutionWindowInfo window = newExecutionWindowInfo(ExecutionWindowUtils .getExecutionWindow(uri(executionWindowId))); if (window != null) { renderApi(window); } else { notFound(Messages.get("ExecutionWindowsApi.windowWithId", executionWindowId)); } } private static ExecutionWindowForm createForm(ExecutionWindowRestRep model) { ExecutionWindowForm form = new ExecutionWindowForm(); if (model.getId() != null) { form.id = model.getId().toString(); } Date d = new Date(); form.timezoneOffsetInMinutes = d.getTimezoneOffset(); form.name = model.getName(); if (model.getHourOfDayInUTC() != null) { form.hourOfDay = TimeUtils.getLocalHourOfDay(model.getHourOfDayInUTC(), form.timezoneOffsetInMinutes); } form.length = model.getExecutionWindowLength(); form.lengthType = model.getExecutionWindowLengthType(); form.type = model.getExecutionWindowType(); form.dayOfWeek = model.getDayOfWeek(); if (model.getLastDayOfMonth() != null && model.getLastDayOfMonth().booleanValue() == true) { form.dayOfMonth = form.LAST_DAY_OF_MONTH; } else if (model.getDayOfMonth() != null) { form.dayOfMonth = model.getDayOfMonth().toString(); } return form; } public static void create(ExecutionWindowInfo info) { ExecutionWindowRestRep window = new ExecutionWindowRestRep(); copyExecutionWindowInfoToExecutionWindow(info, window); createForm(window).validate("executionWindowForm"); if (validation.hasErrors()) { response.status = HttpStatus.SC_BAD_REQUEST; renderApi(getValidationErrors()); } else { ExecutionWindowCreateParam createParam = new ExecutionWindowCreateParam(); map(createParam, info); ExecutionWindowUtils.createExecutionWindow(createParam); info.setId(window.getId().toString()); renderApi(info); } } public static void update(String executionWindowId, ExecutionWindowInfo info) { ExecutionWindowRestRep window = ExecutionWindowUtils.getExecutionWindow(uri(executionWindowId)); if (window != null) { copyExecutionWindowInfoToExecutionWindow(info, window); window.setId(URI.create(executionWindowId)); createForm(window).validate("executionWindowForm"); if (validation.hasErrors()) { response.status = HttpStatus.SC_BAD_REQUEST; ValidationError validationError = null; renderApi(getValidationErrors()); } else { ExecutionWindowUpdateParam updateParam = new ExecutionWindowUpdateParam(); map(updateParam, info); ExecutionWindowUtils.updateExecutionWindow(uri(executionWindowId), updateParam); info.setId(window.getId().toString()); renderApi(info); } } else { notFound(Messages.get("ExecutionWindowsApi.windowWithId", executionWindowId)); } } public static void delete(String executionWindowId) { ExecutionWindowRestRep window = ExecutionWindowUtils.getExecutionWindow(uri(executionWindowId)); if (window != null) { ExecutionWindowUtils.deleteExecutionWindow(window); renderApi(executionWindowId); } else { notFound(Messages.get("ExecutionWindowsApi.windowWithId", executionWindowId)); } } private static void map(ExecutionWindowCommonParam commonParam, ExecutionWindowInfo info) { commonParam.setDayOfMonth(info.getDayOfMonth()); commonParam.setDayOfWeek(info.getDayOfWeek()); commonParam.setExecutionWindowLength(info.getExecutionWindowLength()); commonParam.setExecutionWindowLengthType(info.getExecutionWindowLengthType()); commonParam.setExecutionWindowType(info.getExecutionWindowType()); commonParam.setHourOfDayInUTC(info.getHourOfDayInUTC()); commonParam.setLastDayOfMonth(info.getLastDayOfMonth()); commonParam.setMinuteOfHourInUTC(info.getMinuteOfHourInUTC()); } }