package org.gcube.phd; 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 Map, SummaryStatistics> getStatistcs() throws Exception { if(statisticsMap==null) { statisticsMap = new HashMap<>(); getAllResources(); for(Class clz : resourceMap.keySet()) { SummaryStatistics summaryStatistics = new SummaryStatistics(); Set> resources = resourceMap.get(clz); for(ResourceInfo resourceInfo : resources) { summaryStatistics.addValue(resourceInfo.getSize()); } } } return statisticsMap; } }