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 */
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
else if (table.equals(BrowseIndex.getPrivateBrowseIndex().getTableName()))
{
itemsInArchive = true;
itemsWithdrawn = false;
itemsDiscoverable = false;
}
else
{
itemsInArchive = true;
itemsWithdrawn = false;
itemsDiscoverable = true;
}
this.rebuildQuery = true;

View File

@@ -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
else if (table.equals(BrowseIndex.getPrivateBrowseIndex().getTableName()))
{
itemsInArchive = true;
itemsWithdrawn = false;
itemsDiscoverable = false;
}
else
{
itemsInArchive = true;
itemsWithdrawn = false;
itemsDiscoverable = true;
}
this.rebuildQuery = true;
}

View File

@@ -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;
}
}

View File

@@ -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

View File

@@ -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

View File

@@ -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,30 +358,23 @@ public class IndexBrowse
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())
{
// 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);
}
// 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{
// 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
{
@@ -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();
}
}
}

View File

@@ -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,18 +202,10 @@ public class SolrBrowseDAO implements BrowseDAO
if (itemsWithdrawn)
{
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...
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;
}

View File

@@ -190,14 +190,9 @@ 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()){
item.setArchived(true);
}
else{ // private item is withdrawn as well
item.withdraw();
}
// set in_archive=true
item.setArchived(true);
// save changes ;-)
item.update();

View File

@@ -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++)

View File

@@ -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();
@@ -534,33 +532,16 @@ 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);
}
}
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);
}
}
if (item.isDiscoverable())
{
request.setAttribute("privating_button", AuthorizeManager
.authorizeActionBoolean(context, item, Constants.WRITE));
}
else
{
request.setAttribute("publicize_button", AuthorizeManager
.authorizeActionBoolean(context, item, Constants.WRITE));
}
request.setAttribute("item", item);
request.setAttribute("handle", handle);

View File

@@ -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();

View File

@@ -216,27 +216,26 @@ public class EditItemStatusForm extends AbstractDSpaceTransformer {
if(item.isDiscoverable())
{
itemInfo.addLabel(T_label_private);
try
{
// who can Withdraw can also Make It Private
AuthorizeUtil.authorizeWithdrawItem(context, item);
itemInfo.addItem().addButton("submit_private").setValue(T_submit_private);
}
catch (AuthorizeException authex)
{
addNotAllowedButton(itemInfo.addItem(), "submit_private", T_submit_private);
}
if (AuthorizeManager.authorizeActionBoolean(context, item,
Constants.WRITE))
{
itemInfo.addItem().addButton("submit_private")
.setValue(T_submit_private);
}
else
{
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);
}