Skip to content

Commit

Permalink
no change but add logic and tests for indexing dataset versions #3795
Browse files Browse the repository at this point in the history
  • Loading branch information
pdurbin committed Apr 16, 2014
1 parent f9abb6c commit 42aeafb
Show file tree
Hide file tree
Showing 5 changed files with 153 additions and 0 deletions.
10 changes: 10 additions & 0 deletions scripts/search/tests/dataset-versioning01
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#!/bin/bash
# We assume you've done everything in scripts/search/tests/highlighting
# and you have an unreleased dataset and file
diff <(curl -s 'http://localhost:8080/api/datasets/17/versions/1?key=pete') scripts/search/tests/expected/dataset-versioning01raw
# nick can see the dataset and file
diff <(curl -s 'http://localhost:8080/api/search?q=trees&showrelevance=true&key=nick') scripts/search/tests/expected/highlighting-nick-trees
# anon can't see the dataset and file
diff <(curl -s 'http://localhost:8080/api/search?q=trees&showrelevance=true') scripts/search/tests/expected/dataset-versioning01anon
# here's the solr doc for the dataset
diff <(curl -s 'http://localhost:8983/solr/collection1/select?rows=100&wt=json&indent=true&q=id:dataset_17') scripts/search/tests/expected/dataset-versioning01dataset_17solr
10 changes: 10 additions & 0 deletions scripts/search/tests/dataset-versioning02
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#!/bin/bash
# We assume you've done everything in scripts/search/tests/dataset-versioning01
#
# We assume you just released your dataset for the first time.
# raw version
diff <(curl -s 'http://localhost:8080/api/datasets/17/versions/1?key=pete') scripts/search/tests/expected/dataset-versioning02raw
# anon can now see the dataset and file
diff -u <(curl -s 'http://localhost:8080/api/search?q=trees&showrelevance=true') scripts/search/tests/expected/dataset-versioning02anon
# here's the solr doc for the dataset
diff -u scripts/search/tests/expected/dataset-versioning02dataset_17solr <(curl -s 'http://localhost:8983/solr/collection1/select?rows=100&wt=json&indent=true&q=id:dataset_17') | egrep -v '_version_|release_or_create_date_dt'
16 changes: 16 additions & 0 deletions scripts/search/tests/dataset-versioning03
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
#!/bin/bash
# We assume you've done everything in scripts/search/tests/dataset-versioning02
# where you released version 1.0. Now you'll edit the dataset so that it enters
# draft mode by changing
# Title: Rings of Trees and Other Observations
# to
# Title: Rings of Conifers and Other Observations
#
# anon should be able to see the published 1.0 version but not the new draft (no change from dataset-versioning02anon)
#diff -u <(curl -s 'http://localhost:8080/api/search?q=trees&showrelevance=true') scripts/search/tests/expected/dataset-versioning02anon
# pete should be able to see the published version 1.0 with published=true (same as anon)
#diff -u <(curl -s 'http://localhost:8080/api/search?q=trees&showrelevance=true&published=true') scripts/search/tests/expected/dataset-versioning02anon
# pete should be able to see the newer draft version with published=false
diff -u <(curl -s 'http://localhost:8080/api/search?q=trees&showrelevance=true&published=false') scripts/search/tests/expected/dataset-versioning03pete
# here's the solr doc for the dataset
#diff -u scripts/search/tests/expected/dataset-versioning02dataset_17solr <(curl -s 'http://localhost:8983/solr/collection1/select?rows=100&wt=json&indent=true&q=id:dataset_17') | egrep -v '_version_|release_or_create_date_dt'
11 changes: 11 additions & 0 deletions src/main/java/edu/harvard/iq/dataverse/DatasetVersion.java
Original file line number Diff line number Diff line change
Expand Up @@ -539,4 +539,15 @@ private List<DatasetField> getFlatDatasetFields(List<DatasetField> dsfList) {
return retList;
}

public String getSemanticVersion() {
/**
* Not prepending a "v" like "v1.1" or "v2.0" because while SemVerTag
* was in http://semver.org/spec/v1.0.0.html but later removed in
* http://semver.org/spec/v2.0.0.html
*
* See also to v or not to v · Issue #1 · mojombo/semver -
* https://github.com/mojombo/semver/issues/1#issuecomment-2605236
*/
return versionNumber + "." + minorVersionNumber;
}
}
106 changes: 106 additions & 0 deletions src/main/java/edu/harvard/iq/dataverse/IndexServiceBean.java
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,87 @@ public String indexDataverse(Dataverse dataverse) {

public String indexDataset(Dataset dataset) {
logger.info("indexing dataset " + dataset.getId());
String solrIdDraftStudy = "dataset_" + dataset.getId() + "_draft";
String solrIdPublishedStudy = "dataset_" + dataset.getId();
StringBuilder sb = new StringBuilder();
sb.append("rationale:\n");
List<DatasetVersion> versions = dataset.getVersions();
for (DatasetVersion datasetVersion : versions) {
Long versionDatabaseId = datasetVersion.getId();
String versionTitle = datasetVersion.getTitle();
String semanticVersion = datasetVersion.getSemanticVersion();
String versionState = datasetVersion.getVersionState().name();
boolean versionIsReleased = datasetVersion.isReleased();
boolean versionIsWorkingCopy = datasetVersion.isWorkingCopy();
sb.append("version found with database id " + versionDatabaseId + "\n");
sb.append("- title: " + versionTitle + "\n");
sb.append("- semanticVersion-STATE: " + semanticVersion + "-" + versionState + "\n");
sb.append("- isWorkingCopy: " + versionIsWorkingCopy + "\n");
sb.append("- isReleased: " + versionIsReleased + "\n");
}
DatasetVersion latestVersion = dataset.getLatestVersion();
String latestVersionState = latestVersion.getVersionState().name();
DatasetVersion releasedVersion = dataset.getReleasedVersion();
if (latestVersion.isWorkingCopy()) {
sb.append("The latest version is a working copy (latestVersionState: " + latestVersionState + ") and will be indexed as " + solrIdDraftStudy + " (only visible by creator)\n");
if (releasedVersion != null) {
String releasedVersionState = releasedVersion.getVersionState().name();
String semanticVersion = releasedVersion.getSemanticVersion();
sb.append("The released version is " + semanticVersion + " (releasedVersionState: " + releasedVersionState + ") and will be indexed as " + solrIdPublishedStudy + " (visible by anonymous)");
/**
* The latest version is a working copy (latestVersionState:
* DRAFT) and will be indexed as dataset_17_draft (only visible
* by creator)
*
* The released version is 1.0 (releasedVersionState: RELEASED)
* and will be indexed as dataset_17 (visible by anonymous)
*/
logger.info(sb.toString());
String indexDraftResult = indexDatasetAddOrUpdate(dataset);
String indexReleasedVersionResult = indexDatasetAddOrUpdate(dataset);
return "indexDraftResult:" + indexDraftResult + ", indexReleasedVersionResult:" + indexReleasedVersionResult + ", " + sb.toString();
} else {
sb.append("There is no released version yet so nothing will be indexed as " + solrIdPublishedStudy);
/**
* The latest version is a working copy (latestVersionState:
* DRAFT) and will be indexed as dataset_33_draft (only visible
* by creator)
*
* There is no released version yet so nothing will be indexed
* as dataset_33
*/
logger.info(sb.toString());
String indexDraftResult = indexDatasetAddOrUpdate(dataset);
return "indexDraftResult:" + indexDraftResult + ", " + sb.toString();
}
} else {
sb.append("The latest version is not a working copy (latestVersionState: " + latestVersionState + ") and will be indexed as " + solrIdPublishedStudy + " (visible by anonymous) and we will be deleting " + solrIdDraftStudy + "\n");
if (releasedVersion != null) {
String releasedVersionState = releasedVersion.getVersionState().name();
String semanticVersion = releasedVersion.getSemanticVersion();
sb.append("The released version is " + semanticVersion + " (releasedVersionState: " + releasedVersionState + ") and will be (again) indexed as " + solrIdPublishedStudy + " (visible by anonymous)");
/**
* The latest version is not a working copy (latestVersionState:
* RELEASED) and will be indexed as dataset_34 (visible by
* anonymous) and we will be deleting dataset_34_draft
*
* The released version is 1.0 (releasedVersionState: RELEASED)
* and will be (again) indexed as dataset_34 (visible by anonymous)
*/
logger.info(sb.toString());
String deleteDraftVersionResult = removeDatasetDraftFromIndex(solrIdDraftStudy);
String indexReleasedVersionResult = indexDatasetAddOrUpdate(dataset);
return "deleteDraftVersionResult: " + deleteDraftVersionResult + ", indexReleasedVersionResult:" + indexReleasedVersionResult + ", " + sb.toString();
} else {
sb.append("We don't ever expect to ever get here. Why is there no released version if the latest version is not a working copy? The latestVersionState is " + latestVersionState + " and we don't know what to do with it. Nothing will be added or deleted from the index.");
logger.info(sb.toString());
return sb.toString();
}
}
}

public String indexDatasetAddOrUpdate(Dataset dataset) {
logger.info("adding or updating Solr document for dataset id " + dataset.getId());
Collection<SolrInputDocument> docs = new ArrayList<>();
List<String> dataversePathSegmentsAccumulator = new ArrayList<>();
List<String> dataverseSegments = new ArrayList<>();
Expand Down Expand Up @@ -762,4 +843,29 @@ public String delete(Dataverse doomed) {
return response;
}

public String removeDatasetDraftFromIndex(String doomed) {
if (true) {
return "FIXME: remove this 'if true' to actually delete dataset draft " + doomed;
}
/**
* @todo allow for configuration of hostname and port
*/
SolrServer server = new HttpSolrServer("http://localhost:8983/solr/");
logger.info("deleting Solr document for dataset draft: " + doomed);
UpdateResponse updateResponse;
try {
updateResponse = server.deleteById(doomed);
} catch (SolrServerException | IOException ex) {
return ex.toString();
}
try {
server.commit();
} catch (SolrServerException | IOException ex) {
return ex.toString();
}
String response = "Successfully deleted dataset draft " + doomed + " from Solr index. updateReponse was: " + updateResponse.toString();
logger.info(response);
return response;
}

}

0 comments on commit 42aeafb

Please sign in to comment.