cmsdrivermanager.java
来自「找了很久才找到到源代码」· Java 代码 · 共 1,525 行 · 第 1/5 页
JAVA
1,525 行
private CmsPublishEngine m_publishEngine;
/** The security manager (for access checks). */
private CmsSecurityManager m_securityManager;
/** The sql manager. */
private CmsSqlManager m_sqlManager;
/** The user driver. */
private I_CmsUserDriver m_userDriver;
/** The VFS driver. */
private I_CmsVfsDriver m_vfsDriver;
/**
* Private constructor, initializes some required member variables.<p>
*/
private CmsDriverManager() {
// intentionally left blank
}
/**
* Reads the required configurations from the opencms.properties file and creates
* the various drivers to access the cms resources.<p>
*
* The initialization process of the driver manager and its drivers is split into
* the following phases:
* <ul>
* <li>the database pool configuration is read</li>
* <li>a plain and empty driver manager instance is created</li>
* <li>an instance of each driver is created</li>
* <li>the driver manager is passed to each driver during initialization</li>
* <li>finally, the driver instances are passed to the driver manager during initialization</li>
* </ul>
*
* @param configurationManager the configuration manager
* @param securityManager the security manager
* @param runtimeInfoFactory the initialized OpenCms runtime info factory
* @param publishEngine the publish engine
*
* @return CmsDriverManager the instanciated driver manager
* @throws CmsInitException if the driver manager couldn't be instanciated
*/
public static CmsDriverManager newInstance(
CmsConfigurationManager configurationManager,
CmsSecurityManager securityManager,
I_CmsDbContextFactory runtimeInfoFactory,
CmsPublishEngine publishEngine) throws CmsInitException {
// read the opencms.properties from the configuration
ExtendedProperties config = (ExtendedProperties)configurationManager.getConfiguration();
List drivers = null;
String driverName = null;
I_CmsVfsDriver vfsDriver = null;
I_CmsUserDriver userDriver = null;
I_CmsProjectDriver projectDriver = null;
I_CmsHistoryDriver historyDriver = null;
CmsDriverManager driverManager = null;
try {
// create a driver manager instance
driverManager = new CmsDriverManager();
if (CmsLog.INIT.isInfoEnabled()) {
CmsLog.INIT.info(Messages.get().getBundle().key(Messages.INIT_DRIVER_MANAGER_START_PHASE1_0));
}
if ((runtimeInfoFactory == null) && CmsLog.INIT.isDebugEnabled()) {
CmsLog.INIT.debug(Messages.get().getBundle().key(Messages.INIT_DRIVER_MANAGER_START_RT_0));
}
} catch (Exception exc) {
CmsMessageContainer message = Messages.get().container(Messages.LOG_ERR_DRIVER_MANAGER_START_0);
if (LOG.isFatalEnabled()) {
LOG.fatal(message.key(), exc);
}
throw new CmsInitException(message, exc);
}
// set the security manager
driverManager.m_securityManager = securityManager;
// set connection pools
driverManager.m_connectionPools = new ArrayList();
// set the lock manager
driverManager.m_lockManager = new CmsLockManager(driverManager);
// create and set the sql manager
driverManager.m_sqlManager = new CmsSqlManager(driverManager);
// set the publish engine
driverManager.m_publishEngine = publishEngine;
if (CmsLog.INIT.isInfoEnabled()) {
CmsLog.INIT.info(Messages.get().getBundle().key(Messages.INIT_DRIVER_MANAGER_START_PHASE2_0));
}
// read the pool names to initialize
String[] driverPoolNames = config.getStringArray(CmsDriverManager.CONFIGURATION_DB + ".pools");
if (CmsLog.INIT.isInfoEnabled()) {
String names = "";
for (int p = 0; p < driverPoolNames.length; p++) {
names += driverPoolNames[p] + " ";
}
CmsLog.INIT.info(Messages.get().getBundle().key(Messages.INIT_DRIVER_MANAGER_START_POOLS_1, names));
}
// initialize each pool
for (int p = 0; p < driverPoolNames.length; p++) {
driverManager.newPoolInstance(config, driverPoolNames[p]);
}
// initialize the runtime info factory with the generated driver manager
if (runtimeInfoFactory != null) {
runtimeInfoFactory.initialize(driverManager);
}
if (CmsLog.INIT.isInfoEnabled()) {
CmsLog.INIT.info(Messages.get().getBundle().key(Messages.INIT_DRIVER_MANAGER_START_PHASE3_0));
}
// read the vfs driver class properties and initialize a new instance
drivers = Arrays.asList(config.getStringArray(CmsDriverManager.CONFIGURATION_VFS));
String driverKey = (String)drivers.get(0) + ".vfs.driver";
driverName = config.getString(driverKey);
drivers = (drivers.size() > 1) ? drivers.subList(1, drivers.size()) : null;
if (driverName == null) {
CmsLog.INIT.error(Messages.get().getBundle().key(Messages.INIT_DRIVER_FAILED_1, driverKey));
}
vfsDriver = (I_CmsVfsDriver)driverManager.newDriverInstance(configurationManager, driverName, drivers);
// read the user driver class properties and initialize a new instance
drivers = Arrays.asList(config.getStringArray(CmsDriverManager.CONFIGURATION_USER));
driverKey = (String)drivers.get(0) + ".user.driver";
driverName = config.getString(driverKey);
drivers = (drivers.size() > 1) ? drivers.subList(1, drivers.size()) : null;
if (driverName == null) {
CmsLog.INIT.error(Messages.get().getBundle().key(Messages.INIT_DRIVER_FAILED_1, driverKey));
}
userDriver = (I_CmsUserDriver)driverManager.newDriverInstance(configurationManager, driverName, drivers);
// read the project driver class properties and initialize a new instance
drivers = Arrays.asList(config.getStringArray(CmsDriverManager.CONFIGURATION_PROJECT));
driverKey = (String)drivers.get(0) + ".project.driver";
driverName = config.getString(driverKey);
drivers = (drivers.size() > 1) ? drivers.subList(1, drivers.size()) : null;
if (driverName == null) {
CmsLog.INIT.error(Messages.get().getBundle().key(Messages.INIT_DRIVER_FAILED_1, driverKey));
}
projectDriver = (I_CmsProjectDriver)driverManager.newDriverInstance(configurationManager, driverName, drivers);
// read the history driver class properties and initialize a new instance
if (config.get(CmsDriverManager.CONFIGURATION_HISTORY) != null) {
drivers = Arrays.asList(config.getStringArray(CmsDriverManager.CONFIGURATION_HISTORY));
driverKey = (String)drivers.get(0) + ".history.driver";
driverName = config.getString(driverKey);
drivers = (drivers.size() > 1) ? drivers.subList(1, drivers.size()) : null;
if (driverName == null) {
CmsLog.INIT.error(Messages.get().getBundle().key(Messages.INIT_DRIVER_FAILED_1, driverKey));
}
historyDriver = (I_CmsHistoryDriver)driverManager.newDriverInstance(
configurationManager,
driverName,
drivers);
} else {
drivers = Arrays.asList(config.getStringArray(CmsDriverManager.CONFIGURATION_BACKUP));
driverKey = (String)drivers.get(0) + ".backup.driver";
driverName = config.getString(driverKey);
drivers = (drivers.size() > 1) ? drivers.subList(1, drivers.size()) : null;
if (driverName == null) {
CmsLog.INIT.error(Messages.get().getBundle().key(Messages.INIT_DRIVER_FAILED_1, driverKey));
}
historyDriver = (I_CmsHistoryDriver)driverManager.newDriverInstance(
configurationManager,
driverName,
drivers);
}
// store the access objects
driverManager.m_vfsDriver = vfsDriver;
driverManager.m_userDriver = userDriver;
driverManager.m_projectDriver = projectDriver;
driverManager.m_historyDriver = historyDriver;
// store the configuration
driverManager.m_propertyConfiguration = config;
// register the driver manager for required events
org.opencms.main.OpenCms.addCmsEventListener(driverManager, new int[] {
I_CmsEventListener.EVENT_UPDATE_EXPORTS,
I_CmsEventListener.EVENT_CLEAR_CACHES,
I_CmsEventListener.EVENT_CLEAR_PRINCIPAL_CACHES,
I_CmsEventListener.EVENT_PUBLISH_PROJECT});
// return the configured driver manager
return driverManager;
}
/**
* Adds a new relation to the given resource.<p>
*
* @param dbc the database context
* @param resource the resource to add the relation to
* @param target the target of the relation
* @param type the type of the relation
* @param importCase if importing relations
*
* @throws CmsException if something goes wrong
*/
public void addRelationToResource(
CmsDbContext dbc,
CmsResource resource,
CmsResource target,
CmsRelationType type,
boolean importCase) throws CmsException {
if (type.isDefinedInContent()) {
throw new CmsIllegalArgumentException(Messages.get().container(
Messages.ERR_ADD_RELATION_IN_CONTENT_3,
dbc.removeSiteRoot(resource.getRootPath()),
dbc.removeSiteRoot(target.getRootPath()),
type.getLocalizedName(dbc.getRequestContext().getLocale())));
}
CmsRelation relation = new CmsRelation(resource, target, type);
m_vfsDriver.createRelation(dbc, dbc.currentProject().getUuid(), relation);
if (!importCase) {
setDateLastModified(dbc, resource, System.currentTimeMillis());
}
}
/**
* Adds a resource to the given organizational unit.<p>
*
* @param dbc the current db context
* @param orgUnit the organizational unit to add the resource to
* @param resource the resource that is to be added to the organizational unit
*
* @throws CmsException if something goes wrong
*
* @see org.opencms.security.CmsOrgUnitManager#addResourceToOrgUnit(CmsObject, String, String)
* @see org.opencms.security.CmsOrgUnitManager#addResourceToOrgUnit(CmsObject, String, String)
*/
public void addResourceToOrgUnit(CmsDbContext dbc, CmsOrganizationalUnit orgUnit, CmsResource resource)
throws CmsException {
OpenCms.getMemoryMonitor().flushRoles();
OpenCms.getMemoryMonitor().flushRoleLists();
m_userDriver.addResourceToOrganizationalUnit(dbc, orgUnit, resource);
}
/**
* Adds a user to a group.<p>
*
* @param dbc the current database context
* @param username the name of the user that is to be added to the group
* @param groupname the name of the group
* @param readRoles if reading roles or groups
*
* @throws CmsException if operation was not succesfull
* @throws CmsDbEntryNotFoundException if the given user or the given group was not found
*
* @see #removeUserFromGroup(CmsDbContext, String, String, boolean)
*/
public void addUserToGroup(CmsDbContext dbc, String username, String groupname, boolean readRoles)
throws CmsException, CmsDbEntryNotFoundException {
//check if group exists
CmsGroup group = readGroup(dbc, groupname);
if (group == null) {
// the group does not exists
throw new CmsDbEntryNotFoundException(Messages.get().container(Messages.ERR_UNKNOWN_GROUP_1, groupname));
}
if (group.isVirtual() && !readRoles) {
// if adding a user from a virtual role treat it as removing the user from the role
addUserToGroup(dbc, username, CmsRole.valueOf(group).getGroupName(), true);
return;
}
if (group.isVirtual()) {
// this is an hack to prevent unlimited recursive calls
readRoles = false;
}
if ((readRoles && !group.isRole()) || (!readRoles && group.isRole())) {
// we want a role but we got a group, or the other way
throw new CmsDbEntryNotFoundException(Messages.get().container(Messages.ERR_UNKNOWN_GROUP_1, groupname));
}
if (userInGroup(dbc, username, groupname, readRoles)) {
// the user is already member of the group
return;
}
//check if the user exists
CmsUser user = readUser(dbc, username);
if (user == null) {
// the user does not exists
throw new CmsDbEntryNotFoundException(Messages.get().container(Messages.ERR_UNKNOWN_USER_1, username));
}
// if adding an user to a role
if (readRoles) {
CmsRole role = CmsRole.valueOf(group);
// a role can only be set if the user has the given role
m_securityManager.checkRole(dbc, role);
// now we check if we already have the role
if (m_securityManager.hasRole(dbc, user, role)) {
// do nothing
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?