/** * */ package org.identityconnectors.oracle; import static org.identityconnectors.oracle.OracleMessages.MSG_DELETE_OF_USER_FAILED; import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; import org.identityconnectors.common.logging.Log; import org.identityconnectors.dbcommon.SQLUtil; import org.identityconnectors.framework.common.exceptions.ConnectorException; import org.identityconnectors.framework.common.exceptions.UnknownUidException; import org.identityconnectors.framework.common.objects.ObjectClass; import org.identityconnectors.framework.common.objects.OperationOptions; import org.identityconnectors.framework.common.objects.Uid; import org.identityconnectors.framework.spi.operations.DeleteOp; /** * Oracle delete operation drops oracle user. * * @author kitko * */ final class OracleOperationDelete extends AbstractOracleOperation implements DeleteOp { private final static Log LOG = Log.getLog(OracleOperationDelete.class); OracleOperationDelete(OracleConfiguration cfg, Connection adminConn) { super(cfg, adminConn); } public void delete(ObjectClass objClass, Uid uid, OperationOptions options) { OracleConnectorHelper.checkObjectClass(objClass, cfg.getConnectorMessages()); if (cfg.isDropCascade()) { LOG.info("Deleting user cascade: [{0}]", uid.getUidValue()); } else { LOG.info("Deleting user noncascade: [{0}]", uid.getUidValue()); } String userName = uid.getUidValue(); String sql = "drop user " + cfg.getCSSetup().formatToken(OracleUserAttribute.USER, userName); if (cfg.isDropCascade()) { sql = sql + " CASCADE"; } Statement st = null; try { st = adminConn.createStatement(); st.executeUpdate(sql); adminConn.commit(); LOG.info("User deleted : [{0}]", uid.getUidValue()); } catch (SQLException e) { SQLUtil.rollbackQuietly(adminConn); if ("42000".equals(e.getSQLState()) && 1918 == e.getErrorCode()) { throw new UnknownUidException(uid, ObjectClass.ACCOUNT); } throw new ConnectorException(cfg.getConnectorMessages().format( MSG_DELETE_OF_USER_FAILED, null, uid.getUidValue()), e); } finally { SQLUtil.closeQuietly(st); } } }