package org.gcube.phd; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import org.apache.commons.math3.stat.descriptive.SummaryStatistics; import org.gcube.common.resources.gcore.GCoreEndpoint; import org.gcube.common.resources.gcore.GenericResource; import org.gcube.common.resources.gcore.HostingNode; import org.gcube.common.resources.gcore.Resource; import org.gcube.common.resources.gcore.ServiceEndpoint; import org.gcube.common.resources.gcore.Software; import org.gcube.common.scope.impl.ScopeBean; import org.gcube.resources.discovery.client.api.DiscoveryClient; import org.gcube.resources.discovery.client.queries.api.SimpleQuery; import org.gcube.resources.discovery.icclient.ICFactory; public class ContextStatistic { private ScopeBean scopeBean; public ScopeBean getScopeBean() { return scopeBean; } private Map,Set>> resourceMap; private Map,SummaryStatistics> statisticsMap; public ContextStatistic(ScopeBean scopeBean) { this.scopeBean = scopeBean; } public void analizeInstances(Class clz) throws Exception { Set> resources = resourceMap.get(clz); DiscoveryClient client = ICFactory.clientFor(clz); SimpleQuery query = ICFactory.queryFor(clz); List instances = client.submit(query); for(R r : instances) { ResourceInfo resourceInfo = new ResourceInfo(r); resources.add(resourceInfo); } } public Map,Set>> getAllResources() throws Exception { if(resourceMap == null) { resourceMap = new HashMap<>(); List> classes = new ArrayList<>(); classes.add(GCoreEndpoint.class); classes.add(HostingNode.class); classes.add(ServiceEndpoint.class); classes.add(GenericResource.class); classes.add(Software.class); for(Class clz : classes) { analizeInstances(clz); } } return resourceMap; } public static Map,SummaryStatistics> generateStatistics( Map,Set>> resourceMap) throws UnsupportedEncodingException { Map,SummaryStatistics> statisticsMap = new HashMap<>(); for(Class clz : resourceMap.keySet()) { SummaryStatistics summaryStatistics = new SummaryStatistics(); Set> resources = resourceMap.get(clz); for(ResourceInfo resourceInfo : resources) { summaryStatistics.addValue(resourceInfo.getSize()); } } return statisticsMap; } public Map,SummaryStatistics> getStatistcs() throws Exception { if(statisticsMap == null) { getAllResources(); statisticsMap = generateStatistics(resourceMap); } return statisticsMap; } }