package eu.smartlm.abs.portal.data.query.ws; import java.util.Calendar; import java.util.Date; import java.util.HashSet; import java.util.Set; import org.apache.axis2.AxisFault; 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 eu.smartlm.abs.portal.data.query.QueryConstructor; import eu.smartlm.ebs.client.EBServiceClient; import eu.smartlm.ebs.ws.ListOfAccountingGroupsInputDocument; import eu.smartlm.ebs.ws.ListOfAccountingGroupsOutputDocument; import eu.smartlm.ebs.ws.ListOfHostsInputDocument; import eu.smartlm.ebs.ws.ListOfHostsOutputDocument; import eu.smartlm.ebs.ws.ListOfInputType; import eu.smartlm.ebs.ws.ListOfProductsInputDocument; import eu.smartlm.ebs.ws.ListOfProductsOutputDocument; import eu.smartlm.ebs.ws.ListOfProjectsInputDocument; import eu.smartlm.ebs.ws.ListOfProjectsOutputDocument; import eu.smartlm.ebs.ws.ListOfSmartLMUsageRecordsInputDocument; import eu.smartlm.ebs.ws.ListOfSmartLMUsageRecordsOutputDocument; import eu.smartlm.ebs.ws.ListOfSubmitFeaturesInputDocument; import eu.smartlm.ebs.ws.ListOfSubmitFeaturesOutputDocument; import eu.smartlm.ebs.ws.ListOfSubmitHostsInputDocument; import eu.smartlm.ebs.ws.ListOfSubmitHostsOutputDocument; import eu.smartlm.ebs.ws.ListOfUsersInputDocument; import eu.smartlm.ebs.ws.ListOfUsersOutputDocument; import eu.smartlm.ebs.ws.SetType; import eu.smartlm.schemas.x2009.x06.urec.FeatureType; import eu.smartlm.schemas.x2009.x06.urec.ProductType; import eu.smartlm.schemas.x2009.x06.urec.SmartLMUsageRecordType; /** * Web-service client to retrieve the accounting and billing data from the Accounting and Billing server * @author David Garcia Perez - CESGA */ public class EBSServiceClient implements QueryConstructor { private EBServiceClient stub; public void setUpConnection(String url, String rampartRepo, String clientProperties) { try { stub = EBServiceClient.getInstance(rampartRepo, clientProperties, url); } catch (Exception e) { System.out.println("Exception creating stub: " + e); } } public Set getListOfAccountingGroups(Date startDate, Date endDate, Set filterByUsers, Set filterByProduct, Set filterByProject, Set filterByHost, Set filterBySubmitHost, Set filterByFeature, Set filterByAccountingGroups) { ListOfAccountingGroupsInputDocument inputDocument = ListOfAccountingGroupsInputDocument.Factory.newInstance(); ListOfInputType input = inputDocument.addNewListOfAccountingGroupsInput(); setInput(input, startDate, endDate, filterByUsers, filterByProduct, filterByProject, filterByHost, filterBySubmitHost, filterByFeature, filterByAccountingGroups); ListOfAccountingGroupsOutputDocument outputDocument = ListOfAccountingGroupsOutputDocument.Factory.newInstance();; try { outputDocument = stub.getListOfAccountingGroups(inputDocument); } catch (AxisFault e) { System.out.println("Exception getting the list of accounting groups " + e); return new HashSet(); } catch (Exception e) { System.out.println("Error getting the list of Users: " + e); } Set output = new HashSet(); if(outputDocument != null) { SetType[] sets = outputDocument.getListOfAccountingGroupsOutput().getSetArray(); for(int i = 0; i < sets.length; i++) { output.add(sets[i].getStringValue1Array(0)); } } return output; } public Set getListOfHosts(Date startDate, Date endDate, Set filterByUsers, Set filterByProduct, Set filterByProject, Set filterByHost, Set filterBySubmitHost, Set filterByFeature, Set filterByAccountingGroups) { ListOfHostsInputDocument inputDocument = ListOfHostsInputDocument.Factory.newInstance(); ListOfInputType input = inputDocument.addNewListOfHostsInput(); setInput(input, startDate, endDate, filterByUsers, filterByProduct, filterByProject, filterByHost, filterBySubmitHost, filterByFeature, filterByAccountingGroups); ListOfHostsOutputDocument outputDocument = ListOfHostsOutputDocument.Factory.newInstance(); try { outputDocument = stub.getListOfHosts(inputDocument); } catch (AxisFault e) { return new HashSet(); } catch (Exception e) { System.out.println("Error getting the list of Users: " + e); } Set output = new HashSet(); if(outputDocument != null) { Host[] hosts = outputDocument.getListOfHostsOutput().getHostArray(); for(int i = 0; i < hosts.length; i++) { Host host = (Host) hosts[i]; output.add(host); } } return output; } public Set getListOfProducts(Date startDate, Date endDate, Set filterByUsers, Set filterByProduct, Set filterByProject, Set filterByHost, Set filterBySubmitHost, Set filterByFeature, Set filterByAccountingGroups) { ListOfProductsInputDocument inputDocument = ListOfProductsInputDocument.Factory.newInstance(); ListOfInputType input = inputDocument.addNewListOfProductsInput(); setInput(input, startDate, endDate, filterByUsers, filterByProduct, filterByProject, filterByHost, filterBySubmitHost, filterByFeature, filterByAccountingGroups); ListOfProductsOutputDocument outputDocument = ListOfProductsOutputDocument.Factory.newInstance(); try { outputDocument = stub.getListOfProducts(inputDocument); } catch (AxisFault e) { System.out.println("Exception getting the list of Products " + e); return new HashSet(); } catch (Exception e) { System.out.println("Error getting the list of Users: " + e); } Set output = new HashSet(); if(outputDocument != null) { ProductType[] products = outputDocument.getListOfProductsOutput().getProductTypeArray(); for(int i = 0; i < products.length; i++) { output.add((ProductType) products[i]); } } return output; } public Set getListOfProjects(Date startDate, Date endDate, Set filterByUsers, Set filterByProduct, Set filterByProject, Set filterByHost, Set filterBySubmitHost, Set filterByFeature, Set filterByAccountingGroups) { ListOfProjectsInputDocument inputDocument = ListOfProjectsInputDocument.Factory.newInstance(); ListOfInputType input = inputDocument.addNewListOfProjectsInput(); setInput(input, startDate, endDate, filterByUsers, filterByProduct, filterByProject, filterByHost, filterBySubmitHost, filterByFeature, filterByAccountingGroups); ListOfProjectsOutputDocument outputDocument = ListOfProjectsOutputDocument.Factory.newInstance(); try { outputDocument = stub.getListOfProjects(inputDocument); } catch (AxisFault e) { System.out.println("Exception getting the list of Projects " + e); return new HashSet(); } catch (Exception e) { System.out.println("Error getting the list of Projects: " + e); } Set output = new HashSet(); if(outputDocument != null) { ProjectName[] projects = outputDocument.getListOfProjectsOutput().getProjectNameArray(); for(int i = 0; i < projects.length; i++) { output.add( (ProjectName) projects[i]); } } return output; } public Set getListOfSmartLMUsageRecords( Date startDate, Date endDate, Set filterByUsers, Set filterByProduct, Set filterByProject, Set filterByHost, Set filterBySubmitHost, Set filterByFeature, Set filterByAccountingGroups) { ListOfSmartLMUsageRecordsInputDocument inputDocument = ListOfSmartLMUsageRecordsInputDocument.Factory.newInstance(); ListOfInputType input = inputDocument.addNewListOfSmartLMUsageRecordsInput(); setInput(input, startDate, endDate, filterByUsers, filterByProduct, filterByProject, filterByHost, filterBySubmitHost, filterByFeature, filterByAccountingGroups); ListOfSmartLMUsageRecordsOutputDocument outputDocument = ListOfSmartLMUsageRecordsOutputDocument.Factory.newInstance(); try { outputDocument = stub.getListOfSmartLMUsageRecords(inputDocument); } catch (AxisFault e) { System.out.println("Exception getting the list of usage records " + e); return new HashSet(); } catch (Exception e) { System.out.println("Error getting the list of SmartLM Usage Records: " + e); } Set output = new HashSet(); if(outputDocument != null) { SmartLMUsageRecordType[] smartLMUsageRecords = outputDocument.getListOfSmartLMUsageRecordsOutput().getSmartLMUsageRecordArray(); for(int i = 0; i < smartLMUsageRecords.length; i++) { output.add( (SmartLMUsageRecordType) smartLMUsageRecords[i]); } } return output; } public Set getListOfSubmitFeatures(Date startDate, Date endDate, Set filterByUsers, Set filterByProduct, Set filterByProject, Set filterByHost, Set filterBySubmitHost, Set filterByFeature, Set filterByAccountingGroups) { ListOfSubmitFeaturesInputDocument inputDocument = ListOfSubmitFeaturesInputDocument.Factory.newInstance(); ListOfInputType input = inputDocument.addNewListOfSubmitFeaturesInput(); setInput(input, startDate, endDate, filterByUsers, filterByProduct, filterByProject, filterByHost, filterBySubmitHost, filterByFeature, filterByAccountingGroups); ListOfSubmitFeaturesOutputDocument outputDocument = ListOfSubmitFeaturesOutputDocument.Factory.newInstance(); try { outputDocument = stub.getListOfSubmitFeatures(inputDocument); } catch (AxisFault e) { System.out.println("Exception getting the list of features" + e); return new HashSet(); } catch (Exception e) { System.out.println("Error getting the list of Features: " + e); } Set output = new HashSet(); if(outputDocument != null) { FeatureType[] features = outputDocument.getListOfSubmitFeaturesOutput().getFeatureTypeArray(); for(int i = 0; i < features.length; i++) { output.add((FeatureType) features[i]); } } return output; } public Set getListOfSubmitHosts(Date startDate, Date endDate, Set filterByUsers, Set filterByProduct, Set filterByProject, Set filterByHost, Set filterBySubmitHost, Set filterByFeature, Set filterByAccountingGroups) { ListOfSubmitHostsInputDocument inputDocument = ListOfSubmitHostsInputDocument.Factory.newInstance(); ListOfInputType input = inputDocument.addNewListOfSubmitHostsInput(); setInput(input, startDate, endDate, filterByUsers, filterByProduct, filterByProject, filterByHost, filterBySubmitHost, filterByFeature, filterByAccountingGroups); ListOfSubmitHostsOutputDocument outputDocument = ListOfSubmitHostsOutputDocument.Factory.newInstance(); try { outputDocument = stub.getListOfSubmitHosts(inputDocument); }catch (AxisFault e) { return new HashSet(); } catch (Exception e) { System.out.println("Error getting the list of SubmitHosts: " + e); } Set output = new HashSet(); if(outputDocument != null) { SubmitHost[] submitHosts = outputDocument.getListOfSubmitHostsOutput().getSubmitHostArray(); for(int i = 0; i < submitHosts.length; i++) { output.add((SubmitHost) submitHosts[i]); } } return output; } public Set getListOfUsers(Date startDate, Date endDate, Set filterByUsers, Set filterByProduct, Set filterByProject, Set filterByHost, Set filterBySubmitHost, Set filterByFeature, Set filterByAccountingGroups) { ListOfUsersInputDocument inputDocument = ListOfUsersInputDocument.Factory.newInstance(); ListOfInputType input = inputDocument.addNewListOfUsersInput(); setInput(input, startDate, endDate, filterByUsers, filterByProduct, filterByProject, filterByHost, filterBySubmitHost, filterByFeature, filterByAccountingGroups); ListOfUsersOutputDocument outputDocument = ListOfUsersOutputDocument.Factory.newInstance(); try { outputDocument = stub.getListOfUsers(inputDocument); } catch (AxisFault e) { System.out.println("Exception getting the list of users: " + e); return new HashSet(); } catch (Exception e) { System.out.println("Error getting the list of Users: " + e); } Set output = new HashSet(); if(outputDocument != null) { UserIdentity[] users = outputDocument.getListOfUsersOutput().getUserIdentityArray(); for(int i = 0; i < users.length; i++) { output.add((UserIdentity) users[i]); } } return output; } private Calendar getCalendar(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); return calendar; } private void setInput(ListOfInputType input, Date startDate, Date endDate, Set filterByUsers, Set filterByProduct, Set filterByProject, Set filterByHost, Set filterBySubmitHost, Set filterByFeature, Set filterByAccountingGroups) { input.setStartDate(getCalendar(startDate)); input.setEndDate(getCalendar(endDate)); String[] filterByUsersArray = new String[filterByUsers.size()]; String[] filterByProductArray = new String[filterByProduct.size()]; String[] filterByProjectArray = new String[filterByProject.size()]; String[] filterByHostArray = new String[filterByProject.size()]; String[] filterBySubmitHostArray = new String[filterBySubmitHost.size()]; String[] filterByFeatureArray = new String[filterByFeature.size()]; String[] filterByAccountingGroupsArray = new String[filterByAccountingGroups.size()]; // Users int i = 0; for(String user : filterByUsers) { filterByUsersArray[i] = user; i++; } SetType setofUsers = input.addNewFilterByUser(); setofUsers.setStringValue1Array(filterByUsersArray); input.setFilterByUser(setofUsers); // Product i = 0; for(String product : filterByProduct) { filterByProductArray[i] = product; i++; } SetType setOfProducts = input.addNewFilterByProduct(); setOfProducts.setStringValue1Array(filterByProductArray); input.setFilterByProduct(setOfProducts); //Project i = 0; for(String project : filterByProject) { filterByProjectArray[i] = project; i++; } SetType setOfProjects = input.addNewFilterByProject(); setOfProjects.setStringValue1Array(filterByProjectArray); input.setFilterByProject(setOfProjects); // Host i = 0; for(String host : filterByHost) { filterByHostArray[i] = host; i++; } SetType setOfHosts = input.addNewFilterByHost(); setOfHosts.setStringValue1Array(filterByHostArray); input.setFilterByHost(setOfHosts); //SubmitHost i = 0; for(String submitHost : filterBySubmitHost) { filterBySubmitHostArray[i] = submitHost; i++; } SetType setOfSubmitHosts = input.addNewFilterBySubmitHost(); setOfSubmitHosts.setStringValue1Array(filterBySubmitHostArray); input.setFilterBySubmitHost(setOfSubmitHosts); // Feature i = 0; for(String feature : filterByFeature) { filterByFeatureArray[i] = feature; i++; } SetType setOfFeatures = input.addNewFilterByFeature(); setOfFeatures.setStringValue1Array(filterByFeatureArray); input.setFilterByFeature(setOfFeatures); // Accounting Groups i = 0; for(String accountingGroup : filterByAccountingGroups) { filterByAccountingGroupsArray[i] = accountingGroup; i++; } SetType setOfAccountingGroups = input.addNewFilterByAccountingGroups(); setOfAccountingGroups.setStringValue1Array(filterByAccountingGroupsArray); input.setFilterByAccountingGroups(setOfAccountingGroups); } }