Skip to content

Commit

Permalink
Add option on server to remove SIARD & validation report #105 [skip ci]
Browse files Browse the repository at this point in the history
  • Loading branch information
006627 committed Oct 28, 2019
1 parent 7a02dfa commit 411c9e4
Show file tree
Hide file tree
Showing 21 changed files with 1,176 additions and 753 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,8 @@ void deleteSearch(String databaseUUID, String savedSearchUUID)

Boolean deleteAllCollections(String databaseUUID);

Boolean deleteAll(String databaseUUID);

Boolean isAuthenticationEnabled() throws RODAException;

User getAuthenticatedUser() throws RODAException;
Expand Down Expand Up @@ -171,4 +173,8 @@ boolean validateSIARD(String databaseUUID, String SIARDPath, String validationRe
void updateStatusValidate(String uuid, ViewerDatabase.ValidationStatus status);

String getDateTimeHumanized(String dateTime);

void deleteSIARDFile(String path, String databaseUUID) throws GenericException;

void deleteSIARDValidatorReportFile(String path, String databaseUUID) throws GenericException;
}
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,8 @@ void editSearch(String databaseUUID, String savedSearchUUID, String name, String

void deleteAllCollections(String databaseUUId, AsyncCallback<Boolean> async);

void deleteAll(String databaseUUId, AsyncCallback<Boolean> async);

void isAuthenticationEnabled(AsyncCallback<Boolean> async);

/**
Expand Down Expand Up @@ -174,4 +176,8 @@ void validateSIARD(String databaseUUID, String SIARDPath, String validationRepor
void updateStatusValidate(String uuid, ViewerDatabase.ValidationStatus status, AsyncCallback<Void> async);

void getDateTimeHumanized(String dateTime, AsyncCallback<String> async);

void deleteSIARDFile(String path, String databaseUUID, AsyncCallback<Void> async);

void deleteSIARDValidatorReportFile(String path, String databaseUUID, AsyncCallback<Void> async);
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;

import com.databasepreservation.common.server.index.DatabaseRowsSolrManager;
import org.apache.commons.lang3.StringUtils;
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
Expand Down Expand Up @@ -252,6 +251,10 @@ public Boolean deleteAllCollections(String databaseUUID) {
return false;
}

public Boolean deleteAll(String databaseUUID) {
return SIARDController.deleteAll(databaseUUID);
}

@Override
public Boolean isAuthenticationEnabled() throws RODAException {
return ViewerConfiguration.getInstance().getIsAuthenticationEnabled();
Expand Down Expand Up @@ -447,4 +450,14 @@ public String getDateTimeHumanized(String dateTimeString) {
DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm (z)").withZone(DateTimeZone.UTC);
return dateTimeFormatter.print(dateTime);
}

@Override
public void deleteSIARDFile(String path, String databaseUUID) throws GenericException {
SIARDController.deleteSIARDFileFromPath(path, databaseUUID);
}

@Override
public void deleteSIARDValidatorReportFile(String path, String databaseUUID) throws GenericException {
SIARDController.deleteValidatorReportFileFromPath(path, databaseUUID);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,17 @@
import java.text.SimpleDateFormat;
import java.util.*;

import com.databasepreservation.common.server.index.factory.SolrClientFactory;
import com.databasepreservation.common.server.index.schema.SolrDefaultCollectionRegistry;
import com.databasepreservation.common.shared.client.common.search.SavedSearch;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.joda.time.DateTime;
import org.roda.core.data.exceptions.GenericException;
import org.roda.core.data.exceptions.NotFoundException;
import org.roda.core.data.exceptions.RequestNotValidException;
import org.roda.core.data.v2.index.filter.Filter;
import org.roda.core.data.v2.index.filter.SimpleFilterParameter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.yaml.snakeyaml.Yaml;
Expand Down Expand Up @@ -56,6 +63,9 @@
import com.databasepreservation.modules.viewer.DbvtkModuleFactory;
import com.databasepreservation.utils.ReflectionUtils;

import static com.databasepreservation.common.shared.ViewerConstants.SOLR_INDEX_ROW_COLLECTION_NAME_PREFIX;
import static com.databasepreservation.common.shared.ViewerConstants.SOLR_SEARCHES_DATABASE_UUID;

/**
* @author Bruno Ferreira <bferreira@keep.pt>
*/
Expand Down Expand Up @@ -564,8 +574,11 @@ public static boolean validateSIARD(String databaseUUID, String SIARDPath, Strin
Path reporterPath = ViewerConfiguration.getInstance().getReportPathForValidation(databaseUUID).toAbsolutePath();
boolean valid;
if (validationReportPath == null) {
validationReportPath = ViewerConfiguration.getInstance().getSIARDReportValidationPath().toString() + "-"
String filename = Paths.get(SIARDPath).getFileName().toString().replaceFirst("[.][^.]+$", "") + "-"
+ new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()) + ".txt";
validationReportPath = Paths
.get(ViewerConfiguration.getInstance().getSIARDReportValidationPath().toString(), filename).toAbsolutePath()
.toString();
}
try (Reporter reporter = new Reporter(reporterPath.getParent().toString(), reporterPath.getFileName().toString())) {
SIARDValidation siardValidation = SIARDValidation.newInstance();
Expand Down Expand Up @@ -625,6 +638,71 @@ public static void updateStatusValidate(String databaseUUID, ViewerDatabase.Vali
null, new DateTime().toString());

}

public static boolean deleteAll(String databaseUUID) {
final DatabaseRowsSolrManager solrManager = ViewerFactory.getSolrManager();
try {
ViewerDatabase database = solrManager.retrieve(ViewerDatabase.class, databaseUUID);

String siardPath = database.getSIARDPath();
if (StringUtils.isNotBlank(siardPath) && Files.exists(Paths.get(siardPath))) {
deleteSIARDFileFromPath(siardPath, databaseUUID);
}

String reportPath = database.getValidatorReportPath();
if (StringUtils.isNotBlank(reportPath) && Files.exists(Paths.get(reportPath))) {
deleteValidatorReportFileFromPath(reportPath, databaseUUID);
}

if(database.getStatus().equals(ViewerDatabase.Status.AVAILABLE) || database.getStatus().equals(ViewerDatabase.Status.ERROR) ){
final String collectionName = SOLR_INDEX_ROW_COLLECTION_NAME_PREFIX + databaseUUID;
if (SolrClientFactory.get().deleteCollection(collectionName)) {
Filter savedSearchFilter = new Filter(new SimpleFilterParameter(SOLR_SEARCHES_DATABASE_UUID, databaseUUID));
SolrUtils.delete(ViewerFactory.getSolrClient(), SolrDefaultCollectionRegistry.get(SavedSearch.class),
savedSearchFilter);

ViewerFactory.getSolrManager().markDatabaseCollection(databaseUUID, ViewerDatabase.Status.METADATA_ONLY);
}
}
ViewerFactory.getSolrManager().deleteDatabasesCollection(databaseUUID);
return true;
} catch (NotFoundException | GenericException | RequestNotValidException e) {
LOGGER.error("Could not delete SIARD from system", e);
}
return false;
}

public static void deleteSIARDFileFromPath(String siardPath, String databaseUUID) throws GenericException {
Path path = Paths.get(siardPath);
if (Files.notExists(path)) {
throw new GenericException("File not found at path: " + siardPath);
}
File file = new File(path.toAbsolutePath().toString());
if (file.delete()) {
LOGGER.info("SIARD file removed from system (" + path.toAbsolutePath().toString() + ")");
final DatabaseRowsSolrManager solrManager = ViewerFactory.getSolrManager();
solrManager.updateSIARDPath(databaseUUID, null);
} else {
throw new GenericException("Could not delete SIARD file from system");
}
}

public static void deleteValidatorReportFileFromPath(String validatorReportPath, String databaseUUID)
throws GenericException {
Path path = Paths.get(validatorReportPath);
if (Files.notExists(path)) {
throw new GenericException("File not found at path: " + validatorReportPath);
}

File file = new File(path.toAbsolutePath().toString());
if (file.delete()) {
LOGGER.info("SIARD validator report file removed from system (" + path.toAbsolutePath().toString() + ")");
updateStatusValidate(databaseUUID, ViewerDatabase.ValidationStatus.NOT_VALIDATED);
updateSIARDValidatorIndicators(databaseUUID, null, null, null, null);
} else {
throw new GenericException("Could not delete SIARD validator report file from system");
}
}
/****************************************************************************
* Private auxiliary Methods
****************************************************************************/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -392,6 +392,10 @@ public void updateSIARDValidationIndicators(String databaseUUID, String passed,
Pair.of(ViewerConstants.SOLR_DATABASES_VALIDATION_SKIPPED, skipped));
}

public void updateSIARDPath(String databaseUUID, String siardPath) {
updateValidationFields(databaseUUID, Pair.of(ViewerConstants.SOLR_DATABASES_SIARD_PATH, siardPath));
}

@SafeVarargs
private final void updateValidationFields(String databaseUUID, Pair<String, ?>... fields) {
// create document to update this DB
Expand Down
Loading

0 comments on commit 411c9e4

Please sign in to comment.