Log In | Get Help   
Home My Page Projects Code Snippets Project Openings Accounting and Billing Portal
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files
[abportal] View of /src/main/java/eu/smartlm/abs/portal/graph/GraphConstructor.java
[abportal] / src / main / java / eu / smartlm / abs / portal / graph / GraphConstructor.java Repository:
ViewVC logotype

View of /src/main/java/eu/smartlm/abs/portal/graph/GraphConstructor.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1 - (download) (annotate)
Wed Jul 28 10:05:51 2010 UTC (13 years, 9 months ago) by dgarcia
File size: 54675 byte(s)
First code commit
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<SmartLMUsageRecordType> usageRecords,
			Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> 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<SmartLMUsageRecordType> usageRecords, Set<String> users, Set<String> 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<SmartLMUsageRecordType> usageRecords, 
			Set<String> users, 
			Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> users, 
			Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> users, 
			Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> users, Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> users, Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> users, Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> users, Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> users, Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> users, Set<String> 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<SmartLMUsageRecordType> usageRecords,	Set<String> 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<SmartLMUsageRecordType> usageRecords, Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> products, Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> products, Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> products, Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> products, Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> products, 
			Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> products, 
			Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> products, 
			Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> products, 
			Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> products, 
			Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> products, 
			Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> accountingGroups, Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> accountingGroups, Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> accountingGroups, Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> accountingGroups, Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> accountingGroups, 
			Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> accountingGroups, 
			Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> accountingGroups, 
			Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> accountingGroups, 
			Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> accountingGroups, 
			Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> accountingGroups, 
			Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> projects, 
			Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> projects, 
			Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> projects, 
			Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> projects, 
			Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> projects, Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> projects, Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> projects, 
			Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> projects, 
			Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> projects, 
			Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> projects, 
			Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> hosts, Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> hosts, Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> hosts, 
			Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> hosts, 
			Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> hosts, 
			Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> hosts, 
			Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> hosts, 
			Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> hosts, 
			Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> submitHosts, Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> submitHosts, Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> submitHosts, 
			Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> submitHosts, 
			Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> submitHosts, 
			Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> submitHosts, 
			Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> submitHosts, 
			Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> submitHosts, 
			Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> 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<SmartLMUsageRecordType> usageRecords,
			Set<String> 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<UserIdentity> getUsers(
			Set<SmartLMUsageRecordType> usageRecords, Set<String> users) {
		
		Set<UserIdentity> usersList = new HashSet<UserIdentity>();
		
		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<Host> getHosts(Set<SmartLMUsageRecordType> usageRecords, Set<String> stringHosts) {
		
		Set<Host> hostsList = new HashSet<Host>();
		
		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<ProjectName> getProjects(Set<SmartLMUsageRecordType> usageRecords,
			Set<String> projects) {
		
		Set<ProjectName> projectsList = new HashSet<ProjectName>();
		
		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<SubmitHost> getSubmitHosts(Set<SmartLMUsageRecordType> usageRecords, 
			Set<String> stringSubmitHosts) {
		
		Set<SubmitHost> submitHostsList = new HashSet<SubmitHost>();
		
		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<ProductType> getProducts(Set<SmartLMUsageRecordType> usageRecords, 
			Set<String> products) {
		
		Set<ProductType> productList = new HashSet<ProductType>();
		
		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, <code>null</code> if the <code>graphType</code> is not correct.
	 */
	public static JFreeChart constructHourGraph(
			ABSQuery aBSquery, 
			String graphType, 
			Set<SmartLMUsageRecordType> 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, <code>null</code> if the <code>graphType</code> is not correct.
	 */
	public static JFreeChart constructBillingGraph(
			ABSQuery aBSquery, 
			String graphType, 
			Set<SmartLMUsageRecordType> 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;
	}
}

root@forge.cesga.es
ViewVC Help
Powered by ViewVC 1.0.0  

Powered By FusionForge