Skip to content

Commit

Permalink
Merge pull request DSpace#9653 from AndrewAlesik/media-filter-new-fun…
Browse files Browse the repository at this point in the history
…ctionality

New parameter fromdate for media-filter script
  • Loading branch information
tdonohue authored Sep 4, 2024
2 parents d4f6cd6 + 9c7b20f commit be1ee8b
Show file tree
Hide file tree
Showing 5 changed files with 37 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
*/
package org.dspace.app.mediafilter;

import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
Expand Down Expand Up @@ -37,8 +38,9 @@
* MFM: -v verbose outputs all extracted text to STDOUT; -f force forces all
* bitstreams to be processed, even if they have been before; -n noindex does not
* recreate index after processing bitstreams; -i [identifier] limits processing
* scope to a community, collection or item; and -m [max] limits processing to a
* maximum number of items.
* scope to a community, collection or item; -m [max] limits processing to a
* maximum number of items; -fd [fromdate] takes only items starting from this date,
* filtering by last_modified in the item table.
*/
public class MediaFilterScript extends DSpaceRunnable<MediaFilterScriptConfiguration> {

Expand All @@ -60,6 +62,7 @@ public class MediaFilterScript extends DSpaceRunnable<MediaFilterScriptConfigura
private String[] filterNames;
private String[] skipIds = null;
private Map<String, List<String>> filterFormats = new HashMap<>();
private LocalDate fromDate = null;

public MediaFilterScriptConfiguration getScriptConfiguration() {
return new DSpace().getServiceManager()
Expand Down Expand Up @@ -112,6 +115,10 @@ public void setup() throws ParseException {
skipIds = commandLine.getOptionValues('s');
}

if (commandLine.hasOption('d')) {
fromDate = LocalDate.parse(commandLine.getOptionValue('d'));
}


}

Expand Down Expand Up @@ -215,6 +222,10 @@ public void internalRun() throws Exception {
mediaFilterService.setSkipList(Arrays.asList(skipIds));
}

if (fromDate != null) {
mediaFilterService.setFromDate(fromDate);
}

Context c = null;

try {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,8 @@ public Options getOptions() {
.build();
options.addOption(pluginOption);

options.addOption("d", "fromdate", true, "Process only item from specified last modified date");

Option skipOption = Option.builder("s")
.longOpt("skip")
.hasArg()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,11 @@

import java.io.InputStream;
import java.sql.SQLException;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
Expand Down Expand Up @@ -93,6 +96,7 @@ public class MediaFilterServiceImpl implements MediaFilterService, InitializingB
protected boolean isVerbose = false;
protected boolean isQuiet = false;
protected boolean isForce = false; // default to not forced
protected LocalDate fromDate = null;

protected MediaFilterServiceImpl() {

Expand Down Expand Up @@ -120,6 +124,15 @@ public void applyFiltersAllItems(Context context) throws Exception {
for (Community topLevelCommunity : topLevelCommunities) {
applyFiltersCommunity(context, topLevelCommunity);
}
} else if (fromDate != null) {
Iterator<Item> itemIterator =
itemService.findByLastModifiedSince(
context,
Date.from(fromDate.atStartOfDay(ZoneId.systemDefault()).toInstant())
);
while (itemIterator.hasNext() && processed < max2Process) {
applyFiltersItem(context, itemIterator.next());
}
} else {
//otherwise, just find every item and process
Iterator<Item> itemIterator = itemService.findAll(context);
Expand Down Expand Up @@ -588,4 +601,9 @@ public void setFilterFormats(Map<String, List<String>> filterFormats) {
public void setLogHandler(DSpaceRunnableHandler handler) {
this.handler = handler;
}

@Override
public void setFromDate(LocalDate fromDate) {
this.fromDate = fromDate;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
package org.dspace.app.mediafilter.service;

import java.sql.SQLException;
import java.time.LocalDate;
import java.util.List;
import java.util.Map;

Expand Down Expand Up @@ -149,4 +150,6 @@ public void updatePoliciesOfDerivativeBitstreams(Context context, Item item, Bit
* @param handler
*/
public void setLogHandler(DSpaceRunnableHandler handler);

public void setFromDate(LocalDate fromDate);
}
Original file line number Diff line number Diff line change
Expand Up @@ -441,7 +441,7 @@ public int countItems(Context context, List<Collection> collections, boolean inc
public Iterator<Item> findByLastModifiedSince(Context context, Date since)
throws SQLException {
Query query = createQuery(context,
"SELECT i.id FROM Item i WHERE last_modified > :last_modified ORDER BY id");
"SELECT i.id FROM Item i WHERE lastModified > :last_modified ORDER BY id");
query.setParameter("last_modified", since, TemporalType.TIMESTAMP);
@SuppressWarnings("unchecked")
List<UUID> uuids = query.getResultList();
Expand Down

0 comments on commit be1ee8b

Please sign in to comment.