mirror of
https://github.com/DSpace/DSpace.git
synced 2025-10-18 15:33:09 +00:00
DS-1711 DS-1712 DS-1466 implement consistent definition of private item
This commit is contained in:
@@ -116,6 +116,7 @@ public class BrowseDAOOracle implements BrowseDAO
|
||||
/** flags for what the items represent */
|
||||
private boolean itemsInArchive = true;
|
||||
private boolean itemsWithdrawn = false;
|
||||
private boolean itemsDiscoverable = true;
|
||||
|
||||
private boolean enableBrowseFrequencies = true;
|
||||
|
||||
@@ -360,7 +361,8 @@ public class BrowseDAOOracle implements BrowseDAO
|
||||
TableRow row = tri.next();
|
||||
BrowseItem browseItem = new BrowseItem(context, row.getIntColumn("item_id"),
|
||||
itemsInArchive,
|
||||
itemsWithdrawn);
|
||||
itemsWithdrawn,
|
||||
itemsDiscoverable);
|
||||
results.add(browseItem);
|
||||
}
|
||||
|
||||
@@ -682,11 +684,19 @@ public class BrowseDAOOracle implements BrowseDAO
|
||||
{
|
||||
itemsInArchive = false;
|
||||
itemsWithdrawn = true;
|
||||
itemsDiscoverable = true;
|
||||
}
|
||||
else if (table.equals(BrowseIndex.getPrivateBrowseIndex().getTableName()))
|
||||
{
|
||||
itemsInArchive = true;
|
||||
itemsWithdrawn = false;
|
||||
itemsDiscoverable = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
itemsInArchive = true;
|
||||
itemsWithdrawn = false;
|
||||
itemsDiscoverable = true;
|
||||
}
|
||||
|
||||
this.rebuildQuery = true;
|
||||
|
@@ -116,6 +116,7 @@ public class BrowseDAOPostgres implements BrowseDAO
|
||||
/** flags for what the items represent */
|
||||
private boolean itemsInArchive = true;
|
||||
private boolean itemsWithdrawn = false;
|
||||
private boolean itemsDiscoverable = true;
|
||||
|
||||
private boolean enableBrowseFrequencies = true;
|
||||
|
||||
@@ -367,7 +368,8 @@ public class BrowseDAOPostgres implements BrowseDAO
|
||||
TableRow row = tri.next();
|
||||
BrowseItem browseItem = new BrowseItem(context, row.getIntColumn("item_id"),
|
||||
itemsInArchive,
|
||||
itemsWithdrawn);
|
||||
itemsWithdrawn,
|
||||
itemsDiscoverable);
|
||||
results.add(browseItem);
|
||||
}
|
||||
|
||||
@@ -687,13 +689,22 @@ public class BrowseDAOPostgres implements BrowseDAO
|
||||
{
|
||||
itemsInArchive = false;
|
||||
itemsWithdrawn = true;
|
||||
itemsDiscoverable = true;
|
||||
}
|
||||
else if (table.equals(BrowseIndex.getPrivateBrowseIndex().getTableName()))
|
||||
{
|
||||
itemsInArchive = true;
|
||||
itemsWithdrawn = false;
|
||||
itemsDiscoverable = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
itemsInArchive = true;
|
||||
itemsWithdrawn = false;
|
||||
itemsDiscoverable = true;
|
||||
}
|
||||
|
||||
|
||||
this.rebuildQuery = true;
|
||||
}
|
||||
|
||||
|
@@ -55,6 +55,9 @@ public class BrowseItem extends DSpaceObject
|
||||
/** is the item withdrawn */
|
||||
private boolean withdrawn = false;
|
||||
|
||||
/** is the item discoverable */
|
||||
private boolean discoverable = true;
|
||||
|
||||
/** item handle */
|
||||
private String handle = null;
|
||||
|
||||
@@ -66,12 +69,13 @@ public class BrowseItem extends DSpaceObject
|
||||
* @param in_archive
|
||||
* @param withdrawn
|
||||
*/
|
||||
public BrowseItem(Context context, int id, boolean in_archive, boolean withdrawn)
|
||||
public BrowseItem(Context context, int id, boolean in_archive, boolean withdrawn, boolean discoverable)
|
||||
{
|
||||
this.context = context;
|
||||
this.id = id;
|
||||
this.in_archive = in_archive;
|
||||
this.withdrawn = withdrawn;
|
||||
this.discoverable = discoverable;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -404,4 +408,8 @@ public class BrowseItem extends DSpaceObject
|
||||
{
|
||||
return withdrawn;
|
||||
}
|
||||
|
||||
public boolean isDiscoverable() {
|
||||
return discoverable;
|
||||
}
|
||||
}
|
||||
|
@@ -21,7 +21,7 @@ import java.util.List;
|
||||
public class BrowseItemDAOOracle implements BrowseItemDAO
|
||||
{
|
||||
/** query to obtain all the items from the database */
|
||||
private String findAll = "SELECT item_id, in_archive, withdrawn FROM item WHERE in_archive = 1 OR withdrawn = 1";
|
||||
private String findAll = "SELECT item_id, in_archive, withdrawn, discoverable FROM item WHERE in_archive = 1 OR withdrawn = 1";
|
||||
|
||||
/** query to get the text value of a metadata element only (qualifier is NULL) */
|
||||
private String getByMetadataElement = "SELECT authority, confidence, text_value,text_lang,element,qualifier FROM metadatavalue, metadatafieldregistry, metadataschemaregistry " +
|
||||
@@ -75,7 +75,8 @@ public class BrowseItemDAOOracle implements BrowseItemDAO
|
||||
TableRow row = tri.next();
|
||||
items.add(new BrowseItem(context, row.getIntColumn("item_id"),
|
||||
row.getBooleanColumn("in_archive"),
|
||||
row.getBooleanColumn("withdrawn")));
|
||||
row.getBooleanColumn("withdrawn"),
|
||||
row.getBooleanColumn("discoverable")));
|
||||
}
|
||||
}
|
||||
finally
|
||||
|
@@ -21,7 +21,7 @@ import java.util.List;
|
||||
public class BrowseItemDAOPostgres implements BrowseItemDAO
|
||||
{
|
||||
/** query to obtain all the items from the database */
|
||||
private String findAll = "SELECT item_id, in_archive, withdrawn FROM item WHERE in_archive = true OR withdrawn = true";
|
||||
private String findAll = "SELECT item_id, in_archive, withdrawn, discoverable FROM item WHERE in_archive = true OR withdrawn = true";
|
||||
|
||||
/** query to get the text value of a metadata element only (qualifier is NULL) */
|
||||
private String getByMetadataElement = "SELECT authority, confidence, text_value,text_lang,element,qualifier FROM metadatavalue, metadatafieldregistry, metadataschemaregistry " +
|
||||
@@ -74,7 +74,8 @@ public class BrowseItemDAOPostgres implements BrowseItemDAO
|
||||
TableRow row = tri.next();
|
||||
items.add(new BrowseItem(context, row.getIntColumn("item_id"),
|
||||
row.getBooleanColumn("in_archive"),
|
||||
row.getBooleanColumn("withdrawn")));
|
||||
row.getBooleanColumn("withdrawn"),
|
||||
row.getBooleanColumn("discoverable")));
|
||||
}
|
||||
}
|
||||
finally
|
||||
|
@@ -344,7 +344,7 @@ public class IndexBrowse
|
||||
{
|
||||
boolean reqCommunityMappings = false;
|
||||
Map<Integer, String> sortMap = getSortValues(item, itemMDMap);
|
||||
if (item.isArchived() && !item.isWithdrawn())
|
||||
if (item.isArchived() && item.isDiscoverable())
|
||||
{
|
||||
// Try to update an existing record in the item index
|
||||
if (!dao.updateIndex(BrowseIndex.getItemBrowseIndex().getTableName(), item.getID(), sortMap))
|
||||
@@ -358,17 +358,15 @@ public class IndexBrowse
|
||||
|
||||
reqCommunityMappings = true;
|
||||
}
|
||||
else if (item.isWithdrawn())
|
||||
else if (!item.isDiscoverable())
|
||||
{
|
||||
// Private items are marked as withdrawn as well. check before if they are private...
|
||||
Item dsoItem = Item.find(context, item.getID());
|
||||
if (!dsoItem.isDiscoverable()){
|
||||
if (!dao.updateIndex(BrowseIndex.getPrivateBrowseIndex().getTableName(), item.getID(), sortMap)) {
|
||||
dao.deleteByItemID(BrowseIndex.getItemBrowseIndex().getTableName(), item.getID());
|
||||
dao.insertIndex(BrowseIndex.getPrivateBrowseIndex().getTableName(), item.getID(), sortMap);
|
||||
}
|
||||
}
|
||||
else{
|
||||
else if (item.isWithdrawn())
|
||||
{
|
||||
// Try to update an existing record in the withdrawn index
|
||||
if (!dao.updateIndex(BrowseIndex.getWithdrawnBrowseIndex().getTableName(), item.getID(), sortMap))
|
||||
{
|
||||
@@ -378,11 +376,6 @@ public class IndexBrowse
|
||||
dao.insertIndex(BrowseIndex.getWithdrawnBrowseIndex().getTableName(), item.getID(), sortMap);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
// This item shouldn't exist in either index - ensure that it is removed
|
||||
@@ -1273,5 +1266,21 @@ public class IndexBrowse
|
||||
|
||||
return browseItem.isWithdrawn();
|
||||
}
|
||||
|
||||
/**
|
||||
* Is the Item discoverable?
|
||||
* @return
|
||||
*/
|
||||
public boolean isDiscoverable()
|
||||
{
|
||||
if (item != null)
|
||||
{
|
||||
return item.isDiscoverable();
|
||||
}
|
||||
|
||||
return browseItem.isDiscoverable();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
@@ -133,7 +133,7 @@ public class SolrBrowseDAO implements BrowseDAO
|
||||
private DiscoverResult sResponse = null;
|
||||
|
||||
private boolean itemsWithdrawn = false;
|
||||
private boolean itemsPrivate = false;
|
||||
private boolean itemsDiscoverable = true;
|
||||
|
||||
private boolean showFrequencies;
|
||||
|
||||
@@ -186,7 +186,8 @@ public class SolrBrowseDAO implements BrowseDAO
|
||||
}
|
||||
try
|
||||
{
|
||||
sResponse = searcher.search(context, query, itemsWithdrawn);
|
||||
sResponse = searcher.search(context, query, itemsWithdrawn
|
||||
|| !itemsDiscoverable);
|
||||
}
|
||||
catch (SearchServiceException e)
|
||||
{
|
||||
@@ -201,19 +202,11 @@ public class SolrBrowseDAO implements BrowseDAO
|
||||
if (itemsWithdrawn)
|
||||
{
|
||||
query.addFilterQueries("withdrawn:true");
|
||||
if (itemsPrivate)
|
||||
}
|
||||
else if (!itemsDiscoverable)
|
||||
{
|
||||
query.addFilterQueries("discoverable:false");
|
||||
}
|
||||
else
|
||||
{
|
||||
query.addFilterQueries("NOT(discoverable:false)");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
query.addFilterQueries("NOT(withdrawn:true)");
|
||||
}
|
||||
}
|
||||
|
||||
private void addLocationScopeFilter(DiscoverQuery query)
|
||||
@@ -301,7 +294,7 @@ public class SolrBrowseDAO implements BrowseDAO
|
||||
// processing the query...
|
||||
Item item = (Item) solrDoc;
|
||||
BrowseItem bitem = new BrowseItem(context, item.getID(),
|
||||
item.isArchived(), item.isWithdrawn());
|
||||
item.isArchived(), item.isWithdrawn(), item.isDiscoverable());
|
||||
bitems.add(bitem);
|
||||
}
|
||||
return bitems;
|
||||
@@ -681,13 +674,10 @@ public class SolrBrowseDAO implements BrowseDAO
|
||||
if (table.equals(BrowseIndex.getWithdrawnBrowseIndex().getTableName()))
|
||||
{
|
||||
itemsWithdrawn = true;
|
||||
itemsPrivate = false;
|
||||
}
|
||||
else if (table.equals(BrowseIndex.getPrivateBrowseIndex().getTableName()))
|
||||
{
|
||||
itemsPrivate = true;
|
||||
// items private are also withdrawn
|
||||
itemsWithdrawn = true;
|
||||
itemsDiscoverable = false;
|
||||
}
|
||||
facetField = table;
|
||||
}
|
||||
|
@@ -190,13 +190,8 @@ public class InstallItem
|
||||
// set owning collection
|
||||
item.setOwningCollection(is.getCollection());
|
||||
|
||||
// set in_archive=true only if the user didn't specify that it is a private item
|
||||
if(item.isDiscoverable()){
|
||||
// set in_archive=true
|
||||
item.setArchived(true);
|
||||
}
|
||||
else{ // private item is withdrawn as well
|
||||
item.withdraw();
|
||||
}
|
||||
|
||||
// save changes ;-)
|
||||
item.update();
|
||||
|
@@ -1526,7 +1526,7 @@ public class SolrServiceImpl implements SearchService, IndexingService {
|
||||
return search(context, dso, query, false);
|
||||
}
|
||||
|
||||
public DiscoverResult search(Context context, DSpaceObject dso, DiscoverQuery discoveryQuery, boolean includeWithdrawn) throws SearchServiceException {
|
||||
public DiscoverResult search(Context context, DSpaceObject dso, DiscoverQuery discoveryQuery, boolean includeUnDiscoverable) throws SearchServiceException {
|
||||
if(dso != null)
|
||||
{
|
||||
if (dso instanceof Community)
|
||||
@@ -1540,17 +1540,17 @@ public class SolrServiceImpl implements SearchService, IndexingService {
|
||||
discoveryQuery.addFilterQueries("handle:" + dso.getHandle());
|
||||
}
|
||||
}
|
||||
return search(context, discoveryQuery, includeWithdrawn);
|
||||
return search(context, discoveryQuery, includeUnDiscoverable);
|
||||
|
||||
}
|
||||
|
||||
|
||||
public DiscoverResult search(Context context, DiscoverQuery discoveryQuery, boolean includeWithdrawn) throws SearchServiceException {
|
||||
public DiscoverResult search(Context context, DiscoverQuery discoveryQuery, boolean includeUnDiscoverable) throws SearchServiceException {
|
||||
try {
|
||||
if(getSolr() == null){
|
||||
return new DiscoverResult();
|
||||
}
|
||||
SolrQuery solrQuery = resolveToSolrQuery(context, discoveryQuery, includeWithdrawn);
|
||||
SolrQuery solrQuery = resolveToSolrQuery(context, discoveryQuery, includeUnDiscoverable);
|
||||
|
||||
|
||||
QueryResponse queryResponse = getSolr().query(solrQuery);
|
||||
@@ -1562,7 +1562,7 @@ public class SolrServiceImpl implements SearchService, IndexingService {
|
||||
}
|
||||
}
|
||||
|
||||
protected SolrQuery resolveToSolrQuery(Context context, DiscoverQuery discoveryQuery, boolean includeWithdrawn)
|
||||
protected SolrQuery resolveToSolrQuery(Context context, DiscoverQuery discoveryQuery, boolean includeUnDiscoverable)
|
||||
{
|
||||
SolrQuery solrQuery = new SolrQuery();
|
||||
|
||||
@@ -1580,9 +1580,10 @@ public class SolrServiceImpl implements SearchService, IndexingService {
|
||||
solrQuery.setParam("spellcheck", Boolean.TRUE);
|
||||
}
|
||||
|
||||
if (!includeWithdrawn)
|
||||
if (!includeUnDiscoverable)
|
||||
{
|
||||
solrQuery.addFilterQuery("NOT(withdrawn:true)");
|
||||
solrQuery.addFilterQuery("NOT(discoverable:false)");
|
||||
}
|
||||
|
||||
for (int i = 0; i < discoveryQuery.getFilterQueries().size(); i++)
|
||||
|
@@ -339,7 +339,6 @@ public class EditItemServlet extends DSpaceServlet
|
||||
|
||||
// Withdraw the item
|
||||
item.setDiscoverable(false);
|
||||
item.withdraw();
|
||||
JSPManager.showJSP(request, response, "/tools/get-item-id.jsp");
|
||||
context.complete();
|
||||
|
||||
@@ -347,7 +346,6 @@ public class EditItemServlet extends DSpaceServlet
|
||||
|
||||
case PUBLICIZE:
|
||||
item.setDiscoverable(true);
|
||||
item.reinstate();
|
||||
JSPManager.showJSP(request, response, "/tools/get-item-id.jsp");
|
||||
context.complete();
|
||||
|
||||
@@ -536,31 +534,14 @@ public class EditItemServlet extends DSpaceServlet
|
||||
|
||||
if (item.isDiscoverable())
|
||||
{
|
||||
try
|
||||
{
|
||||
// who can Withdraw can also Make It Private
|
||||
AuthorizeUtil.authorizeWithdrawItem(context, item);
|
||||
request.setAttribute("privating_button", Boolean.TRUE);
|
||||
}
|
||||
catch (AuthorizeException authex)
|
||||
{
|
||||
request.setAttribute("privating_button", Boolean.FALSE);
|
||||
}
|
||||
request.setAttribute("privating_button", AuthorizeManager
|
||||
.authorizeActionBoolean(context, item, Constants.WRITE));
|
||||
}
|
||||
else
|
||||
{
|
||||
try
|
||||
{
|
||||
// who can Reinstate can also Make It Public
|
||||
AuthorizeUtil.authorizeReinstateItem(context, item);
|
||||
request.setAttribute("publicize_button", Boolean.TRUE);
|
||||
request.setAttribute("publicize_button", AuthorizeManager
|
||||
.authorizeActionBoolean(context, item, Constants.WRITE));
|
||||
}
|
||||
catch (AuthorizeException authex)
|
||||
{
|
||||
request.setAttribute("publicize_button", Boolean.FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
request.setAttribute("item", item);
|
||||
request.setAttribute("handle", handle);
|
||||
|
@@ -333,8 +333,6 @@ public class FlowItemUtils
|
||||
|
||||
Item item = Item.find(context, itemID);
|
||||
item.setDiscoverable(false);
|
||||
// private item is withdrawn as well
|
||||
item.withdraw();
|
||||
item.update();
|
||||
context.commit();
|
||||
|
||||
@@ -359,8 +357,6 @@ public class FlowItemUtils
|
||||
|
||||
Item item = Item.find(context, itemID);
|
||||
item.setDiscoverable(true);
|
||||
// since private Items are withdrawn they are reinstated during "make it public" process
|
||||
item.reinstate();
|
||||
item.update();
|
||||
context.commit();
|
||||
|
||||
|
@@ -216,27 +216,26 @@ public class EditItemStatusForm extends AbstractDSpaceTransformer {
|
||||
if(item.isDiscoverable())
|
||||
{
|
||||
itemInfo.addLabel(T_label_private);
|
||||
try
|
||||
if (AuthorizeManager.authorizeActionBoolean(context, item,
|
||||
Constants.WRITE))
|
||||
{
|
||||
// who can Withdraw can also Make It Private
|
||||
AuthorizeUtil.authorizeWithdrawItem(context, item);
|
||||
itemInfo.addItem().addButton("submit_private").setValue(T_submit_private);
|
||||
itemInfo.addItem().addButton("submit_private")
|
||||
.setValue(T_submit_private);
|
||||
}
|
||||
catch (AuthorizeException authex)
|
||||
else
|
||||
{
|
||||
addNotAllowedButton(itemInfo.addItem(), "submit_private", T_submit_private);
|
||||
addNotAllowedButton(itemInfo.addItem(), "submit_private",
|
||||
T_submit_private);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
itemInfo.addLabel(T_label_public);
|
||||
try
|
||||
if (AuthorizeManager.authorizeActionBoolean(context, item, Constants.WRITE))
|
||||
{
|
||||
// who can Reinstate can also Make It Public
|
||||
AuthorizeUtil.authorizeReinstateItem(context, item);
|
||||
itemInfo.addItem().addButton("submit_public").setValue(T_submit_public);
|
||||
}
|
||||
catch (AuthorizeException authex)
|
||||
else
|
||||
{
|
||||
addNotAllowedButton(itemInfo.addItem(), "submit_public", T_submit_public);
|
||||
}
|
||||
|
Reference in New Issue
Block a user