package gr.upatras.ece.nam.fci.core; import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Set; import brokermodel.Broker; import brokermodel.availabilityContract.ResourceServiceContract; import brokermodel.federationscenarios.RequestedFederationScenario; import brokermodel.federationscenarios.ResourceRequest; import brokermodel.providersite.Site; import brokermodel.resources.OfferedResource; import brokermodel.services.OfferedService; import brokermodel.services.ServiceSetting; import brokermodel.users.BrokerUser; import brokermodel.users.ResourcesProvider; public class ResourceContext { private Broker broker; private ArrayList<ResourceProxy> resourceProxies; public ResourceContext(Broker br) { // office = p.loadOffice(authKey.getUsername(), authKey.getPasskey()); this.broker =br; this.resourceProxies = new ArrayList<ResourceProxy>(); } public ArrayList<ResourceProxy> getResourceProxies() { return resourceProxies; } public Set<ServiceType> getAvailableServices() { Set<ServiceType> services = new HashSet<ServiceType>(); for (OfferedService service : broker.getOfferedServices()) { ServiceType stype = new ServiceType(service); services.add(stype); } return services; } /** * It will search all the available contracts to find all ResourceProvider offering the requested OfferedService * @param serviceType The ServiceType object describing the requested service type (e.g echo, rubis_db) * @return a set of ResourceProvider that offer that Service */ public Set<? extends ResourceProvider> getResourceProvidersForServiceType( ServiceType elem) { if (elem == null) return null; Set<ResourceProvider> providers = new HashSet<ResourceProvider>(); for (ResourceServiceContract contr : broker.getResourceServiceContracts()) { if ( contr.getForOfferedService().getName().equals( elem.getName() ) ){ brokermodel.users.ResourcesProvider officeprovider = contr.getForOfferedResource().getBelongsToSite().getBelongsToProvider(); ResourceProvider provider = new ResourceProvider(officeprovider); providers.add(provider); } } return providers; } /** * It will search all the available contracts to find an offeredResource by the ResourceProvider implementing the requested OfferedService * @param offeredService The OfferedService object describing the requested service type (e.g rubis_db) * @param provider The Resource Provider of this office that we request and can provide the resource * @return an OfferedResource object or null if not found */ public OfferedResource getOfferedResourceByProvider( OfferedService offeredService, ResourceProvider provider) { for (ResourceServiceContract contr : broker.getResourceServiceContracts()) { if ( (contr.getForOfferedService().equals( offeredService )) && ( provider.hasSite(contr.getForOfferedResource().getBelongsToSite())) ){ return contr.getForOfferedResource(); } } return null; } /** * It will search all the available sites of a provider to find an offeredResource matching the exact name * @param resourceName * @param provider The Resource Provider of this broker that we request and can provide the resource * @return an OfferedResource object or null if not found */ public OfferedResource getOfferedResourceByProvider(String resourceName, ResourceProvider provider) { for( Site site : provider.getResourcesProvider().getOfferedSiteList() ){ for (OfferedResource ofres : site.getOfferedResourcesList()) { if (ofres.getName().equals(resourceName)) return ofres; } } return null; } public void setBroker(Broker office) { this.broker = office; } public Broker getBrokerModel(){ return this.broker; } public ServiceType getServiceType(String val) { for (OfferedService service : broker.getOfferedServices()) { if (val.equalsIgnoreCase(service.getName())) return new ServiceType(service); } return null; } public ResourceProvider getResourceProviderByResourceRequest(ResourceRequest resReq) { ResourcesProvider provider = resReq.getRefOfferedResource().getBelongsToSite().getBelongsToProvider() ; for (BrokerUser user : broker.getRegisteredUsers() ) { if ( user instanceof ResourcesProvider ){ ResourcesProvider partner = (ResourcesProvider)user; if (provider.getName().equals(partner.getName())) return new ResourceProvider(partner) ; } } return null; } /** * It will return a provider according to his Site alias name * @param val The alias name * @return the ResourceProvider that has that alias URI or null */ public ResourceProvider getResourceProviderBySiteURI(String val) { for (BrokerUser user : broker.getRegisteredUsers() ) { if ( user instanceof ResourcesProvider ){ ResourcesProvider partner = (ResourcesProvider)user; for (Site site : partner.getOfferedSiteList()) { if ( val.toLowerCase().equals(site.getDomainManager().getName()) || val.toLowerCase().equals(site.getName()) ) return new ResourceProvider(partner) ; } } } return null; } /** * It will return a provider according to his alias * @param val The alias name * @return the ResourceProvider that has that alias URI or null */ public ResourceProvider getResourceProviderByName(String val) { for (BrokerUser user : broker.getRegisteredUsers() ) { if ( user instanceof ResourcesProvider ){ ResourcesProvider partner = (ResourcesProvider)user; if( partner.getName().equals(val) ) return new ResourceProvider(partner) ; } } return null; } /** * It will search all the available contracts to find all ResourceProvider offering the requested OfferedService and return the first one * @param serviceType The ServiceType object describing the requested service type (e.g echo, rubis_db) * @return the first available ResourceProvider that offer that Service */ public ResourceProvider getFirstResourceProviderOfService( ServiceType serviceType) { for (ResourceServiceContract contr : broker.getResourceServiceContracts()) { if ( contr.getForOfferedService().getName().equals( serviceType.getName() ) ){ brokermodel.users.ResourcesProvider officeprovider = contr.getForOfferedResource().getBelongsToSite().getBelongsToProvider(); ResourceProvider provider = new ResourceProvider(officeprovider); return provider; } } return null; } /** * Creates a resource on a certain resource Provider of the Office of this context * @param scenario The name of scenario where the Resource is involved * @param resourceNameAlias The alias name that the user wants of the resource (e.g myResource) * @param provider The Resource Provider of this office that we request and can provide the resource * @param ServiceType The ServiceType object describing the requested service type (e.g rubis_db) * @param params a list with params to be created */ public ResourceProxy createResourceProxy(String scenario, String resourceNameAlias, ResourceProvider provider, ServiceType service, List<ParameterValuePair> params) { ResourceProxy rp = FCI.getInstance().CreateResource(scenario, resourceNameAlias, this, provider, service, params); resourceProxies.add(rp); return rp; } /** * Creates a resource on a certain resource Provider of the Office of this context * @param scenario The name of scenario where the Resource is involved * @param resourceName The alias name that the user wants of the resource (e.g myResource) * @param provider The Resource Provider of this office that we request and can provide the resource * @param ServiceType The ServiceType object describing the requested service type (e.g rubis_db) * @param params a list with params to be created */ public ResourceProxy createResourceProxy(String scenario, String resourceName, String resourceNameAlias, ResourceProvider provider, ServiceType service, List<ParameterValuePair> params) { ResourceProxy rp = FCI.getInstance().CreateResource( scenario, resourceName, resourceNameAlias, this, provider, service, params); resourceProxies.add(rp); return rp; } /** * Creates a resource on a certain resource Provider of the Office of this context * @param scenario The name of scenario where the Resource is involved * @param resourceReq The resourceReq objects (e.g myResource) * @return a new ResourceProxy object for accessing this resource */ public ResourceProxy createResourceProxyByResourceRequest( String scenario, ResourceRequest resourceReq ) { ResourceProxy rp = FCI.getInstance().CreateResource(scenario, resourceReq, this); resourceProxies.add(rp); return rp; } /** * Returns a resourceProxy of a given Resource on a certain resource Provider of the Office of this context * @param scenario The name of scenario where the Resource is involved * @param resourceGUID The alias name that the user wants to retrieve resource proxy (e.g rubis_db-18) * @param provider The Resource Provider of this office that we request and can provide the resource * @param service The ServiceType object describing the requested service type (e.g rubis_db) * @return a new ResourceProxy object for accessing this resource */ public ResourceProxy createResourceProxyFromResourceGUID(String scenario, String resourceGUID, ResourceProvider provider, ServiceType service) { ResourceProxy rp = FCI.getInstance().getResourceProxyFromResourceGUID(scenario, resourceGUID, this, provider, service); resourceProxies.add(rp); return rp; } public ResourceProxy getResourceProxy(String resourceGUID){ for (ResourceProxy rp : resourceProxies) { if (rp.getGUID()!=null) if (rp.getGUID().equals(resourceGUID)) return rp; } return null; } public List<String> getAvailableParamsForServiceType(ServiceType serviceType) { List<String> params = new ArrayList<String>(); for (ServiceSetting setting : serviceType.getOfferedService().getServiceSettings() ) { params.add(setting.getName()); } return params; } public void LoadFederationScenario(RequestedFederationScenario fedScenario) { FCI.getInstance().LoadFederationScenario(fedScenario, broker); } }