You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jetspeed-dev@portals.apache.org by ta...@apache.org on 2004/07/14 00:58:53 UTC
cvs commit: jakarta-jetspeed/src/java/org/apache/jetspeed/om/dbregistry SecurityDbEntryPeer.java
taylor 2004/07/13 15:58:53
Added: src/java/org/apache/jetspeed/om/dbregistry
SecurityDbEntryPeer.java
Log:
Torque specific implementation of security registry persistence
CVS: ----------------------------------------------------------------------
CVS: PR:
CVS: If this change addresses a PR in the problem report tracking
CVS: database, then enter the PR number(s) here.
CVS: Obtained from:
CVS: If this change has been taken from another system, such as NCSA,
CVS: then name the system in this line, otherwise delete it.
CVS: Submitted by:
CVS: If this code has been contributed to Apache by someone else; i.e.,
CVS: they sent us a patch or a new module, then include their name/email
CVS: address here. If this is your work then delete this line.
CVS: Reviewed by:
CVS: If we are doing pre-commit code reviews and someone else has
CVS: reviewed your changes, include their name(s) here.
CVS: If you have not had it reviewed then delete this line.
Revision Changes Path
1.1 jakarta-jetspeed/src/java/org/apache/jetspeed/om/dbregistry/SecurityDbEntryPeer.java
Index: SecurityDbEntryPeer.java
===================================================================
/*
* Copyright 2000-2001,2004 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.jetspeed.om.dbregistry;
import java.sql.Connection;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.apache.jetspeed.om.registry.RegistryException;
import org.apache.jetspeed.om.registry.SecurityAccess;
import org.apache.jetspeed.om.registry.SecurityAllow;
import org.apache.jetspeed.om.registry.SecurityEntry;
import org.apache.jetspeed.om.registry.base.BaseSecurityAccess;
import org.apache.jetspeed.om.registry.base.BaseSecurityAllow;
import org.apache.jetspeed.om.registry.base.BaseSecurityEntry;
import org.apache.jetspeed.services.logging.JetspeedLogFactoryService;
import org.apache.jetspeed.services.logging.JetspeedLogger;
import org.apache.torque.Torque;
import org.apache.torque.TorqueException;
import org.apache.torque.util.Criteria;
/**
* Implements the Security Registry database operations
*
* @author <a href="mailto:taylor@apache.org">David Sean Taylor</a>
* @version $Id: SecurityDbEntryPeer.java,v 1.1 2004/07/13 22:58:53 taylor Exp $
*/
public class SecurityDbEntryPeer
extends org.apache.jetspeed.om.dbregistry.BaseSecurityDbEntryPeer
{
public static final String ALLOW_OWNER = "owner";
public static final String ALLOW_ROLE = "role";
public static final String ALLOW_GROUP = "group";
public static final String ALLOW_USER = "user";
private static final JetspeedLogger logger = JetspeedLogFactoryService.getLogger(SecurityDbEntryPeer.class.getName());
public static SecurityEntry lookupSecurityEntry(String entryName)
{
SecurityEntry se = null;
try
{
SecurityDbEntry sde = lookup(entryName);
se = mapDatabaseToEntry(sde);
}
catch (Exception e)
{
logger.error("Exception retrieving Security Entry: " + entryName, e);
}
return se;
}
private static SecurityDbEntry lookup(String entryName)
throws TorqueException
{
Criteria criteria = new Criteria();
criteria.add(SecurityDbEntryPeer.NAME, entryName);
List result = SecurityDbEntryPeer.doSelect(criteria);
if (null == result || result.isEmpty())
{
return null;
}
return (SecurityDbEntry)result.get(0);
}
public static void storeSecurityEntry(SecurityEntry se)
throws RegistryException
{
Connection conn = null;
boolean autoCommit = false;
try
{
// get fresh copy in case its changed on another node
SecurityDbEntry sde = lookup(se.getName());
if (null != sde)
{
SecurityDbEntryPeer.removeSecurityEntryAccess(sde.getId());
}
else
{
sde = new SecurityDbEntry();
}
conn = Torque.getConnection(DATABASE_NAME);
autoCommit = conn.getAutoCommit();
conn.setAutoCommit(false);
sde.setName(se.getName());
sde.setTitle(se.getTitle());
sde.setDescription(se.getDescription());
sde.save(conn);
Iterator accesses = se.getAccesses().iterator();
while (accesses.hasNext())
{
SecurityAccess access = (SecurityAccess)accesses.next();
SecurityAccessDbEntry sade = new SecurityAccessDbEntry();
sade.setAction(access.getAction());
sade.setEntryId(sde.getId());
sade.save(conn);
Iterator allows = access.getAllows().iterator();
while (allows.hasNext())
{
SecurityAllow allow = (SecurityAllow)allows.next();
SecurityAllowDbEntry sa = new SecurityAllowDbEntry();
if (allow.isOwner())
{
sa.setAllowType(ALLOW_OWNER);
sa.setAllowValue(ALLOW_OWNER);
}
else if (allow.getRole() != null)
{
sa.setAllowType(ALLOW_ROLE);
sa.setAllowValue(allow.getRole());
}
else if (allow.getGroup() != null)
{
sa.setAllowType(ALLOW_GROUP);
sa.setAllowValue(allow.getGroup());
}
else
{
sa.setAllowType(ALLOW_USER);
sa.setAllowValue(allow.getUser());
}
sa.setAccessId(sade.getId());
sa.save(conn);
}
}
}
catch (Exception e)
{
try
{
conn.rollback();
}
catch (Exception e2)
{
logger.error("Failed to rollback", e2);
}
logger.error("Exception storing Security Entry: " + se.getName(), e);
throw new RegistryException("Exception storing Security Entry: " + se.getName() + ", " + e.toString());
}
finally
{
// make sure to release the database connection
Torque.closeConnection(conn);
try
{
conn.setAutoCommit(autoCommit);
}
catch (Exception e)
{
}
}
}
public static SecurityEntry mapDatabaseToEntry(SecurityDbEntry sde)
throws TorqueException
{
SecurityEntry se = new BaseSecurityEntry(sde.getId());
se.setName(sde.getName());
se.setTitle(sde.getTitle());
se.setDescription(sde.getDescription());
Iterator accesses = sde.getSecurityAccessDbEntrys().iterator();
while (accesses.hasNext())
{
SecurityAccessDbEntry sade = (SecurityAccessDbEntry)accesses.next();
SecurityAccess access = new BaseSecurityAccess(sade.getId());
access.setAction(sade.getAction());
Iterator allows = sade.getSecurityAllowDbEntrys().iterator();
while (allows.hasNext())
{
SecurityAllowDbEntry sa = (SecurityAllowDbEntry)allows.next();
SecurityAllow allow = new BaseSecurityAllow(sa.getId());
if (sa.getAllowType().equals(ALLOW_OWNER))
{
allow.setOwner(true);
access.getOwnerAllows().add(allow);
}
else if (sa.getAllowType().equals(ALLOW_ROLE))
{
allow.setRole(sa.getAllowValue());
access.getAllows().add(allow);
}
else if (sa.getAllowType().equals(ALLOW_GROUP))
{
allow.setGroup(sa.getAllowValue());
access.getAllows().add(allow);
}
else
{
allow.setUser(sa.getAllowValue());
access.getAllows().add(allow);
}
}
se.getAccesses().add(access);
}
return se;
}
public static void removeSecurityEntry(String entryName)
{
try
{
Criteria criteria = new Criteria();
criteria.add(SecurityDbEntryPeer.NAME, entryName);
SecurityDbEntryPeer.doDelete(criteria);
}
catch (TorqueException e)
{
e.printStackTrace();
logger.error("Exception Removing Security Entry: " + entryName, e);
// throw new RegistryException("Exception Removing Security Entry: " + entryName + ", " + e.toString());
}
}
public static void removeSecurityEntryAccess(long id)
{
try
{
Criteria criteria = new Criteria();
criteria.add(SecurityAccessDbEntryPeer.ENTRY_ID, id);
SecurityDbEntryPeer.doDelete(criteria);
}
catch (TorqueException e)
{
e.printStackTrace();
logger.error("Exception Removing Security Entry Accesses: " + id, e);
// throw new RegistryException("Exception Removing Security Entry: " + entryName + ", " + e.toString());
}
}
public static List fetchExtent()
{
List extent = new ArrayList();
try
{
Iterator result = SecurityDbEntryPeer.doSelect(new Criteria()).iterator();
while (result.hasNext())
{
SecurityEntry se = mapDatabaseToEntry((SecurityDbEntry)result.next());
extent.add(se);
}
}
catch (TorqueException e)
{
e.printStackTrace();
logger.error("Exception Fetching Extent for Security", e);
}
return extent;
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jetspeed-dev-help@jakarta.apache.org