diff --git a/src/main/java/io/linuxserver/davos/dto/ActionDTO.java b/src/main/java/io/linuxserver/davos/dto/ActionDTO.java index 60d1b89..064a2b9 100644 --- a/src/main/java/io/linuxserver/davos/dto/ActionDTO.java +++ b/src/main/java/io/linuxserver/davos/dto/ActionDTO.java @@ -1,5 +1,8 @@ package io.linuxserver.davos.dto; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + public class ActionDTO { public Long id; @@ -9,4 +12,8 @@ public class ActionDTO { public String f2; public String f3; public String f4; + + public String toString() { + return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE); + } } diff --git a/src/main/java/io/linuxserver/davos/dto/FilterDTO.java b/src/main/java/io/linuxserver/davos/dto/FilterDTO.java index 4493880..f1c8519 100644 --- a/src/main/java/io/linuxserver/davos/dto/FilterDTO.java +++ b/src/main/java/io/linuxserver/davos/dto/FilterDTO.java @@ -1,7 +1,14 @@ package io.linuxserver.davos.dto; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + public class FilterDTO { public Long id; public String value; + + public String toString() { + return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE); + } } diff --git a/src/main/java/io/linuxserver/davos/dto/ScheduleConfigurationDTO.java b/src/main/java/io/linuxserver/davos/dto/ScheduleConfigurationDTO.java index bc93264..ddd0597 100644 --- a/src/main/java/io/linuxserver/davos/dto/ScheduleConfigurationDTO.java +++ b/src/main/java/io/linuxserver/davos/dto/ScheduleConfigurationDTO.java @@ -4,6 +4,9 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + import io.linuxserver.davos.transfer.ftp.FileTransferType; import io.linuxserver.davos.transfer.ftp.TransferProtocol; @@ -24,4 +27,8 @@ public class ScheduleConfigurationDTO { public FileTransferType transferType; public List filters = new ArrayList(); public List actions = new ArrayList(); + + public String toString() { + return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE); + } } diff --git a/src/main/java/io/linuxserver/davos/persistence/dao/DefaultScheduleConfigurationDAO.java b/src/main/java/io/linuxserver/davos/persistence/dao/DefaultScheduleConfigurationDAO.java index 5cd1998..17fdd4f 100644 --- a/src/main/java/io/linuxserver/davos/persistence/dao/DefaultScheduleConfigurationDAO.java +++ b/src/main/java/io/linuxserver/davos/persistence/dao/DefaultScheduleConfigurationDAO.java @@ -5,8 +5,6 @@ import java.util.List; import javax.annotation.Resource; import org.joda.time.DateTime; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import io.linuxserver.davos.persistence.model.ScheduleConfigurationModel; @@ -15,8 +13,6 @@ import io.linuxserver.davos.persistence.repository.ScheduleConfigurationReposito @Component public class DefaultScheduleConfigurationDAO implements ScheduleConfigurationDAO { - private static final Logger LOGGER = LoggerFactory.getLogger(DefaultScheduleConfigurationDAO.class); - @Resource private ScheduleConfigurationRepository configRepository; @@ -38,9 +34,7 @@ public class DefaultScheduleConfigurationDAO implements ScheduleConfigurationDAO @Override public void updateLastRun(Long configId, DateTime lastRun) { - LOGGER.debug("Updating model with new lastRun of {}", lastRun); ScheduleConfigurationModel model = configRepository.findOne(configId); - LOGGER.debug("Got existing model, {}", model); model.lastRun = lastRun.toDate(); configRepository.save(model); diff --git a/src/main/java/io/linuxserver/davos/persistence/model/ActionModel.java b/src/main/java/io/linuxserver/davos/persistence/model/ActionModel.java index 89e2c3a..7c472e5 100644 --- a/src/main/java/io/linuxserver/davos/persistence/model/ActionModel.java +++ b/src/main/java/io/linuxserver/davos/persistence/model/ActionModel.java @@ -10,11 +10,7 @@ import javax.persistence.ManyToOne; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; -import com.fasterxml.jackson.annotation.JsonIdentityInfo; -import com.fasterxml.jackson.annotation.ObjectIdGenerators; - @Entity -@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id") public class ActionModel { @Id @@ -37,7 +33,7 @@ public class ActionModel { public String f4; @ManyToOne - @JoinColumn(name = "schedule_id") + @JoinColumn(name = "action_schedule_id") public ScheduleConfigurationModel schedule; @Override diff --git a/src/main/java/io/linuxserver/davos/persistence/model/FilterModel.java b/src/main/java/io/linuxserver/davos/persistence/model/FilterModel.java index e600484..ecff9eb 100644 --- a/src/main/java/io/linuxserver/davos/persistence/model/FilterModel.java +++ b/src/main/java/io/linuxserver/davos/persistence/model/FilterModel.java @@ -10,11 +10,7 @@ import javax.persistence.ManyToOne; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; -import com.fasterxml.jackson.annotation.JsonIdentityInfo; -import com.fasterxml.jackson.annotation.ObjectIdGenerators; - @Entity -@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id") public class FilterModel { @Id @@ -25,7 +21,7 @@ public class FilterModel { public String value; @ManyToOne - @JoinColumn(name = "schedule_id") + @JoinColumn(name = "filter_schedule_id") public ScheduleConfigurationModel schedule; @Override diff --git a/src/main/java/io/linuxserver/davos/persistence/model/ScheduleConfigurationModel.java b/src/main/java/io/linuxserver/davos/persistence/model/ScheduleConfigurationModel.java index 0c6aa46..e382655 100644 --- a/src/main/java/io/linuxserver/davos/persistence/model/ScheduleConfigurationModel.java +++ b/src/main/java/io/linuxserver/davos/persistence/model/ScheduleConfigurationModel.java @@ -7,13 +7,14 @@ import java.util.List; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; -import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.OneToMany; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; +import org.hibernate.annotations.LazyCollection; +import org.hibernate.annotations.LazyCollectionOption; import io.linuxserver.davos.transfer.ftp.FileTransferType; import io.linuxserver.davos.transfer.ftp.TransferProtocol; @@ -61,10 +62,12 @@ public class ScheduleConfigurationModel { @Column public FileTransferType transferType; - @OneToMany(fetch = FetchType.EAGER, orphanRemoval = true, mappedBy = "schedule", cascade = CascadeType.ALL) + @OneToMany(orphanRemoval = true, mappedBy = "schedule", cascade = CascadeType.ALL) + @LazyCollection(LazyCollectionOption.FALSE) public List filters = new ArrayList(); - @OneToMany(fetch = FetchType.EAGER, orphanRemoval = true, mappedBy = "schedule", cascade = CascadeType.ALL) + @OneToMany(orphanRemoval = true, mappedBy = "schedule", cascade = CascadeType.ALL) + @LazyCollection(LazyCollectionOption.FALSE) public List actions = new ArrayList(); @Override diff --git a/src/main/java/io/linuxserver/davos/schedule/RunnableSchedule.java b/src/main/java/io/linuxserver/davos/schedule/RunnableSchedule.java index 3f1a678..81ef0de 100644 --- a/src/main/java/io/linuxserver/davos/schedule/RunnableSchedule.java +++ b/src/main/java/io/linuxserver/davos/schedule/RunnableSchedule.java @@ -26,6 +26,7 @@ public class RunnableSchedule implements Runnable { LOGGER.info("Starting schedule {}", scheduleId); ScheduleConfigurationModel model = configurationDAO.getConfig(scheduleId); + ScheduleConfiguration config = ScheduleConfigurationFactory.createConfig(model); ScheduleWorkflow scheduleWorkflow = new ScheduleWorkflow(config); diff --git a/src/main/java/io/linuxserver/davos/schedule/workflow/actions/HttpAPICallAction.java b/src/main/java/io/linuxserver/davos/schedule/workflow/actions/HttpAPICallAction.java index 8e1198f..14d2e7e 100644 --- a/src/main/java/io/linuxserver/davos/schedule/workflow/actions/HttpAPICallAction.java +++ b/src/main/java/io/linuxserver/davos/schedule/workflow/actions/HttpAPICallAction.java @@ -37,7 +37,7 @@ public class HttpAPICallAction implements PostDownloadAction { headers.add("Content-Type", contentType); LOGGER.info("Sending message to generic API for {}", execution.fileName); - HttpEntity httpEntity = new HttpEntity(body, headers); + HttpEntity httpEntity = new HttpEntity(body.replaceAll("$filename", execution.fileName), headers); LOGGER.debug("Sending message {} to generic API: {}", httpEntity, url); restTemplate.exchange(url, method, httpEntity, Object.class); diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index b4dcd6d..7695eb8 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,5 +1,5 @@ -#spring.datasource.url=jdbc:h2:file:~/testdb -#spring.datasource.username=sa -#spring.datasource.password=sa -#spring.datasource.driverClassName=org.h2.Driver -#spring.jpa.hibernate.ddl-auto=update \ No newline at end of file +spring.datasource.url=jdbc:h2:file:/config/db/davos +spring.datasource.username=sa +spring.datasource.password=sa +spring.datasource.driverClassName=org.h2.Driver +spring.jpa.hibernate.ddl-auto=update \ No newline at end of file diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml index 25d87b5..24bb5bd 100644 --- a/src/main/resources/log4j2.xml +++ b/src/main/resources/log4j2.xml @@ -8,7 +8,7 @@ + filePattern="/config/logs/$${date:yyyy-MM}/app-%d{yyyy-MM-dd-HH}-%i.log"> %d{yyyy-MM-dd HH:mm:ss.SSS} - $5p - [%c{1}] - %msg%n diff --git a/src/main/resources/static/css/davos.css b/src/main/resources/static/css/davos.css index e8b3939..e2ae6da 100644 --- a/src/main/resources/static/css/davos.css +++ b/src/main/resources/static/css/davos.css @@ -111,4 +111,8 @@ a.collection-item.schedule { .chip { margin-bottom: 10px; +} + +.action_type { + text-transform: capitalize; } \ No newline at end of file diff --git a/src/main/resources/static/js/davos.js b/src/main/resources/static/js/davos.js index 4cb0411..aaa7902 100644 --- a/src/main/resources/static/js/davos.js +++ b/src/main/resources/static/js/davos.js @@ -32,11 +32,49 @@ var action = (function ($) { 'use strict'; - var initialise; + var initialise, addMove, addPushbullet, addApi; initialise = function () { + $('#select_download_action').on('change', function () { + var action = $(this).find('option:selected').val(); + $(this).val('choose'); + + if (action === 'pushbullet') { + addPushbullet(); + } + + if (action === 'move') { + addMove(); + } + + if (action === 'api') { + addApi(); + } + }); + }; + + addMove = function () { + + var newAction = $('
move
'); + $('#download_actions').append(newAction); + }; + + addPushbullet = function () { + + var newAction = $('
pushbullet
'); + $('#download_actions').append(newAction); + }; + + addApi = function () { + + + var newAction = $('
api

' + + '


'); + + $('#download_actions').append(newAction); }; return { @@ -49,13 +87,13 @@ var schedule = (function ($) { 'use strict'; - var initialise, save, onSuccess, onError, cleanId, startSchedule, stopSchedule, startResponse, stopResponse; + var initialise, save, onSuccess, onError, cleanId, startSchedule, stopSchedule, startResponse, stopResponse, cleanActionFunction; initialise = function () { $('#start_schedule').on('click', startSchedule); $('#stop_schedule').on('click', stopSchedule); - + $('#save_schedule').on('click', function () { var postData = { @@ -87,6 +125,21 @@ var schedule = (function ($) { postData.filters.push(filter); }); + $('#download_actions .action').each(function () { + + var action = { + + id: cleanId($(this).attr('data-action-id')), + actionType: $(this).find('.action_type').text(), + f1: cleanActionFunction($(this).find('.f1')), + f2: cleanActionFunction($(this).find('.f2')), + f3: cleanActionFunction($(this).find('.f3')), + f4: cleanActionFunction($(this).find('.f4')) + }; + + postData.actions.push(action); + }); + $.ajax({ method: "POST", @@ -100,6 +153,14 @@ var schedule = (function ($) { }); }; + cleanActionFunction = function (action) { + + if (action) + return action.val(); + + return null; + }; + cleanId = function (id) { if ($.trim(id).length === 0) { @@ -116,7 +177,7 @@ var schedule = (function ($) { url: "/api/v1/schedule/" + cleanId($('#schedule_id').val()) + "/start" }).done(startResponse).fail(startResponse); }; - + stopSchedule = function () { $.ajax({ @@ -128,7 +189,7 @@ var schedule = (function ($) { startResponse = function (msg) { Materialize.toast(msg.message, 3000, 'rounded'); }; - + stopResponse = function (msg) { Materialize.toast(msg.message, 3000, 'rounded'); }; diff --git a/src/main/resources/templates/schedulingedit.html b/src/main/resources/templates/schedulingedit.html index 96685d6..fbfc3f1 100644 --- a/src/main/resources/templates/schedulingedit.html +++ b/src/main/resources/templates/schedulingedit.html @@ -234,7 +234,7 @@
  • codePost-download Actions
    -
    +

    @@ -246,22 +246,41 @@

    - + - + +
    -
    +
    + +
    -
    +
    + +
    +
    + +
    + +
    + +
    + +
    + +
    + +
    +
  • @@ -285,9 +304,10 @@ - + diff --git a/src/test/java/io/linuxserver/davos/schedule/workflow/actions/HttpAPICallActionTest.java b/src/test/java/io/linuxserver/davos/schedule/workflow/actions/HttpAPICallActionTest.java index 3857a1e..22e2516 100644 --- a/src/test/java/io/linuxserver/davos/schedule/workflow/actions/HttpAPICallActionTest.java +++ b/src/test/java/io/linuxserver/davos/schedule/workflow/actions/HttpAPICallActionTest.java @@ -35,7 +35,7 @@ public class HttpAPICallActionTest { @Before public void setUp() { - httpAPICallAction = new HttpAPICallAction("http://url", HttpMethod.POST, "application/json", "{\"hello\":\"world\"}"); + httpAPICallAction = new HttpAPICallAction("http://url", HttpMethod.POST, "application/json", "{\"hello\":\"$filename\"}"); initMocks(this); } @@ -52,7 +52,7 @@ public class HttpAPICallActionTest { String body = entityCaptor.getValue().getBody(); - assertThat(body).isEqualTo("{\"hello\":\"world\"}"); + assertThat(body).isEqualTo("{\"hello\":\"file.txt\"}"); } @Test @@ -73,18 +73,24 @@ public class HttpAPICallActionTest { @Test public void ifRestTemplateFailsThenDoNothing() { + PostDownloadExecution execution = new PostDownloadExecution(); + execution.fileName = "filename"; + when(mockRestTemplate.exchange(eq("http://url"), eq(HttpMethod.POST), any(HttpEntity.class), eq(Object.class))) .thenThrow(new RestClientException("")); - httpAPICallAction.execute(new PostDownloadExecution()); + httpAPICallAction.execute(execution); } @Test public void ifRestTemplateFailsBecauseMessageIsUnreadbleThenDoNothing() { + PostDownloadExecution execution = new PostDownloadExecution(); + execution.fileName = "filename"; + when(mockRestTemplate.exchange(eq("http://url"), eq(HttpMethod.POST), any(HttpEntity.class), eq(Object.class))) .thenThrow(new HttpMessageConversionException("")); - httpAPICallAction.execute(new PostDownloadExecution()); + httpAPICallAction.execute(execution); } }