JMadModelPackageService.java

package org.jmad.modelpack.service;

import java.net.URI;

import cern.accsoft.steering.jmad.model.JMadModel;
import cern.accsoft.steering.jmad.modeldefs.domain.JMadModelDefinition;
import org.jmad.modelpack.domain.ModelPackageVariant;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;

/**
 * Copyright (c) 2018 European Organisation for Nuclear Research (CERN), All Rights Reserved.
 */

/**
 * This is the top interface to retrieve jmad model packages and to get available model definitions from them. It is
 * designed using reactive concepts, to acknowledge the fact that packages might be remotely queried and thus are better
 * handled in an asynchronous way.
 * 
 * @author kfuchsbe
 */
public interface JMadModelPackageService {

    Mono<JMadModel> createModelFromUri(URI uri);

    Mono<ModelPackageVariant> packageFromUri(URI uri);

    Flux<ModelPackageVariant> availablePackages();

    Flux<JMadModelDefinition> modelDefinitionsFrom(ModelPackageVariant modelPackage);

    Mono<Void> clearCache();

    Mode mode();

    void setMode(Mode mode);

    enum Mode {
        ONLINE,
        OFFLINE;
    }
}