//using FabAccessAPI.Schema; //using System; //using System.Collections.Generic; //using System.Threading.Tasks; //namespace FabAccessAPI //{ // public class MachineException : Exception { } // /// // /// Wraps a capability for accessing the Machines subsystem of BFFH // /// // public class Machines { // private readonly IMachines _machinesCap; // /// // /// Constructs the Wrapper Class from a given capability. // /// // /// The capability that should be wrapped. // public Machines(IMachines machinesCap) { // _machinesCap = machinesCap; // } // /// // /// List of all machines that BFFH knows about the user has been granted at least read access on // /// // /// ReadOnlyList of available Machines // public async Task?> ListMachines() // { // IReadOnlyList? machineList = await _machinesCap.ListMachines().ConfigureAwait(false); // List machineList_new = new List(); // foreach(Schema.Machine machine in machineList) // { // machineList_new.Add(new Machine(machine)); // } // return machineList_new; // } // /// // /// Access a particular machine by known name. This may fail for two reasons: // /// The user has not been granted access to know the machine exists or the machine does in fact not exist. // /// In both cases the `machine` result will be a NULL-pointer // /// // /// Name of the Machine // /// The Machine we requested // public async Task GetMachine(string name) { // var mach = (await _machinesCap.GetMachine(name).ConfigureAwait(false)).Item1; // if (mach == null) { // //TODO: Throw a more specific exception! // throw new MachineException(); // } // return new Machine(mach); // } // } // /// // /// A machine. This represents a machine as BFFH thinks about it which may mean // ///several machines or just part of a machine in the real world. // ///By itself this struct is completely useless since it contains only the information // ///that the machine exists the user is allowed to know about that fact. For all further // ///information the user has to call the contained capabilities which depending on the // ///access level may not be set. For example an admin will have every capability here // ///set but a simple user may only have `read` and `write` set while some users may not // /// even have `read` set and are unable to even see if the machine is currently in use. // /// // public class Machine { // private readonly Schema.Machine _machine; // /// // /// Constructs the Wrapper Class from a given capability // /// // /// The capability that should be wrapped. // public Machine(Schema.Machine machine) { // _machine = machine; // } // // read operations // /// // /// Get the MInfo Struct for the Machine. // /// This contains everything BFFH knows about the Machine. // /// // /// // /// The MInfo Struct describing the Machine // public async Task GetMInfo() { // var readCap = _machine.Read; // if (readCap == null) { // throw new UnauthorizedException(); // } // return (await _machine.Read.Info().ConfigureAwait(false)).Item1; // } // //write operations // /// // /// Try to use a machine. Throws a UnauthorizedException if the user does not have the required // /// permissions to use this machine. // /// // /// Use the Ret() Method of the returned Object to return the machine // /// // /// // /// Capability to give back the machine // public Task Use() { // var writeCap = _machine.Write; // if (writeCap == null) { // throw new UnauthorizedException(); // } // return writeCap.Use(); // } // /// // /// Try to get a GiveBack capability for a machine. // /// // /// Capability to give back the machine or null // /// // public Task GetGiveBack() // { // var writeCap = _machine.Write; // if (writeCap == null) // { // throw new UnauthorizedException(); // } // return writeCap.GetGiveBack(); // } // /// // /// Try to reserve a machine. Throws a UnauthorizedException if the user does not have the required // /// permissions to use this machine. // /// // /// Use the Ret() Method of the returned Object to return the machine // /// Use the Use() Nethod of the Machine to use your reserved machine. // /// // /// // /// Capability to give back the machine // public Task Reserve() // { // var writeCap = _machine.Write; // if (writeCap == null) // { // throw new UnauthorizedException(); // } // return writeCap.Reserve(); // } // // public void GiveBack(Schema.Machine.WriteInterface.IGiveBack cap) { // // cap.Ret(); // // } // //manage operations // /// // /// After a machine has been used by an user with low enough permissions it's // /// in the 'toCheck' state. This call then allows more priviledged users to // /// "check" the machine and move it to the `free` state. // /// // /// Calling this method signifies that the machine was checked and in an acceptable state. // /// // public async void MarkOk() { // var manageCap = _machine.Manage; // if (manageCap == null) { // throw new UnauthorizedException(); // } // // TODO: Do we really want to check this here? // if ((await GetMInfo().ConfigureAwait(false)).State == State.toCheck) { // await _machine.Manage.Ok().ConfigureAwait(false); // } // } // /// // /// After a machine has been used by an user with low enough permissions it's // /// in the 'toCheck' state. This call then allows more priviledged users to // /// "check" the machine and move it to the `free` state. // /// // /// Calling this method signifies that the machine was checked and in an unacceptable state. // /// It will most likely be marked as `blocked` and the previous user will somehow be informed. // /// // public async void MarkNotOk() { // var manageCap = _machine.Manage; // if (manageCap == null) { // throw new UnauthorizedException(); // } // // TODO: Do we really want to check this here? // if ((await GetMInfo().ConfigureAwait(false)).State == State.toCheck) { // await _machine.Manage.NotOk().ConfigureAwait(false); // } // } // //administrative operations // /// // /// Forcefully set a machine state. // /// // /// The desired machine state. // public async void ForceSetState(State state) { // var adminCap = _machine.Admin; // if (adminCap == null) { // throw new UnauthorizedException(); // } // await adminCap.ForceSetState(state).ConfigureAwait(false); // } // /// // /// Set the given user as current responsible // /// // /// The user // public async void ForceSetUser(String user) { // var adminCap = _machine.Admin; // if (adminCap == null) { // throw new UnauthorizedException(); // } // await adminCap.ForceSetUser(user).ConfigureAwait(false); // } // } //}