/**
 * Distributable under LGPL license.
 * See terms of license at gnu.org.
 *
 * Copyright (C)
 * <a href="http://www.inab.org">Spanish National Institute of Bioinformatics (INB)</a>
 * <a href="http://www.bsc.es">Barcelona Supercomputing Center (BSC)</a>
 * <a href="http://inb.bsc.es">Computational Node 6</a>
 */

package org.inb.biomoby.central;

import java.util.List;
import org.inb.biomoby.shared.registry.*;
import org.inb.biomoby.shared.registry.Relationship.DIRECTION_TYPE;
import org.inb.biomoby.shared.registry.Relationship.RELATIONSHIP_TYPE;

/**
 * An interface that defines all standard BioMoby Registry operations.
 * 
 * @author Dmitry Repchevsky
 */

public interface MobyCentralOperations
{
    public ServiceType retrieveService(ServiceType serviceType) throws Exception;
    public Registration registerService(Service service) throws Exception;
    public List<Service> findService(Service service, List<String> keywords, boolean isExpandServices, boolean isExpandObjects) throws Exception;
    
    public List<Namespace> retrieveNamespaces() throws Exception;
    public Registration registerNamespace(Namespace namespace) throws Exception;
    public Registration deregisterNamespace(Namespace namespace) throws Exception;
    
    public List<ServiceType> retrieveServiceTypes() throws Exception;
    public Registration registerServiceType(ServiceType serviceType) throws Exception;
    public Registration deregisterServiceType(ServiceType serviceType) throws Exception;
    
    public List<Service> retrieveServiceNames() throws Exception;
    
    public Registration registerObjectClass(ObjectType objectType) throws Exception;
    public Registration deregisterObjectClass(ObjectType objectType) throws Exception;
    
    public List<Relationship<ServiceType>> relationships(ServiceType serviceType, List<RELATIONSHIP_TYPE> relationships, DIRECTION_TYPE direction, boolean expandRelationship) throws Exception;
    public List<Relationship<ObjectType>> relationships(ObjectType objectType, List<RELATIONSHIP_TYPE> relationships, DIRECTION_TYPE direction, boolean expandRelationship) throws Exception;
    
    public List<ServiceProvider> retrieveServiceProviders() throws Exception;
    public ObjectType retrieveObjectDefinition(ObjectType objectType) throws Exception;
    
    public List<ObjectType> retrieveObjectNames() throws Exception;
    
    public List<Resource> retrieveResourceURLs() throws Exception;
}
