DS-1711 DS-1712 DS-1466 implement consistent definition of private item

This commit is contained in:
Andrea Bollini
2013-10-26 20:17:55 +02:00
parent f2773ae651
commit ba011ea346
12 changed files with 111 additions and 109 deletions

View File

@@ -116,6 +116,7 @@ public class BrowseDAOOracle implements BrowseDAO
/** flags for what the items represent */ /** flags for what the items represent */
private boolean itemsInArchive = true; private boolean itemsInArchive = true;
private boolean itemsWithdrawn = false; private boolean itemsWithdrawn = false;
private boolean itemsDiscoverable = true;
private boolean enableBrowseFrequencies = true; private boolean enableBrowseFrequencies = true;
@@ -360,7 +361,8 @@ public class BrowseDAOOracle implements BrowseDAO
TableRow row = tri.next(); TableRow row = tri.next();
BrowseItem browseItem = new BrowseItem(context, row.getIntColumn("item_id"), BrowseItem browseItem = new BrowseItem(context, row.getIntColumn("item_id"),
itemsInArchive, itemsInArchive,
itemsWithdrawn); itemsWithdrawn,
itemsDiscoverable);
results.add(browseItem); results.add(browseItem);
} }
@@ -682,11 +684,19 @@ public class BrowseDAOOracle implements BrowseDAO
{ {
itemsInArchive = false; itemsInArchive = false;
itemsWithdrawn = true; itemsWithdrawn = true;
itemsDiscoverable = true;
} }
else else if (table.equals(BrowseIndex.getPrivateBrowseIndex().getTableName()))
{
itemsInArchive = true;
itemsWithdrawn = false;
itemsDiscoverable = false;
}
else
{ {
itemsInArchive = true; itemsInArchive = true;
itemsWithdrawn = false; itemsWithdrawn = false;
itemsDiscoverable = true;
} }
this.rebuildQuery = true; this.rebuildQuery = true;

View File

@@ -116,6 +116,7 @@ public class BrowseDAOPostgres implements BrowseDAO
/** flags for what the items represent */ /** flags for what the items represent */
private boolean itemsInArchive = true; private boolean itemsInArchive = true;
private boolean itemsWithdrawn = false; private boolean itemsWithdrawn = false;
private boolean itemsDiscoverable = true;
private boolean enableBrowseFrequencies = true; private boolean enableBrowseFrequencies = true;
@@ -367,7 +368,8 @@ public class BrowseDAOPostgres implements BrowseDAO
TableRow row = tri.next(); TableRow row = tri.next();
BrowseItem browseItem = new BrowseItem(context, row.getIntColumn("item_id"), BrowseItem browseItem = new BrowseItem(context, row.getIntColumn("item_id"),
itemsInArchive, itemsInArchive,
itemsWithdrawn); itemsWithdrawn,
itemsDiscoverable);
results.add(browseItem); results.add(browseItem);
} }
@@ -687,13 +689,22 @@ public class BrowseDAOPostgres implements BrowseDAO
{ {
itemsInArchive = false; itemsInArchive = false;
itemsWithdrawn = true; itemsWithdrawn = true;
itemsDiscoverable = true;
} }
else else if (table.equals(BrowseIndex.getPrivateBrowseIndex().getTableName()))
{
itemsInArchive = true;
itemsWithdrawn = false;
itemsDiscoverable = false;
}
else
{ {
itemsInArchive = true; itemsInArchive = true;
itemsWithdrawn = false; itemsWithdrawn = false;
itemsDiscoverable = true;
} }
this.rebuildQuery = true; this.rebuildQuery = true;
} }

View File

@@ -55,6 +55,9 @@ public class BrowseItem extends DSpaceObject
/** is the item withdrawn */ /** is the item withdrawn */
private boolean withdrawn = false; private boolean withdrawn = false;
/** is the item discoverable */
private boolean discoverable = true;
/** item handle */ /** item handle */
private String handle = null; private String handle = null;
@@ -66,12 +69,13 @@ public class BrowseItem extends DSpaceObject
* @param in_archive * @param in_archive
* @param withdrawn * @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.context = context;
this.id = id; this.id = id;
this.in_archive = in_archive; this.in_archive = in_archive;
this.withdrawn = withdrawn; this.withdrawn = withdrawn;
this.discoverable = discoverable;
} }
/** /**
@@ -404,4 +408,8 @@ public class BrowseItem extends DSpaceObject
{ {
return withdrawn; return withdrawn;
} }
public boolean isDiscoverable() {
return discoverable;
}
} }

View File

@@ -21,7 +21,7 @@ import java.util.List;
public class BrowseItemDAOOracle implements BrowseItemDAO public class BrowseItemDAOOracle implements BrowseItemDAO
{ {
/** query to obtain all the items from the database */ /** 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) */ /** 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 " + 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(); TableRow row = tri.next();
items.add(new BrowseItem(context, row.getIntColumn("item_id"), items.add(new BrowseItem(context, row.getIntColumn("item_id"),
row.getBooleanColumn("in_archive"), row.getBooleanColumn("in_archive"),
row.getBooleanColumn("withdrawn"))); row.getBooleanColumn("withdrawn"),
row.getBooleanColumn("discoverable")));
} }
} }
finally finally

View File

@@ -21,7 +21,7 @@ import java.util.List;
public class BrowseItemDAOPostgres implements BrowseItemDAO public class BrowseItemDAOPostgres implements BrowseItemDAO
{ {
/** query to obtain all the items from the database */ /** 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) */ /** 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 " + 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(); TableRow row = tri.next();
items.add(new BrowseItem(context, row.getIntColumn("item_id"), items.add(new BrowseItem(context, row.getIntColumn("item_id"),
row.getBooleanColumn("in_archive"), row.getBooleanColumn("in_archive"),
row.getBooleanColumn("withdrawn"))); row.getBooleanColumn("withdrawn"),
row.getBooleanColumn("discoverable")));
} }
} }
finally finally

View File

@@ -344,7 +344,7 @@ public class IndexBrowse
{ {
boolean reqCommunityMappings = false; boolean reqCommunityMappings = false;
Map<Integer, String> sortMap = getSortValues(item, itemMDMap); 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 // Try to update an existing record in the item index
if (!dao.updateIndex(BrowseIndex.getItemBrowseIndex().getTableName(), item.getID(), sortMap)) if (!dao.updateIndex(BrowseIndex.getItemBrowseIndex().getTableName(), item.getID(), sortMap))
@@ -358,30 +358,23 @@ public class IndexBrowse
reqCommunityMappings = true; reqCommunityMappings = true;
} }
else if (!item.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 if (item.isWithdrawn()) else if (item.isWithdrawn())
{ {
// Private items are marked as withdrawn as well. check before if they are private... // Try to update an existing record in the withdrawn index
Item dsoItem = Item.find(context, item.getID()); if (!dao.updateIndex(BrowseIndex.getWithdrawnBrowseIndex().getTableName(), item.getID(), sortMap))
if (!dsoItem.isDiscoverable()){ {
if (!dao.updateIndex(BrowseIndex.getPrivateBrowseIndex().getTableName(), item.getID(), sortMap)) { // Record doesn't exist - ensure that it doesn't exist in the item index,
dao.deleteByItemID(BrowseIndex.getItemBrowseIndex().getTableName(), item.getID()); // and add it to the withdrawn item index
dao.insertIndex(BrowseIndex.getPrivateBrowseIndex().getTableName(), item.getID(), sortMap); dao.deleteByItemID(BrowseIndex.getItemBrowseIndex().getTableName(), item.getID());
} dao.insertIndex(BrowseIndex.getWithdrawnBrowseIndex().getTableName(), item.getID(), sortMap);
} }
else{
// Try to update an existing record in the withdrawn index
if (!dao.updateIndex(BrowseIndex.getWithdrawnBrowseIndex().getTableName(), item.getID(), sortMap))
{
// Record doesn't exist - ensure that it doesn't exist in the item index,
// and add it to the withdrawn item index
dao.deleteByItemID(BrowseIndex.getItemBrowseIndex().getTableName(), item.getID());
dao.insertIndex(BrowseIndex.getWithdrawnBrowseIndex().getTableName(), item.getID(), sortMap);
}
}
} }
else else
{ {
@@ -1273,5 +1266,21 @@ public class IndexBrowse
return browseItem.isWithdrawn(); return browseItem.isWithdrawn();
} }
/**
* Is the Item discoverable?
* @return
*/
public boolean isDiscoverable()
{
if (item != null)
{
return item.isDiscoverable();
}
return browseItem.isDiscoverable();
}
} }
} }

View File

@@ -133,7 +133,7 @@ public class SolrBrowseDAO implements BrowseDAO
private DiscoverResult sResponse = null; private DiscoverResult sResponse = null;
private boolean itemsWithdrawn = false; private boolean itemsWithdrawn = false;
private boolean itemsPrivate = false; private boolean itemsDiscoverable = true;
private boolean showFrequencies; private boolean showFrequencies;
@@ -186,7 +186,8 @@ public class SolrBrowseDAO implements BrowseDAO
} }
try try
{ {
sResponse = searcher.search(context, query, itemsWithdrawn); sResponse = searcher.search(context, query, itemsWithdrawn
|| !itemsDiscoverable);
} }
catch (SearchServiceException e) catch (SearchServiceException e)
{ {
@@ -201,18 +202,10 @@ public class SolrBrowseDAO implements BrowseDAO
if (itemsWithdrawn) if (itemsWithdrawn)
{ {
query.addFilterQueries("withdrawn:true"); query.addFilterQueries("withdrawn:true");
if (itemsPrivate)
{
query.addFilterQueries("discoverable:false");
}
else
{
query.addFilterQueries("NOT(discoverable:false)");
}
} }
else else if (!itemsDiscoverable)
{ {
query.addFilterQueries("NOT(withdrawn:true)"); query.addFilterQueries("discoverable:false");
} }
} }
@@ -301,7 +294,7 @@ public class SolrBrowseDAO implements BrowseDAO
// processing the query... // processing the query...
Item item = (Item) solrDoc; Item item = (Item) solrDoc;
BrowseItem bitem = new BrowseItem(context, item.getID(), BrowseItem bitem = new BrowseItem(context, item.getID(),
item.isArchived(), item.isWithdrawn()); item.isArchived(), item.isWithdrawn(), item.isDiscoverable());
bitems.add(bitem); bitems.add(bitem);
} }
return bitems; return bitems;
@@ -681,13 +674,10 @@ public class SolrBrowseDAO implements BrowseDAO
if (table.equals(BrowseIndex.getWithdrawnBrowseIndex().getTableName())) if (table.equals(BrowseIndex.getWithdrawnBrowseIndex().getTableName()))
{ {
itemsWithdrawn = true; itemsWithdrawn = true;
itemsPrivate = false;
} }
else if (table.equals(BrowseIndex.getPrivateBrowseIndex().getTableName())) else if (table.equals(BrowseIndex.getPrivateBrowseIndex().getTableName()))
{ {
itemsPrivate = true; itemsDiscoverable = false;
// items private are also withdrawn
itemsWithdrawn = true;
} }
facetField = table; facetField = table;
} }

View File

@@ -190,14 +190,9 @@ public class InstallItem
// set owning collection // set owning collection
item.setOwningCollection(is.getCollection()); item.setOwningCollection(is.getCollection());
// set in_archive=true only if the user didn't specify that it is a private item // set in_archive=true
if(item.isDiscoverable()){ item.setArchived(true);
item.setArchived(true);
}
else{ // private item is withdrawn as well
item.withdraw();
}
// save changes ;-) // save changes ;-)
item.update(); item.update();

View File

@@ -1526,7 +1526,7 @@ public class SolrServiceImpl implements SearchService, IndexingService {
return search(context, dso, query, false); 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 != null)
{ {
if (dso instanceof Community) if (dso instanceof Community)
@@ -1540,17 +1540,17 @@ public class SolrServiceImpl implements SearchService, IndexingService {
discoveryQuery.addFilterQueries("handle:" + dso.getHandle()); 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 { try {
if(getSolr() == null){ if(getSolr() == null){
return new DiscoverResult(); return new DiscoverResult();
} }
SolrQuery solrQuery = resolveToSolrQuery(context, discoveryQuery, includeWithdrawn); SolrQuery solrQuery = resolveToSolrQuery(context, discoveryQuery, includeUnDiscoverable);
QueryResponse queryResponse = getSolr().query(solrQuery); 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(); SolrQuery solrQuery = new SolrQuery();
@@ -1580,9 +1580,10 @@ public class SolrServiceImpl implements SearchService, IndexingService {
solrQuery.setParam("spellcheck", Boolean.TRUE); solrQuery.setParam("spellcheck", Boolean.TRUE);
} }
if (!includeWithdrawn) if (!includeUnDiscoverable)
{ {
solrQuery.addFilterQuery("NOT(withdrawn:true)"); solrQuery.addFilterQuery("NOT(withdrawn:true)");
solrQuery.addFilterQuery("NOT(discoverable:false)");
} }
for (int i = 0; i < discoveryQuery.getFilterQueries().size(); i++) for (int i = 0; i < discoveryQuery.getFilterQueries().size(); i++)

View File

@@ -339,7 +339,6 @@ public class EditItemServlet extends DSpaceServlet
// Withdraw the item // Withdraw the item
item.setDiscoverable(false); item.setDiscoverable(false);
item.withdraw();
JSPManager.showJSP(request, response, "/tools/get-item-id.jsp"); JSPManager.showJSP(request, response, "/tools/get-item-id.jsp");
context.complete(); context.complete();
@@ -347,7 +346,6 @@ public class EditItemServlet extends DSpaceServlet
case PUBLICIZE: case PUBLICIZE:
item.setDiscoverable(true); item.setDiscoverable(true);
item.reinstate();
JSPManager.showJSP(request, response, "/tools/get-item-id.jsp"); JSPManager.showJSP(request, response, "/tools/get-item-id.jsp");
context.complete(); context.complete();
@@ -534,33 +532,16 @@ public class EditItemServlet extends DSpaceServlet
} }
} }
if (item.isDiscoverable()) if (item.isDiscoverable())
{ {
try request.setAttribute("privating_button", AuthorizeManager
{ .authorizeActionBoolean(context, item, Constants.WRITE));
// who can Withdraw can also Make It Private }
AuthorizeUtil.authorizeWithdrawItem(context, item); else
request.setAttribute("privating_button", Boolean.TRUE); {
} request.setAttribute("publicize_button", AuthorizeManager
catch (AuthorizeException authex) .authorizeActionBoolean(context, item, Constants.WRITE));
{ }
request.setAttribute("privating_button", Boolean.FALSE);
}
}
else
{
try
{
// who can Reinstate can also Make It Public
AuthorizeUtil.authorizeReinstateItem(context, item);
request.setAttribute("publicize_button", Boolean.TRUE);
}
catch (AuthorizeException authex)
{
request.setAttribute("publicize_button", Boolean.FALSE);
}
}
request.setAttribute("item", item); request.setAttribute("item", item);
request.setAttribute("handle", handle); request.setAttribute("handle", handle);

View File

@@ -333,8 +333,6 @@ public class FlowItemUtils
Item item = Item.find(context, itemID); Item item = Item.find(context, itemID);
item.setDiscoverable(false); item.setDiscoverable(false);
// private item is withdrawn as well
item.withdraw();
item.update(); item.update();
context.commit(); context.commit();
@@ -359,8 +357,6 @@ public class FlowItemUtils
Item item = Item.find(context, itemID); Item item = Item.find(context, itemID);
item.setDiscoverable(true); item.setDiscoverable(true);
// since private Items are withdrawn they are reinstated during "make it public" process
item.reinstate();
item.update(); item.update();
context.commit(); context.commit();

View File

@@ -216,27 +216,26 @@ public class EditItemStatusForm extends AbstractDSpaceTransformer {
if(item.isDiscoverable()) if(item.isDiscoverable())
{ {
itemInfo.addLabel(T_label_private); 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")
itemInfo.addItem().addButton("submit_private").setValue(T_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 else
{ {
itemInfo.addLabel(T_label_public); 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); itemInfo.addItem().addButton("submit_public").setValue(T_submit_public);
} }
catch (AuthorizeException authex) else
{ {
addNotAllowedButton(itemInfo.addItem(), "submit_public", T_submit_public); addNotAllowedButton(itemInfo.addItem(), "submit_public", T_submit_public);
} }