package eu.smartlm.abs.portal.graph; import eu.smartlm.abs.portal.view.data.ABSQuery; import eu.smartlm.abs.portal.view.portlet.QueryPortlet; import eu.smartlm.schemas.x2009.x06.urec.LicenseResourceType; import eu.smartlm.schemas.x2009.x06.urec.ProductType; import eu.smartlm.schemas.x2009.x06.urec.SmartLMUsageRecordType; import java.util.HashSet; import java.util.Set; import org.gridforum.x2003.urWg.HostDocument.Host; import org.gridforum.x2003.urWg.ProjectNameDocument.ProjectName; import org.gridforum.x2003.urWg.SubmitHostDocument.SubmitHost; import org.gridforum.x2003.urWg.UserIdentityDocument.UserIdentity; import org.jfree.chart.ChartFactory; import org.jfree.chart.JFreeChart; import org.jfree.chart.plot.PlotOrientation; import org.jfree.data.category.DefaultCategoryDataset; /** * Creates JFreeChart graphs of different types depending of the data request. * @author David García Pérez - CESGA * */ public class GraphConstructor { public static String GRAPH_TYPE_BARCHAR3D = "BarChart3D"; // USERS private static JFreeChart constructGraphForTimeUsageVsUsers( String graphType, Set usageRecords, Set users) { DefaultCategoryDataset dataset = DatasetConstructor.constructDatasetForTimeUsageVsUsers(usageRecords, getUsers(usageRecords, users)); return constructGraph(dataset, graphType, "User's usage", "Users", "Hours", true, true); } private static JFreeChart constructGraphForBillingUsageVsUsers( String graphType, Set usageRecords, Set users) { DefaultCategoryDataset dataset = DatasetConstructor.constructDatasetForBillingUsageVsUsers(usageRecords, getUsers(usageRecords, users)); return constructGraph(dataset, graphType, "User's usage", "Users", "Euros", true, true); } private static JFreeChart constructGraphForTimeUsageVsUsersFilterByProduct(String graphType, Set usageRecords, Set users, Set products) { DefaultCategoryDataset dataset = DatasetConstructor.constructDatasetForUsageVsUsersFilterByProducts( usageRecords, getUsers(usageRecords, users), getProducts(usageRecords, products), QueryPortlet.TYPE_ACCOUNTING); return constructGraph(dataset, graphType, "User's usage", "Users", "Hours", true, true); } private static JFreeChart constructGraphForBillingUsageVsUsersFilterByProduct( String graphType, Set usageRecords, Set users, Set products) { DefaultCategoryDataset dataset = DatasetConstructor.constructDatasetForUsageVsUsersFilterByProducts( usageRecords, getUsers(usageRecords, users), getProducts(usageRecords, products), QueryPortlet.TYPE_BILLING); return constructGraph(dataset, graphType, "Billing User's usage", "Users", "Euros", true, true); } private static JFreeChart constructGraphForTimeUsageVsUsersFilterByAccountingGroup( String graphType, Set usageRecords, Set users, Set accountingGroups) { DefaultCategoryDataset dataset = DatasetConstructor.constructDatasetForUsageVsUsersFilterByAccountingGroups( usageRecords, getUsers(usageRecords, users), accountingGroups, QueryPortlet.TYPE_ACCOUNTING); return constructGraph(dataset, graphType, "User's usage", "Users", "Hours", true, true); } private static JFreeChart constructGraphForBillingUsageVsUsersFilterByAccountingGroup( String graphType, Set usageRecords, Set users, Set accountingGroups) { DefaultCategoryDataset dataset = DatasetConstructor.constructDatasetForUsageVsUsersFilterByAccountingGroups( usageRecords, getUsers(usageRecords, users), accountingGroups, QueryPortlet.TYPE_BILLING); return constructGraph(dataset, graphType, "User's usage", "Users", "Euros", true, true); } private static JFreeChart constructGraphForTimeUsageVsUsersFilterByProject( String graphType, Set usageRecords, Set users, Set projects) { DefaultCategoryDataset dataset = DatasetConstructor .constructDatasetForTimeUsageVsUsersFilterByProjects( usageRecords, getUsers(usageRecords, users), getProjects(usageRecords, projects)); return constructGraph(dataset, graphType, "User's usage", "Users", "Hours", true, true); } private static JFreeChart constructGraphForBillingUsageVsUsersFilterByProject( String graphType, Set usageRecords, Set users, Set projects) { DefaultCategoryDataset dataset = DatasetConstructor .constructDatasetForBillingUsageVsUsersFilterByProjects( usageRecords, getUsers(usageRecords, users), getProjects(usageRecords, projects)); return constructGraph(dataset, graphType, "User's usage", "Users", "Euros", true, true); } private static JFreeChart constructGraphForTimeUsageVsUsersFilterByHosts( String graphType, Set usageRecords, Set users, Set hosts) { DefaultCategoryDataset dataset = DatasetConstructor .constructDatasetForTimeUsageVsUsersFilterByHosts( usageRecords, getUsers(usageRecords, users), getHosts(usageRecords, hosts)); return constructGraph(dataset, graphType, "User's usage", "Users", "Hours", true, true); } private static JFreeChart constructGraphForBillingUsageVsUsersFilterByHosts( String graphType, Set usageRecords, Set users, Set hosts) { DefaultCategoryDataset dataset = DatasetConstructor .constructDatasetForBillingUsageVsUsersFilterByHosts( usageRecords, getUsers(usageRecords, users), getHosts(usageRecords, hosts)); return constructGraph(dataset, graphType, "User's usage", "Users", "Euros", true, true); } private static JFreeChart constructGraphForTimeUsageVsUsersFilterBySubmitHosts( String graphType, Set usageRecords, Set users, Set submitHosts) { DefaultCategoryDataset dataset = DatasetConstructor .constructDatasetForTimeUsageVsUsersFilterBySubmitHosts( usageRecords, getUsers(usageRecords, users), getSubmitHosts(usageRecords, submitHosts)); return constructGraph(dataset, graphType, "Host's usage", "Hosts", "Hours", true, true); } private static JFreeChart constructGraphForBillingUsageVsUsersFilterBySubmitHosts( String graphType, Set usageRecords, Set users, Set submitHosts) { DefaultCategoryDataset dataset = DatasetConstructor .constructDatasetForBillingUsageVsUsersFilterBySubmitHosts( usageRecords, getUsers(usageRecords, users), getSubmitHosts(usageRecords, submitHosts)); return constructGraph(dataset, graphType, "Host's usage", "Hosts", "Euros", true, true); } // PRODUCTS private static JFreeChart constructGraphForTimeUsageVsProducts( String graphType, Set usageRecords, Set products) { DefaultCategoryDataset dataset = DatasetConstructor.constructDatasetForUsageVsProduct(usageRecords, getProducts(usageRecords, products), QueryPortlet.TYPE_ACCOUNTING); return constructGraph(dataset, graphType, "Product's usage", "Products", "Hours", true, true); } private static JFreeChart constructGraphForBillingUsageVsProducts(String graphType, Set usageRecords, Set products) { DefaultCategoryDataset dataset = DatasetConstructor.constructDatasetForUsageVsProduct(usageRecords, getProducts(usageRecords, products), QueryPortlet.TYPE_BILLING); return constructGraph(dataset, graphType, "Product's usage", "Products", "Euros", true, true); } private static JFreeChart constructGraphForTimeUsegaVsProductsFilterByUsers( String graphType, Set usageRecords, Set products, Set users) { DefaultCategoryDataset dataset = DatasetConstructor.constructDatasetForUsageVsProductsFilterByUsers( usageRecords, getUsers(usageRecords, users), getProducts(usageRecords, products), QueryPortlet.TYPE_ACCOUNTING); return constructGraph(dataset, graphType, "Product's usage", "Users", "Hours", true, true); } private static JFreeChart constructGraphForBillingUsegaVsProductsFilterByUsers( String graphType, Set usageRecords, Set products, Set users) { DefaultCategoryDataset dataset = DatasetConstructor.constructDatasetForUsageVsProductsFilterByUsers( usageRecords, getUsers(usageRecords, users), getProducts(usageRecords, products), QueryPortlet.TYPE_BILLING); return constructGraph(dataset, graphType, "Product's usage", "Users", "Euros", true, true); } private static JFreeChart constructGraphForTimeUsageVsProductsFilterByAccountingGroups( String graphType, Set usageRecords, Set products, Set accountingGroups) { DefaultCategoryDataset dataset = DatasetConstructor .constructDatasetForTimeUsageVsProductsFilterByAccountingGroups( usageRecords, accountingGroups, getProducts(usageRecords, products)); return constructGraph(dataset, graphType, "Product's usage", "Products", "Hours", true, true); } private static JFreeChart constructGraphForBillingUsegaVsProductsFilterByAccountingGroups( String graphType, Set usageRecords, Set products, Set accountingGroups) { DefaultCategoryDataset dataset = DatasetConstructor .constructDatasetForBillingUsageVsProductsFilterByAccountingGroups( usageRecords, accountingGroups, getProducts(usageRecords, products)); return constructGraph(dataset, graphType, "Product's usage", "Products", "Euros", true, true); } private static JFreeChart constructGraphForTimeUsageVsProductsFilterByProjects( String graphType, Set usageRecords, Set products, Set projects) { DefaultCategoryDataset dataset = DatasetConstructor.constructDatasetForTimeUsageVsProductsFilterByProjects( usageRecords, getProjects(usageRecords, projects), getProducts(usageRecords, products)); return constructGraph(dataset, graphType, "Product's usage", "Products", "Hours", true, true); } private static JFreeChart constructGraphForBillingUsageVsProductsFilterByProjects( String graphType, Set usageRecords, Set products, Set projects) { DefaultCategoryDataset dataset = DatasetConstructor.constructDatasetForBillingUsageVsProductsFilterByProjects( usageRecords, getProjects(usageRecords, projects), getProducts(usageRecords, products)); return constructGraph(dataset, graphType, "Product's usage", "Products", "Euros", true, true); } private static JFreeChart constructGraphForTimeUsageVsProductFilterBySumbitHosts( String graphType, Set usageRecords, Set products, Set submitHosts) { DefaultCategoryDataset dataset = DatasetConstructor.constructDatasetForTimeUsageVsProductsFilterBySubmitHosts( usageRecords, getSubmitHosts(usageRecords, submitHosts), getProducts(usageRecords, products)); return constructGraph(dataset, graphType, "Product's usage", "Products", "Hours", true, true); } private static JFreeChart constructGraphForBillingUsageVsProductFilterBySumbitHosts( String graphType, Set usageRecords, Set products, Set submitHosts) { DefaultCategoryDataset dataset = DatasetConstructor.constructDatasetForBillingUsageVsProductsFilterBySubmitHosts( usageRecords, getSubmitHosts(usageRecords, submitHosts), getProducts(usageRecords, products)); return constructGraph(dataset, graphType, "Product's usage", "Products", "Euros", true, true); } private static JFreeChart constructGraphForTimeUsageVsProductFilterByHosts( String graphType, Set usageRecords, Set products, Set hosts) { DefaultCategoryDataset dataset = DatasetConstructor.constructDatasetForTimeUsageVsProductsFilterByHosts( usageRecords, getHosts(usageRecords, hosts), getProducts(usageRecords, products)); return constructGraph(dataset, graphType, "Product's usage", "Products", "Hours", true, true); } private static JFreeChart constructGraphForBillingUsageVsProductFilterByHosts( String graphType, Set usageRecords, Set products, Set hosts) { DefaultCategoryDataset dataset = DatasetConstructor.constructDatasetForBillingUsageVsProductsFilterByHosts( usageRecords, getHosts(usageRecords, hosts), getProducts(usageRecords, products)); return constructGraph(dataset, graphType, "Product's usage", "Products", "Euros", true, true); } //ACCOUNTINGGROUPS private static JFreeChart constructGraphForTimeUsageVsAccountingGroups( String graphType, Set usageRecords, Set accountingGroups) { DefaultCategoryDataset dataset = DatasetConstructor .constructDatasetForTimeUsageVsAccountingGroup( usageRecords, accountingGroups); return constructGraph(dataset, graphType, "Accounting Group's usage", "AccountingGroups", "Hours", true, true); } private static JFreeChart constructGraphForBillingUsageVsAccountingGroups( String graphType, Set usageRecords, Set accountingGroups) { DefaultCategoryDataset dataset = DatasetConstructor .constructDatasetForBillingUsageVsAccountingGroup( usageRecords, accountingGroups); return constructGraph(dataset, graphType, "Accounting Group's usage", "AccountingGroups", "Euros", true, true); } private static JFreeChart constructGraphForTimeUsageVsAccountingGroupsFilterByProducts( String graphType, Set usageRecords, Set accountingGroups, Set products) { DefaultCategoryDataset dataset = DatasetConstructor .constructDatasetForTimeUsageVsAccountingGroupFilterByProducts( usageRecords, accountingGroups, getProducts(usageRecords, products)); return constructGraph(dataset, graphType, "Accounting Group's usage", "AccountingGroups", "Hours", true, true); } private static JFreeChart constructGraphForBillingUsageVsAccountingGroupsFilterByProducts( String graphType, Set usageRecords, Set accountingGroups, Set products) { DefaultCategoryDataset dataset = DatasetConstructor .constructDatasetForBillingUsageVsAccountingGroupFilterByProducts( usageRecords, accountingGroups, getProducts(usageRecords, products)); return constructGraph(dataset, graphType, "Accounting Group's usage", "AccountingGroups", "Euros", true, true); } private static JFreeChart constructGraphForTimeUsageVsAccountingGroupsFilterByUsers( String graphType, Set usageRecords, Set accountingGroups, Set users) { DefaultCategoryDataset dataset = DatasetConstructor.constructDatasetForUsageVsAccountingGroupsFilterByUsers( usageRecords, getUsers(usageRecords, users), accountingGroups, QueryPortlet.TYPE_ACCOUNTING); return constructGraph(dataset, graphType, "AccountingGroup's usage", "AccountingGroup", "Hours", true, true); } private static JFreeChart constructGraphForBillingUsageVsAccountingGroupsFilterByUsers( String graphType, Set usageRecords, Set accountingGroups, Set users) { DefaultCategoryDataset dataset = DatasetConstructor.constructDatasetForUsageVsAccountingGroupsFilterByUsers( usageRecords, getUsers(usageRecords, users), accountingGroups, QueryPortlet.TYPE_BILLING); return constructGraph(dataset, graphType, "AccountingGroup's usage", "AccountingGroup", "Euros", true, true); } private static JFreeChart constructGraphForTimeUsageVsAccountingGroupFilterByProject( String graphType, Set usageRecords, Set accountingGroups, Set projects) { DefaultCategoryDataset dataset = DatasetConstructor.constructDatasetForTimeUsageVsAccountingGroupFilterByProjects( usageRecords, accountingGroups, getProjects(usageRecords, projects)); return constructGraph(dataset, graphType, "AccountingGroup's usage", "AccountingGroup", "Hours", true, true); } private static JFreeChart constructGraphForBillingUsageVsAccountingGroupFilterByProject( String graphType, Set usageRecords, Set accountingGroups, Set projects) { DefaultCategoryDataset dataset = DatasetConstructor.constructDatasetForBillingUsageVsAccountingGroupFilterByProjects( usageRecords, accountingGroups, getProjects(usageRecords, projects)); return constructGraph(dataset, graphType, "AccountingGroup's usage", "AccountingGroup", "Euros", true, true); } private static JFreeChart constructGraphForTimeUsageVsAccountingGroupFilterByHost( String graphType, Set usageRecords, Set accountingGroups, Set hosts) { DefaultCategoryDataset dataset = DatasetConstructor.constructDatasetForTimeUsageVsAccountingGroupFilterByHost( usageRecords, getHosts(usageRecords, hosts), accountingGroups); return constructGraph(dataset, graphType, "AccountingGroup's usage", "AccountingGroup", "Hours", true, true); } private static JFreeChart constructGraphForBillingUsageVsAccountingGroupFilterByHost( String graphType, Set usageRecords, Set accountingGroups, Set hosts) { DefaultCategoryDataset dataset = DatasetConstructor.constructDatasetForBillingUsageVsAccountingGroupFilterByHost( usageRecords, getHosts(usageRecords, hosts), accountingGroups); return constructGraph(dataset, graphType, "AccountingGroup's usage", "AccountingGroup", "Euros", true, true); } private static JFreeChart constructGraphForTimeUsageVsAccountingGroupFilterBySubmitHost( String graphType, Set usageRecords, Set accountingGroups, Set submitHosts) { DefaultCategoryDataset dataset = DatasetConstructor.constructDatasetForTimeUsageVsAccountingGroupFilterBySubmitHost( usageRecords, getSubmitHosts(usageRecords, submitHosts), accountingGroups); return constructGraph(dataset, graphType, "AccountingGroup's usage", "AccountingGroup", "Hours", true, true); } private static JFreeChart constructGraphForBillingUsageVsAccountingGroupFilterBySubmitHost( String graphType, Set usageRecords, Set accountingGroups, Set submitHosts) { DefaultCategoryDataset dataset = DatasetConstructor.constructDatasetForBillingUsageVsAccountingGroupFilterBySubmitHost( usageRecords, getSubmitHosts(usageRecords, submitHosts), accountingGroups); return constructGraph(dataset, graphType, "AccountingGroup's usage", "AccountingGroup", "Euros", true, true); } //PROJECTS private static JFreeChart constructGraphForTimeUsageVsProjects( String graphType, Set usageRecords, Set projects) { DefaultCategoryDataset dataset = DatasetConstructor .constructDatasetForTimeUsageVsProject( usageRecords, getProjects(usageRecords, projects)); return constructGraph(dataset, graphType, "Projects's usage", "Projects", "Hours", true, true); } private static JFreeChart constructGraphForBillingUsageVsProjects( String graphType, Set usageRecords, Set projects) { DefaultCategoryDataset dataset = DatasetConstructor .constructDatasetForBillingUsageVsProject( usageRecords, getProjects(usageRecords, projects)); return constructGraph(dataset, graphType, "Projects's usage", "Projects", "Euros", true, true); } private static JFreeChart constructGraphForTimeUsageVSProjectFilterByAccountingGroup( String graphType, Set usageRecords, Set projects, Set accountingGroups) { DefaultCategoryDataset dataset = DatasetConstructor.constructDatasetForTimeUsageVsProjectsFilterByAccountingGroups( usageRecords, accountingGroups, getProjects(usageRecords, projects)); return constructGraph(dataset, graphType, "Projects's usage", "Projects", "Hours", true, true); } private static JFreeChart constructGraphForBillingUsageVSProjectFilterByAccountingGroup( String graphType, Set usageRecords, Set projects, Set accountingGroups) { DefaultCategoryDataset dataset = DatasetConstructor.constructDatasetForBillingUsageVsProjectsFilterByAccountingGroups( usageRecords, accountingGroups, getProjects(usageRecords, projects)); return constructGraph(dataset, graphType, "Projects's usage", "Projects", "Euros", true, true); } private static JFreeChart constructGraphForTimeUsageVSProjectsFilterByProducts( String graphType, Set usageRecords, Set projects, Set products) { DefaultCategoryDataset dataset = DatasetConstructor .constructDatasetForTimeUsageVsProjectsFilterByProducts( usageRecords, getProjects(usageRecords, projects), getProducts(usageRecords, products)); return constructGraph(dataset, graphType, "Projects's usage", "Projects", "Hours", true, true); } private static JFreeChart constructGraphForBillingUsageVSProjectsFilterByProducts( String graphType, Set usageRecords, Set projects, Set products) { DefaultCategoryDataset dataset = DatasetConstructor .constructDatasetForBillingUsageVsProjectsFilterByProducts( usageRecords, getProjects(usageRecords, projects), getProducts(usageRecords, products)); return constructGraph(dataset, graphType, "Projects's usage", "Projects", "Euros", true, true); } private static JFreeChart constructGraphForTimeUsageVsProjectsFilterByUsers( String graphType, Set usageRecords, Set projects, Set users) { DefaultCategoryDataset dataset = DatasetConstructor .constructDatasetForTimeUsageVsProjectsFilterByUsers( usageRecords, getUsers(usageRecords, users), getProjects(usageRecords, projects)); return constructGraph(dataset, graphType, "Project's usage", "Users", "Hours", true, true); } private static JFreeChart constructGraphForBillingUsageVsProjectsFilterByUsers( String graphType, Set usageRecords, Set projects, Set users) { DefaultCategoryDataset dataset = DatasetConstructor .constructDatasetForBillingUsageVsProjectsFilterByUsers( usageRecords, getUsers(usageRecords, users), getProjects(usageRecords, projects)); return constructGraph(dataset, graphType, "Project's usage", "Users", "Euros", true, true); } private static JFreeChart constructGraphForTimeUsageVSProjectFilterBySumbitHost( String graphType, Set usageRecords, Set projects, Set submitHosts) { DefaultCategoryDataset dataset = DatasetConstructor .constructDatasetForTimeUsageVsProjectFilterBySubmitHosts( usageRecords, getSubmitHosts(usageRecords, submitHosts), getProjects(usageRecords, projects)); return constructGraph(dataset, graphType, "Project's usage", "Users", "Hours", true, true); } private static JFreeChart constructGraphForBillingUsageVSProjectFilterBySumbitHost( String graphType, Set usageRecords, Set projects, Set submitHosts) { DefaultCategoryDataset dataset = DatasetConstructor .constructDatasetForBillingUsageVsProjectFilterBySubmitHosts( usageRecords, getSubmitHosts(usageRecords, submitHosts), getProjects(usageRecords, projects)); return constructGraph(dataset, graphType, "Project's usage", "Users", "Hours", true, true); } private static JFreeChart constructGraphForTimeUsageVSProjectFilterByHost( String graphType, Set usageRecords, Set projects, Set hosts) { DefaultCategoryDataset dataset = DatasetConstructor .constructDatasetForTimeUsageVsProjectFilterByHosts( usageRecords, getHosts(usageRecords, hosts), getProjects(usageRecords, projects)); return constructGraph(dataset, graphType, "Project's usage", "Users", "Hours", true, true); } private static JFreeChart constructGraphForBillingUsageVSProjectFilterByHost( String graphType, Set usageRecords, Set projects, Set hosts) { DefaultCategoryDataset dataset = DatasetConstructor .constructDatasetForBillingUsageVsProjectFilterByHosts( usageRecords, getHosts(usageRecords, hosts), getProjects(usageRecords, projects)); return constructGraph(dataset, graphType, "Project's usage", "Users", "Euros", true, true); } // HOSTS private static JFreeChart constructGraphForTimeUsegaVsHostsFilterByUsers( String graphType, Set usageRecords, Set hosts, Set users) { DefaultCategoryDataset dataset = DatasetConstructor .constructDatasetForTimeUsageVsHostsFilterByUsers( usageRecords, getHosts(usageRecords, hosts), getUsers(usageRecords, users)); return constructGraph(dataset, graphType, "Host's usage", "Hosts", "Hours", true, true); } private static JFreeChart constructGraphForBillingUsegaVsHostsFilterByUsers( String graphType, Set usageRecords, Set hosts, Set users) { DefaultCategoryDataset dataset = DatasetConstructor .constructDatasetForBillingUsageVsHostsFilterByUsers( usageRecords, getHosts(usageRecords, hosts), getUsers(usageRecords, users)); return constructGraph(dataset, graphType, "Host's usage", "Hosts", "Euros", true, true); } private static JFreeChart constructGraphForTimeUsageVsHostsFilterByProducts( String graphType, Set usageRecords, Set hosts, Set products) { DefaultCategoryDataset dataset = DatasetConstructor .constructDatasetForTimeUsageVsHostsFilterByProducts( usageRecords, getHosts(usageRecords, hosts), getProducts(usageRecords, products)); return constructGraph(dataset, graphType, "Host's usage", "Hosts", "Hours", true, true); } private static JFreeChart constructGraphForBillingUsageVsHostsFilterByProducts( String graphType, Set usageRecords, Set hosts, Set products) { DefaultCategoryDataset dataset = DatasetConstructor .constructDatasetForTimeUsageVsHostsFilterByProducts( usageRecords, getHosts(usageRecords, hosts), getProducts(usageRecords, products)); return constructGraph(dataset, graphType, "Host's usage", "Hosts", "Euros", true, true); } private static JFreeChart contructGraphForTimeUsageVsHostsFilterByAccountingGroup( String graphType, Set usageRecords, Set hosts, Set accountingGroups) { DefaultCategoryDataset dataset = DatasetConstructor .constructDatasetForTimeUsageVsHostFilterByAccountingGroup( usageRecords, getHosts(usageRecords, hosts), accountingGroups); return constructGraph(dataset, graphType, "Host's usage", "Hosts", "Hours", true, true); } private static JFreeChart contructGraphForBillingUsageVsHostsFilterByAccountingGroup( String graphType, Set usageRecords, Set hosts, Set accountingGroups) { DefaultCategoryDataset dataset = DatasetConstructor .constructDatasetForBillingUsageVsHostFilterByAccountingGroup( usageRecords, getHosts(usageRecords, hosts), accountingGroups); return constructGraph(dataset, graphType, "Host's usage", "Hosts", "Euros", true, true); } private static JFreeChart constructGraphForTimeUsageVsHostsFilterByProject( String graphType, Set usageRecords, Set hosts, Set projects) { DefaultCategoryDataset dataset = DatasetConstructor .constructDatasetForTimeUsageVsHostFilterByProjects( usageRecords, getHosts(usageRecords, hosts), getProjects(usageRecords, projects)); return constructGraph(dataset, graphType, "Host's usage", "Hosts", "Hours", true, true); } private static JFreeChart constructGraphForBillingUsageVsHostsFilterByProject( String graphType, Set usageRecords, Set hosts, Set projects) { DefaultCategoryDataset dataset = DatasetConstructor .constructDatasetForBillingUsageVsHostFilterByProjects( usageRecords, getHosts(usageRecords, hosts), getProjects(usageRecords, projects)); return constructGraph(dataset, graphType, "Host's usage", "Hosts", "Euros", true, true); } private static JFreeChart constructGraphForTimeUsageVsHosts( String graphType, Set usageRecords, Set hosts) { DefaultCategoryDataset dataset = DatasetConstructor .constructDatasetForTimeUsageForAHost( usageRecords, getHosts(usageRecords, hosts)); return constructGraph(dataset, graphType, "Host's usage", "Hosts", "Hours", true, true); } private static JFreeChart constructGraphForBillingUsageVsHosts( String graphType, Set usageRecords, Set hosts) { DefaultCategoryDataset dataset = DatasetConstructor .constructDatasetForBillingUsageForAHost( usageRecords, getHosts(usageRecords, hosts)); return constructGraph(dataset, graphType, "Host's usage", "Hosts", "Euros", true, true); } // SUBMITHOSTS private static JFreeChart constructGraphForTimeUsegaVsSubmitHostsFilterByUsers( String graphType, Set usageRecords, Set submitHosts, Set users) { DefaultCategoryDataset dataset = DatasetConstructor .constructDatasetForTimeUsageVsSubmitHostsFilterByUsers( usageRecords, getUsers(usageRecords, users), getSubmitHosts(usageRecords, submitHosts)); return constructGraph(dataset, graphType, "SubmitHost's usage", "SubmitHosts", "Hours", true, true); } private static JFreeChart constructGraphForBillingUsegaVsSubmitHostsFilterByUsers( String graphType, Set usageRecords, Set submitHosts, Set users) { DefaultCategoryDataset dataset = DatasetConstructor .constructDatasetForTimeUsageVsSubmitHostsFilterByUsers( usageRecords, getUsers(usageRecords, users), getSubmitHosts(usageRecords, submitHosts)); return constructGraph(dataset, graphType, "SubmitHost's usage", "SubmitHosts", "Euros", true, true); } private static JFreeChart constructGraphForTimeUsageVsSubmitHostsFilterByProducts( String graphType, Set usageRecords, Set submitHosts, Set products) { DefaultCategoryDataset dataset = DatasetConstructor .constructDatasetForTimeUsageVsSubmitHostsFilterByProducts( usageRecords, getSubmitHosts(usageRecords, submitHosts), getProducts(usageRecords, products)); return constructGraph(dataset, graphType, "SubmitHost's usage", "SubmitHosts", "Hours", true, true); } private static JFreeChart constructGraphForBillingUsageVsSubmitHostsFilterByProducts( String graphType, Set usageRecords, Set submitHosts, Set products) { DefaultCategoryDataset dataset = DatasetConstructor .constructDatasetForTimeUsageVsSubmitHostsFilterByProducts( usageRecords, getSubmitHosts(usageRecords, submitHosts), getProducts(usageRecords, products)); return constructGraph(dataset, graphType, "SubmitHost's usage", "SubmitHosts", "Euros", true, true); } private static JFreeChart contructGraphForTimeUsageVsSubmitHostsFilterByAccountingGroup( String graphType, Set usageRecords, Set submitHosts, Set accountingGroups) { DefaultCategoryDataset dataset = DatasetConstructor .constructDatasetForTimeUsageVsSubmitHostFilterByAccountingGroup( usageRecords, getSubmitHosts(usageRecords, submitHosts), accountingGroups); return constructGraph(dataset, graphType, "SubmitHost's usage", "SubmitHosts", "Hours", true, true); } private static JFreeChart contructGraphForBillingUsageVsSubmitHostsFilterByAccountingGroup( String graphType, Set usageRecords, Set submitHosts, Set accountingGroups) { DefaultCategoryDataset dataset = DatasetConstructor .constructDatasetForTimeUsageVsSubmitHostFilterByAccountingGroup( usageRecords, getSubmitHosts(usageRecords, submitHosts), accountingGroups); return constructGraph(dataset, graphType, "SubmitHost's usage", "SubmitHosts", "Euros", true, true); } private static JFreeChart constructGraphForTimeUsageVsSubmitHostsFilterByProject( String graphType, Set usageRecords, Set submitHosts, Set projects) { DefaultCategoryDataset dataset = DatasetConstructor .constructDatasetForTimeUsageVsSumitHostFilterByProjects( usageRecords, getSubmitHosts(usageRecords, submitHosts), getProjects(usageRecords, projects)); return constructGraph(dataset, graphType, "SubmitHost's usage", "SubmitHosts", "Hours", true, true); } private static JFreeChart constructGraphForBillingUsageVsSubmitHostsFilterByProject( String graphType, Set usageRecords, Set submitHosts, Set projects) { DefaultCategoryDataset dataset = DatasetConstructor .constructDatasetForBillingUsageVsSumitHostFilterByProjects( usageRecords, getSubmitHosts(usageRecords, submitHosts), getProjects(usageRecords, projects)); return constructGraph(dataset, graphType, "SubmitHost's usage", "SubmitHosts", "Euros", true, true); } private static JFreeChart contructGraphForTimeUsageVsSubmitHost( String graphType, Set usageRecords, Set submitHosts) { DefaultCategoryDataset dataset = DatasetConstructor .constructDatasetForTimeUsageForASubmitHost( usageRecords, getSubmitHosts(usageRecords, submitHosts)); return constructGraph(dataset, graphType, "SubmitHost's usage", "SubmitHosts", "Hours", true, true); } private static JFreeChart contructGraphForBillingUsageVsSubmitHost( String graphType, Set usageRecords, Set submitHosts) { DefaultCategoryDataset dataset = DatasetConstructor .constructDatasetForBillingUsageForASubmitHost( usageRecords, getSubmitHosts(usageRecords, submitHosts)); return constructGraph(dataset, graphType, "SubmitHost's usage", "SubmitHosts", "Euros", true, true); } // UTILITY METHODS private static JFreeChart constructGraph(DefaultCategoryDataset dataset, String graphType, String legend, String x, String y, boolean showLegend, boolean showTooltips) { if(graphType.equals(GRAPH_TYPE_BARCHAR3D)) return ChartFactory.createBarChart3D(legend, x, y, dataset, PlotOrientation.VERTICAL, true, true, false); return null; } private static Set getUsers( Set usageRecords, Set users) { Set usersList = new HashSet(); for(SmartLMUsageRecordType usageRecord : usageRecords) { UserIdentity[] userArray = usageRecord.getUserIdentityArray(); for(int i = 0; i < userArray.length; i++) { String userID = userArray[i].getLocalUserId(); for(String user : users) { if(user.equals(userID)) { usersList.add(userArray[i]); } } } } return usersList; } private static Set getHosts(Set usageRecords, Set stringHosts) { Set hostsList = new HashSet(); for(SmartLMUsageRecordType usageRecord : usageRecords) { Host[] hosts = usageRecord.getHostArray(); for(int i = 0; i < hosts.length; i++) { for(String host : stringHosts) { if(host.equals(hosts[i].getStringValue())) hostsList.add(hosts[i]); } } } return hostsList; } private static Set getProjects(Set usageRecords, Set projects) { Set projectsList = new HashSet(); for(SmartLMUsageRecordType usageRecord : usageRecords) { ProjectName[] projectNames = usageRecord.getProjectNameArray(); for(int i = 0; i < projectNames.length; i++) { for(String project : projects) { if(project.equals(projectNames[i].getStringValue())) projectsList.add(projectNames[i]); } } } return projectsList; } private static Set getSubmitHosts(Set usageRecords, Set stringSubmitHosts) { Set submitHostsList = new HashSet(); for(SmartLMUsageRecordType usageRecord : usageRecords) { SubmitHost[] submitHosts = usageRecord.getSubmitHostArray(); for(int i = 0; i < submitHosts.length; i++) { for(String submitHost : stringSubmitHosts) { if(submitHost.equals(submitHosts[i].getStringValue())) submitHostsList.add(submitHosts[i]); } } } return submitHostsList; } private static Set getProducts(Set usageRecords, Set products) { Set productList = new HashSet(); for(SmartLMUsageRecordType usageRecord : usageRecords) { LicenseResourceType[] licenseResources = usageRecord.getLicenseResourceArray(); for(int i = 0; i < licenseResources.length; i++) { String productID = licenseResources[i].getLicense().getProduct().getProductId(); for(String product : products) if(product.equals(productID)) productList.add(licenseResources[i].getLicense().getProduct()); } } return productList; } /** * Constructs a JFreeChart graph * @param aBSquery necessary query information to construct the graph * @param graphType Type of Graph to be created * @param usageRecords Usage Records from where to extract the information for the graph * @return a JFreeChart of the specified type, null if the graphType is not correct. */ public static JFreeChart constructHourGraph( ABSQuery aBSquery, String graphType, Set usageRecords) { String firstOption = aBSquery.getFirstOption(); String secondOption = aBSquery.getSecondOption(); // USER if(firstOption.equals(ABSQuery.USER)) { if(secondOption.equals(ABSQuery.PRODUCT)) return constructGraphForTimeUsageVsUsersFilterByProduct(graphType, usageRecords, aBSquery.getQueryUsers(), aBSquery.getQueryProducts()); else if(secondOption.equals(ABSQuery.ACCOUNTINGGROUP)) return constructGraphForTimeUsageVsUsersFilterByAccountingGroup( graphType, usageRecords, aBSquery.getQueryUsers(), aBSquery.getQueryAccountingGroups()); else if(secondOption.equals(ABSQuery.PROJECT)) return constructGraphForTimeUsageVsUsersFilterByProject(graphType, usageRecords, aBSquery.getQueryUsers(), aBSquery.getQueryProjects()); else if(secondOption.equals(ABSQuery.HOST)) return constructGraphForTimeUsageVsUsersFilterByHosts(graphType, usageRecords, aBSquery.getQueryUsers(), aBSquery.getQueryHosts()); else if(secondOption.equals(ABSQuery.SUBMITHOST)) return constructGraphForTimeUsageVsUsersFilterBySubmitHosts(graphType, usageRecords, aBSquery.getQueryUsers(), aBSquery.getQuerySubmitHosts()); else return constructGraphForTimeUsageVsUsers(graphType, usageRecords, aBSquery.getQueryUsers()); } // PRODUCT else if (firstOption.equals(ABSQuery.PRODUCT)) { if (secondOption.equals(ABSQuery.USER)) return constructGraphForTimeUsegaVsProductsFilterByUsers(graphType, usageRecords, aBSquery.getQueryProducts(), aBSquery.getQueryUsers()); else if(secondOption.equals(ABSQuery.ACCOUNTINGGROUP)) return constructGraphForTimeUsageVsProductsFilterByAccountingGroups(graphType, usageRecords, aBSquery.getQueryProducts(), aBSquery.getQueryAccountingGroups()); else if(secondOption.equals(ABSQuery.PROJECT)) return constructGraphForTimeUsageVsProductsFilterByProjects( graphType, usageRecords, aBSquery.getQueryProducts(), aBSquery.getQueryProjects()); else if(secondOption.equals(ABSQuery.HOST)) return constructGraphForTimeUsageVsProductFilterByHosts( graphType, usageRecords, aBSquery.getQueryProducts(), aBSquery.getQueryHosts()); else if(secondOption.equals(ABSQuery.SUBMITHOST)) return constructGraphForTimeUsageVsProductFilterBySumbitHosts( graphType, usageRecords, aBSquery.getQueryProducts(), aBSquery.getQuerySubmitHosts()); else return constructGraphForTimeUsageVsProducts(graphType, usageRecords, aBSquery.getQueryProducts()); } // ACCOUNTINGGROUP else if(firstOption.equals(ABSQuery.ACCOUNTINGGROUP)) { if (secondOption.equals(ABSQuery.USER)) return constructGraphForTimeUsageVsAccountingGroupsFilterByUsers(graphType, usageRecords, aBSquery.getQueryAccountingGroups(), aBSquery.getQueryUsers()); else if(secondOption.equals(ABSQuery.PRODUCT)) return constructGraphForTimeUsageVsAccountingGroupsFilterByProducts(graphType, usageRecords, aBSquery.getQueryAccountingGroups(), aBSquery.getQueryProducts()); else if (secondOption.equals(ABSQuery.PROJECT)) return constructGraphForTimeUsageVsAccountingGroupFilterByProject( graphType, usageRecords, aBSquery.getQueryAccountingGroups(), aBSquery.getQueryProjects()); else if(secondOption.equals(ABSQuery.HOST)) return constructGraphForTimeUsageVsAccountingGroupFilterByHost( graphType, usageRecords, aBSquery.getQueryAccountingGroups(), aBSquery.getQueryHosts()); else if(secondOption.equals(ABSQuery.SUBMITHOST)) return constructGraphForTimeUsageVsAccountingGroupFilterBySubmitHost( graphType, usageRecords, aBSquery.getQueryAccountingGroups(), aBSquery.getQuerySubmitHosts()); else return constructGraphForTimeUsageVsAccountingGroups(graphType, usageRecords, aBSquery.getQueryAccountingGroups()); } //PROJECT else if(firstOption.equals(ABSQuery.PROJECT)) { if (secondOption.equals(ABSQuery.USER)) return constructGraphForTimeUsageVsProjectsFilterByUsers(graphType, usageRecords, aBSquery.getQueryProjects(), aBSquery.getQueryUsers()); else if(secondOption.equals(ABSQuery.PRODUCT)) return constructGraphForTimeUsageVSProjectsFilterByProducts( graphType, usageRecords, aBSquery.getQueryProjects(), aBSquery.getQueryProducts()); else if(secondOption.equals(ABSQuery.ACCOUNTINGGROUP)) return constructGraphForTimeUsageVSProjectFilterByAccountingGroup( graphType, usageRecords, aBSquery.getQueryProjects(), aBSquery.getQueryAccountingGroups()); else if(secondOption.equals(ABSQuery.HOST)) return constructGraphForTimeUsageVSProjectFilterByHost( graphType, usageRecords, aBSquery.getQueryProjects(), aBSquery.getQueryHosts()); else if(secondOption.equals(ABSQuery.SUBMITHOST)) return constructGraphForTimeUsageVSProjectFilterBySumbitHost( graphType, usageRecords, aBSquery.getQueryProjects(), aBSquery.getQuerySubmitHosts()); else return constructGraphForTimeUsageVsProjects(graphType, usageRecords, aBSquery.getQueryProjects()); } // HOST else if (firstOption.equals(ABSQuery.HOST)) { if (secondOption.equals(ABSQuery.USER)) return constructGraphForTimeUsegaVsHostsFilterByUsers(graphType, usageRecords, aBSquery.getQueryHosts(), aBSquery.getQueryUsers()); else if(secondOption.equals(ABSQuery.PRODUCT)) return constructGraphForTimeUsageVsHostsFilterByProducts( graphType, usageRecords, aBSquery.getQueryHosts(), aBSquery.getQueryProducts()); else if(secondOption.equals(ABSQuery.ACCOUNTINGGROUP)) return contructGraphForTimeUsageVsHostsFilterByAccountingGroup( graphType, usageRecords, aBSquery.getQueryHosts(), aBSquery.getQueryAccountingGroups()); else if(secondOption.equals(ABSQuery.PROJECT)) return constructGraphForTimeUsageVsHostsFilterByProject( graphType, usageRecords, aBSquery.getQueryHosts(), aBSquery.getQueryProjects()); else return constructGraphForTimeUsageVsHosts( graphType, usageRecords, aBSquery.getQueryHosts()); } // SUBMITHOST else if (firstOption.equals(ABSQuery.SUBMITHOST)) { if (secondOption.equals(ABSQuery.USER)) return constructGraphForTimeUsegaVsSubmitHostsFilterByUsers(graphType, usageRecords, aBSquery.getQuerySubmitHosts(), aBSquery.getQueryUsers()); else if(secondOption.equals(ABSQuery.PRODUCT)) return constructGraphForTimeUsageVsSubmitHostsFilterByProducts( graphType, usageRecords, aBSquery.getQuerySubmitHosts(), aBSquery.getQueryProducts()); else if(secondOption.equals(ABSQuery.ACCOUNTINGGROUP)) return contructGraphForTimeUsageVsSubmitHostsFilterByAccountingGroup( graphType, usageRecords, aBSquery.getQuerySubmitHosts(), aBSquery.getQueryAccountingGroups()); else if(secondOption.equals(ABSQuery.PROJECT)) return constructGraphForTimeUsageVsSubmitHostsFilterByProject( graphType, usageRecords, aBSquery.getQuerySubmitHosts(), aBSquery.getQueryProjects()); else return contructGraphForTimeUsageVsSubmitHost( graphType, usageRecords, aBSquery.getQuerySubmitHosts()); } return null; } /** * Constructs a billing JFreeChart graph * @param aBSquery necessary query information to construct the graph * @param graphType Type of Graph to be created * @param usageRecords Usage Records from where to extract the information for the graph * @return a JFreeChart of the specified type, null if the graphType is not correct. */ public static JFreeChart constructBillingGraph( ABSQuery aBSquery, String graphType, Set usageRecords) { String firstOption = aBSquery.getFirstOption(); String secondOption = aBSquery.getSecondOption(); // USER if(firstOption.equals(ABSQuery.USER)) { if(secondOption.equals(ABSQuery.PRODUCT)) return constructGraphForBillingUsageVsUsersFilterByProduct( graphType, usageRecords, aBSquery.getQueryUsers(), aBSquery.getQueryProducts()); else if(secondOption.equals(ABSQuery.ACCOUNTINGGROUP)) return constructGraphForBillingUsageVsUsersFilterByAccountingGroup( graphType, usageRecords, aBSquery.getQueryUsers(), aBSquery.getQueryAccountingGroups()); else if(secondOption.equals(ABSQuery.PROJECT)) return constructGraphForBillingUsageVsUsersFilterByProject(graphType, usageRecords, aBSquery.getQueryUsers(), aBSquery.getQueryProjects()); else if(secondOption.equals(ABSQuery.HOST)) return constructGraphForBillingUsageVsUsersFilterByHosts(graphType, usageRecords, aBSquery.getQueryUsers(), aBSquery.getQueryHosts()); else if(secondOption.equals(ABSQuery.SUBMITHOST)) return constructGraphForBillingUsageVsUsersFilterBySubmitHosts(graphType, usageRecords, aBSquery.getQueryUsers(), aBSquery.getQuerySubmitHosts()); else return constructGraphForBillingUsageVsUsers(graphType, usageRecords, aBSquery.getQueryUsers()); } // PRODUCT else if (firstOption.equals(ABSQuery.PRODUCT)) { if (secondOption.equals(ABSQuery.USER)) return constructGraphForBillingUsegaVsProductsFilterByUsers(graphType, usageRecords, aBSquery.getQueryProducts(), aBSquery.getQueryUsers()); else if(secondOption.equals(ABSQuery.ACCOUNTINGGROUP)) return constructGraphForBillingUsegaVsProductsFilterByAccountingGroups(graphType, usageRecords, aBSquery.getQueryProducts(), aBSquery.getQueryAccountingGroups()); else if(secondOption.equals(ABSQuery.PROJECT)) return constructGraphForBillingUsageVsProductsFilterByProjects( graphType, usageRecords, aBSquery.getQueryProducts(), aBSquery.getQueryProjects()); else if(secondOption.equals(ABSQuery.HOST)) return constructGraphForBillingUsageVsProductFilterByHosts( graphType, usageRecords, aBSquery.getQueryProducts(), aBSquery.getQueryHosts()); else if(secondOption.equals(ABSQuery.SUBMITHOST)) return constructGraphForBillingUsageVsProductFilterBySumbitHosts( graphType, usageRecords, aBSquery.getQueryProducts(), aBSquery.getQuerySubmitHosts()); else return constructGraphForBillingUsageVsProducts(graphType, usageRecords, aBSquery.getQueryProducts()); } // ACCOUNTINGGROUP else if(firstOption.equals(ABSQuery.ACCOUNTINGGROUP)) { if (secondOption.equals(ABSQuery.USER)) return constructGraphForBillingUsageVsAccountingGroupsFilterByUsers(graphType, usageRecords, aBSquery.getQueryAccountingGroups(), aBSquery.getQueryUsers()); else if(secondOption.equals(ABSQuery.PRODUCT)) return constructGraphForBillingUsageVsAccountingGroupsFilterByProducts(graphType, usageRecords, aBSquery.getQueryAccountingGroups(), aBSquery.getQueryProducts()); else if (secondOption.equals(ABSQuery.PROJECT)) return constructGraphForBillingUsageVsAccountingGroupFilterByProject( graphType, usageRecords, aBSquery.getQueryAccountingGroups(), aBSquery.getQueryProjects()); else if(secondOption.equals(ABSQuery.HOST)) return constructGraphForBillingUsageVsAccountingGroupFilterByHost( graphType, usageRecords, aBSquery.getQueryAccountingGroups(), aBSquery.getQueryHosts()); else if(secondOption.equals(ABSQuery.SUBMITHOST)) return constructGraphForBillingUsageVsAccountingGroupFilterBySubmitHost( graphType, usageRecords, aBSquery.getQueryAccountingGroups(), aBSquery.getQuerySubmitHosts()); else return constructGraphForBillingUsageVsAccountingGroups(graphType, usageRecords, aBSquery.getQueryAccountingGroups()); } //PROJECT else if(firstOption.equals(ABSQuery.PROJECT)) { if (secondOption.equals(ABSQuery.USER)) return constructGraphForBillingUsageVsProjectsFilterByUsers(graphType, usageRecords, aBSquery.getQueryProjects(), aBSquery.getQueryUsers()); else if(secondOption.equals(ABSQuery.PRODUCT)) return constructGraphForBillingUsageVSProjectsFilterByProducts( graphType, usageRecords, aBSquery.getQueryProjects(), aBSquery.getQueryProducts()); else if(secondOption.equals(ABSQuery.ACCOUNTINGGROUP)) return constructGraphForBillingUsageVSProjectFilterByAccountingGroup( graphType, usageRecords, aBSquery.getQueryProjects(), aBSquery.getQueryAccountingGroups()); else if(secondOption.equals(ABSQuery.HOST)) return constructGraphForBillingUsageVSProjectFilterByHost( graphType, usageRecords, aBSquery.getQueryProjects(), aBSquery.getQueryHosts()); else if(secondOption.equals(ABSQuery.SUBMITHOST)) return constructGraphForBillingUsageVSProjectFilterBySumbitHost( graphType, usageRecords, aBSquery.getQueryProjects(), aBSquery.getQuerySubmitHosts()); else return constructGraphForBillingUsageVsProjects(graphType, usageRecords, aBSquery.getQueryProjects()); } // HOST else if (firstOption.equals(ABSQuery.HOST)) { if (secondOption.equals(ABSQuery.USER)) return constructGraphForBillingUsegaVsHostsFilterByUsers(graphType, usageRecords, aBSquery.getQueryHosts(), aBSquery.getQueryUsers()); else if(secondOption.equals(ABSQuery.PRODUCT)) return constructGraphForBillingUsageVsHostsFilterByProducts( graphType, usageRecords, aBSquery.getQueryHosts(), aBSquery.getQueryProducts()); else if(secondOption.equals(ABSQuery.ACCOUNTINGGROUP)) return contructGraphForBillingUsageVsHostsFilterByAccountingGroup( graphType, usageRecords, aBSquery.getQueryHosts(), aBSquery.getQueryAccountingGroups()); else if(secondOption.equals(ABSQuery.PROJECT)) return constructGraphForBillingUsageVsHostsFilterByProject( graphType, usageRecords, aBSquery.getQueryHosts(), aBSquery.getQueryProjects()); else return constructGraphForBillingUsageVsHosts( graphType, usageRecords, aBSquery.getQueryHosts()); } // SUBMITHOST else if (firstOption.equals(ABSQuery.SUBMITHOST)) { if (secondOption.equals(ABSQuery.USER)) return constructGraphForBillingUsegaVsSubmitHostsFilterByUsers(graphType, usageRecords, aBSquery.getQuerySubmitHosts(), aBSquery.getQueryUsers()); else if(secondOption.equals(ABSQuery.PRODUCT)) return constructGraphForBillingUsageVsSubmitHostsFilterByProducts( graphType, usageRecords, aBSquery.getQuerySubmitHosts(), aBSquery.getQueryProducts()); else if(secondOption.equals(ABSQuery.ACCOUNTINGGROUP)) return contructGraphForBillingUsageVsSubmitHostsFilterByAccountingGroup( graphType, usageRecords, aBSquery.getQuerySubmitHosts(), aBSquery.getQueryAccountingGroups()); else if(secondOption.equals(ABSQuery.PROJECT)) return constructGraphForBillingUsageVsSubmitHostsFilterByProject( graphType, usageRecords, aBSquery.getQuerySubmitHosts(), aBSquery.getQueryProjects()); else return contructGraphForBillingUsageVsSubmitHost( graphType, usageRecords, aBSquery.getQuerySubmitHosts()); } return null; } }