package org.exist.xmldb;
import java.util.Timer;
import java.util.TimerTask;
import org.exist.security.PermissionDeniedException;
import org.exist.security.User;
import org.exist.storage.BrokerPool;
import org.xmldb.api.base.Collection;
import org.xmldb.api.base.ErrorCodes;
import org.xmldb.api.base.XMLDBException;
/**
* Local implementation of the DatabaseInstanceManager.
*/
public class LocalDatabaseInstanceManager implements DatabaseInstanceManager {
protected BrokerPool pool;
protected User user;
public LocalDatabaseInstanceManager(User user, BrokerPool pool) {
this.pool = pool;
this.user = user;
}
public void shutdown() throws XMLDBException {
shutdown(0);
}
public void shutdown(long delay) throws XMLDBException {
if(!user.hasDbaRole())
throw new XMLDBException(ErrorCodes.PERMISSION_DENIED,
"only users in group dba may " +
"shut down the database");
if(delay > 0) {
TimerTask task = new TimerTask() {
public void run() {
pool.shutdown();
}
};
Timer timer = new Timer();
timer.schedule(task, delay);
} else
pool.shutdown();
}
public boolean enterServiceMode() throws XMLDBException {
try {
pool.enterServiceMode(user);
} catch (PermissionDeniedException e) {
throw new XMLDBException(ErrorCodes.PERMISSION_DENIED, e.getMessage(), e);
}
return true;
}
public void exitServiceMode() throws XMLDBException {
try {
pool.exitServiceMode(user);
} catch (PermissionDeniedException e) {
throw new XMLDBException(ErrorCodes.PERMISSION_DENIED, e.getMessage(), e);
}
}
public DatabaseStatus getStatus() throws XMLDBException {
return new DatabaseStatus(pool);
}
/**
* @see org.xmldb.api.base.Service#getName()
*/
public String getName() throws XMLDBException {
return "DatabaseInstanceManager";
}
/**
* @see org.xmldb.api.base.Service#getVersion()
*/
public String getVersion() throws XMLDBException {
return "1.0";
}
public boolean isLocalInstance() {
return true;
}
/**
* @see org.xmldb.api.base.Service#setCollection(org.xmldb.api.base.Collection)
*/
public void setCollection(Collection arg0) throws XMLDBException {
}
/**
* @see org.xmldb.api.base.Configurable#getProperty(java.lang.String)
*/
public String getProperty(String arg0) throws XMLDBException {
return null;
}
/**
* @see org.xmldb.api.base.Configurable#setProperty(java.lang.String, java.lang.String)
*/
public void setProperty(String arg0, String arg1) throws XMLDBException {
}
public boolean isXACMLEnabled() throws XMLDBException {
return pool.getSecurityManager().isXACMLEnabled();
}
}