package com.hackerdude.apps.sqlide.plugins.usrmgr;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import com.hackerdude.apps.sqlide.ProgramIcons;
import com.hackerdude.apps.sqlide.dataaccess.DatabaseProcess;
import com.hackerdude.apps.sqlide.nodes.ItemServerNode;
import com.hackerdude.apps.sqlide.pluginapi.BrowserExtensionPluginIF;
import com.hackerdude.apps.sqlide.pluginapi.NodeIDEBase;
import com.hackerdude.apps.sqlide.pluginapi.NodeIDECategory;
import com.hackerdude.apps.sqlide.pluginapi.NodeIDEItem;
/**
* A User Manager plugin for PostgreSQL. Displays available users, and lets you
* add/remove users at will.
*
*
* @author David Martinez
* @version 1.0
*/
public class PluginUserManager implements BrowserExtensionPluginIF {
private static final String QUERY_USERNAME_PROP = "usernames.select";
private static final String QUERY_USERNAME_GROUPS = "groups.select";
private String getSupportedType(DatabaseProcess process) {
String driverClass = process.getHostConfiguration().getJdbc().getDriver();
String supportedType = UsrMgmtCommandFactory.getSupportedDriver(driverClass);
return supportedType;
}
public void requestAddSubNodes(NodeIDEBase parentNode) {
if ( getSupportedType(parentNode.getDatabaseProcess()) == null ) return;
if ( parentNode instanceof ItemServerNode ) {
ItemServerNode serverNode = (ItemServerNode) parentNode;
parentNode.add(new UsersCategoryNode("Users", serverNode.getDatabaseProcess()));
}
if ( parentNode instanceof UsersCategoryNode ) {
UsersCategoryNode usersNode = (UsersCategoryNode)parentNode;
addUsers(usersNode);
}
}
public void addUsers(UsersCategoryNode usersNode) {
Connection conn = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
conn = usersNode.getDatabaseProcess().getConnection();
String queryText = UsrMgmtCommandFactory.getCommandsFor(getSupportedType(usersNode.getDatabaseProcess())).getProperty(QUERY_USERNAME_PROP);
preparedStatement = conn.prepareStatement(queryText);
resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
String userName = resultSet.getString(1);
UserNode node = new UserNode(userName, usersNode.getDatabaseProcess());
usersNode.add(node);
}
} catch ( SQLException exc ) {
exc.printStackTrace();
} finally {
if ( resultSet != null ) try { resultSet.close(); } catch ( Throwable thr) {}
if ( preparedStatement != null ) try { preparedStatement.close(); } catch ( Throwable thr) {}
if ( conn != null ) try { usersNode.getDatabaseProcess().returnConnection(conn); } catch ( Throwable thr) {}
}
}
public void initPlugin() {
}
public String getPluginName() {
return "User Manager";
}
public String getPluginVersion() {
return "0";
}
public void freePlugin() {
}
public String getPluginShortName() {
return "User Mgr";
}
public Icon getPluginIcon() {
return ProgramIcons.getInstance().getUsersIcon();
}
class UsersCategoryNode extends NodeIDECategory {
public UsersCategoryNode(String name, DatabaseProcess proc) {
super(name, proc);
}
public void readChildren() {}
public String getInfo() {
return "PostgreSQL Users";
}
public ImageIcon getIcon() {
return ProgramIcons.getInstance().findIcon("images/Users.gif");
}
}
class UserNode extends NodeIDEItem {
public UserNode(String userName, DatabaseProcess proc) {
super(userName, proc);
}
public boolean canHaveChildren() {
return false;
}
public void readChildren() {}
public String getInfo() { return "User: "+toString(); }
public ImageIcon getIcon() { return ProgramIcons.getInstance().findIcon("images/User.gif"); }
}
}