/*
* FixDefaultPolicies.java
*
* Version: $Revision: 3735 $
*
* Date: $Date: 2009-04-24 04:05:53 +0000 (Fri, 24 Apr 2009) $
*
* Copyright (c) 2002-2009, The DSpace Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* - Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* - Neither the name of the DSpace Foundation nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
* DAMAGE.
*/
package org.dspace.authorize;
//import org.dspace.browse.Browse;
import java.sql.SQLException;
import java.util.Iterator;
import java.util.List;
import org.dspace.content.Collection;
import org.dspace.content.Community;
import org.dspace.content.DSpaceObject;
import org.dspace.core.Constants;
import org.dspace.core.Context;
import org.dspace.eperson.Group;
/**
* Command line tool to locate collections without default item and bitstream
* read policies, and assign them some. (They must be there for submitted items
* to inherit.)
*
* @author dstuve
* @version $Revision: 3735 $
*/
public class FixDefaultPolicies
{
/**
* Command line interface to setPolicies - run to see arguments
*/
public static void main(String[] argv) throws Exception
{
Context c = new Context();
// turn off authorization
c.setIgnoreAuthorization(true);
//////////////////////
// carnage begins here
//////////////////////
Collection[] collections = Collection.findAll(c);
for (int i = 0; i < collections.length; i++)
{
Collection t = collections[i];
System.out.println("Collection " + t + " " + t.getMetadata("name"));
// check for READ
if (checkForPolicy(c, t, Constants.READ))
{
System.out.println("\tFound READ policies!");
}
else
{
System.out.println("\tNo READ policy found, adding anonymous.");
addAnonymousPolicy(c, t, Constants.READ);
}
if (checkForPolicy(c, t, Constants.DEFAULT_ITEM_READ))
{
System.out.println("\tFound DEFAULT_ITEM_READ policies!");
}
else
{
System.out
.println("\tNo DEFAULT_ITEM_READ policy found, adding anonymous.");
addAnonymousPolicy(c, t, Constants.DEFAULT_ITEM_READ);
}
if (checkForPolicy(c, t, Constants.DEFAULT_BITSTREAM_READ))
{
System.out.println("\tFound DEFAULT_BITSTREAM_READ policies!");
}
else
{
System.out
.println("\tNo DEFAULT_BITSTREAM_READ policy found, adding anonymous.");
addAnonymousPolicy(c, t, Constants.DEFAULT_BITSTREAM_READ);
}
}
// now ensure communities have READ policies
Community[] communities = Community.findAll(c);
for (int i = 0; i < communities.length; i++)
{
Community t = communities[i];
System.out.println("Community " + t + " " + t.getMetadata("name"));
// check for READ
if (checkForPolicy(c, t, Constants.READ))
{
System.out.println("\tFound READ policies!");
}
else
{
System.out.println("\tNo READ policy found, adding anonymous.");
addAnonymousPolicy(c, t, Constants.READ);
}
}
c.complete();
System.exit(0);
}
/**
* check to see if a collection has any policies for a given action
*/
private static boolean checkForPolicy(Context c, DSpaceObject t,
int myaction) throws SQLException
{
// check to see if any policies exist for this action
List policies = AuthorizeManager
.getPoliciesActionFilter(c, t, myaction);
Iterator i = policies.iterator();
return i.hasNext();
}
/**
* add an anonymous group permission policy to the collection for this
* action
*/
private static void addAnonymousPolicy(Context c, DSpaceObject t,
int myaction) throws SQLException, AuthorizeException
{
// group 0 is the anonymous group!
Group anonymousGroup = Group.find(c, 0);
// now create the default policies for submitted items
ResourcePolicy myPolicy = ResourcePolicy.create(c);
myPolicy.setResource(t);
myPolicy.setAction(myaction);
myPolicy.setGroup(anonymousGroup);
myPolicy.update();
}
}