/* * DeployedApplicationContainer.java * * Created on June 28, 2007, 2:12 PM * * CodaServer and related original technologies are copyright 2008, 18th Street Software, LLC. * * Permission to use them is granted under the terms of the GNU GPLv2. */ package org.codalang.codaserver; import org.codalang.codaserver.database.CodaConnection; import org.codalang.codaserver.database.CodaDatabase; import org.codalang.codaserver.database.CodaResultSet; import java.util.Hashtable; import java.util.Vector; import java.util.logging.Level; import java.util.logging.Logger; /** * * @author michaelarace */ public class DeployedApplicationContainer { private Hashtable<String,DeployedApplication> deployedApplications; boolean useCacheFlag = false; CodaDatabase database; Logger logger; /** Creates a new instance of DeployedApplicationContainer */ public DeployedApplicationContainer(CodaDatabase database, boolean useCacheFlag, Logger logger) { this.useCacheFlag = useCacheFlag; this.logger = logger; this.database = database; } public Hashtable getDeployedApplications() { return deployedApplications; } public void setDeployedApplications(Hashtable deployedApplications) { this.deployedApplications = deployedApplications; } public boolean canUserUseApplication(String applicationName, long userId, int environment ) { if(deployedApplications.containsKey(applicationName.toUpperCase())) { return (((DeployedApplication)deployedApplications.get(applicationName.toUpperCase())).canUserUseApplication(userId, environment)); } return false; } public boolean canUserUseApplication(String applicationName, long userId, int environment, long groupId) { if(deployedApplications.containsKey(applicationName.toUpperCase())) { return (((DeployedApplication)deployedApplications.get(applicationName.toUpperCase())).canUserUseApplication(userId, environment, groupId)); } return false; } public boolean canGroupUseApplication(String applicationName, String groupName) { if(deployedApplications.containsKey(applicationName.toUpperCase())) { return (((DeployedApplication)deployedApplications.get(applicationName.toUpperCase())).canGroupUseApplication(groupName)); } return false; } public boolean hasApplicationPermission(String applicationName, long userId, int environment, long groupId, String permissionName ) { if(deployedApplications.containsKey(applicationName.toUpperCase())) { return (((DeployedApplication)deployedApplications.get(applicationName.toUpperCase())).hasApplicationPermission(userId, groupId, environment, permissionName)); } return false; } public boolean hasPermission(String applicationName, long userId, long groupId, int environment, String permissionName) { if(deployedApplications.containsKey(applicationName.toUpperCase())) { Datasource datasource = null; switch (environment) { case 2: datasource = ((DeployedApplication)deployedApplications.get(applicationName.toUpperCase())).getTesting(); break; case 3: datasource = ((DeployedApplication)deployedApplications.get(applicationName.toUpperCase())).getProduction(); break; default: datasource = ((DeployedApplication)deployedApplications.get(applicationName.toUpperCase())).getDevelopment(); break; } if (datasource != null) { return this.hasApplicationPermission(applicationName, userId, environment, groupId, "DEVELOPER") || datasource.hasPermission(userId, groupId, permissionName); } } return false; } public boolean hasTablePermission(String applicationName, long userId, long groupId, int environment, int permission, String tableName) { if(deployedApplications.containsKey(applicationName.toUpperCase())) { Datasource datasource = null; switch (environment) { case 2: datasource = ((DeployedApplication)deployedApplications.get(applicationName.toUpperCase())).getTesting(); break; case 3: datasource = ((DeployedApplication)deployedApplications.get(applicationName.toUpperCase())).getProduction(); break; default: datasource = ((DeployedApplication)deployedApplications.get(applicationName.toUpperCase())).getDevelopment(); break; } if (datasource != null) { return this.hasApplicationPermission(applicationName, userId, environment, groupId, "DEVELOPER") || datasource.hasTablePermission(userId, groupId, permission, tableName); } } return false; } public boolean hasFormStatusPermission(String applicationName, long userId, long groupId, int environment, int permission, String tableName, String formStatusName, boolean adjFlag) { if(deployedApplications.containsKey(applicationName.toUpperCase())) { Datasource datasource = null; switch (environment) { case 2: datasource = ((DeployedApplication)deployedApplications.get(applicationName.toUpperCase())).getTesting(); break; case 3: datasource = ((DeployedApplication)deployedApplications.get(applicationName.toUpperCase())).getProduction(); break; default: datasource = ((DeployedApplication)deployedApplications.get(applicationName.toUpperCase())).getDevelopment(); break; } if (datasource != null) { return this.hasApplicationPermission(applicationName, userId, environment, groupId, "DEVELOPER") || datasource.hasFormStatusPermission(userId, groupId, permission, tableName, formStatusName, adjFlag); } } return false; } public boolean hasFormStatusPermission(String applicationName, long userId, long groupId, int environment, int permission, String tableName, long formStatusId) { if(deployedApplications.containsKey(applicationName.toUpperCase())) { Datasource datasource = null; switch (environment) { case 2: datasource = ((DeployedApplication)deployedApplications.get(applicationName.toUpperCase())).getTesting(); break; case 3: datasource = ((DeployedApplication)deployedApplications.get(applicationName.toUpperCase())).getProduction(); break; default: datasource = ((DeployedApplication)deployedApplications.get(applicationName.toUpperCase())).getDevelopment(); break; } if (datasource != null) { return this.hasApplicationPermission(applicationName, userId, environment, groupId, "DEVELOPER") || datasource.hasFormStatusPermission(userId, groupId, permission, tableName, formStatusId); } } return false; } public Vector<Long> getFormStatusesForPermission(String applicationName, long userId, long groupId, int environment, int permission, String tableName) { if(deployedApplications.containsKey(applicationName.toUpperCase())) { Datasource datasource = null; switch (environment) { case 2: datasource = ((DeployedApplication)deployedApplications.get(applicationName.toUpperCase())).getTesting(); break; case 3: datasource = ((DeployedApplication)deployedApplications.get(applicationName.toUpperCase())).getProduction(); break; default: datasource = ((DeployedApplication)deployedApplications.get(applicationName.toUpperCase())).getDevelopment(); break; } if (datasource != null) { return datasource.getFormStatusesForPermission(userId, groupId, permission, tableName, this.hasApplicationPermission(applicationName, userId, environment, groupId, "DEVELOPER")); } } return new Vector(); } public boolean hasProcedurePermission(String applicationName, long userId, long groupId, int environment, int permission, String procedureName) { if(deployedApplications.containsKey(applicationName.toUpperCase())) { Datasource datasource = null; switch (environment) { case 2: datasource = ((DeployedApplication)deployedApplications.get(applicationName.toUpperCase())).getTesting(); break; case 3: datasource = ((DeployedApplication)deployedApplications.get(applicationName.toUpperCase())).getProduction(); break; default: datasource = ((DeployedApplication)deployedApplications.get(applicationName.toUpperCase())).getDevelopment(); break; } if (datasource != null) { return this.hasApplicationPermission(applicationName, userId, environment, groupId, "DEVELOPER") || datasource.hasProcedurePermission(userId, groupId, permission, procedureName); } } return false; } public Datasource getDatasource(String applicationName, int environment) { if(deployedApplications.containsKey(applicationName.toUpperCase())) { Datasource datasource = null; switch (environment) { case 2: datasource = ((DeployedApplication)deployedApplications.get(applicationName.toUpperCase())).getTesting(); break; case 3: datasource = ((DeployedApplication)deployedApplications.get(applicationName.toUpperCase())).getProduction(); break; default: datasource = ((DeployedApplication)deployedApplications.get(applicationName.toUpperCase())).getDevelopment(); break; } return datasource; } return null; } public String getDatasourceName(String applicationName, int environment) { if(deployedApplications.containsKey(applicationName.toUpperCase())) { String datasource = null; switch (environment) { case 2: datasource = ((DeployedApplication)deployedApplications.get(applicationName.toUpperCase())).getTestDatasourceName(); break; case 3: datasource = ((DeployedApplication)deployedApplications.get(applicationName.toUpperCase())).getProdDatasourceName(); break; default: datasource = ((DeployedApplication)deployedApplications.get(applicationName.toUpperCase())).getDevDatasourceName(); break; } return datasource; } return null; } public void removeApplication(String applicationName) { deployedApplications.remove(applicationName.toUpperCase()); } public void deployApplication(String applicationName, boolean quiet, ClassLoader parentLoader) { if (deployedApplications.containsKey(applicationName.toUpperCase())) { ((DeployedApplication)deployedApplications.get(applicationName.toUpperCase())).reload(); } else { CodaConnection connection = database.getConnection(); CodaResultSet rs = connection.runQuery("select application_name from applications where active_flag = 1 and application_name = "+connection.formatStringForSQL("applications", "application_name", applicationName.toUpperCase())+" order by application_name asc", null); if (!rs.getErrorStatus()) { while (rs.next()) { DeployedApplication dp = new DeployedApplication(database, rs.getData(0).toUpperCase(), useCacheFlag, logger, parentLoader); if (!quiet) System.out.println("Deploying application " + rs.getData(0).toLowerCase() + "..."); logger.log(Level.INFO, "Deploying application " + rs.getData(0).toLowerCase() + "..."); if (dp.reload()) { if (!quiet) System.out.println("...Done"); logger.log(Level.INFO, "Deployed!"); deployedApplications.put(rs.getData(0).toUpperCase(), dp); } else { if (!quiet) System.out.println("...Failed"); logger.log(Level.INFO, "Not Deployed!"); } } } } } public boolean isGroupApplication(String applicationName) { if (deployedApplications.containsKey(applicationName.toUpperCase())) { return ((DeployedApplication)deployedApplications.get(applicationName.toUpperCase())).isGroupFlag(); } return false; } public void initialize ( boolean quiet, ClassLoader parentLoader) { deployedApplications = new Hashtable(); CodaConnection connection = database.getConnection(); CodaResultSet rs = connection.runQuery("select application_name from applications where active_flag = 1 order by application_name asc", null); if (!rs.getErrorStatus()) { while (rs.next()) { DeployedApplication dp = new DeployedApplication(database, rs.getData(0).toUpperCase(), useCacheFlag, logger, parentLoader); if (!quiet) System.out.println("Deploying application " + rs.getData(0).toLowerCase() + "..."); logger.log(Level.INFO, "Deploying application " + rs.getData(0).toLowerCase() + "..."); if (dp.reload()) { if (!quiet) System.out.println("...Done"); logger.log(Level.INFO, "Deployed!"); deployedApplications.put(rs.getData(0).toUpperCase(), dp); } else { if (!quiet) System.out.println("...Failed"); logger.log(Level.INFO, "Not Deployed!"); } } } } public DeployedApplication get(String applicationName) { if (deployedApplications.containsKey(applicationName.toUpperCase())) { return deployedApplications.get(applicationName.toUpperCase()); } return null; } }