public void Test()
        {
            var obj = new StoredCommand(new DispatchCommand(new TempCommand()));

            using (var session = _store.OpenSession())
            {
                session.Store(obj);
                session.SaveChanges();
            }
            using (var session = _store.OpenSession())
            {
                Assert.NotNull(session.Query <StoredCommand>().FirstOrDefault());
            }
            using (var session = _store.OpenSession())
            {
                var item = session.Load <StoredCommand>(obj.Id);
                session.Delete(item);
            }
        }
        /// <summary>
        /// Return null if failed to restore command.
        /// </summary>
        /// <param name="context"></param>
        /// <param name="backupStoredCmd"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public async static Task<IStoredCommand> RestoreStoredCommandAsync(ZvsContext context, StoredCmdBackup backupStoredCmd, CancellationToken cancellationToken)
        {
            if (backupStoredCmd == null)
                return null;

            switch (backupStoredCmd.CommandType)
            {
                case CommandTypes.Device:
                case CommandTypes.DeviceType:
                    {
                        var storedCommand = new StoredCommand();
                        Command c = null;

                        if (backupStoredCmd.CommandType == CommandTypes.Device)
                        {
                            c = await context.DeviceCommands
                                .FirstOrDefaultAsync(o => o.UniqueIdentifier == backupStoredCmd.UniqueIdentifier &&
                                o.Device.NodeNumber == backupStoredCmd.NodeNumber, cancellationToken);
                        }

                        if (backupStoredCmd.CommandType == CommandTypes.DeviceType)
                        {
                            c = await context.DeviceTypeCommands
                                .FirstOrDefaultAsync(o => o.UniqueIdentifier == backupStoredCmd.UniqueIdentifier &&
                                o.DeviceType.Devices.Any(p => p.NodeNumber == backupStoredCmd.NodeNumber), cancellationToken);

                            var dId = await context.Devices
                                .Where(o => o.NodeNumber == backupStoredCmd.NodeNumber)
                                .Select(o => o.Id)
                                .FirstOrDefaultAsync(cancellationToken);

                            storedCommand.Argument2 = dId.ToString();
                        }

                        if (c == null)
                            return null;

                        storedCommand.Argument = backupStoredCmd.Argument;
                        storedCommand.CommandId = c.Id;
                        return storedCommand;
                    }
                case CommandTypes.Builtin:
                case CommandTypes.JavaScript:
                    {
                        Command c = null;
                        if (backupStoredCmd.CommandType == CommandTypes.Builtin)
                            c = await context.BuiltinCommands.FirstOrDefaultAsync(o => o.UniqueIdentifier == backupStoredCmd.UniqueIdentifier, cancellationToken);

                        if (backupStoredCmd.CommandType == CommandTypes.JavaScript)
                            c = await context.JavaScriptCommands.FirstOrDefaultAsync(o => o.UniqueIdentifier == backupStoredCmd.UniqueIdentifier, cancellationToken);

                        if (c == null)
                            return null;

                        var sc = new StoredCommand {Argument = backupStoredCmd.Argument, CommandId = c.Id};
                        return sc;
                    }
            }

            return null;
        }
Exemplo n.º 3
0
        /// <summary>
        /// Return null if failed to restore command.
        /// </summary>
        /// <param name="context"></param>
        /// <param name="backupStoredCmd"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public async static Task <IStoredCommand> RestoreStoredCommandAsync(ZvsContext context, StoredCmdBackup backupStoredCmd, CancellationToken cancellationToken)
        {
            if (backupStoredCmd == null)
            {
                return(null);
            }

            switch (backupStoredCmd.CommandType)
            {
            case CommandTypes.Device:
            case CommandTypes.DeviceType:
            {
                var     storedCommand = new StoredCommand();
                Command c             = null;

                if (backupStoredCmd.CommandType == CommandTypes.Device)
                {
                    c = await context.DeviceCommands
                        .FirstOrDefaultAsync(o => o.UniqueIdentifier == backupStoredCmd.UniqueIdentifier &&
                                             o.Device.NodeNumber == backupStoredCmd.NodeNumber, cancellationToken);
                }

                if (backupStoredCmd.CommandType == CommandTypes.DeviceType)
                {
                    c = await context.DeviceTypeCommands
                        .FirstOrDefaultAsync(o => o.UniqueIdentifier == backupStoredCmd.UniqueIdentifier &&
                                             o.DeviceType.Devices.Any(p => p.NodeNumber == backupStoredCmd.NodeNumber), cancellationToken);

                    var dId = await context.Devices
                              .Where(o => o.NodeNumber == backupStoredCmd.NodeNumber)
                              .Select(o => o.Id)
                              .FirstOrDefaultAsync(cancellationToken);

                    storedCommand.Argument2 = dId.ToString();
                }

                if (c == null)
                {
                    return(null);
                }

                storedCommand.Argument  = backupStoredCmd.Argument;
                storedCommand.CommandId = c.Id;
                return(storedCommand);
            }

            case CommandTypes.Builtin:
            case CommandTypes.JavaScript:
            {
                Command c = null;
                if (backupStoredCmd.CommandType == CommandTypes.Builtin)
                {
                    c = await context.BuiltinCommands.FirstOrDefaultAsync(o => o.UniqueIdentifier == backupStoredCmd.UniqueIdentifier, cancellationToken);
                }

                if (backupStoredCmd.CommandType == CommandTypes.JavaScript)
                {
                    c = await context.JavaScriptCommands.FirstOrDefaultAsync(o => o.UniqueIdentifier == backupStoredCmd.UniqueIdentifier, cancellationToken);
                }

                if (c == null)
                {
                    return(null);
                }

                var sc = new StoredCommand {
                    Argument = backupStoredCmd.Argument, CommandId = c.Id
                };
                return(sc);
            }
            }

            return(null);
        }