Exemple #1
0
        public new object Read(NodeEntry node, BinaryReader reader, List <INodeParser> parsers)
        {
            //var result = base.ReadWithMapping(node, reader, parsers);
            var result = base.ReadWithMapping(node, reader, parsers);

            return(result);
        }
        public DocumentChangeFileMarkValidator(IAlfrescoHttpClient alfrescoHttpClient, IIdentityUser identityUser, INodesService nodesService)
        {
            RuleFor(o => o)
            .Cascade(CascadeMode.StopOnFirstFailure)
            .MustAsync(async(context, cancellationToken) =>
            {
                _nodeEntry = await alfrescoHttpClient.GetNodeInfo(context.NodeId, ImmutableList <Parameter> .Empty
                                                                  .Add(new Parameter(AlfrescoNames.Headers.Include, AlfrescoNames.Includes.Path, ParameterType.QueryString)));
                _groupPaging = await alfrescoHttpClient.GetPersonGroups(identityUser.Id);


                return(_nodeEntry?.Entry?.Id != null && _groupPaging != null);
            })
            .WithName(x => nameof(x.NodeId))
            .WithMessage("Something went wrong with alfresco server.")
            .DependentRules(() =>
            {
                RuleFor(x => x)
                .Must(y => _groupPaging?.List?.Entries?.Any(q => q.Entry.Id == identityUser.RequestGroup) ?? false)
                .WithName(x => "Group")
                .WithMessage($"User isn't member of group {identityUser.RequestGroup}.");

                RuleFor(x => x.NodeId)
                .Must(x => _nodeEntry?.Entry?.NodeType == SpisumNames.NodeTypes.Document)
                .WithMessage($"NodeId must be type of {SpisumNames.NodeTypes.Document}.");
            });
        }
        public DocumentForSignatureValidator(
            IAlfrescoHttpClient alfrescoHttpClient,
            IIdentityUser identityUser,
            IAlfrescoConfiguration alfrescoConfiguration,
            ISimpleMemoryCache simpleMemoryCache,
            ISystemLoginService systemLoginService)
        {
            var adminHttpClient = new AlfrescoHttpClient(alfrescoConfiguration, new AdminAuthentification(simpleMemoryCache, alfrescoConfiguration, systemLoginService));

            RuleFor(o => o)
            .Cascade(CascadeMode.StopOnFirstFailure)
            .MustAsync(async(context, cancellationToken) =>
            {
                _nodeEntry = await alfrescoHttpClient.GetNodeInfo(context.NodeId, ImmutableList <Parameter> .Empty
                                                                  .Add(new Parameter(AlfrescoNames.Headers.Include, $"{AlfrescoNames.Includes.Path}", ParameterType.QueryString)));
                _groupPagingCurrentUser = await alfrescoHttpClient.GetPersonGroups(identityUser.Id);
                _groupPagingNextOwner   = await adminHttpClient.GetPersonGroups(context.Body.User);

                return(_nodeEntry?.Entry?.Id != null && _groupPagingCurrentUser != null && _groupPagingNextOwner != null);
            })
            .WithName(x => nameof(x.NodeId))
            .WithMessage("Something went wrong with alfresco server.")
            .DependentRules(() =>
            {
                RuleFor(x => x)
                .Must(y => _groupPagingCurrentUser?.List?.Entries?.Any(q => q.Entry.Id == identityUser.RequestGroup) ?? false)
                .WithName(x => "Group")
                .WithMessage($"User isn't member of group {identityUser.RequestGroup}.");

                RuleFor(x => x)
                .Must(y => _groupPagingNextOwner?.List?.Entries?.Any(q => q.Entry.Id == $"{y.Body.Group}_Sign") ?? false)
                .WithName(x => "Group")
                .WithMessage("User for signing isn't member of group with postfix _Sign.");

                RuleFor(x => x.NodeId)
                .Must(x => _nodeEntry?.Entry?.NodeType == SpisumNames.NodeTypes.Document)
                .WithMessage($"NodeId must be type of {SpisumNames.NodeTypes.Document}.");

                RuleFor(x => x)
                .Must(x => _nodeEntry?.Entry?.Path?.Name?.StartsWith(AlfrescoNames.Prefixes.Path + SpisumNames.Paths.Evidence, StringComparison.OrdinalIgnoreCase) == true)
                .OnAnyFailure(x => throw new BadRequestException("Document must be in evidence site."));

                RuleFor(x => x.NodeId)
                .Must(x => _nodeEntry.Entry.Path.Name.Equals(AlfrescoNames.Prefixes.Path + SpisumNames.Paths.EvidenceDocumentsForProcessing(identityUser.RequestGroup)) ||
                      _nodeEntry.Entry.Path.Name.Equals(AlfrescoNames.Prefixes.Path + SpisumNames.Paths.EvidenceFilesDocumentsForProcessing(identityUser.RequestGroup)))
                .WithMessage($"NodeId must be in path {SpisumNames.Paths.EvidenceDocumentsForProcessing(identityUser.RequestGroup)} or {SpisumNames.Paths.EvidenceFilesDocumentsForProcessing(identityUser.RequestGroup)}.");
            });

            RuleFor(x => x)
            .Must(x => !string.IsNullOrEmpty(x?.Body?.User))
            .When(x => x?.Body != null)
            .WithName(x => nameof(x.Body.User))
            .WithMessage("You have to fill user.");

            RuleFor(x => x)
            .Must(x => !string.IsNullOrEmpty(x?.Body?.Group))
            .When(x => x?.Body != null)
            .WithName(x => nameof(x.Body.Group))
            .WithMessage("You have to fill group.");
        }
        public ConceptComponentUpdateContentValidator(IAlfrescoHttpClient alfrescoHttpClient, IIdentityUser identityUser)
        {
            RuleFor(o => o)
            .Cascade(CascadeMode.StopOnFirstFailure)
            .MustAsync(async(context, cancellationToken) =>
            {
                _nodeEntry = await alfrescoHttpClient.GetNodeInfo(context.NodeId, ImmutableList <Parameter> .Empty
                                                                  .Add(new Parameter(AlfrescoNames.Headers.Include, AlfrescoNames.Includes.Path, ParameterType.QueryString)));
                _groupPaging = await alfrescoHttpClient.GetPersonGroups(identityUser.Id);
                _nodeParents = await alfrescoHttpClient.GetNodeParents(context.ComponentId, ImmutableList <Parameter> .Empty
                                                                       .Add(new Parameter(AlfrescoNames.Headers.Include, AlfrescoNames.Includes.Properties, ParameterType.QueryString))
                                                                       .Add(new Parameter(AlfrescoNames.Headers.Where,
                                                                                          $"(assocType='{SpisumNames.Associations.Components}')"
                                                                                          , ParameterType.QueryString)));

                return(_nodeEntry?.Entry?.Id != null && _groupPaging != null);
            })
            .WithName(x => nameof(x.NodeId))
            .WithMessage("Something went wrong with alfresco server.")
            .DependentRules(() =>
            {
                RuleFor(x => x)
                .Must(y => _groupPaging?.List?.Entries?.Any(q => q.Entry.Id == identityUser.RequestGroup) ?? false)
                .WithName(x => "Group")
                .WithMessage($"User isn't member of group {identityUser.RequestGroup}.");

                RuleFor(x => x.NodeId)
                .Must(x => _nodeEntry?.Entry?.NodeType == SpisumNames.NodeTypes.Concept)
                .WithMessage($"NodeId must be type of {SpisumNames.NodeTypes.Concept}.");

                RuleFor(x => x)
                .Must(c => _nodeParents?.List?.Entries?.Any(y => y?.Entry?.Id == c.NodeId) ?? false)
                .WithMessage("Provided component is not associated with nodeId or cannot be canceled.");
            });
        }
        public void Write(NodeWriter writer, NodeEntry node)
        {
            var data = (JournalManager)node.Value;

            writer.Write(data.Entries.Count);
            foreach (var entry in data.Entries)
            {
                writer.Write(entry.Unk1_PathHash);
                writer.Write(entry.Unk2_State);
                writer.Write(entry.Unknown3);
                writer.Write(entry.Unknown4);
            }
            writer.Write(data.Unk1_TrackedQuestPath);

            writer.Write(data.Unknown2.Count);
            foreach (var entry in data.Unknown2)
            {
                writer.Write(entry);
            }

            writer.Write(data.Unknown3.Count);
            foreach (var entry in data.Unknown3)
            {
                writer.Write(entry.Unknown1);
                writer.Write(entry.Unknown2);
                writer.Write(entry.Unknown3);
                writer.Write(entry.Unknown4);
            }

            writer.Write(data.TrailingBytes);
        }
        public object Read(NodeEntry node, BinaryReader reader, List <INodeParser> parsers)
        {
            var result = new QuestMusicHistory();

            reader.Skip(4);
            var count = reader.ReadUInt32();

            for (int i = 0; i < count; i++)
            {
                var entry = new QuestMusicHistory.Entry();

                entry.Unknown1 = reader.ReadTweakDbId();
                entry.Unknown2 = reader.ReadUInt64();
                entry.Unknown3 = reader.ReadUInt64();
                entry.Unknown4 = reader.ReadUInt16();
                entry.Unknown5 = reader.ReadUInt16();
                entry.Unknown6 = reader.ReadUInt32();

                result.Entries.Add(entry);
            }

            result.Node = node;

            return(result);
        }
        private static void WriteXmlNode(XmlWriter writer, List <NodeEntry> nodes, NodeEntry node)
        {
            writer.WriteStartElement(node.Name.ToString());

            foreach (var attribute in node.Attributes)
            {
                writer.WriteStartAttribute(attribute.Name.ToString());
                writer.WriteValue(attribute.Value == null ? "" : attribute.Value.ToString());
                writer.WriteEndAttribute();
            }

            foreach (var childId in node.Children)
            {
                var child = nodes.SingleOrDefault(n => n.Id == childId);
                if (child == null)
                {
                    throw new KeyNotFoundException();
                }

                WriteXmlNode(writer, nodes, child);
            }

            if (node.Value != null)
            {
                if (node.Value.Type != DataType.String)
                {
                    writer.WriteAttributeString("__type", DataTypeToString(node.Value.Type));
                }

                writer.WriteValue(node.Value.ToString());
            }
            writer.WriteEndElement();
        }
Exemple #8
0
//HELPERS
    protected override NetworkInterface getRoute(Node destination)
    {
        IntervalHeap <NodeEntry>         sortedNodes = new IntervalHeap <NodeEntry>();
        HashDictionary <Node, NodeEntry> hashedNodes = new HashDictionary <Node, NodeEntry>();
        NodeEntry thisNode = new NodeEntry();

        thisNode.Node = node;
        thisNode.Time = Timer.CurrentTime;
        bool      added = sortedNodes.Add(ref thisNode.Handle, thisNode);
        NodeEntry temp;
        bool      found = sortedNodes.Find(thisNode.Handle, out temp);

        Debug.Assert(found);
        Debug.Assert(added);
        hashedNodes.Add(node, thisNode);
        double currentTime = -1;

        while (sortedNodes.Count > 0)
        {
            NodeEntry current = sortedNodes.DeleteMin();
            Debug.Assert(current.Time >= currentTime);
            currentTime = current.Time;
            if (current.Node == destination)
            {
                return(extractInterface(current, hashedNodes));
            }
            nextMove(current, sortedNodes, hashedNodes);
            Debug.Assert(sortedNodes.Check());
        }

        //route not found
        return(null);
    }
    private static void PopulateCheckGlobalVariableEntry(NodeEntry nodeEntry, Node node, Dictionary <Node, int> nodeMap)
    {
        ValidateCheckGlobalVariable(node);

        // assign node entry data if validated
        nodeEntry.nodeType = NodeType.CheckGlobalVariable;
        nodeEntry.NID      = nodeMap[node];

        // assign connected outpoints
        if (node.splitter.positiveOutpoint.connections.Count > 0)
        {
            nodeEntry.outPointPosNID = nodeMap[(Node)node.splitter.positiveOutpoint.connections[0].inPoint.parent];
        }
        if (node.splitter.negativeOutpoint.connections.Count > 0)
        {
            nodeEntry.outPointNegNID = nodeMap[(Node)node.splitter.negativeOutpoint.connections[0].inPoint.parent];
        }

        nodeEntry.flag = TrimGlobalItem(node.globalItemDropdown.selectedItem);
        if (string.IsNullOrEmpty(node.globalVariableField.text))
        {
            nodeEntry.variableValue = "0";
        }
        else
        {
            nodeEntry.variableValue = node.globalVariableField.text;
        }
    }
        private static void WriteXmlNode(XmlWriter writer, NodeEntry node)
        {
            writer.WriteStartElement(node.Name);

            foreach (var attribute in node.Attributes)
            {
                writer.WriteStartAttribute(attribute.Name);
                writer.WriteValue(attribute.Value == null
                                      ? ""
                                      : attribute.Value.ToString());
                writer.WriteEndAttribute();
            }

            foreach (var child in node.Children)
            {
                WriteXmlNode(writer, child);
            }

            if (node.Value != null)
            {
                writer.WriteValue(node.Value.ToString());
            }

            writer.WriteEndElement();
        }
        public DocumentReturnForReworkValidator(IAlfrescoHttpClient alfrescoHttpClient, IIdentityUser identityUser)
        {
            RuleFor(o => o)
            .Cascade(CascadeMode.StopOnFirstFailure)
            .MustAsync(async(context, cancellationToken) =>
            {
                _groupPaging = await alfrescoHttpClient.GetPersonGroups(identityUser.Id);
                _nodeEntry   = await alfrescoHttpClient.GetNodeInfo(context.NodeId, ImmutableList <Parameter> .Empty
                                                                    .Add(new Parameter(AlfrescoNames.Headers.Include, $"{AlfrescoNames.Includes.Path}", ParameterType.QueryString)));

                return(_groupPaging != null && _nodeEntry?.Entry?.Id != null);
            })
            .WithName(x => nameof(x.NodeId))
            .WithMessage("Something went wrong with alfresco server.")
            .DependentRules(() =>
            {
                RuleFor(x => x)
                .Must(y => _groupPaging?.List?.Entries?.Any(q => q.Entry.Id == identityUser.RequestGroup) ??
                      false)
                .WithName(x => "Group")
                .WithMessage($"User isn't member of group {identityUser.RequestGroup}.");

                RuleFor(x => x.NodeId)
                .Must(x => _nodeEntry.Entry.Path.Name.Equals(AlfrescoNames.Prefixes.Path + SpisumNames.Paths.EvidenceDocumentsForProcessingForSignature(identityUser.RequestGroup)) ||
                      _nodeEntry.Entry.Path.Name.Equals(AlfrescoNames.Prefixes.Path + SpisumNames.Paths.EvidenceFilesDocumentsForProcessingForSignature(identityUser.RequestGroup)))
                .WithMessage($"NodeId must be in path {SpisumNames.Paths.EvidenceDocumentsForProcessing(identityUser.RequestGroup)} or {SpisumNames.Paths.EvidenceFilesDocumentsForProcessing(identityUser.RequestGroup)}.");
            });

            RuleFor(x => x.Body.Reason)
            .MinimumLength(4)
            .MaximumLength(30)
            .When(x => x.Body != null)
            .WithMessage("Reason must be at least 4 characters long but maximum 30 characters long");
        }
        public object Read(NodeEntry node, BinaryReader reader, List <INodeParser> parsers)
        {
            var result = new EventManager();

            reader.Skip(4); // Skip Id
            var entryCount = reader.ReadUInt32();

            for (int i = 0; i < entryCount; i++)
            {
                var entry = new EventManager.Entry();

                entry.Unknown1 = reader.ReadUInt64();
                entry.Unknown2 = reader.ReadUInt32();
                entry.Unknown3 = reader.ReadUInt16();
                entry.Unknown4 = reader.ReadUInt16();

                result.Unknown.Add(entry);
            }

            int readSize = node.Size - ((int)reader.BaseStream.Position - node.Offset);

            result.Node = node;

            return(result);
        }
Exemple #13
0
 public void Write(NodeWriter writer, NodeEntry node)
 {
     foreach (var child in node.Children)
     {
         writer.Write(child);
     }
 }
        public void Write(NodeWriter writer, NodeEntry node)
        {
            var data = (PlayerSystem)node.Value;

            writer.Write(data.Unk_Hash);
            writer.Write(data.Unk_Id);
        }
Exemple #15
0
        public static Inventory.SubInventory ReadSubInventory(NodeEntry inventoryNode, uint nodeOffset, BinaryReader reader, List <INodeParser> parsers)
        {
            var subInventory = new Inventory.SubInventory();

            subInventory.InventoryId = reader.ReadUInt64();
            var count = reader.ReadUInt32();

            var parser = parsers.FirstOrDefault(p => p.ParsableNodeName == Constants.NodeNames.ITEM_DATA);

            Debug.Assert(parser != null);

            for (var i = 0; i < count; ++i)
            {
                var nextItemHeader = ItemDataParser.ReadNextItemEntry(reader);
                var item           = (ItemData)parser.Read(inventoryNode.Children[(int)nodeOffset + i], reader, parsers);

                if (!nextItemHeader.BelongsToItemData(item))
                {
                    throw new InvalidDataException($"Expected next item to be '{nextItemHeader}' but found '{item}'");
                }

                subInventory.Items.Add(item);

                inventoryNode.Children[(int)nodeOffset + i].Value = item;
                item.Node = inventoryNode.Children[(int)nodeOffset + i];
            }

            return(subInventory);
        }
Exemple #16
0
        public void Write(NodeWriter writer, NodeEntry node)
        {
            var data = (ItemData)node.Value;

            writer.Write(data.ItemTdbId);
            WriteHeaderThing(writer, data.Header);

            writer.Write(data.Flags.Raw);
            writer.Write(data.CreationTime);

            switch (data.Header.Kind)
            {
            case 0:
                WriteModableItemWithQuantityData(writer, data.Data as ItemData.ModableItemWithQuantityData);
                break;

            case 1:
                WriteSimpleItemData(writer, data.Data as ItemData.SimpleItemData);
                break;

            case 2:
                WriteModableItemData(writer, data.Data as ItemData.ModableItemData);
                break;
            }
        }
        public async Task LogHandoverDecline(string nodeId, NodeEntry nodeEntry)
        {
            try
            {
                var pid = nodeEntry?.GetPid();

                if (nodeEntry?.Entry?.NodeType == SpisumNames.NodeTypes.Concept)
                {
                    await _auditLogService.Record(nodeId, SpisumNames.NodeTypes.Concept, pid, NodeTypeCodes.Dokument, EventCodes.VraceniZAgendy,
                                                  TransactinoHistoryMessages.ConceptHandoverDecline);

                    return;
                }
                if (nodeEntry?.Entry?.NodeType == SpisumNames.NodeTypes.Document)
                {
                    await _auditLogService.Record(nodeId, SpisumNames.NodeTypes.Document, pid, NodeTypeCodes.Dokument, EventCodes.VraceniZAgendy,
                                                  TransactinoHistoryMessages.DocumentHandoverDecline);

                    return;
                }
                if (nodeEntry?.Entry?.NodeType == SpisumNames.NodeTypes.File)
                {
                    await _auditLogService.Record(nodeId, SpisumNames.NodeTypes.File, pid, NodeTypeCodes.Spis, EventCodes.VraceniZAgendy,
                                                  TransactinoHistoryMessages.FileHandoverDecline);
                }
            }
            catch (Exception ex)
            {
                Log.Logger?.Error(ex, "Audit log failed");
            }
        }
Exemple #18
0
        public byte[] Write(NodeEntry node, List <INodeParser> parsers)
        {
            byte[] result;
            var    data = (ItemDropStorageManager)node.Value;

            using (var stream = new MemoryStream())
            {
                using (var writer = new BinaryWriter(stream, Encoding.ASCII))
                {
                    writer.Write(node.Id);
                    writer.Write(data.NumberOfItemDropStorages);

                    var parser = parsers.Where(p => p.ParsableNodeName == Constants.NodeNames.ITEM_DROP_STORAGE).FirstOrDefault();
                    Debug.Assert(parser != null);

                    for (var i = 0; i < data.NumberOfItemDropStorages; ++i)
                    {
                        writer.Write(parser.Write(node.Children[i], parsers));
                    }

                    writer.Write(data.TrailingBytes);
                }
                result = stream.ToArray();
            }
            return(result);
        }
        public static bool IsUserOwner(this NodeEntry nodeEntry, string currentUser)
        {
            var properties   = nodeEntry.Entry.Properties.As <JObject>().ToDictionary();
            var contentOwner = properties.GetNestedValueOrDefault(AlfrescoNames.ContentModel.Owner, "id")?.ToString();

            return(contentOwner == currentUser || nodeEntry.Entry.CreatedByUser.Id == currentUser);
        }
Exemple #20
0
 private async Task CreateAllSecondaryChildren(NodeEntry emlFile, List <NodeEntry> attachments)
 {
     foreach (var attachment in attachments)
     {
         await CreateSecondaryChildren(emlFile, attachment);
     }
 }
        public void Write(NodeWriter writer, NodeEntry node)
        {
            var data = (DSDynamicConnections)node.Value;

            writer.WritePackedInt(data.Entries.Count);
            foreach (var entry in data.Entries)
            {
                writer.Write(entry.Unknown1);
            }

            foreach (var entry in data.Entries)
            {
                writer.WritePackedString(entry.Unknown2);

                writer.WritePackedInt(entry.Unknown3.Count);
                foreach (var val in entry.Unknown3)
                {
                    writer.Write(val);
                }

                writer.WritePackedInt(entry.Unknown4.Count);
                foreach (var val in entry.Unknown4)
                {
                    writer.Write(val);
                }

                writer.Write(entry.Unknown5);
                writer.WritePackedString(entry.Unknown6);
            }
        }
    private static void PopulateDecisionEntry(NodeEntry nodeEntry, Node node, Dictionary <Node, int> nodeMap)
    {
        ValidateDecision(node);

        // assign node entry data if validated
        nodeEntry.nodeType = NodeType.Decision;
        nodeEntry.NID      = nodeMap[node];

        nodeEntry.decisions = new List <DecisionEntry>();

        DecisionEntry tempDecisionEntry = new DecisionEntry();
        SDEContainer  tempChild         = node.childContainer;

        if (tempChild != null)
        {
            nodeEntry.decisions.Add(tempDecisionEntry);

            while (tempChild != null)
            {
                // validate each DecisionBox
                ValidateDecisionBox((DecisionBox)tempChild);

                // assign child entry data if validated
                tempDecisionEntry.text        = ((DecisionBox)tempChild).textArea.text;
                tempDecisionEntry.outPointNID = nodeMap[(Node)tempChild.outPoint.connections[0].inPoint.parent];

                tempChild = tempChild.child;
                if (tempChild != null)
                {
                    tempDecisionEntry = new DecisionEntry();
                    nodeEntry.decisions.Add(tempDecisionEntry);
                }
            }
        }
    }
        public SignerCreateValidator(IAlfrescoHttpClient alfrescoHttpClient)
        {
            RuleFor(o => o)
            .Cascade(CascadeMode.StopOnFirstFailure)
            .MustAsync(async(context, cancellationToken) =>
            {
                _nodeEntry = await alfrescoHttpClient.GetNodeInfo(context.DocumentId);

                return(_nodeEntry?.Entry?.Id != null);
            })
            .WithName(x => nameof(x.DocumentId))
            .WithMessage("Something went wrong with alfresco server.")
            .DependentRules(() =>
            {
                RuleFor(x => x.DocumentId)
                .Must(x => _nodeEntry?.Entry?.NodeType == SpisumNames.NodeTypes.Document)
                .OnAnyFailure(x => throw new BadRequestException($"NodeId {x.DocumentId} must be type of {SpisumNames.NodeTypes.Document}"));
            });

            RuleFor(x => x)
            .Must(x => x.ComponentId != null && x.ComponentId.All(x => !string.IsNullOrEmpty(x)))
            .When(x => x != null)
            .OnAnyFailure(x => throw new BadRequestException("Component id's can't be null."));

            RuleFor(x => x)
            .Must(x => !string.IsNullOrEmpty(x.DocumentId))
            .When(x => x != null)
            .OnAnyFailure(x => throw new BadRequestException("Document id can't be null."));
        }
Exemple #24
0
        public object Read(NodeEntry node, BinaryReader reader, List <INodeParser> parsers)
        {
            node.Parser = this;
            reader.Skip(4);

            var result = new FactsDB();
            var count  = reader.ReadByte();

            // There should be count many children
            if (count != node.Children.Count)
            {
                throw new InvalidDataException($"Expected {count} FactsTable but found {node.Children.Count}.");
            }

            var parser = parsers.Where(p => p.ParsableNodeName == Constants.NodeNames.FACTS_TABLE).FirstOrDefault();

            Debug.Assert(parser != null);

            foreach (var child in node.Children)
            {
                child.Value = (FactsTable)parser.Read(child, reader, parsers);
                result.FactsTables.Add((FactsTable)child.Value);
            }

            // There is a blob between the last factstable and the next node in questsystem
            result.TrailingBytes = reader.ReadBytes(node.TrailingSize);

            result.Node = node;

            return(result);
        }
Exemple #25
0
        public object Read(NodeEntry node, BinaryReader reader, List <INodeParser> parsers)
        {
            node.Parser = this;
            var result = new FactsTable();

            reader.Skip(4); //skip Id

            var count = reader.ReadPackedInt();

            var tmpFactList = new uint[count];

            for (int i = 0; i < count; i++)
            {
                tmpFactList[i] = reader.ReadUInt32();
            }

            for (int i = 0; i < count; i++)
            {
                result.FactEntries.Add(new FactsTable.FactEntry
                {
                    Hash  = tmpFactList[i],
                    Value = reader.ReadUInt32()
                });
            }

            ParserUtils.ParseChildren(node.Children, reader, parsers);

            result.Node = node;
            return(result);
        }
Exemple #26
0
        private static NodeEntry RecursiveTestNode(string jointStrings, NodeEntry node)
        {
            if (jointStrings.IndexOf(node._name) >= 0)
            {
                return(node);
            }
            else if (jointStrings.IndexOf(node._sid) >= 0)
            {
                return(node);
            }
            else if (jointStrings.IndexOf(node._id) >= 0)
            {
                return(node);
            }

            NodeEntry e;

            foreach (NodeEntry n in node._children)
            {
                if ((e = RecursiveTestNode(jointStrings, n)) != null)
                {
                    return(e);
                }
            }

            return(null);
        }
        public byte[] Write(NodeEntry node, List <INodeParser> parsers)
        {
            byte[] result;
            var    data = (FactsDB)node.Value;

            using (var stream = new MemoryStream())
            {
                using (var writer = new BinaryWriter(stream, Encoding.ASCII))
                {
                    writer.Write(node.Id);
                    writer.Write(data.FactsTableCount);

                    var parser = parsers.Where(p => p.ParsableNodeName == Constants.NodeNames.FACTS_TABLE).FirstOrDefault();
                    Debug.Assert(parser != null);

                    foreach (var child in node.Children)
                    {
                        writer.Write(parser.Write(child, parsers));
                    }

                    writer.Write(data.TrailingBytes);
                }
                result = stream.ToArray();
            }
            return(result);
        }
Exemple #28
0
        public object Read(NodeEntry node, BinaryReader reader, List <INodeParser> parsers)
        {
            var result = new ItemDropStorageManager();

            reader.Skip(4); // Skip Id

            result.NumberOfItemDropStorages = reader.ReadUInt32();
            result.ItemDropStorages         = new ItemDropStorage[result.NumberOfItemDropStorages];

            var parser = parsers.Where(p => p.ParsableNodeName == Constants.NodeNames.ITEM_DROP_STORAGE).FirstOrDefault();

            Debug.Assert(parser != null);

            for (var i = 0; i < result.NumberOfItemDropStorages; ++i)
            {
                result.ItemDropStorages[i] = (ItemDropStorage)parser.Read(node.Children[i], reader, parsers);
                node.Children[i].Value     = result.ItemDropStorages[i];
            }

            int readSize = node.Size - ((int)reader.BaseStream.Position - node.Offset);

            Debug.Assert(readSize >= 0);
            result.TrailingBytes = reader.ReadBytes(readSize);

            return(result);
        }
        public DocumentFromSignatureValidator(IAlfrescoHttpClient alfrescoHttpClient, IIdentityUser identityUser)
        {
            RuleFor(o => o)
            .Cascade(CascadeMode.StopOnFirstFailure)
            .MustAsync(async(context, cancellationToken) =>
            {
                _nodeEntry = await alfrescoHttpClient.GetNodeInfo(context.NodeId, ImmutableList <Parameter> .Empty
                                                                  .Add(new Parameter(AlfrescoNames.Headers.Include, AlfrescoNames.Includes.Path, ParameterType.QueryString)));
                _groupPaging = await alfrescoHttpClient.GetPersonGroups(identityUser.Id);

                return(_nodeEntry?.Entry?.Id != null && _groupPaging != null);
            })
            .WithName(x => nameof(x.NodeId))
            .WithMessage("Something went wrong with alfresco server.")
            .DependentRules(() =>
            {
                RuleFor(x => x)
                .Must(y => _groupPaging?.List?.Entries?.Any(q => q.Entry.Id == identityUser.RequestGroup) ?? false)
                .WithName(x => "Group")
                .WithMessage($"User isn't member of group {identityUser.RequestGroup}.");

                RuleFor(x => x.NodeId)
                .Must(x => _nodeEntry.Entry.NodeType == SpisumNames.NodeTypes.Document)
                .WithMessage(x => $"Provided nodeId must be NodeType {SpisumNames.NodeTypes.Document}");

                RuleFor(x => x.NodeId)
                .Must(x => _nodeEntry.Entry.Path.Name.EndsWith(SpisumNames.Paths.DocumentsForSignature) ||
                      _nodeEntry.Entry.Path.Name.EndsWith(SpisumNames.Paths.FilesDocumentsForSignature))
                .WithMessage(
                    $"NodeId must be in path {SpisumNames.Paths.EvidenceDocumentsForProcessingForSignature(identityUser.RequestGroup)} or " +
                    $"{SpisumNames.Paths.EvidenceFilesDocumentsForProcessingForSignature(identityUser.RequestGroup)}.");
            });
        }
Exemple #30
0
        public FileDocumentAddValidator(IAlfrescoHttpClient alfrescoHttpClient, IIdentityUser identityUser)
        {
            RuleFor(o => o)
            .Cascade(CascadeMode.StopOnFirstFailure)
            .MustAsync(async(context, cancellationToken) =>
            {
                _nodeEntry   = await alfrescoHttpClient.GetNodeInfo(context.NodeId);
                _groupPaging = await alfrescoHttpClient.GetPersonGroups(identityUser.Id);

                return(_nodeEntry?.Entry?.Id != null && _groupPaging != null);
            })
            .WithName(x => nameof(x.NodeId))
            .WithMessage("Something went wrong with alfresco server.")
            .DependentRules(() =>
            {
                RuleFor(x => x)
                .Must(y => _groupPaging?.List?.Entries?.Any(q => q.Entry.Id == identityUser.RequestGroup) ?? false)
                .WithName(x => "Group")
                .WithMessage($"User isn't member of group {identityUser.RequestGroup}.");

                RuleFor(x => x.NodeId)
                .Must(x => _nodeEntry.Entry.NodeType == SpisumNames.NodeTypes.File)
                .WithMessage(x => $"Provided nodeId must be NodeType {SpisumNames.NodeTypes.File}");
            });
        }
Exemple #31
0
        private void CacheNodeTypes(Assembly assm)
        {
            foreach(Type t in assm.GetTypes())
            {
                DataNodeAttribute dna = (DataNodeAttribute)Helper.CheckType(t, typeof(DataNodeAttribute), typeof(IDataNode));
                if(dna == null)
                {
                    continue;
                }

                NodeEntry ne = new NodeEntry();
                ne.Type = t;
                ne.Attribute = dna;
                m_Nodes[dna.Name] = ne;
            }
        }
        static PrimitiveManager DecodePrimitivesWeighted(NodeEntry n, GeometryEntry geo, SkinEntry skin, SceneEntry scene, InfluenceManager infManager, ref string Error)
        {
            PrimitiveManager manager = DecodePrimitives(n._matrix, geo);

            MDL0BoneNode[] boneList;
            MDL0BoneNode bone = null;
            int boneCount;
            string[] jointStrings = null;
            byte* pCmd = stackalloc byte[4];
            int cmdCount = skin._weightInputs.Count;
            float weight = 0;
            float* pWeights = null;
            Vector3* pVert = null, pNorms = null;
            ushort* pVInd = (ushort*)manager._indices.Address;
            List<Vertex3> vertList = new List<Vertex3>(skin._weightCount);
            Matrix* pMatrix = null;

            UnsafeBuffer remap = new UnsafeBuffer(skin._weightCount * 2);
            ushort* pRemap = (ushort*)remap.Address;

            pNorms = (Vector3*)manager._faceData[1].Address;

            manager._vertices = vertList;

            //Find vertex source
            foreach (SourceEntry s in geo._sources)
                if (s._id == geo._verticesInput._source)
                {
                    pVert = (Vector3*)((UnsafeBuffer)s._arrayData).Address;
                    break;
                }

            //Find joint source
            foreach (InputEntry inp in skin._jointInputs)
                if (inp._semantic == SemanticType.JOINT)
                {
                    foreach (SourceEntry src in skin._sources)
                        if (src._id == inp._source)
                        {
                            jointStrings = src._arrayData as string[];
                            break;
                        }
                }
                else if (inp._semantic == SemanticType.INV_BIND_MATRIX)
                {
                    foreach (SourceEntry src in skin._sources)
                        if (src._id == inp._source)
                        {
                            pMatrix = (Matrix*)((UnsafeBuffer)src._arrayData).Address;
                            break;
                        }
                }

            Error = "There was a problem creating the list of bones for geometry entry " + geo._name;

            //Populate bone list
            boneCount = jointStrings.Length;
            boneList = new MDL0BoneNode[boneCount];
            for (int i = 0; i < boneCount; i++)
                boneList[i] = scene.FindNode(jointStrings[i])._node as MDL0BoneNode;

            //Build command list
            foreach (InputEntry inp in skin._weightInputs)
            {
                switch (inp._semantic)
                {
                    case SemanticType.JOINT:
                        pCmd[inp._offset] = 1;
                        break;

                    case SemanticType.WEIGHT:
                        pCmd[inp._offset] = 2;

                        //Get weight source
                        foreach (SourceEntry src in skin._sources)
                            if (src._id == inp._source)
                            {
                                pWeights = (float*)((UnsafeBuffer)src._arrayData).Address;
                                break;
                            }

                        break;

                    default:
                        pCmd[inp._offset] = 0;
                        break;
                }
            }

            Error = "There was a problem creating vertex influences for geometry entry " + geo._name;

            //Build vertex list and remap table
            for (int i = 0; i < skin._weightCount; i++)
            {
                //Create influence
                int iCount = skin._weights[i].Length / cmdCount;
                Influence inf = new Influence(/*iCount*/);
                fixed (int* p = skin._weights[i])
                {
                    int* iPtr = p;
                    for (int x = 0; x < iCount; x++)
                    {
                        for (int z = 0; z < cmdCount; z++, iPtr++)
                            if (pCmd[z] == 1)
                                bone = boneList[*iPtr];
                            else if (pCmd[z] == 2)
                                weight = pWeights[*iPtr];
                        inf._weights.Add(new BoneWeight(bone, weight));
                    }
                }

                inf.CalcMatrix();

                Error = "There was a problem creating a vertex from the geometry entry " + geo._name + ".\nMake sure that all the vertices are weighted properly.";

                Vertex3 v;
                if (inf._weights.Count > 1)
                {
                    //Match with manager
                    inf = infManager.FindOrCreate(inf, true);
                    v = new Vertex3(n._matrix * skin._bindMatrix * pVert[i], inf); //World position
                }
                else
                {
                    bone = inf._weights[0].Bone;
                    v = new Vertex3(n._matrix * bone._inverseBindMatrix * skin._bindMatrix * pVert[i], bone); //Local position
                }

                ushort index = 0;
                while (index < vertList.Count)
                {
                    if (v.Equals(vertList[index])) break;
                    index++;
                }
                if (index == vertList.Count)
                    vertList.Add(v);

                pRemap[i] = index;
            }

            Error = "There was a problem fixing normal rotations for geometry entry " + geo._name;

            //Remap vertex indices and fix normals
            for (int i = 0; i < manager._pointCount; i++, pVInd++)
            {
                *pVInd = pRemap[*pVInd];
                Vertex3 v = null;
                if (*pVInd < vertList.Count)
                    v = vertList[*pVInd];
                if (v != null && v._matrixNode != null)
                    if (v._matrixNode.Weights.Count > 1)
                        pNorms[i] = skin._bindMatrix.GetRotationMatrix() * pNorms[i];
                    else
                        pNorms[i] = skin._bindMatrix.GetRotationMatrix() * v._matrixNode.Weights[0].Bone._inverseBindMatrix.GetRotationMatrix() * pNorms[i];
            }

            remap.Dispose();
            return manager;
        }
        static PrimitiveManager DecodePrimitivesUnweighted(NodeEntry n, GeometryEntry geo)
        {
            PrimitiveManager manager = DecodePrimitives(n._matrix, geo);

            Vector3* pVert = null;
            ushort* pVInd = (ushort*)manager._indices.Address;
            int vCount = 0;
            List<Vertex3> vertList = new List<Vertex3>(manager._pointCount);

            manager._vertices = vertList;

            //Find vertex source
            foreach (SourceEntry s in geo._sources)
                if (s._id == geo._verticesInput._source)
                {
                    UnsafeBuffer b = s._arrayData as UnsafeBuffer;
                    pVert = (Vector3*)b.Address;
                    vCount = b.Length / 12;
                    break;
                }

            UnsafeBuffer remap = new UnsafeBuffer(vCount * 2);
            ushort* pRemap = (ushort*)remap.Address;

            //Create remap table
            for (int i = 0; i < vCount; i++)
            {
                //Create Vertex and look for match
                Vertex3 v = new Vertex3(n._matrix * pVert[i]);

                int index = 0;
                while (index < vertList.Count)
                {
                    if (v.Equals(vertList[index]))
                        break;
                    index++;
                }
                if (index == vertList.Count)
                    vertList.Add(v);

                pRemap[i] = (ushort)index;
            }

            //Remap vertex indices
            for (int i = 0; i < manager._pointCount; i++, pVInd++)
                *pVInd = pRemap[*pVInd];

            remap.Dispose();

            return manager;
        }
Exemple #34
0
		private void CacheNodeTypes(Assembly assm)
		{
			foreach(Type t in assm.GetTypes())
			{
                foreach (DataNodeAttribute dna in t.GetCustomAttributes(typeof(DataNodeAttribute), true))
                {
                    NodeEntry ne = new NodeEntry();
                    ne.Type = t;
                    ne.Attribute = dna;
                    m_Nodes[dna.Name] = ne;
                }
			}
		}
        private void EnumNode(NodeEntry node, ResourceNode parent, SceneEntry scene, MDL0Node model, DecoderShell shell)
        {
            MDL0BoneNode bone = null;
            Influence inf = null;

            if (node._type == NodeType.JOINT)
            {
                Error = "There was a problem creating a new bone.";

                bone = new MDL0BoneNode();
                bone._name = node._name != null ? node._name : node._id;

                bone._bindState = node._transform;
                node._node = bone;

                parent._children.Add(bone);
                bone._parent = parent;

                bone.RecalcBindState();
                bone.CalcFlags();

                foreach (NodeEntry e in node._children)
                    EnumNode(e, bone, scene, model, shell);

                inf = new Influence(bone);
                model._influences._influences.Add(inf);
            }
            else
                foreach (NodeEntry e in node._children)
                    EnumNode(e, parent, scene, model, shell);

            foreach (InstanceEntry inst in node._instances)
            {
                if (inst._type == InstanceType.Controller)
                {
                    foreach (SkinEntry skin in shell._skins)
                        if (skin._id == inst._url)
                        {
                            foreach (GeometryEntry g in shell._geometry)
                                if (g._id == skin._skinSource)
                                {
                                    Error = @"
                                    There was a problem decoding weighted primitives for the object " + (node._name != null ? node._name : node._id) +
                                    ".\nOne or more vertices may not be weighted correctly.";
                                    Say("Decoding weighted primitives for " + (g._name != null ? g._name : g._id) + "...");
                                    CreateObject(inst, node, parent, DecodePrimitivesWeighted(node, g, skin, scene, model._influences, ref Error), model, shell);
                                    break;
                                }
                            break;
                        }
                }
                else if (inst._type == InstanceType.Geometry)
                {
                    foreach (GeometryEntry g in shell._geometry)
                        if (g._id == inst._url)
                        {
                            Error = "There was a problem decoding unweighted primitives for the object " + (node._name != null ? node._name : node._id) + ".";
                            Say("Decoding unweighted primitives for " + (g._name != null ? g._name : g._id) + "...");
                            CreateObject(inst, node, parent, DecodePrimitivesUnweighted(node, g), model, shell);
                            break;
                        }
                }
                else
                {
                    foreach (NodeEntry e in shell._nodes)
                        if (e._id == inst._url)
                            EnumNode(e, parent, scene, model, shell);
                }
            }
        }
            public static int Compare(NodeEntry n1, NodeEntry n2)
            {
                if ((n1._type == NodeType.NODE || n1._type == NodeType.NONE) && n2._type == NodeType.JOINT)
                    return 1;
                if (n1._type == NodeType.JOINT && (n2._type == NodeType.NODE || n2._type == NodeType.NONE))
                    return -1;

                return 0;
            }
            internal static NodeEntry FindNodeInternal(string name, NodeEntry node)
            {
                NodeEntry e;

                if (node._name == name || node._sid == name || node._id == name)
                    return node;

                foreach (NodeEntry n in node._children)
                    if ((e = FindNodeInternal(name, n)) != null)
                        return e;

                return null;
            }
            private NodeEntry ParseNode()
            {
                NodeEntry node = new NodeEntry();

                while (_reader.ReadAttribute())
                    if (_reader.Name.Equals("id", true))
                        node._id = (string)_reader.Value;
                    else if (_reader.Name.Equals("name", true))
                        node._name = (string)_reader.Value;
                    else if (_reader.Name.Equals("sid", true))
                        node._sid = (string)_reader.Value;
                    else if (_reader.Name.Equals("type", true))
                        node._type = (NodeType)Enum.Parse(typeof(NodeType), (string)_reader.Value, true);

                Matrix m = Matrix.Identity;
                //if (node._type != NodeType.JOINT)
                //    node._type = NodeType.JOINT;
                while (_reader.BeginElement())
                {
                    if (_reader.Name.Equals("matrix", true))
                        m *= ParseMatrix();
                    else if (_reader.Name.Equals("rotate", true))
                    {
                        Vector4 v = ParseVec4();
                        m *= Matrix.RotationMatrix(v._x * v._w, v._y * v._w, v._z * v._w);
                    }
                    else if (_reader.Name.Equals("scale", true))
                        m.Scale(ParseVec3());
                    else if (_reader.Name.Equals("translate", true))
                        m.Translate(ParseVec3());
                    else if (_reader.Name.Equals("node", true))
                        node._children.Add(ParseNode());
                    else if (_reader.Name.Equals("instance_controller", true))
                        node._instances.Add(ParseInstance(InstanceType.Controller));
                    else if (_reader.Name.Equals("instance_geometry", true))
                        node._instances.Add(ParseInstance(InstanceType.Geometry));
                    else if (_reader.Name.Equals("instance_node", true))
                        node._instances.Add(ParseInstance(InstanceType.Node));

                    _reader.EndElement();
                }
                node._transform = (node._matrix = m).Derive();
                return node;
            }
        private void CreateObject(InstanceEntry inst, NodeEntry node, ResourceNode parent, PrimitiveManager manager, MDL0Node model, DecoderShell shell)
        {
            if (manager != null)
            {
                Error = "There was a problem creating a new object for " + (node._name != null ? node._name : node._id);
                int i = 0;
                foreach (Vertex3 v in manager._vertices)
                    v._index = i++;

                MDL0ObjectNode poly = new MDL0ObjectNode() { _manager = manager };
                poly._manager._polygon = poly;
                poly._name = node._name != null ? node._name : node._id;

                //Attach single-bind
                if (parent != null && parent is MDL0BoneNode)
                    poly.MatrixNode = (MDL0BoneNode)parent;

                //Attach material
                if (inst._material != null)
                    foreach (MaterialEntry mat in shell._materials)
                        if (mat._id == inst._material._target)
                        {
                            (poly._opaMaterial = (mat._node as MDL0MaterialNode))._objects.Add(poly);
                            break;
                        }

                model._numFaces += poly._numFaces = manager._faceCount = manager._pointCount / 3;
                model._numFacepoints += poly._numFacepoints = manager._pointCount;

                poly._parent = model._objGroup;
                model._objList.Add(poly);
            }
        }