Repository: incubator-nifi Updated Branches: refs/heads/NIFI-250 ca7b65262 -> c9604a3fc
NIFI-250: - Adding support for configuring the scheduling strategy and scheduling period for reporting tasks. Project: http://git-wip-us.apache.org/repos/asf/incubator-nifi/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-nifi/commit/c9604a3f Tree: http://git-wip-us.apache.org/repos/asf/incubator-nifi/tree/c9604a3f Diff: http://git-wip-us.apache.org/repos/asf/incubator-nifi/diff/c9604a3f Branch: refs/heads/NIFI-250 Commit: c9604a3fcacf4c33606ca0be767c9d89ef4424a0 Parents: ca7b652 Author: Matt Gilman <[email protected]> Authored: Thu Mar 12 11:10:39 2015 -0400 Committer: Matt Gilman <[email protected]> Committed: Thu Mar 12 11:10:39 2015 -0400 ---------------------------------------------------------------------- .../nifi/web/api/dto/ReportingTaskDTO.java | 16 ++++ .../nifi/web/api/ReportingTaskResource.java | 7 +- .../org/apache/nifi/web/api/dto/DtoFactory.java | 7 ++ .../web/dao/impl/StandardReportingTaskDAO.java | 86 +++++++++++++++---- .../canvas/controller-service-configuration.jsp | 2 +- .../canvas/reporting-task-configuration.jsp | 78 +++++++++++------ .../src/main/webapp/css/reporting-task.css | 30 +++++++ .../js/nf/canvas/nf-controller-service.js | 2 +- .../webapp/js/nf/canvas/nf-reporting-task.js | 89 +++++++++++++++++++- 9 files changed, 270 insertions(+), 47 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/c9604a3f/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/ReportingTaskDTO.java ---------------------------------------------------------------------- diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/ReportingTaskDTO.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/ReportingTaskDTO.java index 6a9c7fc..3ec048b 100644 --- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/ReportingTaskDTO.java +++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/ReportingTaskDTO.java @@ -34,6 +34,8 @@ public class ReportingTaskDTO extends NiFiComponentDTO { private String schedulingStrategy; private String availability; + private Map<String, String> defaultSchedulingPeriod; + private Map<String, String> properties; private Map<String, PropertyDescriptorDTO> descriptors; @@ -180,4 +182,18 @@ public class ReportingTaskDTO extends NiFiComponentDTO { public void setValidationErrors(Collection<String> validationErrors) { this.validationErrors = validationErrors; } + + /** + * The default scheduling period for the different scheduling strategies. + * + * @return + */ + public Map<String, String> getDefaultSchedulingPeriod() { + return defaultSchedulingPeriod; + } + + public void setDefaultSchedulingPeriod(Map<String, String> defaultSchedulingPeriod) { + this.defaultSchedulingPeriod = defaultSchedulingPeriod; + } + } http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/c9604a3f/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ReportingTaskResource.java ---------------------------------------------------------------------- diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ReportingTaskResource.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ReportingTaskResource.java index aae1afc..9f6b135 100644 --- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ReportingTaskResource.java +++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ReportingTaskResource.java @@ -345,6 +345,8 @@ public class ReportingTaskResource extends ApplicationResource { * @param annotationData The annotation data for the reporting task * @param markedForDeletion Array of property names whose value should be removed. * @param state The updated scheduled state + * @param schedulingStrategy The scheduling strategy for this reporting task + * @param schedulingPeriod The scheduling period for this reporting task * @param formParams Additionally, the processor properties and styles are * specified in the form parameters. Because the property names and styles * differ from processor to processor they are specified in a map-like @@ -373,7 +375,8 @@ public class ReportingTaskResource extends ApplicationResource { @FormParam(CLIENT_ID) @DefaultValue(StringUtils.EMPTY) ClientIdParameter clientId, @PathParam("availability") String availability, @PathParam("id") String id, @FormParam("name") String name, @FormParam("annotationData") String annotationData, @FormParam("markedForDeletion[]") List<String> markedForDeletion, - @FormParam("state") String state, MultivaluedMap<String, String> formParams) { + @FormParam("state") String state, @FormParam("schedulingStrategy") String schedulingStrategy, + @FormParam("schedulingPeriod") String schedulingPeriod, MultivaluedMap<String, String> formParams) { // create collections for holding the reporting task properties final Map<String, String> updatedProperties = new LinkedHashMap<>(); @@ -404,6 +407,8 @@ public class ReportingTaskResource extends ApplicationResource { reportingTaskDTO.setId(id); reportingTaskDTO.setName(name); reportingTaskDTO.setState(state); + reportingTaskDTO.setSchedulingStrategy(schedulingStrategy); + reportingTaskDTO.setSchedulingPeriod(schedulingPeriod); reportingTaskDTO.setAnnotationData(annotationData); // only set the properties when appropriate http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/c9604a3f/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/dto/DtoFactory.java ---------------------------------------------------------------------- diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/dto/DtoFactory.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/dto/DtoFactory.java index ae404de..1dcf856 100644 --- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/dto/DtoFactory.java +++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/dto/DtoFactory.java @@ -844,8 +844,15 @@ public final class DtoFactory { dto.setName(reportingTaskNode.getName()); dto.setType(reportingTaskNode.getReportingTask().getClass().getName()); dto.setState(reportingTaskNode.getScheduledState().name()); + dto.setSchedulingStrategy(reportingTaskNode.getSchedulingStrategy().name()); + dto.setSchedulingPeriod(reportingTaskNode.getSchedulingPeriod()); // dto.setComments(reportingTaskNode.getComments()); + final Map<String, String> defaultSchedulingPeriod = new HashMap<>(); + defaultSchedulingPeriod.put(SchedulingStrategy.TIMER_DRIVEN.name(), SchedulingStrategy.TIMER_DRIVEN.getDefaultSchedulingPeriod()); + defaultSchedulingPeriod.put(SchedulingStrategy.CRON_DRIVEN.name(), SchedulingStrategy.CRON_DRIVEN.getDefaultSchedulingPeriod()); + dto.setDefaultSchedulingPeriod(defaultSchedulingPeriod); + // sort a copy of the properties final Map<PropertyDescriptor, String> sortedProperties = new TreeMap<>(new Comparator<PropertyDescriptor>() { @Override http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/c9604a3f/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardReportingTaskDAO.java ---------------------------------------------------------------------- diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardReportingTaskDAO.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardReportingTaskDAO.java index 8a9a897..41434d3 100644 --- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardReportingTaskDAO.java +++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardReportingTaskDAO.java @@ -16,11 +16,14 @@ */ package org.apache.nifi.web.dao.impl; +import java.text.ParseException; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.RejectedExecutionException; +import java.util.regex.Matcher; +import org.apache.commons.lang3.StringUtils; import org.apache.nifi.controller.ReportingTaskNode; import org.apache.nifi.controller.ScheduledState; import org.apache.nifi.controller.exception.ProcessorLifeCycleException; @@ -28,10 +31,13 @@ import org.apache.nifi.controller.exception.ProcessorLifeCycleException; import org.apache.nifi.controller.exception.ValidationException; import org.apache.nifi.controller.reporting.ReportingTaskInstantiationException; import org.apache.nifi.controller.reporting.ReportingTaskProvider; +import org.apache.nifi.scheduling.SchedulingStrategy; +import org.apache.nifi.util.FormatUtils; import org.apache.nifi.web.NiFiCoreException; import org.apache.nifi.web.ResourceNotFoundException; import org.apache.nifi.web.api.dto.ReportingTaskDTO; import org.apache.nifi.web.dao.ReportingTaskDAO; +import org.quartz.CronExpression; public class StandardReportingTaskDAO extends ComponentDAO implements ReportingTaskDAO { @@ -121,10 +127,10 @@ public class StandardReportingTaskDAO extends ComponentDAO implements ReportingT public ReportingTaskNode updateReportingTask(final ReportingTaskDTO reportingTaskDTO) { // get the reporting task final ReportingTaskNode reportingTask = locateReportingTask(reportingTaskDTO.getId()); - + // ensure we can perform the update verifyUpdate(reportingTask, reportingTaskDTO); - + // perform the update configureReportingTask(reportingTask, reportingTaskDTO); @@ -166,22 +172,57 @@ public class StandardReportingTaskDAO extends ComponentDAO implements ReportingT } } } - + return reportingTask; } /** * Validates the specified configuration for the specified reporting task. - * + * * @param reportingTask * @param reportingTaskDTO - * @return + * @return */ private List<String> validateProposedConfiguration(final ReportingTaskNode reportingTask, final ReportingTaskDTO reportingTaskDTO) { final List<String> validationErrors = new ArrayList<>(); + + // get the current scheduling strategy + SchedulingStrategy schedulingStrategy = reportingTask.getSchedulingStrategy(); + + // validate the new scheduling strategy if appropriate + if (isNotNull(reportingTaskDTO.getSchedulingStrategy())) { + try { + // this will be the new scheduling strategy so use it + schedulingStrategy = SchedulingStrategy.valueOf(reportingTaskDTO.getSchedulingStrategy()); + } catch (IllegalArgumentException iae) { + validationErrors.add(String.format("Scheduling strategy: Value must be one of [%s]", StringUtils.join(SchedulingStrategy.values(), ", "))); + } + } + + // validate the scheduling period based on the scheduling strategy + if (isNotNull(reportingTaskDTO.getSchedulingPeriod())) { + switch (schedulingStrategy) { + case TIMER_DRIVEN: + final Matcher schedulingMatcher = FormatUtils.TIME_DURATION_PATTERN.matcher(reportingTaskDTO.getSchedulingPeriod()); + if (!schedulingMatcher.matches()) { + validationErrors.add("Scheduling period is not a valid time duration (ie 30 sec, 5 min)"); + } + break; + case CRON_DRIVEN: + try { + new CronExpression(reportingTaskDTO.getSchedulingPeriod()); + } catch (final ParseException pe) { + throw new IllegalArgumentException(String.format("Scheduling Period '%s' is not a valid cron expression: %s", reportingTaskDTO.getSchedulingPeriod(), pe.getMessage())); + } catch (final Exception e) { + throw new IllegalArgumentException("Scheduling Period is not a valid cron expression: " + reportingTaskDTO.getSchedulingPeriod()); + } + break; + } + } + return validationErrors; } - + @Override public void verifyDelete(final String reportingTaskId) { final ReportingTaskNode reportingTask = locateReportingTask(reportingTaskId); @@ -193,12 +234,12 @@ public class StandardReportingTaskDAO extends ComponentDAO implements ReportingT final ReportingTaskNode reportingTask = locateReportingTask(reportingTaskDTO.getId()); verifyUpdate(reportingTask, reportingTaskDTO); } - + /** * Verifies the reporting task can be updated. - * + * * @param reportingTask - * @param reportingTaskDTO + * @param reportingTaskDTO */ private void verifyUpdate(final ReportingTaskNode reportingTask, final ReportingTaskDTO reportingTaskDTO) { // ensure the state, if specified, is valid @@ -234,13 +275,15 @@ public class StandardReportingTaskDAO extends ComponentDAO implements ReportingT reportingTaskDTO.getState())); } } - + boolean modificationRequest = false; if (isAnyNotNull(reportingTaskDTO.getName(), + reportingTaskDTO.getSchedulingStrategy(), + reportingTaskDTO.getSchedulingPeriod(), reportingTaskDTO.getAnnotationData(), reportingTaskDTO.getProperties())) { modificationRequest = true; - + // validate the request final List<String> requestValidation = validateProposedConfiguration(reportingTask, reportingTaskDTO); @@ -249,26 +292,36 @@ public class StandardReportingTaskDAO extends ComponentDAO implements ReportingT throw new ValidationException(requestValidation); } } - + if (modificationRequest) { reportingTask.verifyCanUpdate(); } } - + /** * Configures the specified reporting task. - * + * * @param reportingTask - * @param reportingTaskDTO + * @param reportingTaskDTO */ private void configureReportingTask(final ReportingTaskNode reportingTask, final ReportingTaskDTO reportingTaskDTO) { final String name = reportingTaskDTO.getName(); + final String schedulingStrategy = reportingTaskDTO.getSchedulingStrategy(); + final String schedulingPeriod = reportingTaskDTO.getSchedulingPeriod(); final String annotationData = reportingTaskDTO.getAnnotationData(); final Map<String, String> properties = reportingTaskDTO.getProperties(); + + // ensure scheduling strategy is set first + if (isNotNull(schedulingStrategy)) { + reportingTask.setSchedulingStrategy(SchedulingStrategy.valueOf(schedulingStrategy)); + } if (isNotNull(name)) { reportingTask.setName(name); } + if (isNotNull(schedulingPeriod)) { + reportingTask.setScheduldingPeriod(schedulingPeriod); + } if (isNotNull(annotationData)) { reportingTask.setAnnotationData(annotationData); } @@ -284,7 +337,7 @@ public class StandardReportingTaskDAO extends ComponentDAO implements ReportingT } } } - + /** * Deletes the specified reporting task. * @@ -297,7 +350,6 @@ public class StandardReportingTaskDAO extends ComponentDAO implements ReportingT } /* setters */ - public void setReportingTaskProvider(ReportingTaskProvider reportingTaskProvider) { this.reportingTaskProvider = reportingTaskProvider; } http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/c9604a3f/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/canvas/controller-service-configuration.jsp ---------------------------------------------------------------------- diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/canvas/controller-service-configuration.jsp b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/canvas/controller-service-configuration.jsp index 338a906..604dd40 100644 --- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/canvas/controller-service-configuration.jsp +++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/canvas/controller-service-configuration.jsp @@ -43,7 +43,7 @@ <span id="controller-service-type"></span> </div> </div> - <div id="availability-setting-container" class="setting hidden"> + <div id="controller-service-availability-setting-container" class="setting hidden"> <div class="availability-setting"> <div class="setting-name"> Availability http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/c9604a3f/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/canvas/reporting-task-configuration.jsp ---------------------------------------------------------------------- diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/canvas/reporting-task-configuration.jsp b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/canvas/reporting-task-configuration.jsp index c1d816f..3b4906c 100644 --- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/canvas/reporting-task-configuration.jsp +++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/canvas/reporting-task-configuration.jsp @@ -20,40 +20,68 @@ <div id="reporting-task-configuration-tabs"></div> <div id="reporting-task-configuration-tabs-content"> <div id="reporting-task-standard-settings-tab-content" class="configuration-tab"> - <div class="setting"> - <div class="setting-name">Name</div> - <div class="setting-field"> - <input type="text" id="reporting-task-name" name="reporting-task-name"/> - <div class="reporting-task-enabled-container"> - <div id="reporting-task-enabled" class="nf-checkbox checkbox-unchecked"></div> - <span> Enabled</span> + <div class="settings-left"> + <div class="setting"> + <div class="setting-name">Name</div> + <div class="setting-field"> + <input type="text" id="reporting-task-name" name="reporting-task-name"/> + <div class="reporting-task-enabled-container"> + <div id="reporting-task-enabled" class="nf-checkbox checkbox-unchecked"></div> + <span> Enabled</span> + </div> </div> </div> - </div> - <div class="setting"> - <div class="setting-name">Id</div> - <div class="setting-field"> - <span id="reporting-task-id"></span> + <div class="setting"> + <div class="setting-name">Id</div> + <div class="setting-field"> + <span id="reporting-task-id"></span> + </div> </div> - </div> - <div class="setting"> - <div class="setting-name">Type</div> - <div class="setting-field"> - <span id="reporting-task-type"></span> + <div class="setting"> + <div class="setting-name">Type</div> + <div class="setting-field"> + <span id="reporting-task-type"></span> + </div> + </div> + <div id="reporting-task-availability-setting-container" class="setting hidden"> + <div class="availability-setting"> + <div class="setting-name"> + Availability + <img class="setting-icon icon-info" src="images/iconInfo.png" alt="Info" title="Where this controller service is available."/> + </div> + <div class="setting-field"> + <div id="availability"></div> + </div> + </div> + <div class="clear"></div> </div> </div> - <div id="availability-setting-container" class="setting hidden"> - <div class="availability-setting"> - <div class="setting-name"> - Availability - <img class="setting-icon icon-info" src="images/iconInfo.png" alt="Info" title="Where this controller service is available."/> + <div class="spacer"> </div> + <div class="settings-right"> + <div class="setting"> + <div class="reporting-task-scheduling-strategy-container"> + <div class="setting-name"> + Scheduling strategy + <img class="setting-icon icon-info" src="images/iconInfo.png" alt="Info" title="The strategy used to schedule this reporting task."/> + </div> + <div class="setting-field"> + <div type="text" id="reporting-task-scheduling-strategy-combo"></div> + </div> </div> - <div class="setting-field"> - <div id="availability"></div> + <div class="reporting-task-scheduling-period-container"> + <div class="setting-name"> + Run schedule + <img class="setting-icon icon-info" src="images/iconInfo.png" alt="Info" title="The amount of time that should elapse between task executions."/> + </div> + <div class="setting-field"> + <input type="text" id="reporting-task-timer-driven-scheduling-period" class="reporting-task-scheduling-period small-setting-input"/> + <input type="text" id="reporting-task-cron-driven-scheduling-period" class="reporting-task-scheduling-period small-setting-input"/> + </div> </div> + <div class="clear"></div> </div> - <div class="clear"></div> </div> + <div class="clear"></div> </div> <div id="reporting-task-properties-tab-content" class="configuration-tab"> <div id="reporting-task-properties"></div> http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/c9604a3f/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/css/reporting-task.css ---------------------------------------------------------------------- diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/css/reporting-task.css b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/css/reporting-task.css index 952aebd..50ecd41 100644 --- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/css/reporting-task.css +++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/css/reporting-task.css @@ -55,6 +55,21 @@ div.reporting-task-configuration-tab-container { /* reporting-task settings */ +#reporting-task-configuration div.settings-left { + float: left; + width: 356px; +} + +#reporting-task-configuration div.settings-right { + float: left; + width: 356px; +} + +#reporting-task-configuration div.spacer { + float: left; + margin-right: 40px; +} + #reporting-task-name { font-size: 11px !important; width: 250px; @@ -77,4 +92,19 @@ div.reporting-task-enabled-container { div.availability-setting { float: left; width: 140px; +} + +div.reporting-task-scheduling-strategy-container, div.reporting-task-scheduling-period-container { + float: left; + width: 175px; +} + +#reporting-task-scheduling-strategy-combo { + width: 145px; + height: 18px; + line-height: 18px; +} + +input.reporting-task-scheduling-period { + font-size: 11px !important; } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/c9604a3f/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-controller-service.js ---------------------------------------------------------------------- diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-controller-service.js b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-controller-service.js index e585133..b570075 100644 --- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-controller-service.js +++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-controller-service.js @@ -1039,7 +1039,7 @@ nf.ControllerService = (function () { // we clustered we need to show the controls for editing the availability if (nf.Canvas.isClustered()) { - $('#availability-setting-container').show(); + $('#controller-service-availability-setting-container').show(); } // initialize the conroller service configuration dialog http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/c9604a3f/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-reporting-task.js ---------------------------------------------------------------------- diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-reporting-task.js b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-reporting-task.js index 4234bd2..fec1d10 100644 --- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-reporting-task.js +++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-reporting-task.js @@ -65,6 +65,25 @@ nf.ReportingTask = (function () { return true; } + // consider the scheduling strategy + var schedulingStrategy = $('#reporting-task-scheduling-strategy-combo').combo('getSelectedOption').value; + if (schedulingStrategy !== (details['schedulingStrategy'] + '')) { + return true; + } + + // get the appropriate scheduling period field + var schedulingPeriod; + if (schedulingStrategy === 'CRON_DRIVEN') { + schedulingPeriod = $('#reporting-task-cron-driven-scheduling-period'); + } else { + schedulingPeriod = $('#reporting-task-timer-driven-scheduling-period'); + } + + // check the scheduling period + if (nf.Common.isDefinedAndNotNull(schedulingPeriod) && schedulingPeriod.val() !== (details['schedulingPeriod'] + '')) { + return true; + } + // defer to the properties return $('#reporting-task-properties').propertytable('isSaveRequired'); }; @@ -76,10 +95,23 @@ nf.ReportingTask = (function () { // properties var properties = $('#reporting-task-properties').propertytable('marshalProperties'); + // get the scheduling strategy + var schedulingStrategy = $('#reporting-task-scheduling-strategy-combo').combo('getSelectedOption').value; + + // get the appropriate scheduling period field + var schedulingPeriod; + if (schedulingStrategy === 'CRON_DRIVEN') { + schedulingPeriod = $('#reporting-task-cron-driven-scheduling-period'); + } else { + schedulingPeriod = $('#reporting-task-timer-driven-scheduling-period'); + } + // create the reporting task dto var reportingTaskDto = {}; reportingTaskDto['id'] = $('#reporting-task-id').text(); reportingTaskDto['name'] = $('#reporting-task-name').val(); + reportingTaskDto['schedulingStrategy'] = schedulingStrategy; + reportingTaskDto['schedulingPeriod'] = schedulingPeriod.val(); // mark the processor disabled if appropriate if ($('#reporting-task-enabled').hasClass('checkbox-unchecked')) { @@ -108,7 +140,23 @@ nf.ReportingTask = (function () { * @argument {object} details The details to validate */ var validateDetails = function (details) { - return true; + var errors = []; + var reportingTask = details['reportingTask']; + + if (nf.Common.isBlank(reportingTask['schedulingPeriod'])) { + errors.push('Run schedule must be specified'); + } + + if (errors.length > 0) { + nf.Dialog.showOkDialog({ + dialogContent: nf.Common.formatUnorderedList(errors), + overlayBackground: false, + headerText: 'Configuration Error' + }); + return false; + } else { + return true; + } }; /** @@ -192,7 +240,7 @@ nf.ReportingTask = (function () { // we clustered we need to show the controls for editing the availability if (nf.Canvas.isClustered()) { - $('#availability-setting-container').show(); + $('#reporting-task-availability-setting-container').show(); } // initialize the reporting task configuration dialog @@ -275,6 +323,43 @@ nf.ReportingTask = (function () { } } + // get the default schedule period + var defaultSchedulingPeriod = reportingTask['defaultSchedulingPeriod']; + var cronSchedulingPeriod = $('#reporting-task-cron-driven-scheduling-period').val(defaultSchedulingPeriod['CRON_DRIVEN']); + var timerSchedulingPeriod = $('#reporting-task-timer-driven-scheduling-period').val(defaultSchedulingPeriod['TIMER_DRIVEN']); + + // set the scheduling period as appropriate + if (reportingTask['schedulingStrategy'] === 'CRON_DRIVEN') { + cronSchedulingPeriod.val(reportingTask['schedulingPeriod']); + } else { + timerSchedulingPeriod.val(reportingTask['schedulingPeriod']); + } + + // initialize the scheduling strategy + $('#reporting-task-scheduling-strategy-combo').combo({ + options: [{ + text: 'Timer driven', + value: 'TIMER_DRIVEN', + description: 'Reporting task will be scheduled to run on an interval defined by the run schedule.' + }, { + text: 'CRON driven', + value: 'CRON_DRIVEN', + description: 'Reporting task will be scheduled to run on at specific times based on the specified CRON string.' + }], + selectedOption: { + value: reportingTask['schedulingStrategy'] + }, + select: function (selectedOption) { + if (selectedOption.value === 'CRON_DRIVEN') { + timerSchedulingPeriod.hide(); + cronSchedulingPeriod.show(); + } else { + timerSchedulingPeriod.show(); + cronSchedulingPeriod.hide(); + } + } + }); + var buttons = [{ buttonText: 'Apply', handler: {
