Example #1
0
 /// <summary>
 /// Initializes a new instance of the <see cref="InstanceCommand"/> class.
 /// </summary>
 /// <param name="service">The service.</param>
 /// <param name="resource">The resource.</param>
 /// <param name="newServiceSettings">The new service settings.</param>
 /// <param name="commandType">Type of the command.</param>
 /// <param name="listDepth">The list depth.</param>
 public FoldersCommand(ModuleService service, ResourceDescription resource, ModuleService newServiceSettings, ModuleCommandType commandType, int listDepth)
     : base(service, resource, newServiceSettings, commandType, listDepth)
 {
     this.resource = resource;
     this.service = service;
     this.newServiceSettings = newServiceSettings;
     this.commandType = commandType;
     this.listDepth = listDepth;
 }
 public new void ReadFromResourceDescription(ResourceDescription rd)
 {
     base.ReadFromResourceDescription(rd);
 }
Example #3
0
        private Dictionary <DMSType, ResourceDescription> CreateResourcesToInsert()
        {
            long globalId                   = 0;
            ResourceDescription rd          = null;
            List <ModelCode>    propertyIDs = null;
            Dictionary <DMSType, ResourceDescription> updates = new Dictionary <DMSType, ResourceDescription>(new DMSTypeComparer());

            #region Create resources

            foreach (DMSType type in modelResourcesDesc.AllDMSTypes)
            {
                if (type != DMSType.MASK_TYPE)
                {
                    globalId    = ModelCodeHelper.CreateGlobalId(0, (short)type, -1);
                    propertyIDs = modelResourcesDesc.GetAllPropertyIds(modelResourcesDesc.GetModelCodeFromType(type));
                    rd          = new ResourceDescription(globalId);

                    foreach (ModelCode propertyId in propertyIDs)
                    {
                        if (!modelResourcesDesc.NotSettablePropertyIds.Contains(propertyId))
                        {
                            switch (Property.GetPropertyType(propertyId))
                            {
                            case PropertyType.Bool:
                                rd.AddProperty(new Property(propertyId, true));
                                break;

                            case PropertyType.Byte:
                                rd.AddProperty(new Property(propertyId, (byte)100));
                                break;

                            case PropertyType.Int32:
                                rd.AddProperty(new Property(propertyId, (int)4));
                                break;

                            case PropertyType.Int64:
                            case PropertyType.TimeSpan:
                            case PropertyType.DateTime:
                                rd.AddProperty(new Property(propertyId, (long)101));
                                break;

                            case PropertyType.Enum:
                                rd.AddProperty(new Property(propertyId, (short)1));
                                break;

                            case PropertyType.Reference:
                                rd.AddProperty(new Property(propertyId));
                                break;

                            case PropertyType.Float:
                                rd.AddProperty(new Property(propertyId, (float)10.5));
                                break;

                            case PropertyType.String:
                                rd.AddProperty(new Property(propertyId, "TestString"));
                                break;

                            case PropertyType.Int64Vector:
                                List <long> longVector = new List <long>();
                                longVector.Add((long)10);
                                longVector.Add((long)11);
                                longVector.Add((long)12);
                                longVector.Add((long)13);
                                longVector.Add((long)14);
                                longVector.Add((long)15);
                                rd.AddProperty(new Property(propertyId, longVector));
                                break;

                            case PropertyType.FloatVector:
                                List <float> floatVector = new List <float>();
                                floatVector.Add((float)11.1);
                                floatVector.Add((float)12.2);
                                floatVector.Add((float)13.3);
                                floatVector.Add((float)14.4);
                                floatVector.Add((float)15.5);
                                rd.AddProperty(new Property(propertyId, floatVector));
                                break;

                            case PropertyType.EnumVector:
                                List <short> enumVector = new List <short>();
                                enumVector.Add((short)1);
                                enumVector.Add((short)2);
                                enumVector.Add((short)3);
                                rd.AddProperty(new Property(propertyId, enumVector));
                                break;

                            case PropertyType.StringVector:
                                List <string> stringVector = new List <string>();
                                stringVector.Add("TestString1");
                                stringVector.Add("TestString2");
                                stringVector.Add("TestString3");
                                stringVector.Add("TestString4");
                                rd.AddProperty(new Property(propertyId, stringVector));
                                break;

                            case PropertyType.Int32Vector:
                                List <int> intVector = new List <int>();
                                intVector.Add(11);
                                intVector.Add(12);
                                intVector.Add(13);
                                intVector.Add(14);
                                rd.AddProperty(new Property(propertyId, intVector));
                                break;

                            default:
                                break;
                            }
                        }
                    }

                    updates[type] = rd;
                }
            }

            #endregion Create resources

            #region Set references

            //SetPowerTransformerReferences(updates);
            //SetTransformerWindingReferences(updates);
            //SetWindingTestRefernces(updates);

            #endregion Set references

            return(updates);
        }
        public void BuildResources(GraphicsCommandList cmdList)
        {
            // All the textures for the wave simulation will be bound as a shader resource and
            // unordered access view at some point since we ping-pong the buffers.

            var texDesc = new ResourceDescription
            {
                Dimension         = ResourceDimension.Texture2D,
                Alignment         = 0,
                Width             = ColumnCount,
                Height            = RowCount,
                DepthOrArraySize  = 1,
                MipLevels         = 1,
                Format            = Format.R32_Float,
                SampleDescription = new SampleDescription(1, 0),
                Layout            = TextureLayout.Unknown,
                Flags             = ResourceFlags.AllowUnorderedAccess
            };

            _prevSol = _device.CreateCommittedResource(
                new HeapProperties(HeapType.Default),
                HeapFlags.None,
                texDesc,
                ResourceStates.Common);
            _currSol = _device.CreateCommittedResource(
                new HeapProperties(HeapType.Default),
                HeapFlags.None,
                texDesc,
                ResourceStates.Common);
            _nextSol = _device.CreateCommittedResource(
                new HeapProperties(HeapType.Default),
                HeapFlags.None,
                texDesc,
                ResourceStates.Common);

            //
            // In order to copy CPU memory data into our default buffer, we need to create
            // an intermediate upload heap.
            //

            int  num2DSubresources = texDesc.DepthOrArraySize * texDesc.MipLevels;
            long uploadBufferSize;

            _device.GetCopyableFootprints(ref texDesc, 0, num2DSubresources, 0, null, null, null, out uploadBufferSize);

            _prevUploadBuffer = _device.CreateCommittedResource(
                new HeapProperties(HeapType.Upload),
                HeapFlags.None,
                ResourceDescription.Buffer(uploadBufferSize),
                ResourceStates.GenericRead);
            _currUploadBuffer = _device.CreateCommittedResource(
                new HeapProperties(HeapType.Upload),
                HeapFlags.None,
                ResourceDescription.Buffer(uploadBufferSize),
                ResourceStates.GenericRead);

            //
            // Schedule to copy the data to the default resource, and change states.
            // Note that mCurrSol is put in the GENERIC_READ state so it can be
            // read by a shader.
            //

            cmdList.ResourceBarrierTransition(_prevSol, ResourceStates.Common, ResourceStates.CopyDestination);
            cmdList.CopyResource(_prevSol, _prevUploadBuffer);
            cmdList.ResourceBarrierTransition(_prevSol, ResourceStates.CopyDestination, ResourceStates.UnorderedAccess);

            cmdList.ResourceBarrierTransition(_currSol, ResourceStates.Common, ResourceStates.CopyDestination);
            cmdList.CopyResource(_currSol, _currUploadBuffer);
            cmdList.ResourceBarrierTransition(_currSol, ResourceStates.CopyDestination, ResourceStates.GenericRead);

            cmdList.ResourceBarrierTransition(_nextSol, ResourceStates.Common, ResourceStates.UnorderedAccess);
        }
        private void LoadMesh()
        {
            SamplerStateDescription samplerDesc = new SamplerStateDescription()
            {
                Filter             = Filter.ComparisonMinMagMipLinear,
                AddressU           = TextureAddressMode.Wrap,
                AddressV           = TextureAddressMode.Wrap,
                AddressW           = TextureAddressMode.Wrap,
                MinimumLod         = float.MinValue,
                MaximumLod         = float.MaxValue,
                MipLodBias         = 0,
                MaximumAnisotropy  = 0,
                ComparisonFunction = Comparison.Never
            };

            // Load model from obj.
            var importer = new Assimp.AssimpContext();
            var scene    = importer.ImportFile(@"../../../Models/lara/lara.obj", PostProcessSteps.GenerateSmoothNormals | PostProcessSteps.FlipUVs | PostProcessSteps.PreTransformVertices);


            Vertex[] vertices = new Vertex[scene.Meshes.Sum(m => m.VertexCount)];
            int[]    indices  = new int[scene.Meshes.Sum(m => m.FaceCount * 3)];
            faceCounts = new List <int>();

            int vertexOffSet = 0;
            int indexOffSet  = 0;
            int k            = 0;

            foreach (var mesh in scene.Meshes)
            {
                var positions = mesh.Vertices;
                var normals   = mesh.Normals;
                var texs      = mesh.TextureCoordinateChannels[0];
                for (int i = 0; i < mesh.VertexCount; i++)
                {
                    vertices[vertexOffSet + i] = new Vertex()
                    {
                        position          = new Vector3(positions[i].X, positions[i].Y, positions[i].Z),
                        normal            = new Vector3(normals[i].X, normals[i].Y, normals[i].Z),
                        textureCoordinate = new Vector3(texs[i].X, texs[i].Y, texs[i].Z)
                    };
                }

                var faces = mesh.Faces;
                for (int i = 0; i < mesh.FaceCount; i++)
                {
                    indices[i * 3 + indexOffSet]     = (int)faces[i].Indices[0] + vertexOffSet;
                    indices[i * 3 + 1 + indexOffSet] = (int)faces[i].Indices[1] + vertexOffSet;
                    indices[i * 3 + 2 + indexOffSet] = (int)faces[i].Indices[2] + vertexOffSet;
                }

                faceCounts.Add(mesh.FaceCount * 3);
                vertexOffSet += mesh.VertexCount;
                indexOffSet  += mesh.FaceCount * 3;

                string textureName = System.IO.Path.GetFileName(scene.Materials[mesh.MaterialIndex].TextureDiffuse.FilePath);
                var    texResource = TextureUtilities.CreateTextureFromDDS(device, @"../../../Models/lara/" + textureName);
                textures.Add(texResource);

                int D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING = 5768;
                ShaderResourceViewDescription desc           = new ShaderResourceViewDescription
                {
                    Dimension = ShaderResourceViewDimension.Texture2D,
                    Format    = texResource.Description.Format,
                    Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING,
                };
                desc.Texture2D.MipLevels           = 1;
                desc.Texture2D.MostDetailedMip     = 0;
                desc.Texture2D.ResourceMinLODClamp = 0;

                device.CreateShaderResourceView(texResource, desc, resourceViewHeap.CPUDescriptorHandleForHeapStart + (k + meshTexturePosition) * device.GetDescriptorHandleIncrementSize(DescriptorHeapType.ConstantBufferViewShaderResourceViewUnorderedAccessView));
                k++;
            }

            int vertexBufferSize = Utilities.SizeOf(vertices);


            // Note: using upload heaps to transfer static data like vert buffers is not
            // recommended. Every time the GPU needs it, the upload heap will be marshalled
            // over. Please read up on Default Heap usage. An upload heap is used here for
            // code simplicity and because there are very few verts to actually transfer.
            vertexBuffer = device.CreateCommittedResource(new HeapProperties(HeapType.Upload), HeapFlags.None, ResourceDescription.Buffer(vertexBufferSize), ResourceStates.GenericRead);

            // Copy the triangle data to the vertex buffer.
            IntPtr pVertexDataBegin = vertexBuffer.Map(0);

            Utilities.Write(pVertexDataBegin, vertices, 0, vertices.Length);
            vertexBuffer.Unmap(0);

            // Initialize the vertex buffer view.
            vertexBufferView = new VertexBufferView();
            vertexBufferView.BufferLocation = vertexBuffer.GPUVirtualAddress;
            vertexBufferView.StrideInBytes  = Utilities.SizeOf <Vertex>();
            vertexBufferView.SizeInBytes    = vertexBufferSize;


            //Create Index Buffer
            int indexBufferSize = Utilities.SizeOf(indices);

            indexBuffer = device.CreateCommittedResource(new HeapProperties(HeapType.Upload), HeapFlags.None, ResourceDescription.Buffer(indexBufferSize), ResourceStates.GenericRead);

            // Copy the triangle data to the vertex buffer.
            IntPtr pIndexDataBegin = indexBuffer.Map(0);

            Utilities.Write(pIndexDataBegin, indices, 0, indices.Length);
            indexBuffer.Unmap(0);

            // Initialize the index buffer view.
            indexBufferView = new IndexBufferView();
            indexBufferView.BufferLocation = indexBuffer.GPUVirtualAddress;
            indexBufferView.Format         = Format.R32_UInt;
            indexBufferView.SizeInBytes    = indexBufferSize;
        }
        private void LoadAssets()
        {
            RootParameter parameter1 = new RootParameter(ShaderVisibility.All, new DescriptorRange()
            {
                RangeType = DescriptorRangeType.ConstantBufferView, BaseShaderRegister = 0, DescriptorCount = 1
            });
            RootParameter parameter2 = new RootParameter(ShaderVisibility.Pixel, new DescriptorRange()
            {
                RangeType = DescriptorRangeType.ShaderResourceView, BaseShaderRegister = 0, DescriptorCount = 1
            });
            RootParameter parameter3 = new RootParameter(ShaderVisibility.Pixel, new DescriptorRange()
            {
                RangeType = DescriptorRangeType.Sampler, BaseShaderRegister = 0, DescriptorCount = 1
            });

            // Create a root signature.
            RootSignatureDescription rootSignatureDesc = new RootSignatureDescription(RootSignatureFlags.AllowInputAssemblerInputLayout, new RootParameter[] { parameter1, parameter2, parameter3 });

            rootSignature = device.CreateRootSignature(rootSignatureDesc.Serialize());

            // Create the pipeline state, which includes compiling and loading shaders.

#if DEBUG
            var vertexShader = new ShaderBytecode(SharpDX.D3DCompiler.ShaderBytecode.CompileFromFile("shaders.hlsl", "VSMain", "vs_5_0", SharpDX.D3DCompiler.ShaderFlags.Debug));
#else
            var vertexShader = new ShaderBytecode(SharpDX.D3DCompiler.ShaderBytecode.CompileFromFile("shaders.hlsl", "VSMain", "vs_5_0"));
#endif

#if DEBUG
            var pixelShader = new ShaderBytecode(SharpDX.D3DCompiler.ShaderBytecode.CompileFromFile("shaders.hlsl", "PSMain", "ps_5_0", SharpDX.D3DCompiler.ShaderFlags.Debug));
#else
            var pixelShader = new ShaderBytecode(SharpDX.D3DCompiler.ShaderBytecode.CompileFromFile("shaders.hlsl", "PSMain", "ps_5_0"));
#endif

            // Define the vertex input layout.
            InputElement[] inputElementDescs = new InputElement[]
            {
                new InputElement("POSITION", 0, Format.R32G32B32_Float, 0, 0),
                new InputElement("NORMAL", 0, Format.R32G32B32_Float, 12, 0),
                new InputElement("TEXCOORD", 0, Format.R32G32B32_Float, 24, 0)
            };

            // Describe and create the graphics pipeline state object (PSO).
            GraphicsPipelineStateDescription psoDesc = new GraphicsPipelineStateDescription()
            {
                InputLayout           = new InputLayoutDescription(inputElementDescs),
                RootSignature         = rootSignature,
                VertexShader          = vertexShader,
                PixelShader           = pixelShader,
                RasterizerState       = RasterizerStateDescription.Default(),
                BlendState            = BlendStateDescription.Default(),
                DepthStencilFormat    = SharpDX.DXGI.Format.D32_Float,
                DepthStencilState     = DepthStencilStateDescription.Default(),
                SampleMask            = int.MaxValue,
                PrimitiveTopologyType = PrimitiveTopologyType.Triangle,
                RenderTargetCount     = 1,
                Flags             = PipelineStateFlags.None,
                SampleDescription = new SharpDX.DXGI.SampleDescription(1, 0),
                StreamOutput      = new StreamOutputDescription()
            };
            psoDesc.RenderTargetFormats[0] = SharpDX.DXGI.Format.R8G8B8A8_UNorm;

            pipelineState = device.CreateGraphicsPipelineState(psoDesc);

            // Create the command list.
            commandList = device.CreateCommandList(CommandListType.Direct, commandAllocator, pipelineState);

            // Command lists are created in the recording state, but there is nothing
            // to record yet. The main loop expects it to be closed, so close it now.
            commandList.Close();

            // Create the vertex buffer.
            float aspectRatio = viewport.Width / viewport.Height;

            //constant Buffer
            int constantBufferSize = (Utilities.SizeOf <Transform>() + 255) & ~255;
            constantBuffer = device.CreateCommittedResource(new HeapProperties(HeapType.Upload), HeapFlags.None, ResourceDescription.Buffer(constantBufferSize), ResourceStates.GenericRead);

            //constant buffer
            ConstantBufferViewDescription cbvDesc = new ConstantBufferViewDescription()
            {
                BufferLocation = constantBuffer.GPUVirtualAddress,
                SizeInBytes    = constantBufferSize
            };

            CpuDescriptorHandle cbHandleHeapStart = resourceViewHeap.CPUDescriptorHandleForHeapStart + constantBufferViewPosition * device.GetDescriptorHandleIncrementSize(DescriptorHeapType.ConstantBufferViewShaderResourceViewUnorderedAccessView);
            device.CreateConstantBufferView(cbvDesc, cbHandleHeapStart);

            //Render target
            LoadRenderTargetData();

            //load mesh
            LoadMesh();

            // Create synchronization objects.
            {
                fence      = device.CreateFence(0, FenceFlags.None);
                fenceValue = 1;

                // Create an event handle to use for frame synchronization.
                fenceEvent = new AutoResetEvent(false);
            }



            InitBundles();
        }
Example #7
0
        public static ResourceDescription ReadAndFillResourceData(string resourceParamsSerialized, string serviceName)
        {
            ResourceDescription resource = new ResourceDescription(serviceName, "ResourceDescriptionFile");

            string[] paramsSplitted = resourceParamsSerialized.Split(',');

            for (int i = 0; i < paramsSplitted.Length; i++)
            {
                string oneParam = paramsSplitted[i];
                if (i == 0)
                {
                    oneParam = oneParam.Substring(1, oneParam.Length - 1); //remove first "{"
                }
                if (i == paramsSplitted.Length - 1)
                {
                    oneParam = oneParam.Substring(0, oneParam.Length - 1); //remove last "}"
                }
                if (oneParam != "")
                {
                    string[] oneParamSplitted = oneParam.Split(":".ToArray(), 2, StringSplitOptions.None);
                    string paramName = oneParamSplitted[0].ToString().Replace("\"", "");
                    string paramValue = oneParamSplitted[1].ToString().Replace("\"", "");
                    resource[paramName] = paramValue;
                }
            }

            return resource;
        }
Example #8
0
        /// <summary>
        /// Prepares the command list.
        /// </summary>
        /// <param name="service">Service to populate.</param>
        /// <param name="newServiceSettings">New service settings.</param>
        /// <param name="resource">Server resource.</param>
        /// <param name="commandType">Type of command.</param>
        private void PrepareCommandList(ModuleService service, ModuleService newServiceSettings, ResourceDescription resource, ModuleCommandType commandType)
        {
            if (commandType != ModuleCommandType.Remove)
            {
                this.commands.Add(this.GetModuleCommand(resource, commandType, -1, service, newServiceSettings));
            }

            if (service.Children != null)
            {
                for (int i = 0; i < service.Children.Count; i++)
                {
                    ModuleService childService = service.Children[i];
                    ModuleService newChildSettings = null;
                    if (newServiceSettings != null && newServiceSettings.Children != null && newServiceSettings.Children.Count > i)
                    {
                        newChildSettings = newServiceSettings.Children[i];
                    }

                    this.PrepareCommandList(childService, newChildSettings, resource, commandType);
                }
            }

            if (commandType == ModuleCommandType.Remove)
            {
                this.commands.Add(this.GetModuleCommand(resource, commandType, -1, service, newServiceSettings));
            }
        }
Example #9
0
        private void InitializeFromImpl(DataBox[] dataBoxes = null)
        {
            bool hasInitData = dataBoxes != null && dataBoxes.Length > 0;

            if (ParentTexture != null)
            {
                ParentResource    = ParentTexture;
                NativeDeviceChild = ParentTexture.NativeDeviceChild;
            }

            if (NativeDeviceChild == null)
            {
                ClearValue?clearValue = GetClearValue();

                ResourceDescription nativeDescription;
                switch (Dimension)
                {
                case TextureDimension.Texture1D:
                    nativeDescription = ConvertToNativeDescription1D();
                    break;

                case TextureDimension.Texture2D:
                case TextureDimension.TextureCube:
                    nativeDescription = ConvertToNativeDescription2D();
                    break;

                case TextureDimension.Texture3D:
                    nativeDescription = ConvertToNativeDescription3D();
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }

                var initialResourceState = ResourceStates.GenericRead;

                var heapType             = HeapType.Default;
                var currentResourceState = initialResourceState;
                if (Usage == GraphicsResourceUsage.Staging)
                {
                    heapType            = HeapType.Readback;
                    NativeResourceState = ResourceStates.CopyDestination;
                    int totalSize = ComputeBufferTotalSize();
                    nativeDescription = ResourceDescription.Buffer(totalSize);

                    // Staging textures on DirectX 12 use buffer internally
                    NativeDeviceChild = GraphicsDevice.NativeDevice.CreateCommittedResource(new HeapProperties(heapType), HeapFlags.None, nativeDescription, NativeResourceState);

                    if (hasInitData)
                    {
                        var commandList = GraphicsDevice.NativeCopyCommandList;
                        commandList.Reset(GraphicsDevice.NativeCopyCommandAllocator, null);

                        Resource uploadResource;
                        int      uploadOffset;
                        var      uploadMemory = GraphicsDevice.AllocateUploadBuffer(totalSize, out uploadResource, out uploadOffset, TextureSubresourceAlignment);

                        // Copy data to the upload buffer
                        int dataBoxIndex         = 0;
                        var uploadMemoryMipStart = uploadMemory;
                        for (int arraySlice = 0; arraySlice < ArraySize; arraySlice++)
                        {
                            for (int mipLevel = 0; mipLevel < MipLevels; mipLevel++)
                            {
                                var databox     = dataBoxes[dataBoxIndex++];
                                var mipHeight   = CalculateMipSize(Width, mipLevel);
                                var mipRowPitch = ComputeRowPitch(mipLevel);

                                var uploadMemoryCurrent = uploadMemoryMipStart;
                                var dataPointerCurrent  = databox.DataPointer;
                                for (int rowIndex = 0; rowIndex < mipHeight; rowIndex++)
                                {
                                    Utilities.CopyMemory(uploadMemoryCurrent, dataPointerCurrent, mipRowPitch);
                                    uploadMemoryCurrent += mipRowPitch;
                                    dataPointerCurrent  += databox.RowPitch;
                                }

                                uploadMemoryMipStart += ComputeSubresourceSize(mipLevel);
                            }
                        }

                        // Copy from upload heap to actual resource
                        commandList.CopyBufferRegion(NativeResource, 0, uploadResource, uploadOffset, totalSize);

                        commandList.Close();

                        StagingFenceValue = 0;
                        GraphicsDevice.WaitCopyQueue();
                    }

                    return;
                }

                if (hasInitData)
                {
                    currentResourceState = ResourceStates.CopyDestination;
                }

                // TODO D3D12 move that to a global allocator in bigger committed resources
                NativeDeviceChild = GraphicsDevice.NativeDevice.CreateCommittedResource(new HeapProperties(heapType), HeapFlags.None, nativeDescription, currentResourceState, clearValue);
                GraphicsDevice.RegisterTextureMemoryUsage(SizeInBytes);

                if (hasInitData)
                {
                    // Trigger copy
                    var commandList = GraphicsDevice.NativeCopyCommandList;
                    commandList.Reset(GraphicsDevice.NativeCopyCommandAllocator, null);

                    long textureCopySize;
                    var  placedSubresources = new PlacedSubResourceFootprint[dataBoxes.Length];
                    var  rowCounts          = new int[dataBoxes.Length];
                    var  rowSizeInBytes     = new long[dataBoxes.Length];
                    GraphicsDevice.NativeDevice.GetCopyableFootprints(ref nativeDescription, 0, dataBoxes.Length, 0, placedSubresources, rowCounts, rowSizeInBytes, out textureCopySize);

                    SharpDX.Direct3D12.Resource uploadResource;
                    int uploadOffset;
                    var uploadMemory = GraphicsDevice.AllocateUploadBuffer((int)textureCopySize, out uploadResource, out uploadOffset, TextureSubresourceAlignment);

                    for (int i = 0; i < dataBoxes.Length; ++i)
                    {
                        var databox     = dataBoxes[i];
                        var dataPointer = databox.DataPointer;

                        var rowCount     = rowCounts[i];
                        var sliceCount   = placedSubresources[i].Footprint.Depth;
                        var rowSize      = (int)rowSizeInBytes[i];
                        var destRowPitch = placedSubresources[i].Footprint.RowPitch;

                        // Memcpy data
                        for (int z = 0; z < sliceCount; ++z)
                        {
                            var uploadMemoryCurrent = uploadMemory + (int)placedSubresources[i].Offset + z * destRowPitch * rowCount;
                            var dataPointerCurrent  = dataPointer + z * databox.SlicePitch;
                            for (int y = 0; y < rowCount; ++y)
                            {
                                Utilities.CopyMemory(uploadMemoryCurrent, dataPointerCurrent, rowSize);
                                uploadMemoryCurrent += destRowPitch;
                                dataPointerCurrent  += databox.RowPitch;
                            }
                        }

                        // Adjust upload offset (circular dependency between GetCopyableFootprints and AllocateUploadBuffer)
                        placedSubresources[i].Offset += uploadOffset;

                        commandList.CopyTextureRegion(new TextureCopyLocation(NativeResource, i), 0, 0, 0, new TextureCopyLocation(uploadResource, placedSubresources[i]), null);
                    }

                    commandList.ResourceBarrierTransition(NativeResource, ResourceStates.CopyDestination, initialResourceState);
                    commandList.Close();

                    GraphicsDevice.WaitCopyQueue();
                }

                NativeResourceState = initialResourceState;
            }

            NativeShaderResourceView  = GetShaderResourceView(ViewType, ArraySlice, MipLevel);
            NativeRenderTargetView    = GetRenderTargetView(ViewType, ArraySlice, MipLevel);
            NativeDepthStencilView    = GetDepthStencilView(out HasStencil);
            NativeUnorderedAccessView = GetUnorderedAccessView(ViewType, ArraySlice, MipLevel);
        }
Example #10
0
 private ResourceDescription ConvertToNativeDescription3D()
 {
     return(ResourceDescription.Texture3D((SharpDX.DXGI.Format)textureDescription.Format, textureDescription.Width, textureDescription.Height, (short)textureDescription.Depth, (short)textureDescription.MipLevels, GetBindFlagsFromTextureFlags(textureDescription.Flags)));
 }
Example #11
0
        private ResourceDescription ConvertToNativeDescription2D()
        {
            var format = (SharpDX.DXGI.Format)textureDescription.Format;
            var flags  = textureDescription.Flags;

            // If the texture is going to be bound on the depth stencil, for to use TypeLess format
            if (IsDepthStencil)
            {
                if (IsShaderResource && GraphicsDevice.Features.CurrentProfile < GraphicsProfile.Level_10_0)
                {
                    throw new NotSupportedException(String.Format("ShaderResourceView for DepthStencil Textures are not supported for Graphics profile < 10.0 (Current: [{0}])", GraphicsDevice.Features.CurrentProfile));
                }
                else
                {
                    // Determine TypeLess Format and ShaderResourceView Format
                    if (GraphicsDevice.Features.CurrentProfile < GraphicsProfile.Level_10_0)
                    {
                        switch (textureDescription.Format)
                        {
                        case PixelFormat.D16_UNorm:
                            format = SharpDX.DXGI.Format.D16_UNorm;
                            break;

                        case PixelFormat.D32_Float:
                            format = SharpDX.DXGI.Format.D32_Float;
                            break;

                        case PixelFormat.D24_UNorm_S8_UInt:
                            format = SharpDX.DXGI.Format.D24_UNorm_S8_UInt;
                            break;

                        case PixelFormat.D32_Float_S8X24_UInt:
                            format = SharpDX.DXGI.Format.D32_Float_S8X24_UInt;
                            break;

                        default:
                            throw new NotSupportedException(String.Format("Unsupported DepthFormat [{0}] for depth buffer", textureDescription.Format));
                        }
                    }
                    else
                    {
                        switch (textureDescription.Format)
                        {
                        case PixelFormat.D16_UNorm:
                            format = SharpDX.DXGI.Format.R16_Typeless;
                            break;

                        case PixelFormat.D32_Float:
                            format = SharpDX.DXGI.Format.R32_Typeless;
                            break;

                        case PixelFormat.D24_UNorm_S8_UInt:
                            //format = SharpDX.DXGI.Format.D24_UNorm_S8_UInt;
                            format = SharpDX.DXGI.Format.R24G8_Typeless;
                            break;

                        case PixelFormat.D32_Float_S8X24_UInt:
                            format = SharpDX.DXGI.Format.R32G8X24_Typeless;
                            break;

                        default:
                            throw new NotSupportedException(String.Format("Unsupported DepthFormat [{0}] for depth buffer", textureDescription.Format));
                        }
                    }
                }
            }

            return(ResourceDescription.Texture2D(format, textureDescription.Width, textureDescription.Height, (short)textureDescription.ArraySize, (short)textureDescription.MipLevels, (short)textureDescription.MultisampleCount, 0, GetBindFlagsFromTextureFlags(flags)));
        }
Example #12
0
 private ResourceDescription ConvertToNativeDescription1D()
 {
     return(ResourceDescription.Texture1D((SharpDX.DXGI.Format)textureDescription.Format, textureDescription.Width, (short)textureDescription.ArraySize, (short)textureDescription.MipLevels, GetBindFlagsFromTextureFlags(textureDescription.Flags)));
 }
 public static void PopulateConductingEquipmentProperties(FTN.ConductingEquipment cimConductingEquipment, ResourceDescription rd)
 {
     if ((cimConductingEquipment != null) && (rd != null))
     {
         PowerTransformerConverter.PopulateEquipmentProperties(cimConductingEquipment, rd);
     }
 }
        public static void PopulateRegulatingControlProperties(FTN.RegulatingControl cimRegulatingControl, ResourceDescription rd)
        {
            if ((cimRegulatingControl != null) && (rd != null))
            {
                PowerTransformerConverter.PopulatePowerSystemResourceProperties(cimRegulatingControl, rd);

                if (cimRegulatingControl.DiscreteHasValue)
                {
                    rd.AddProperty(new Property(ModelCode.REGUCONTROL_DISCRETE, cimRegulatingControl.Discrete));
                }

                /*   if (cimRegulatingControl.ModeHasValue)
                 * {
                 *     rd.AddProperty(new Property(ModelCode.REGUCONTROL_MODE, (short)GetDMSRegulatingControlModeKind(cimRegulatingControl.Mode)));
                 * }
                 * if (cimRegulatingControl.MonitoredPhaseHasValue)
                 * {
                 *     rd.AddProperty(new Property(ModelCode.REGUCONTROL_MONPHASE, (short)GetDMSPhaseCode(cimRegulatingControl.MonitoredPhase)));
                 * }*/
            }
        }
        private async Task <ITopologyElement> GetPopulatedElement(ResourceDescription rs)
        {
            string verboseMessage = $"{baseLogString} entering GetPopulatedElement method.";

            Logger.LogVerbose(verboseMessage);

            ITopologyElement topologyElement = new TopologyElement(rs.Id);

            try
            {
                DMSType type = GetDMSTypeOfTopologyElement(rs.Id);
                topologyElement.Mrid        = rs.GetProperty(ModelCode.IDOBJ_MRID).AsString();
                topologyElement.Name        = rs.GetProperty(ModelCode.IDOBJ_NAME).AsString();
                topologyElement.Description = rs.GetProperty(ModelCode.IDOBJ_DESCRIPTION).AsString();
                topologyElement.DmsType     = type.ToString();

                if (rs.ContainsProperty(ModelCode.CONDUCTINGEQUIPMENT_ISREMOTE))
                {
                    topologyElement.IsRemote = rs.GetProperty(ModelCode.CONDUCTINGEQUIPMENT_ISREMOTE).AsBool();
                }
                else
                {
                    topologyElement.IsRemote = false;
                }

                if (rs.ContainsProperty(ModelCode.BREAKER_NORECLOSING))
                {
                    topologyElement.NoReclosing = rs.GetProperty(ModelCode.BREAKER_NORECLOSING).AsBool();
                    if (!topologyElement.NoReclosing)
                    {
                        topologyElement = new Recloser(topologyElement);
                    }
                }
                else
                {
                    topologyElement.NoReclosing = true;
                }

                if (rs.ContainsProperty(ModelCode.CONDUCTINGEQUIPMENT_BASEVOLTAGE))
                {
                    long baseVoltageGid = rs.GetProperty(ModelCode.CONDUCTINGEQUIPMENT_BASEVOLTAGE).AsLong();

                    var voltageResult = await BaseVoltages.TryGetValueAsync(baseVoltageGid);

                    if (voltageResult.HasValue)
                    {
                        topologyElement.NominalVoltage = voltageResult.Value;
                    }
                    else if (baseVoltageGid == 0)
                    {
                        Logger.LogError($"{baseLogString} GetPopulatedElement => BaseVoltage with GID {baseVoltageGid:X16} does not exist in baseVoltages collection.");
                    }
                }
                else
                {
                    topologyElement.NominalVoltage = 0;
                }

                if (rs.ContainsProperty(ModelCode.BREAKER_NORECLOSING) && !rs.GetProperty(ModelCode.BREAKER_NORECLOSING).AsBool())
                {
                    var reclosersResult = await Reclosers.TryGetValueAsync(ReliableDictionaryNames.Reclosers);

                    if (reclosersResult.HasValue)
                    {
                        var reclosers = reclosersResult.Value;
                        reclosers.Add(topologyElement.Id);

                        await Reclosers.SetAsync(ReliableDictionaryNames.Reclosers, reclosers);
                    }
                    else
                    {
                        Logger.LogWarning($"{baseLogString} Reliable collection '{ReliableDictionaryNames.Reclosers}' was not defined yet. Handling...");
                        await Reclosers.SetAsync(ReliableDictionaryNames.Reclosers, new HashSet <long>() { topologyElement.Id });
                    }
                }

                if (rs.ContainsProperty(ModelCode.ENERGYCONSUMER_TYPE))
                {
                    topologyElement = new EnergyConsumer(topologyElement)
                    {
                        Type = (EnergyConsumerType)rs.GetProperty(ModelCode.ENERGYCONSUMER_TYPE).AsEnum()
                    };
                }

                if (type == DMSType.SYNCHRONOUSMACHINE)
                {
                    topologyElement = new SynchronousMachine(topologyElement);

                    if (rs.ContainsProperty(ModelCode.SYNCHRONOUSMACHINE_CAPACITY))
                    {
                        ((SynchronousMachine)topologyElement).Capacity = rs.GetProperty(ModelCode.SYNCHRONOUSMACHINE_CAPACITY).AsFloat();
                    }

                    if (rs.ContainsProperty(ModelCode.SYNCHRONOUSMACHINE_CURRENTREGIME))
                    {
                        ((SynchronousMachine)topologyElement).CurrentRegime = rs.GetProperty(ModelCode.SYNCHRONOUSMACHINE_CURRENTREGIME).AsFloat();
                    }
                }
            }
            catch (Exception e)
            {
                Logger.LogError($"{baseLogString} GetPopulatedElement => Could not get all properties." +
                                $"{Environment.NewLine}Excepiton message: {e.Message}" +
                                $"{Environment.NewLine} Stack trace: {e.StackTrace}");
            }
            return(topologyElement);
        }
        public void CreateShaderResources()
        {
            // Create the output resource. The dimensions and format should match the swap-chain
            ResourceDescription resDesc = new ResourceDescription();

            resDesc.DepthOrArraySize  = 1;
            resDesc.Dimension         = ResourceDimension.Texture2D;
            resDesc.Format            = Format.R8G8B8A8_UNorm; // The backbuffer is actually DXGI_FORMAT_R8G8B8A8_UNORM_SRGB, but sRGB formats can't be used with UAVs. We will convert to sRGB ourselves in the shader
            resDesc.Flags             = ResourceFlags.AllowUnorderedAccess;
            resDesc.Height            = mSwapChainRect.Height;
            resDesc.Layout            = TextureLayout.Unknown;
            resDesc.MipLevels         = 1;
            resDesc.SampleDescription = new SampleDescription(1, 0);
            resDesc.Width             = mSwapChainRect.Width;
            mpOutputResource          = mpDevice.CreateCommittedResource(AccelerationStructures.kDefaultHeapProps, HeapFlags.None, resDesc, ResourceStates.CopySource, null); // Starting as copy-source to simplify onFrameRender()

            // Create an SRV/UAV/VertexSRV/IndexSRV descriptor heap. Need 4 entries - 1 SRV for the scene, 1 UAV for the output, 1 SRV for VertexBuffer, 1 SRV for IndexBuffer
            mpSrvUavHeap = this.context.CreateDescriptorHeap(mpDevice, 4, DescriptorHeapType.ConstantBufferViewShaderResourceViewUnorderedAccessView, true);

            // Create the UAV. Based on the root signature we created it should be the first entry
            UnorderedAccessViewDescription uavDesc = new UnorderedAccessViewDescription();

            uavDesc.ViewDimension = UnorderedAccessViewDimension.Texture2D;
            mpDevice.CreateUnorderedAccessView(mpOutputResource, null, uavDesc, mpSrvUavHeap.GetCPUDescriptorHandleForHeapStart());

            // Create the TLAS SRV right after the UAV. Note that we are using a different SRV desc here
            ShaderResourceViewDescription srvDesc = new ShaderResourceViewDescription();

            srvDesc.ViewDimension                            = ShaderResourceViewDimension.RaytracingAccelerationStructure;
            srvDesc.Shader4ComponentMapping                  = D3D12DefaultShader4ComponentMapping;
            srvDesc.RaytracingAccelerationStructure          = new RaytracingAccelerationStructureShaderResourceView();
            srvDesc.RaytracingAccelerationStructure.Location = mpTopLevelAS.GPUVirtualAddress;
            CpuDescriptorHandle srvHandle = mpSrvUavHeap.GetCPUDescriptorHandleForHeapStart();

            srvHandle.Ptr += mpDevice.GetDescriptorHandleIncrementSize(DescriptorHeapType.ConstantBufferViewShaderResourceViewUnorderedAccessView);
            mpDevice.CreateShaderResourceView(null, srvDesc, srvHandle);

            // Index SRV
            var indexSRVDesc = new ShaderResourceViewDescription()
            {
                ViewDimension           = ShaderResourceViewDimension.Buffer,
                Shader4ComponentMapping = D3D12DefaultShader4ComponentMapping,
                Format = Format.R32_Typeless,
                Buffer =
                {
                    NumElements         = (int)(this.acs.IndexCount * 2 / 4),
                    Flags               = BufferShaderResourceViewFlags.Raw,
                    StructureByteStride =                                  0,
                }
            };

            srvHandle.Ptr += mpDevice.GetDescriptorHandleIncrementSize(DescriptorHeapType.ConstantBufferViewShaderResourceViewUnorderedAccessView);
            indexSRVHandle = srvHandle;
            mpDevice.CreateShaderResourceView(this.acs.IndexBuffer, indexSRVDesc, indexSRVHandle);

            // Vertex SRV
            var vertexSRVDesc = new ShaderResourceViewDescription()
            {
                ViewDimension           = ShaderResourceViewDimension.Buffer,
                Shader4ComponentMapping = D3D12DefaultShader4ComponentMapping,
                Format = Format.Unknown,
                Buffer =
                {
                    NumElements         = (int)this.acs.VertexCount,
                    Flags               = BufferShaderResourceViewFlags.None,
                    StructureByteStride = Unsafe.SizeOf <VertexPositionNormalTangentTexture>(),
                }
            };

            srvHandle.Ptr  += mpDevice.GetDescriptorHandleIncrementSize(DescriptorHeapType.ConstantBufferViewShaderResourceViewUnorderedAccessView);
            vertexSRVHandle = srvHandle;
            mpDevice.CreateShaderResourceView(this.acs.VertexBuffer, vertexSRVDesc, vertexSRVHandle);
        }
 void PopulateConnectivityNodeProperties(ConnectivityNode x, ResourceDescription rd)
 {
     PopulateIdentifiedObjectProperties(x, rd);
 }
 public ListenerSettingCommand(ModuleService service, ResourceDescription resource, ModuleService newServiceSettings, ModuleCommandType commandType, int listDepth)
     : base(service, resource, newServiceSettings, commandType, listDepth)
 {
 }
 void PopulatePowerSystemResourceProperties(PowerSystemResource x, ResourceDescription rd)
 {
     PopulateIdentifiedObjectProperties(x, rd);
 }
        public void PopulateProperties(IDClass idc, ResourceDescription rd)
        {
            if (idc == null || rd == null)
            {
                return;
            }

            switch (ModelCodeHelper.GetTypeFromGID(rd.Id))
            {
            case DMSType.ACLineSegment:
                PopulateACLineSegmentProperties((ACLineSegment)idc, rd);
                break;

            case DMSType.Analog:
                PopulateAnalogProperties((Analog)idc, rd);
                break;

            case DMSType.BaseVoltage:
                PopulateBaseVoltageProperties((BaseVoltage)idc, rd);
                break;

            case DMSType.Breaker:
                PopulateBreakerProperties((Breaker)idc, rd);
                break;

            case DMSType.ConnectivityNode:
                PopulateConnectivityNodeProperties((ConnectivityNode)idc, rd);
                break;

            case DMSType.Disconnector:
                PopulateDisconnectorProperties((Disconnector)idc, rd);
                break;

            case DMSType.Discrete:
                PopulateDiscreteProperties((Discrete)idc, rd);
                break;

            case DMSType.DistributionGenerator:
                PopulateDistributionGeneratorProperties((DistributionGenerator)idc, rd);
                break;

            case DMSType.EnergyConsumer:
                PopulateEnergyConsumerProperties((EnergyConsumer)idc, rd);
                break;

            case DMSType.EnergySource:
                PopulateEnergySourceProperties((EnergySource)idc, rd);
                break;

            case DMSType.PowerTransformer:
                PopulatePowerTransformerProperties((PowerTransformer)idc, rd);
                break;

            case DMSType.RatioTapChanger:
                PopulateRatioTapChangerProperties((RatioTapChanger)idc, rd);
                break;

            case DMSType.Recloser:
                PopulateRecloserProperties((Recloser)idc, rd);
                break;

            case DMSType.Terminal:
                PopulateTerminalProperties((Terminal)idc, rd);
                break;

            case DMSType.TransformerWinding:
                PopulateTransformerWindingProperties((TransformerWinding)idc, rd);
                break;
            }
        }
 void PopulateEquipmentProperties(Equipment x, ResourceDescription rd)
 {
     PopulatePowerSystemResourceProperties(x, rd);
 }
        private void LoadRenderTargetData()
        {
            // Define the geometry for a quad.
            Vertex[] quadBuffer = new Vertex[]
            {
                new Vertex()
                {
                    position = new Vector3(-1, -1, 0), textureCoordinate = new Vector3(0, 1, 0)
                },
                new Vertex()
                {
                    position = new Vector3(-1, 1, 0), textureCoordinate = new Vector3(0, 0, 0)
                },
                new Vertex()
                {
                    position = new Vector3(1, -1, 0), textureCoordinate = new Vector3(1, 1, 0)
                },

                new Vertex()
                {
                    position = new Vector3(-1, 1, 0), textureCoordinate = new Vector3(0, 0, 0)
                },
                new Vertex()
                {
                    position = new Vector3(1, 1, 0), textureCoordinate = new Vector3(1, 0, 0)
                },
                new Vertex()
                {
                    position = new Vector3(1, -1, 0), textureCoordinate = new Vector3(1, 1, 0)
                },
            };

            int vertexBufferSize = Utilities.SizeOf(quadBuffer);

            quadVertexBuffer = device.CreateCommittedResource(new HeapProperties(HeapType.Upload), HeapFlags.None, ResourceDescription.Buffer(vertexBufferSize), ResourceStates.GenericRead);

            IntPtr pointer = quadVertexBuffer.Map(0);

            Utilities.Write(pointer, quadBuffer, 0, 6);
            quadVertexBuffer.Unmap(0);


            quadVertexBufferView = new VertexBufferView();
            quadVertexBufferView.BufferLocation = quadVertexBuffer.GPUVirtualAddress;
            quadVertexBufferView.StrideInBytes  = Utilities.SizeOf <Vertex>();
            quadVertexBufferView.SizeInBytes    = vertexBufferSize;


            //Render Target
            ClearValue renderTargetOptimizedClearValue = new ClearValue()
            {
                Format = Format.R8G8B8A8_UNorm,
                Color  = new Vector4(0, 0.2F, 0.4f, 1)
            };

            postProcessingRenderTarget = device.CreateCommittedResource(new HeapProperties(HeapType.Default), HeapFlags.None,
                                                                        new ResourceDescription(ResourceDimension.Texture2D, 0, TargetSize, TargetSize, 1, 0, Format.R8G8B8A8_UNorm, 1, 0, TextureLayout.Unknown, ResourceFlags.AllowRenderTarget), ResourceStates.RenderTarget, renderTargetOptimizedClearValue);

            CpuDescriptorHandle rtvHandle = renderTargetViewHeap.CPUDescriptorHandleForHeapStart + device.GetDescriptorHandleIncrementSize(DescriptorHeapType.RenderTargetView) * 2;

            device.CreateRenderTargetView(postProcessingRenderTarget, null, rtvHandle);


            //Shader Resource View
            int D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING = 5768;
            ShaderResourceViewDescription desc           = new ShaderResourceViewDescription
            {
                Dimension = ShaderResourceViewDimension.Texture2D,
                Format    = postProcessingRenderTarget.Description.Format,
                Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING,
            };

            desc.Texture2D.MipLevels           = 1;
            desc.Texture2D.MostDetailedMip     = 0;
            desc.Texture2D.ResourceMinLODClamp = 0;

            //Create Render Target View
            //position start after first constant buffer and textures
            device.CreateShaderResourceView(postProcessingRenderTarget, desc, resourceViewHeap.CPUDescriptorHandleForHeapStart + device.GetDescriptorHandleIncrementSize(DescriptorHeapType.ConstantBufferViewShaderResourceViewUnorderedAccessView) * renderTargetViewPosition);

            //Depth Target
            ClearValue depthOptimizedClearValue = new ClearValue()
            {
                Format       = Format.D32_Float,
                DepthStencil = new DepthStencilValue()
                {
                    Depth = 1.0F, Stencil = 0
                },
            };

            postProcessingDepthTarget = device.CreateCommittedResource(new HeapProperties(HeapType.Default), HeapFlags.None,
                                                                       new ResourceDescription(ResourceDimension.Texture2D, 0, TargetSize, TargetSize, 1, 0, Format.D32_Float, 1, 0, TextureLayout.Unknown, ResourceFlags.AllowDepthStencil), ResourceStates.DepthWrite, depthOptimizedClearValue);

            CpuDescriptorHandle dpsHandle = depthStencilViewHeap.CPUDescriptorHandleForHeapStart + device.GetDescriptorHandleIncrementSize(DescriptorHeapType.DepthStencilView);

            device.CreateDepthStencilView(postProcessingDepthTarget, null, dpsHandle);


            //Shader

#if DEBUG
            var vertexShader = new ShaderBytecode(SharpDX.D3DCompiler.ShaderBytecode.CompileFromFile("postProcessing.hlsl", "VSMain", "vs_5_0", SharpDX.D3DCompiler.ShaderFlags.Debug));
#else
            var vertexShader = new ShaderBytecode(SharpDX.D3DCompiler.ShaderBytecode.CompileFromFile("shaders.hlsl", "VSMain", "vs_5_0"));
#endif

#if DEBUG
            var pixelShader = new ShaderBytecode(SharpDX.D3DCompiler.ShaderBytecode.CompileFromFile("postProcessing.hlsl", "PSMain", "ps_5_0", SharpDX.D3DCompiler.ShaderFlags.Debug));
#else
            var pixelShader = new ShaderBytecode(SharpDX.D3DCompiler.ShaderBytecode.CompileFromFile("shaders.hlsl", "PSMain", "ps_5_0"));
#endif

            // Define the vertex input layout.
            InputElement[] inputElementDescs = new InputElement[]
            {
                new InputElement("POSITION", 0, Format.R32G32B32_Float, 0, 0),
                new InputElement("NORMAL", 0, Format.R32G32B32_Float, 12, 0),
                new InputElement("TEXCOORD", 0, Format.R32G32B32_Float, 24, 0)
            };

            // Describe and create the graphics pipeline state object (PSO).
            GraphicsPipelineStateDescription psoDesc = new GraphicsPipelineStateDescription()
            {
                InputLayout           = new InputLayoutDescription(inputElementDescs),
                RootSignature         = rootSignature,
                VertexShader          = vertexShader,
                PixelShader           = pixelShader,
                RasterizerState       = RasterizerStateDescription.Default(),
                BlendState            = BlendStateDescription.Default(),
                DepthStencilFormat    = SharpDX.DXGI.Format.D32_Float,
                DepthStencilState     = DepthStencilStateDescription.Default(),
                SampleMask            = int.MaxValue,
                PrimitiveTopologyType = PrimitiveTopologyType.Triangle,
                RenderTargetCount     = 1,
                Flags             = PipelineStateFlags.None,
                SampleDescription = new SharpDX.DXGI.SampleDescription(1, 0),
                StreamOutput      = new StreamOutputDescription()
            };
            psoDesc.RenderTargetFormats[0] = SharpDX.DXGI.Format.R8G8B8A8_UNorm;

            postProcessingPipelineState = device.CreateGraphicsPipelineState(psoDesc);

            //constant Buffer
            int constantBufferSize = (Utilities.SizeOf <PostProcessingData>() + 255) & ~255;
            postProcessingConstantBuffer = device.CreateCommittedResource(new HeapProperties(HeapType.Upload), HeapFlags.None, ResourceDescription.Buffer(constantBufferSize), ResourceStates.GenericRead);

            //constant buffer
            ConstantBufferViewDescription cbvDesc = new ConstantBufferViewDescription()
            {
                BufferLocation = postProcessingConstantBuffer.GPUVirtualAddress,
                SizeInBytes    = constantBufferSize
            };

            var heapPosition = resourceViewHeap.CPUDescriptorHandleForHeapStart + device.GetDescriptorHandleIncrementSize(DescriptorHeapType.ConstantBufferViewShaderResourceViewUnorderedAccessView) * renderTargetConstantBufferPosition;
            device.CreateConstantBufferView(cbvDesc, heapPosition);
        }
 void PopulateTapChangerProperties(TapChanger x, ResourceDescription rd)
 {
     PopulatePowerSystemResourceProperties(x, rd);
 }
Example #24
0
 public override void Add(ResourceDescription description)
 {
     // NOOP
 }
 void PopulateTapChangerProperties(ConductingEquipment x, ResourceDescription rd)
 {
     PopulatePowerSystemResourceProperties(x, rd);
 }
        private void LoadAssets()
        {
            // Create the root signature description.
            var rootSignatureDesc = new RootSignatureDescription(RootSignatureFlags.AllowInputAssemblerInputLayout,
                                                                 // Root Parameters
                                                                 new[]
            {
                new RootParameter(ShaderVisibility.Vertex,
                                  new DescriptorRange()
                {
                    RangeType          = DescriptorRangeType.ConstantBufferView,
                    BaseShaderRegister = 0,
                    OffsetInDescriptorsFromTableStart = int.MinValue,
                    DescriptorCount = 1
                })
            });

            rootSignature = device.CreateRootSignature(rootSignatureDesc.Serialize());

            // Create the pipeline state, which includes compiling and loading shaders.
#if DEBUG
            var vertexShader = new ShaderBytecode(SharpDX.D3DCompiler.ShaderBytecode.CompileFromFile("shaders.hlsl", "VSMain", "vs_5_0", SharpDX.D3DCompiler.ShaderFlags.Debug));
#else
            var vertexShader = new ShaderBytecode(SharpDX.D3DCompiler.ShaderBytecode.CompileFromFile("shaders.hlsl", "VSMain", "vs_5_0"));
#endif

#if DEBUG
            var pixelShader = new ShaderBytecode(SharpDX.D3DCompiler.ShaderBytecode.CompileFromFile("shaders.hlsl", "PSMain", "ps_5_0", SharpDX.D3DCompiler.ShaderFlags.Debug));
#else
            var pixelShader = new ShaderBytecode(SharpDX.D3DCompiler.ShaderBytecode.CompileFromFile("shaders.hlsl", "PSMain", "ps_5_0"));
#endif

            // Define the vertex input layout.
            var inputElementDescs = new []
            {
                new InputElement("POSITION", 0, Format.R32G32B32_Float, 0, 0),
                new InputElement("COLOR", 0, Format.R32G32B32A32_Float, 12, 0)
            };

            // Describe and create the graphics pipeline state object (PSO).
            var psoDesc = new GraphicsPipelineStateDescription()
            {
                InputLayout        = new InputLayoutDescription(inputElementDescs),
                RootSignature      = rootSignature,
                VertexShader       = vertexShader,
                PixelShader        = pixelShader,
                RasterizerState    = RasterizerStateDescription.Default(),
                BlendState         = BlendStateDescription.Default(),
                DepthStencilFormat = SharpDX.DXGI.Format.D32_Float,
                DepthStencilState  = new DepthStencilStateDescription()
                {
                    IsDepthEnabled = false, IsStencilEnabled = false
                },
                SampleMask            = int.MaxValue,
                PrimitiveTopologyType = PrimitiveTopologyType.Triangle,
                RenderTargetCount     = 1,
                Flags             = PipelineStateFlags.None,
                SampleDescription = new SharpDX.DXGI.SampleDescription(1, 0),
                StreamOutput      = new StreamOutputDescription()
            };
            psoDesc.RenderTargetFormats[0] = SharpDX.DXGI.Format.R8G8B8A8_UNorm;

            pipelineState = device.CreateGraphicsPipelineState(psoDesc);

            // Create the command list.
            commandList = device.CreateCommandList(CommandListType.Direct, commandAllocator, pipelineState);

            // Create the vertex buffer.
            float aspectRatio = viewport.Width / viewport.Height;

            // Define the geometry for a triangle.
            var triangleVertices = new []
            {
                new Vertex()
                {
                    Position = new Vector3(0.0f, 0.25f * aspectRatio, 0.0f), Color = new Vector4(1.0f, 0.0f, 0.0f, 1.0f)
                },
                new Vertex()
                {
                    Position = new Vector3(0.25f, -0.25f * aspectRatio, 0.0f), Color = new Vector4(0.0f, 1.0f, 0.0f, 1.0f)
                },
                new Vertex()
                {
                    Position = new Vector3(-0.25f, -0.25f * aspectRatio, 0.0f), Color = new Vector4(0.0f, 0.0f, 1.0f, 1.0f)
                },
            };

            int vertexBufferSize = Utilities.SizeOf(triangleVertices);

            // Note: using upload heaps to transfer static data like vert buffers is not
            // recommended. Every time the GPU needs it, the upload heap will be marshalled
            // over. Please read up on Default Heap usage. An upload heap is used here for
            // code simplicity and because there are very few verts to actually transfer.
            vertexBuffer = device.CreateCommittedResource(new HeapProperties(HeapType.Upload), HeapFlags.None, ResourceDescription.Buffer(vertexBufferSize), ResourceStates.GenericRead);

            // Copy the triangle data to the vertex buffer.
            IntPtr pVertexDataBegin = vertexBuffer.Map(0);
            Utilities.Write(pVertexDataBegin, triangleVertices, 0, triangleVertices.Length);
            vertexBuffer.Unmap(0);

            // Initialize the vertex buffer view.
            vertexBufferView = new VertexBufferView();
            vertexBufferView.BufferLocation = vertexBuffer.GPUVirtualAddress;
            vertexBufferView.StrideInBytes  = Utilities.SizeOf <Vertex>();
            vertexBufferView.SizeInBytes    = vertexBufferSize;

            // Command lists are created in the recording state, but there is nothing
            // to record yet. The main loop expects it to be closed, so close it now.
            commandList.Close();

            constantBuffer = device.CreateCommittedResource(new HeapProperties(HeapType.Upload), HeapFlags.None, ResourceDescription.Buffer(1024 * 64), ResourceStates.GenericRead);

            //// Describe and create a constant buffer view.
            var cbvDesc = new ConstantBufferViewDescription()
            {
                BufferLocation = constantBuffer.GPUVirtualAddress,
                SizeInBytes    = (Utilities.SizeOf <ConstantBuffer>() + 255) & ~255
            };
            device.CreateConstantBufferView(cbvDesc, constantBufferViewHeap.CPUDescriptorHandleForHeapStart);

            // Initialize and map the constant buffers. We don't unmap this until the
            // app closes. Keeping things mapped for the lifetime of the resource is okay.
            constantBufferPointer = constantBuffer.Map(0);
            Utilities.Write(constantBufferPointer, ref constantBufferData);

            // Create synchronization objects.
            fence      = device.CreateFence(0, FenceFlags.None);
            fenceValue = 1;

            // Create an event handle to use for frame synchronization.
            fenceEvent = new AutoResetEvent(false);
        }
 void PopulatePowerTransformerProperties(PowerTransformer x, ResourceDescription rd)
 {
     PopulateEquipmentProperties(x, rd);
 }
Example #28
0
        private Dictionary <DMSType, ResourceDescription> CreateResourcesForUpdate(List <long> gids)
        {
            Dictionary <DMSType, ResourceDescription> updates = new Dictionary <DMSType, ResourceDescription>(new DMSTypeComparer());
            Delta delta = new Delta();

            ResourceDescription rd          = null;
            List <ModelCode>    propertyIDs = null;
            DMSType             type;

            #region Creating resources

            foreach (long gid in gids)
            {
                type        = (DMSType)ModelCodeHelper.ExtractTypeFromGlobalId(gid);
                propertyIDs = modelResourcesDesc.GetAllPropertyIds(modelResourcesDesc.GetModelCodeFromType(type));
                rd          = new ResourceDescription(gid);

                foreach (ModelCode propertyId in propertyIDs)
                {
                    if (!modelResourcesDesc.NotSettablePropertyIds.Contains(propertyId))
                    {
                        switch (Property.GetPropertyType(propertyId))
                        {
                        case PropertyType.Bool:
                            rd.AddProperty(new Property(propertyId, true));
                            break;

                        case PropertyType.Byte:
                            rd.AddProperty(new Property(propertyId, (byte)7));
                            break;

                        case PropertyType.Int32:
                            rd.AddProperty(new Property(propertyId, (int)500));
                            break;

                        case PropertyType.Int64:
                        case PropertyType.TimeSpan:
                        case PropertyType.DateTime:
                            rd.AddProperty(new Property(propertyId, (long)3112));
                            break;

                        case PropertyType.Enum:
                            rd.AddProperty(new Property(propertyId, (short)2));
                            break;

                        case PropertyType.Reference:
                            rd.AddProperty(new Property(propertyId, (long)0));
                            break;

                        case PropertyType.Float:
                            rd.AddProperty(new Property(propertyId, (float)1.05));
                            break;

                        case PropertyType.String:
                            rd.AddProperty(new Property(propertyId, "UpdateString"));
                            break;

                        case PropertyType.Int64Vector:
                            List <long> longVector = new List <long>();
                            longVector.Add((long)20);
                            longVector.Add((long)21);
                            longVector.Add((long)22);
                            longVector.Add((long)23);
                            longVector.Add((long)24);
                            longVector.Add((long)25);
                            rd.AddProperty(new Property(propertyId, longVector));
                            break;

                        case PropertyType.FloatVector:
                            List <float> floatVector = new List <float>();
                            floatVector.Add((float)21.1);
                            floatVector.Add((float)22.2);
                            floatVector.Add((float)23.3);
                            floatVector.Add((float)24.4);
                            floatVector.Add((float)25.5);
                            rd.AddProperty(new Property(propertyId, floatVector));
                            break;

                        case PropertyType.EnumVector:
                            List <short> enumVector = new List <short>();
                            enumVector.Add((short)44);
                            enumVector.Add((short)45);
                            enumVector.Add((short)46);
                            rd.AddProperty(new Property(propertyId, enumVector));
                            break;

                        default:
                            break;
                        }
                    }
                }

                if (!updates.ContainsKey(type))
                {
                    updates.Add(type, rd);
                    delta.AddDeltaOperation(DeltaOpType.Update, rd, true);
                }
            }
            #endregion Creating resources

            #region Set references

            //SetPowerTransformerReferences(updates);
            //SetTransformerWindingReferences(updates);
            //SetWindingTestRefernces(updates);

            #endregion Set references

            return(updates);
        }
 void PopulateEnergySourceProperties(EnergySource x, ResourceDescription rd)
 {
     PopulateConductingEquipmentProperties(x, rd);
 }
        private async Task TransformToTopologyElementAsync(ResourceDescription modelEntity)
        {
            string verboseMessage = $"{baseLogString} entering TransformToTopologyElement method.";

            Logger.LogVerbose(verboseMessage);

            DMSType dmsType;

            dmsType = GetDMSTypeOfTopologyElement(modelEntity.Id);

            if (dmsType == DMSType.DISCRETE)
            {
                Measurement newDiscrete = await GetPopulatedDiscreteMeasurement(modelEntity);

                if (!await Measurements.ContainsKeyAsync(newDiscrete.Id))
                {
                    await Measurements.SetAsync(newDiscrete.Id, newDiscrete);                     //contains moze da bude false, a da kad doje ova linija na red, da vrednost bude popunjena, zato SetAsync, ali onda je sam if suvisan (ne znam da li je kljucan za neku logiku...)
                }
                var measurementProviderClient = MeasurementProviderClient.CreateClient();
                await measurementProviderClient.AddDiscreteMeasurement(newDiscrete as DiscreteMeasurement);
            }
            else if (dmsType == DMSType.ANALOG)
            {
                Measurement newAnalog = await GetPopulatedAnalogMeasurement(modelEntity);

                if (!await Measurements.ContainsKeyAsync(newAnalog.Id))
                {
                    await Measurements.SetAsync(newAnalog.Id, newAnalog);                     //contains moze da bude false, a da kad doje ova linija na red, da vrednost bude popunjena, zato SetAsync, ali onda je sam if suvisan (ne znam da li je kljucan za neku logiku...)
                }
                var measurementProviderClient = MeasurementProviderClient.CreateClient();
                await measurementProviderClient.AddAnalogMeasurement(newAnalog as AnalogMeasurement);
            }
            else if (dmsType != DMSType.MASK_TYPE && dmsType != DMSType.BASEVOLTAGE)
            {
                ITopologyElement newElement = await GetPopulatedElement(modelEntity);

                //lock (syncObj)
                //{
                if (!await TopologyElements.ContainsKeyAsync(newElement.Id))
                {
                    await TopologyElements.SetAsync(newElement.Id, newElement);                     //contains moze da bude false, a da kad doje ova linija na red, da vrednost bude popunjena, zato SetAsync, ali onda je sam if suvisan (ne znam da li je kljucan za neku logiku...)
                }
                else
                {
                    Logger.LogDebug($"{baseLogString} TransformToTopologyElementAsync => TopologyElements contain key {newElement.Id:X16}");
                }
                //}

                if (dmsType == DMSType.ENERGYSOURCE)
                {
                    var energySourcesResult = await EnergySources.TryGetValueAsync(ReliableDictionaryNames.EnergySources);

                    if (energySourcesResult.HasValue)
                    {
                        var energySources = energySourcesResult.Value;
                        energySources.Add(newElement.Id);

                        await EnergySources.SetAsync(ReliableDictionaryNames.EnergySources, energySources);
                    }
                    else
                    {
                        Logger.LogWarning($"{baseLogString} Reliable collection '{ReliableDictionaryNames.EnergySources}' was not defined yet. Handling...");
                        await EnergySources.SetAsync(ReliableDictionaryNames.EnergySources, new List <long>() { newElement.Id });
                    }
                }

                //lock (syncObj)
                //{
                if (!await ElementConnections.ContainsKeyAsync(modelEntity.Id))
                {
                    await ElementConnections.SetAsync(modelEntity.Id, await GetAllReferencedElements(modelEntity));                     //contains moze da bude false, a da kad doje ova linija na red, da vrednost bude popunjena, zato SetAsync, ali onda je sam if suvisan (ne znam da li je kljucan za neku logiku...)
                }
                else
                {
                    Logger.LogDebug($"{baseLogString} TransformToTopologyElementAsync => ElementConnections contain key {modelEntity.Id:X16}");
                }
                //}
            }
        }
 void PopulateProtectedSwitchProperties(ProtectedSwitch x, ResourceDescription rd)
 {
     PopulateSwitchProperties(x, rd);
 }
Example #32
0
        /// <summary>
        /// Method which handle input arguments and call appropriate actions
        /// </summary>
        /// <param name="args"></param>
        public void HandleAndProvide(string[] args)
        {
            #region Test data as they are send from cmLocal or console

            //------------------------------------------------
            ////Add Test Args
            //"C:\Program Files (x86)\Atomia\AutomationServer\Common\Modules\Atomia.Provisioning.Modules.Folders.exe" Files BeginTransaction Add {"RootFolder":"c:\\TestProvisioningExample\\"} {"FileName":"TestFile.txt","ParentFolder":"ChangeMe","FileContent":"123"}
            //args = new string[5];
            //args[0] = "Files";
            //args[1] = "BeginTransaction";
            //args[2] = "Add";
            //args[3] = \"RootFolder\":\"c:\\TestProvisioningExample\\\";
            //args[4] = "{\"FileName\":\"TestFile.txt\",\"ParentFolder\":\"ChangeMe\",\"FileContent\":\"123\"}";

            //Modify Test Args
            //Files BeginTransaction Modify {"RootFolder":"c:\\TestProvisioningExample\\"} {"FileName":"TestFile.txt","ParentFolder":"ChangeMe","FileContent":"1234"} {"FileName":"TestFile.txt","ParentFolder":"ChangeMe","FileContent":"12345"}
            //args = new string[6];
            //args[0] = "Files";
            //args[1] = "BeginTransaction";
            //args[2] = "Modify";
            //args[3] = \"RootFolder\":\"c:\\TestProvisioningExample\\\";
            //args[4] = "{\"FileName\":\"TestFile.txt\",\"ParentFolder\":\"ChangeMe\",\"FileContent\":\"123\"}";
            //args[5] = "{\"FileName\":\"TestFile.txt\",\"ParentFolder\":\"ChangeMe\",\"FileContent\":\"12345sdfsdf\"}";

            //Add Test Args
            //"C:\Program Files (x86)\Atomia\AutomationServer\Common\Modules\Atomia.Provisioning.Modules.Folders.exe" Folders BeginTransaction Add {"RootFolder":"c:\\TestProvisioningExample\\"} {"FolderName":"ChangeMe454","FolderDescription":"Change this default description value"}

            //Folders
            //BeginTransaction
            //Add
            //{"RootFolder":"c:\\TestProvisioningExample\\"}
            //{"FolderName":"ChangeMe","FolderDescription":"Change this default description value"}
            //{"current":{"serviceMetaData_InstanceId":"65782c7f-8072-4b2e-a8c8-1d116e6988a7","serviceMetaData_LogicalID":"","serviceMetaData_Name":"Folders","serviceMetaData_PhysicalID":"65782c7f-8072-4b2e-a8c8-1d116e6988a7","serviceMetaData_ProvisioningId":"65782c7f-8072-4b2e-a8c8-1d116e6988a7","AddCmd":"Atomia.Provisioning.Modules.Folders.exe_#_#_--Add_#_#_--RootFolder_#_#_{resource[RootFolder]}_#_#_--FolderName_#_#_{service[Name]}_#_#_--FolderDescription_#_#_{service[Description]}","CallOpCmd":"Atomia.Provisioning.Modules.Folders.exe_#_#_--$TransGuid_#_#_--CallOp","Description":"Change_#_#_this_#_#_default_#_#_description_#_#_value","foo":"222","GetServiceDescCmd":"Atomia.Provisioning.Modules.Folders.exe_#_#_--$TransGuid_#_#_--GetServiceDescCmd","Id":"123","ListChildrenCmd":"Atomia.Provisioning.Modules.Folders.exe_#_#_--$TransGuid_#_#_--ListChildren","ListCmd":"Atomia.Provisioning.Modules.Folders.exe_#_#_--$TransGuid_#_#_--List","ListNoChildrenCmd":"Atomia.Provisioning.Modules.Folders.exe_#_#_--$TransGuid_#_#_--ListNoChildren","ModCmd":"Atomia.Provisioning.Modules.Folders.exe_#_#_--Modify_#_#_--RootFolder_#_#_{resource[RootFolder]}_#_#_--FolderName_#_#_{service[Name]}_#_#_--FolderDescription_#_#_{service[Description]}","MoveToResCmd":"Atomia.Provisioning.Modules.Folders.exe_#_#_--$TransGuid_#_#_--MoveToResource","Name":"ChangeMe","RemCmd":"Atomia.Provisioning.Modules.Folders.exe_#_#_--Remove_#_#_--RootFolder_#_#_{resource[RootFolder]}_#_#_--FolderName_#_#_{service[Name]}_#_#_--FolderDescription_#_#_{service[Description]}","StdinStdout":"true","SynchExpPropCmd":"Atomia.Provisioning.Modules.Folders.exe_#_#_--$TransGuid_#_#_--SynchExpProp"}}

            //args = new string[6];
            //args[0] = "Folders";
            //args[1] = "BeginTransaction";
            //args[2] = "Add";
            //args[3] = \"RootFolder\":\"c:\\TestProvisioningExample\\\";
            //args[4] = "{\"Name\":\"ChangeMe\",\"Description\":\"Change this default description value\"}";
            //args[5] = "{\"current\":{\"serviceMetaData_InstanceId\":\"65782c7f-8072-4b2e-a8c8-1d116e6988a7\",\"serviceMetaData_LogicalID\":\"\",\"serviceMetaData_Name\":\"Folders\",\"serviceMetaData_PhysicalID\":\"65782c7f-8072-4b2e-a8c8-1d116e6988a7\",\"serviceMetaData_ProvisioningId\":\"65782c7f-8072-4b2e-a8c8-1d116e6988a7\",\"AddCmd\":\"Atomia.Provisioning.Modules.Folders.exe_#_#_--Add_#_#_--RootFolder_#_#_{resource[RootFolder]}_#_#_--FolderName_#_#_{service[Name]}_#_#_--FolderDescription_#_#_{service[Description]}\",\"CallOpCmd\":\"Atomia.Provisioning.Modules.Folders.exe_#_#_--$TransGuid_#_#_--CallOp\",\"Description\":\"Change_#_#_this_#_#_default_#_#_description_#_#_value\",\"foo\":\"222\",\"GetServiceDescCmd\":\"Atomia.Provisioning.Modules.Folders.exe_#_#_--$TransGuid_#_#_--GetServiceDescCmd\",\"Id\":\"123\",\"ListChildrenCmd\":\"Atomia.Provisioning.Modules.Folders.exe_#_#_--$TransGuid_#_#_--ListChildren\",\"ListCmd\":\"Atomia.Provisioning.Modules.Folders.exe_#_#_--$TransGuid_#_#_--List\",\"ListNoChildrenCmd\":\"Atomia.Provisioning.Modules.Folders.exe_#_#_--$TransGuid_#_#_--ListNoChildren\",\"ModCmd\":\"Atomia.Provisioning.Modules.Folders.exe_#_#_--Modify_#_#_--RootFolder_#_#_{resource[RootFolder]}_#_#_--FolderName_#_#_{service[Name]}_#_#_--FolderDescription_#_#_{service[Description]}\",\"MoveToResCmd\":\"Atomia.Provisioning.Modules.Folders.exe_#_#_--$TransGuid_#_#_--MoveToResource\",\"Name\":\"ChangeMe\",\"RemCmd\":\"Atomia.Provisioning.Modules.Folders.exe_#_#_--Remove_#_#_--RootFolder_#_#_{resource[RootFolder]}_#_#_--FolderName_#_#_{service[Name]}_#_#_--FolderDescription_#_#_{service[Description]}\",\"StdinStdout\":\"true\",\"SynchExpPropCmd\":\"Atomia.Provisioning.Modules.Folders.exe_#_#_--$TransGuid_#_#_--SynchExpProp\"}}";

            //Folders BeginTransaction Modify {"RootFolder":"c:\\TestProvisioningExample\\"} {"FolderName":"ChangeMe","FolderDescription":"Change this default description value"} {"FolderName":"ChangeMeddd","FolderDescription":"Change this default description value"}
            //args = new string[6];
            //args[0] = "Folders";
            //args[1] = "BeginTransaction";
            //args[2] = "Modify";
            //args[3] = "\"RootFolder\":\"c:\\TestProvisioningExample\\\"";
            //args[4] = "{\"FolderName\":\"ChangeMe\",\"FolderDescription\":\"Change this default description value\"}";
            //args[5] = "{\"FolderName\":\"ChangeMeddd\",\"FolderDescription\":\"Change this default description value\"}";

            //Files CommitTransaction Add {"RootFolder":"c:\\TestProvisioningExample\\"}
            //{"Name":"TestFile.txt","ParentFolder":"ChangeMe","Content":"123"}
            //{"\"current\"":{"\"serviceMetaData_InstanceId\"":"\"dd41fa6e-1524-49dd-a9b3-c515a230edf4\"","\"serviceMetaData_LogicalID\"":"\"\"","\"serviceMetaData_Name\"":"\"Files\"","\"serviceMetaData_PhysicalID\"":"\"dd41fa6e-1524-49dd-a9b3-c515a230edf4\"","\"serviceMetaData_ProvisioningId\"":"\"dd41fa6e-1524-49dd-a9b3-c515a230edf4\"","\"AddCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe_#_#_--Add_#_#_--RootFolder_#_#_{resource[RootFolder]}_#_#_--Name_#_#_{service[Name]}_#_#_--ParentFolder_#_#_{service[parent.Name]}_#_#_--Content_#_#_{service[Content]}\"","\"Content\"":"\"123\"","\"Id\"":"\"123\"","\"ModCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe_#_#_--Modify_#_#_--RootFolder_#_#_{resource[RootFolder]}_#_#_--Name_#_#_{service[Name]}_#_#_--ParentFolder_#_#_{service[parent.Name]}_#_#_--Content_#_#_{service[Content]}\"","\"Name\"":"\"TestFile.txt\"","\"ParentFolder\"":"\"WillTakeValueFromParentService\"","\"RemCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe_#_#_--Remove_#_#_--RootFolder_#_#_{resource[RootFolder]}_#_#_--Name_#_#_{service[Name]}_#_#_--ParentFolder_#_#_{service[parent.Name]}_#_#_--Content_#_#_{service[Content]}\"","\"StdinStdout\"":"\"true\"","\"TestChangesPropagation\"":"\"\""},"\"current.parent\"":{"\"serviceMetaData_InstanceId\"":"\"dd41fa6e-1524-49dd-a9b3-c515a230edf4\"","\"serviceMetaData_LogicalID\"":"\"88788e53-6292-43a7-959c-9a4158792ec1\"","\"serviceMetaData_Name\"":"\"Folders\"","\"serviceMetaData_PhysicalID\"":"\"88788e53-6292-43a7-959c-9a4158792ec1\"","\"serviceMetaData_ProvisioningId\"":"\"dd41fa6e-1524-49dd-a9b3-c515a230edf4\"","\"AddCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe_#_#_--Add_#_#_--RootFolder_#_#_{resource[RootFolder]}_#_#_--Name_#_#_{service[Name]}_#_#_--Description_#_#_{service[Description]}\"","\"CallOpCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe_#_#_--$TransGuid_#_#_--CallOp\"","\"Description\"":"\"Change_#_#_this_#_#_default_#_#_description_#_#_value\"","\"foo\"":"\"222\"","\"GetServiceDescCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe_#_#_--$TransGuid_#_#_--GetServiceDescCmd\"","\"Id\"":"\"123\"","\"ListChildrenCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe_#_#_--$TransGuid_#_#_--ListChildren\"","\"ListCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe_#_#_--$TransGuid_#_#_--List\"","\"ListNoChildrenCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe_#_#_--$TransGuid_#_#_--ListNoChildren\"","\"ModCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe_#_#_--Modify_#_#_--RootFolder_#_#_{resource[RootFolder]}_#_#_--Name_#_#_{service[Name]}_#_#_--Description_#_#_{service[Description]}\"","\"MoveToResCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe_#_#_--$TransGuid_#_#_--MoveToResource\"","\"Name\"":"\"ChangeMe\"","\"RemCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe_#_#_--Remove_#_#_--RootFolder_#_#_{resource[RootFolder]}_#_#_--Name_#_#_{service[Name]}_#_#_--Description_#_#_{service[Description]}\"","\"StdinStdout\"":"\"true\"","\"SynchExpPropCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe_#_#_--$TransGuid_#_#_--SynchExpProp\""}}
            //args = new string[6];
            //args[0] = "Files";
            //args[1] = "CommitTransaction";
            //args[2] = "Add";
            //args[3] = "\"RootFolder\":\"c:\\TestProvisioningExample\\\"";
            //args[4] = "{\"Name\":\"TestFile.txt\",\"ParentFolder\":\"ChangeMe\",\"Content\":\"123\"}";
            //args[5] = "{\"current\":{\"serviceMetaData_InstanceId\":\"dd41fa6e-1524-49dd-a9b3-c515a230edf4\",\"serviceMetaData_LogicalID\":\"\",\"serviceMetaData_Name\":\"Files\",\"serviceMetaData_PhysicalID\":\"dd41fa6e-1524-49dd-a9b3-c515a230edf4\"" +
            //    ",\"serviceMetaData_ProvisioningId\":\"dd41fa6e-1524-49dd-a9b3-c515a230edf4\",\"AddCmd\":\"Atomia.Provisioning.Modules.Folders.exe_#_#_--Add_#_#_--RootFolder_#_#_{resource[RootFolder]}_#_#_--Name_#_#_{service[Name]}_#_#_--ParentFolder_#_#_{service[parent.Name]}_#_#_--Content_#_#_{service[Content]}\"" +
            //    ",\"Content\":\"123\",\"Id\":\"123\",\"ModCmd\":\"Atomia.Provisioning.Modules.Folders.exe_#_#_--Modify_#_#_--RootFolder_#_#_{resource[RootFolder]}_#_#_--Name_#_#_{service[Name]}_#_#_--ParentFolder_#_#_{service[parent.Name]}_#_#_--Content_#_#_{service[Content]}\"" +
            //    ",\"Name\":\"TestFile.txt\",\"ParentFolder\":\"WillTakeValueFromParentService\",\"RemCmd\":\"Atomia.Provisioning.Modules.Folders.exe_#_#_--Remove_#_#_--RootFolder_#_#_{resource[RootFolder]}_#_#_--Name_#_#_{service[Name]}_#_#_--ParentFolder_#_#_{service[parent.Name]}_#_#_--Content_#_#_{service[Content]}\",\"StdinStdout\":\"true\",\"TestChangesPropagation\":\"\"},\"current.parent\":{\"serviceMetaData_InstanceId\":\"dd41fa6e-1524-49dd-a9b3-c515a230edf4\",\"serviceMetaData_LogicalID\":\"88788e53-6292-43a7-959c-9a4158792ec1\",\"serviceMetaData_Name\":\"Folders\",\"serviceMetaData_PhysicalID\":\"88788e53-6292-43a7-959c-9a4158792ec1\",\"serviceMetaData_ProvisioningId\":\"dd41fa6e-1524-49dd-a9b3-c515a230edf4\",\"AddCmd\":\"Atomia.Provisioning.Modules.Folders.exe_#_#_--Add_#_#_--RootFolder_#_#_{resource[RootFolder]}_#_#_--Name_#_#_{service[Name]}_#_#_--Description_#_#_{service[Description]}\",\"CallOpCmd\":\"Atomia.Provisioning.Modules.Folders.exe_#_#_--$TransGuid_#_#_--CallOp\",\"Description\":\"Change_#_#_this_#_#_default_#_#_description_#_#_value\",\"foo\":\"222\",\"GetServiceDescCmd\":\"Atomia.Provisioning.Modules.Folders.exe_#_#_--$TransGuid_#_#_--GetServiceDescCmd\",\"Id\":\"123\",\"ListChildrenCmd\":\"Atomia.Provisioning.Modules.Folders.exe_#_#_--$TransGuid_#_#_--ListChildren\",\"ListCmd\":\"Atomia.Provisioning.Modules.Folders.exe_#_#_--$TransGuid_#_#_--List\",\"ListNoChildrenCmd\":\"Atomia.Provisioning.Modules.Folders.exe_#_#_--$TransGuid_#_#_--ListNoChildren\",\"ModCmd\":\"Atomia.Provisioning.Modules.Folders.exe_#_#_--Modify_#_#_--RootFolder_#_#_{resource[RootFolder]}_#_#_--Name_#_#_{service[Name]}_#_#_--Description_#_#_{service[Description]}\",\"MoveToResCmd\":\"Atomia.Provisioning.Modules.Folders.exe_#_#_--$TransGuid_#_#_--MoveToResource\",\"Name\":\"ChangeMe\",\"RemCmd\":\"Atomia.Provisioning.Modules.Folders.exe_#_#_--Remove_#_#_--RootFolder_#_#_{resource[RootFolder]}_#_#_--Name_#_#_{service[Name]}_#_#_--Description_#_#_{service[Description]}\",\"StdinStdout\":\"true\",\"SynchExpPropCmd\":\"Atomia.Provisioning.Modules.Folders.exe_#_#_--$TransGuid_#_#_--SynchExpProp\"}}";

            //Files
            //BeginTransaction
            //Modify
            //{"RootFolder":"c:\\TestProvisioningExample\\"}
            //{"Name":"TestFile.txt","ParentFolder":"ChangeMe","Content":"12355566rere"}
            //{"Name":"TestFile.txt","ParentFolder":"ChangeMe","Content":"12355566rereee"}
            //{"\"current\"":{"\"serviceMetaData_InstanceId\"":"\"a47a2f24-c64e-4585-97a4-7ba052d3be4f\"","\"serviceMetaData_LogicalID\"":"\"\"","\"serviceMetaData_Name\"":"\"Files\"","\"serviceMetaData_PhysicalID\"":"\"a47a2f24-c64e-4585-97a4-7ba052d3be4f\"","\"serviceMetaData_ProvisioningId\"":"\"\"","\"AddCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Add --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\"","\"Content\"":"\"12355566rere\"","\"Id\"":"\"123\"","\"ModCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Modify --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\"","\"Name\"":"\"TestFile.txt\"","\"ParentFolder\"":"\"WillTakeValueFromParentService\"","\"RemCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Remove --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\"","\"StdinStdout\"":"\"false\"","\"TestChangesPropagation\"":"\"\""},"\"current.parent\"":{"\"serviceMetaData_InstanceId\"":"\"a47a2f24-c64e-4585-97a4-7ba052d3be4f\"","\"serviceMetaData_LogicalID\"":"\"d287c05f-47eb-4699-ad9e-2900dcd0f570\"","\"serviceMetaData_Name\"":"\"Folders\"","\"serviceMetaData_PhysicalID\"":"\"d287c05f-47eb-4699-ad9e-2900dcd0f570\"","\"serviceMetaData_ProvisioningId\"":"\"\"","\"AddCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Add --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\"","\"CallOpCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --$TransGuid --CallOp\"","\"Description\"":"\"Change this default description value\"","\"foo\"":"\"222\"","\"GetServiceDescCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --$TransGuid --GetServiceDescCmd\"","\"Id\"":"\"123\"","\"ListChildrenCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --$TransGuid --ListChildren\"","\"ListCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --$TransGuid --List\"","\"ListNoChildrenCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --$TransGuid --ListNoChildren\"","\"ModCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Modify --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\"","\"MoveToResCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --$TransGuid --MoveToResource\"","\"Name\"":"\"ChangeMe\"","\"RemCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Remove --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\"","\"StdinStdout\"":"\"false\"","\"SynchExpPropCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --$TransGuid --SynchExpProp\""}}
            //{"\"current\"":{"\"serviceMetaData_InstanceId\"":"\"a47a2f24-c64e-4585-97a4-7ba052d3be4f\"","\"serviceMetaData_LogicalID\"":"\"\"","\"serviceMetaData_Name\"":"\"Files\"","\"serviceMetaData_PhysicalID\"":"\"a47a2f24-c64e-4585-97a4-7ba052d3be4f\"","\"serviceMetaData_ProvisioningId\"":"\"a47a2f24-c64e-4585-97a4-7ba052d3be4f\"","\"AddCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Add --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\"","\"Content\"":"\"12355566rereee\"","\"Id\"":"\"123\"","\"ModCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Modify --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\"","\"Name\"":"\"TestFile.txt\"","\"ParentFolder\"":"\"WillTakeValueFromParentService\"","\"RemCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Remove --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\"","\"StdinStdout\"":"\"true\"","\"TestChangesPropagation\"":"\"\""},"\"current.parent\"":{"\"serviceMetaData_InstanceId\"":"\"a47a2f24-c64e-4585-97a4-7ba052d3be4f\"","\"serviceMetaData_LogicalID\"":"\"d287c05f-47eb-4699-ad9e-2900dcd0f570\"","\"serviceMetaData_Name\"":"\"Folders\"","\"serviceMetaData_PhysicalID\"":"\"d287c05f-47eb-4699-ad9e-2900dcd0f570\"","\"serviceMetaData_ProvisioningId\"":"\"a47a2f24-c64e-4585-97a4-7ba052d3be4f\"","\"AddCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Add --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\"","\"CallOpCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --$TransGuid --CallOp\"","\"Description\"":"\"Change this default description value\"","\"foo\"":"\"222\"","\"GetServiceDescCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --$TransGuid --GetServiceDescCmd\"","\"Id\"":"\"123\"","\"ListChildrenCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --$TransGuid --ListChildren\"","\"ListCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --$TransGuid --List\"","\"ListNoChildrenCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --$TransGuid --ListNoChildren\"","\"ModCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Modify --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\"","\"MoveToResCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --$TransGuid --MoveToResource\"","\"Name\"":"\"ChangeMe\"","\"RemCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Remove --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\"","\"StdinStdout\"":"\"false\"","\"SynchExpPropCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --$TransGuid --SynchExpProp\""}}
            //args = new string[8];
            //args[0] = "Files";
            //args[1] = "BeginTransaction";
            //args[2] = "Modify";
            //args[3] = "\"RootFolder\":\"c:\\TestProvisioningExample\\\"";
            //args[4] = "{\"Name\":\"TestFile.txt\",\"ParentFolder\":\"ChangeMe\",\"Content\":\"12355566rere\"}";
            //args[5] = "{\"Name\":\"TestFile.txt\",\"ParentFolder\":\"ChangeMe\",\"Content\":\"12355566rereee\"}";
            //args[6] = "{\"current\":{\"serviceMetaData_InstanceId\":\"a47a2f24-c64e-4585-97a4-7ba052d3be4f\",\"serviceMetaData_LogicalID\":\"\",\"serviceMetaData_Name\":\"Files\",\"serviceMetaData_PhysicalID\":\"a47a2f24-c64e-4585-97a4-7ba052d3be4f\"" +
            //",\"serviceMetaData_ProvisioningId\":\"\",\"AddCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Add --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\"" +
            //",\"Content\":\"12355566rere\",\"Id\":\"123\",\"ModCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Modify --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\"" +
            //",\"Name\":\"TestFile.txt\",\"ParentFolder\":\"WillTakeValueFromParentService\",\"RemCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Remove --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\"" +
            //",\"StdinStdout\":\"false\",\"TestChangesPropagation\":\"\"},\"current.parent\":{\"serviceMetaData_InstanceId\":\"a47a2f24-c64e-4585-97a4-7ba052d3be4f\",\"serviceMetaData_LogicalID\":\"d287c05f-47eb-4699-ad9e-2900dcd0f570\"" +
            //",\"serviceMetaData_Name\":\"Folders\",\"serviceMetaData_PhysicalID\":\"d287c05f-47eb-4699-ad9e-2900dcd0f570\",\"serviceMetaData_ProvisioningId\":\"\",\"AddCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Add --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\"" +
            //",\"CallOpCmd\":\"Atomia.Provisioning.Modules.Folders.exe --$TransGuid --CallOp\",\"Description\":\"Change this default description value\",\"foo\":\"222\",\"GetServiceDescCmd\":\"Atomia.Provisioning.Modules.Folders.exe --$TransGuid --GetServiceDescCmd\",\"Id\":\"123\"" +
            //",\"ListChildrenCmd\":\"Atomia.Provisioning.Modules.Folders.exe --$TransGuid --ListChildren\",\"ListCmd\":\"Atomia.Provisioning.Modules.Folders.exe --$TransGuid --List\",\"ListNoChildrenCmd\":\"Atomia.Provisioning.Modules.Folders.exe --$TransGuid --ListNoChildren\"" +
            //",\"ModCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Modify --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\",\"MoveToResCmd\":\"Atomia.Provisioning.Modules.Folders.exe --$TransGuid --MoveToResource\",\"Name\":\"ChangeMe\",\"RemCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Remove --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\",\"StdinStdout\":\"false\",\"SynchExpPropCmd\":\"Atomia.Provisioning.Modules.Folders.exe --$TransGuid --SynchExpProp\"}}";
            //args[7] = "{\"current\":{\"serviceMetaData_InstanceId\":\"a47a2f24-c64e-4585-97a4-7ba052d3be4f\",\"serviceMetaData_LogicalID\":\"\",\"serviceMetaData_Name\":\"Files\",\"serviceMetaData_PhysicalID\":\"a47a2f24-c64e-4585-97a4-7ba052d3be4f\",\"serviceMetaData_ProvisioningId\":\"a47a2f24-c64e-4585-97a4-7ba052d3be4f\",\"AddCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Add --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\",\"Content\":\"12355566rereee\",\"Id\":\"123\",\"ModCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Modify --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\",\"Name\":\"TestFile.txt\",\"ParentFolder\":\"WillTakeValueFromParentService\",\"RemCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Remove --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\",\"StdinStdout\":\"true\",\"TestChangesPropagation\":\"\"},\"current.parent\":{\"serviceMetaData_InstanceId\":\"a47a2f24-c64e-4585-97a4-7ba052d3be4f\",\"serviceMetaData_LogicalID\":\"d287c05f-47eb-4699-ad9e-2900dcd0f570\",\"serviceMetaData_Name\":\"Folders\",\"serviceMetaData_PhysicalID\":\"d287c05f-47eb-4699-ad9e-2900dcd0f570\",\"serviceMetaData_ProvisioningId\":\"a47a2f24-c64e-4585-97a4-7ba052d3be4f\",\"AddCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Add --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\",\"CallOpCmd\":\"Atomia.Provisioning.Modules.Folders.exe --$TransGuid --CallOp\",\"Description\":\"Change this default description value\",\"foo\":\"222\",\"GetServiceDescCmd\":\"Atomia.Provisioning.Modules.Folders.exe --$TransGuid --GetServiceDescCmd\",\"Id\":\"123\",\"ListChildrenCmd\":\"Atomia.Provisioning.Modules.Folders.exe --$TransGuid --ListChildren\",\"ListCmd\":\"Atomia.Provisioning.Modules.Folders.exe --$TransGuid --List\",\"ListNoChildrenCmd\":\"Atomia.Provisioning.Modules.Folders.exe --$TransGuid --ListNoChildren\",\"ModCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Modify --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\",\"MoveToResCmd\":\"Atomia.Provisioning.Modules.Folders.exe --$TransGuid --MoveToResource\",\"Name\":\"ChangeMe\",\"RemCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Remove --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\",\"StdinStdout\":\"false\",\"SynchExpPropCmd\":\"Atomia.Provisioning.Modules.Folders.exe --$TransGuid --SynchExpProp\"}}";

            //Files BeginTransaction Add {"RootFolder":"c:\\TestProvisioningExample\\"} {"FileName":"TestFile.txt","ParentFolder":"ChangeMe","FileContent":"123"}

            //args = new string[5];
            //args[0] = "Files";
            //args[1] = "BeginTransaction";
            //args[2] = "Add";
            //args[3] = "{\"RootFolder\":\"c:\\TestProvisioningExample\\\"}";
            //args[4] = "{\"FileName\":\"TestFile.txt\",\"ParentFolder\":\"ChangeMe\",\"FileContent\":\"123\"}";

            ////Files BeginTransaction Add {"RootFolder":"c:\\TestProvisioningExample\\"} {"Name":"TestFile.txt","ParentFolder":"ChangeMe","Content":"123"} {"\"current\"":{"\"serviceMetaData_InstanceId\"":"\"321220b0-f0ca-46b7-9b70-6a0a88c19d7e\"","\"serviceMetaData_LogicalID\"":"\"\"","\"serviceMetaData_Name\"":"\"Files\"","\"serviceMetaData_PhysicalID\"":"\"321220b0-f0ca-46b7-9b70-6a0a88c19d7e\"","\"serviceMetaData_ProvisioningId\"":"\"321220b0-f0ca-46b7-9b70-6a0a88c19d7e\"","\"AddCommitCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Add --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\"","\"AddExecuteCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Add --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\"","\"AddRollbackCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Add --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\"","\"Content\"":"\"123\"","\"Id\"":"\"123\"","\"ModifyCommitCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Modify --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\"","\"ModifyExecuteCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Modify --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\"","\"ModifyRollbackCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Modify --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\"","\"Name\"":"\"TestFile.txt\"","\"OperationMapping\"":"\"GetFullFilePath:GetFullFilePath\"","\"ParentFolder\"":"\"WillTakeValueFromParentService\"","\"RemoveCommitCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Remove --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\"","\"RemoveExecuteCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Remove --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\"","\"RemoveRollbackCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Remove --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\"","\"StdinStdout\"":"\"true\"","\"TestChangesPropagation\"":"\"\"","\"UseCmdLinePlugin\"":"\"true\""},"\"current.parent\"":{"\"serviceMetaData_InstanceId\"":"\"321220b0-f0ca-46b7-9b70-6a0a88c19d7e\"","\"serviceMetaData_LogicalID\"":"\"11aed34b-0c44-4f68-bc61-02c18ebc7012\"","\"serviceMetaData_Name\"":"\"Folders\"","\"serviceMetaData_PhysicalID\"":"\"11aed34b-0c44-4f68-bc61-02c18ebc7012\"","\"serviceMetaData_ProvisioningId\"":"\"321220b0-f0ca-46b7-9b70-6a0a88c19d7e\"","\"AddCommitCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Add --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\"","\"AddExecuteCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Add --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\"","\"AddRollbackCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Add --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\"","\"Description\"":"\"Change this default description value\"","\"Id\"":"\"123\"","\"ModifyCommitCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Modify --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\"","\"ModifyExecuteCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Modify --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\"","\"ModifyRollbackCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Modify --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\"","\"Name\"":"\"ChangeMe\"","\"OperationMapping\"":"\"GetFullFolderPath:GetFullFolderPath\"","\"RemoveCommitCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Remove --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\"","\"RemoveExecuteCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Remove --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\"","\"RemoveRollbackCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Remove --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\"","\"StdinStdout\"":"\"false\"","\"UseCmdLinePlugin\"":"\"true\""}}
            //args = new string[6];
            //args[0] = "Files";
            //args[1] = "BeginTransaction";
            //args[2] = "Add";
            //args[3] = "{\"RootFolder\":\"c:\\TestProvisioningExample\\\"}";
            //args[4] = "{\"Name\":\"TestFile.txt\",\"ParentFolder\":\"ChangeMe\",\"Content\":\"123\"}";
            //args[5] = "{\"current\":{\"serviceMetaData_InstanceId\":\"321220b0-f0ca-46b7-9b70-6a0a88c19d7e\",\"serviceMetaData_LogicalID\":\"\",\"serviceMetaData_Name\":\"Files\",\"serviceMetaData_PhysicalID\":\"321220b0-f0ca-46b7-9b70-6a0a88c19d7e\",\"serviceMetaData_ProvisioningId\":\"321220b0-f0ca-46b7-9b70-6a0a88c19d7e\",\"AddCommitCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Add --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\",\"AddExecuteCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Add --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\",\"AddRollbackCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Add --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\",\"Content\":\"123\",\"Id\":\"123\",\"ModifyCommitCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Modify --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\",\"ModifyExecuteCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Modify --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\",\"ModifyRollbackCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Modify --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\",\"Name\":\"TestFile.txt\",\"OperationMapping\":\"GetFullFilePath:GetFullFilePath\",\"ParentFolder\":\"WillTakeValueFromParentService\",\"RemoveCommitCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Remove --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\",\"RemoveExecuteCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Remove --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\",\"RemoveRollbackCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Remove --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\",\"StdinStdout\":\"true\",\"TestChangesPropagation\":\"\",\"UseCmdLinePlugin\":\"true\"},\"current.parent\":{\"serviceMetaData_InstanceId\":\"321220b0-f0ca-46b7-9b70-6a0a88c19d7e\",\"serviceMetaData_LogicalID\":\"11aed34b-0c44-4f68-bc61-02c18ebc7012\",\"serviceMetaData_Name\":\"Folders\",\"serviceMetaData_PhysicalID\":\"11aed34b-0c44-4f68-bc61-02c18ebc7012\",\"serviceMetaData_ProvisioningId\":\"321220b0-f0ca-46b7-9b70-6a0a88c19d7e\",\"AddCommitCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Add --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\",\"AddExecuteCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Add --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\",\"AddRollbackCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Add --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\",\"Description\":\"Change this default description value\",\"Id\":\"123\",\"ModifyCommitCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Modify --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\",\"ModifyExecuteCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Modify --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\",\"ModifyRollbackCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Modify --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\",\"Name\":\"ChangeMe\",\"OperationMapping\":\"GetFullFolderPath:GetFullFolderPath\",\"RemoveCommitCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Remove --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\",\"RemoveExecuteCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Remove --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\",\"RemoveRollbackCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Remove --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\",\"StdinStdout\":\"false\",\"UseCmdLinePlugin\":\"true\"}}";

            //Files BeginTransaction Modify {"RootFolder":"c:\\TestProvisioningExample\\"} {"Name":"TestFile.txt","ParentFolder":"ChangeMe","Content":"123"} {"Name":"TestFile2.txt","ParentFolder":"ChangeMe","Content":"123"} {"\"current\"":{"\"serviceMetaData_InstanceId\"":"\"9c79cf42-d623-4e84-abab-449dfa505a6f\"","\"serviceMetaData_LogicalID\"":"\"\"","\"serviceMetaData_Name\"":"\"Files\"","\"serviceMetaData_PhysicalID\"":"\"9c79cf42-d623-4e84-abab-449dfa505a6f\"","\"serviceMetaData_ProvisioningId\"":"\"\"","\"AddCommitCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Add --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\"","\"AddExecuteCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Add --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\"","\"AddRollbackCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Add --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\"","\"Content\"":"\"123\"","\"Id\"":"\"123\"","\"ModifyCommitCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Modify --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {s\r\nervice[parent.Name]} --Content {service[Content]}\"","\"ModifyExecuteCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Modify --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\"","\"ModifyRollbackCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Modify --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\"","\"Name\"":"\"TestFile.txt\"","\"OperationMapping\"":"\"GetFullFilePath:GetFullFilePath\"","\"ParentFolder\"":"\"ChangeMe\"","\"RemoveCommitCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Remove --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\"","\"RemoveExecuteCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Remove --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\"","\"RemoveRollbackCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Remove --RootFolder {res\r\nource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\"","\"StdinStdout\"":"\"true\"","\"TestChangesPropagation\"":"\"NewValueForTesting\"","\"UseCmdLinePlugin\"":"\"true\""},"\"current.parent\"":{"\"serviceMetaData_InstanceId\"":"\"9c79cf42-d623-4e84-abab-449dfa505a6f\"","\"serviceMetaData_LogicalID\"":"\"6663a64d-bf34-4b64-ba3d-ef818e114572\"","\"serviceMetaData_Name\"":"\"Folders\"","\"serviceMetaData_PhysicalID\"":"\"6663a64d-bf34-4b64-ba3d-ef818e114572\"","\"serviceMetaData_ProvisioningId\"":"\"\"","\"AddCommitCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Add --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\"","\"AddExecuteCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Add --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\"","\"AddRollbackCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Add --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\"","\"Description\"":"\"Change this default description value\"","\"Id\"":"\"123\"","\"ModifyCommitCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Modify --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\"","\"ModifyExecuteCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Modify --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\"","\"ModifyRollbackCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Modify --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\"","\"Name\"":"\"ChangeMe\"","\"OperationMapping\"":"\"GetFullFolderPath:GetFullFolderPath\"","\"RemoveCommitCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Remove --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\"","\"RemoveExecuteCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Remove --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\"","\"RemoveRollbackCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Remove --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\"","\"StdinStdout\"":"\"false\"","\"UseCmdLinePlugin\"":"\"true\""}} {"\"current\"":{"\"serviceMetaData_InstanceId\"":"\"9c79cf42-d623-4e84-abab-449dfa505a6f\"","\"serviceMetaData_LogicalID\"":"\"\"","\"serviceMetaData_Name\"":"\"Files\"","\"serviceMetaData_PhysicalID\"":"\"9c79cf42-d623-4e84-abab-449dfa505a6f\"","\"serviceMetaData_ProvisioningId\"":"\"9c79cf42-d623-4e84-abab-449dfa505a6f\"","\"AddCommitCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Add --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\"","\"AddExecuteCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Add --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\"","\"AddRollbackCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Add --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\"","\"Content\"":"\"123\"","\"Id\"":"\"123\"","\"ModifyCommitCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Modify --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {s\r\nervice[parent.Name]} --Content {service[Content]}\"","\"ModifyExecuteCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Modify --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\"","\"ModifyRollbackCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Modify --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\"","\"Name\"":"\"TestFile2.txt\"","\"OperationMapping\"":"\"GetFullFilePath:GetFullFilePath\"","\"ParentFolder\"":"\"ChangeMe\"","\"RemoveCommitCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Remove --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\"","\"RemoveExecuteCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Remove --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\"","\"RemoveRollbackCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Remove --RootFolder {res\r\nource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\"","\"StdinStdout\"":"\"true\"","\"TestChangesPropagation\"":"\"NewValueForTesting\"","\"UseCmdLinePlugin\"":"\"true\""},"\"current.parent\"":{"\"serviceMetaData_InstanceId\"":"\"9c79cf42-d623-4e84-abab-449dfa505a6f\"","\"serviceMetaData_LogicalID\"":"\"6663a64d-bf34-4b64-ba3d-ef818e114572\"","\"serviceMetaData_Name\"":"\"Folders\"","\"serviceMetaData_PhysicalID\"":"\"6663a64d-bf34-4b64-ba3d-ef818e114572\"","\"serviceMetaData_ProvisioningId\"":"\"9c79cf42-d623-4e84-abab-449dfa505a6f\"","\"AddCommitCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Add --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\"","\"AddExecuteCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Add --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\"","\"AddRollbackCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Add --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\"","\"Description\"":"\"Change this default description value\"","\"Id\"":"\"123\"","\"ModifyCommitCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Modify --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\"","\"ModifyExecuteCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Modify --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\"","\"ModifyRollbackCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Modify --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\"","\"Name\"":"\"ChangeMe\"","\"OperationMapping\"":"\"GetFullFolderPath:GetFullFolderPath\"","\"RemoveCommitCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Remove --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\"","\"RemoveExecuteCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Remove --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\"","\"RemoveRollbackCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Remove --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\"","\"StdinStdout\"":"\"false\"","\"UseCmdLinePlugin\"":"\"true\""}}
            //args = new string[8];
            //args[0] = "Files";
            //args[1] = "BeginTransaction";
            //args[2] = "Modify";
            //args[3] = "{\"RootFolder\":\"c:\\TestProvisioningExample\\\"}";
            //args[4] = "{\"Name\":\"TestFile.txt\",\"ParentFolder\":\"ChangeMe\",\"Content\":\"123\"}";
            //args[5] = "{\"Name\":\"TestFile2.txt\",\"ParentFolder\":\"ChangeMe\",\"Content\":\"123\"}";
            //args[6] = "{\"current\":{\"serviceMetaData_InstanceId\":\"9c79cf42-d623-4e84-abab-449dfa505a6f\",\"serviceMetaData_LogicalID\":\"\",\"serviceMetaData_Name\":\"Files\",\"serviceMetaData_PhysicalID\":\"9c79cf42-d623-4e84-abab-449dfa505a6f\",\"serviceMetaData_ProvisioningId\":\"\",\"AddCommitCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Add --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\",\"AddExecuteCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Add --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\",\"AddRollbackCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Add --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\",\"Content\":\"123\",\"Id\":\"123\",\"ModifyCommitCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Modify --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {s\r\nervice[parent.Name]} --Content {service[Content]}\",\"ModifyExecuteCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Modify --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\",\"ModifyRollbackCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Modify --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\",\"Name\":\"TestFile.txt\",\"OperationMapping\":\"GetFullFilePath:GetFullFilePath\",\"ParentFolder\":\"ChangeMe\",\"RemoveCommitCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Remove --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\",\"RemoveExecuteCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Remove --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\",\"RemoveRollbackCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Remove --RootFolder {res\r\nource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\",\"StdinStdout\":\"true\",\"TestChangesPropagation\":\"NewValueForTesting\",\"UseCmdLinePlugin\":\"true\"},\"current.parent\":{\"serviceMetaData_InstanceId\":\"9c79cf42-d623-4e84-abab-449dfa505a6f\",\"serviceMetaData_LogicalID\":\"6663a64d-bf34-4b64-ba3d-ef818e114572\",\"serviceMetaData_Name\":\"Folders\",\"serviceMetaData_PhysicalID\":\"6663a64d-bf34-4b64-ba3d-ef818e114572\",\"serviceMetaData_ProvisioningId\":\"\",\"AddCommitCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Add --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\",\"AddExecuteCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Add --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\",\"AddRollbackCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Add --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\",\"Description\":\"Change this default description value\",\"Id\":\"123\",\"ModifyCommitCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Modify --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\",\"ModifyExecuteCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Modify --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\",\"ModifyRollbackCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Modify --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\",\"Name\":\"ChangeMe\",\"OperationMapping\":\"GetFullFolderPath:GetFullFolderPath\",\"RemoveCommitCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Remove --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\",\"RemoveExecuteCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Remove --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\",\"RemoveRollbackCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Remove --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\",\"StdinStdout\":\"false\",\"UseCmdLinePlugin\":\"true\"}}";
            //args[7] = "{\"current\":{\"serviceMetaData_InstanceId\":\"9c79cf42-d623-4e84-abab-449dfa505a6f\",\"serviceMetaData_LogicalID\":\"\",\"serviceMetaData_Name\":\"Files\",\"serviceMetaData_PhysicalID\":\"9c79cf42-d623-4e84-abab-449dfa505a6f\",\"serviceMetaData_ProvisioningId\":\"9c79cf42-d623-4e84-abab-449dfa505a6f\",\"AddCommitCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Add --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\",\"AddExecuteCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Add --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\",\"AddRollbackCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Add --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\",\"Content\":\"123\",\"Id\":\"123\",\"ModifyCommitCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Modify --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {s\r\nervice[parent.Name]} --Content {service[Content]}\",\"ModifyExecuteCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Modify --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\",\"ModifyRollbackCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Modify --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\",\"Name\":\"TestFile2.txt\",\"OperationMapping\":\"GetFullFilePath:GetFullFilePath\",\"ParentFolder\":\"ChangeMe\",\"RemoveCommitCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Remove --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\",\"RemoveExecuteCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Remove --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\",\"RemoveRollbackCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Remove --RootFolder {res\r\nource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\",\"StdinStdout\":\"true\",\"TestChangesPropagation\":\"NewValueForTesting\",\"UseCmdLinePlugin\":\"true\"},\"current.parent\":{\"serviceMetaData_InstanceId\":\"9c79cf42-d623-4e84-abab-449dfa505a6f\",\"serviceMetaData_LogicalID\":\"6663a64d-bf34-4b64-ba3d-ef818e114572\",\"serviceMetaData_Name\":\"Folders\",\"serviceMetaData_PhysicalID\":\"6663a64d-bf34-4b64-ba3d-ef818e114572\",\"serviceMetaData_ProvisioningId\":\"9c79cf42-d623-4e84-abab-449dfa505a6f\",\"AddCommitCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Add --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\",\"AddExecuteCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Add --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\",\"AddRollbackCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Add --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\",\"Description\":\"Change this default description value\",\"Id\":\"123\",\"ModifyCommitCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Modify --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\",\"ModifyExecuteCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Modify --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\",\"ModifyRollbackCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Modify --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\",\"Name\":\"ChangeMe\",\"OperationMapping\":\"GetFullFolderPath:GetFullFolderPath\",\"RemoveCommitCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Remove --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\",\"RemoveExecuteCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Remove --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\",\"RemoveRollbackCmd\":\"Atomia.Provisioning.Modules.Folders.exe --Remove --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\",\"StdinStdout\":\"false\",\"UseCmdLinePlugin\":\"true\"}}";

            //Files CommitTransaction Modify {"RootFolder":"c:\\TestProvisioningExample\\"} {"Name":"TestFile.txt","Content":"123"} {"Name":"TestFile2.txt","Content":"123"} {"\"current\"":{"\"serviceMetaData_InstanceId\"":"\"89e49fe1-d5ef-42ca-9b7c-986fb841ca96\"","\"serviceMetaData_LogicalID\"":"\"\"","\"serviceMetaData_Name\"":"\"Files\"","\"serviceMetaData_PhysicalID\"":"\"89e49fe1-d5ef-42ca-9b7c-986fb841ca96\"","\"serviceMetaData_ProvisioningId\"":"\"\"","\"AddCommitCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Add --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\"","\"AddExecuteCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Add --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\"","\"AddRollbackCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Add --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\"","\"Content\"":"\"123\"","\"Id\"":"\"123\"","\"ModifyCommitCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Modify --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {s\r\nervice[parent.Name]} --Content {service[Content]}\"","\"ModifyExecuteCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Modify --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\"","\"ModifyRollbackCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Modify --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\"","\"Name\"":"\"TestFile.txt\"","\"OperationMapping\"":"\"GetFullFilePath:GetFullFilePath\"","\"ParentFolder\"":"\"ChangeMe\"","\"RemoveCommitCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Remove --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\"","\"RemoveExecuteCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Remove --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\"","\"RemoveRollbackCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Remove --RootFolder {res\r\nource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\"","\"StdinStdout\"":"\"true\"","\"TestChangesPropagation\"":"\"NewValueForTesting\"","\"UseCmdLinePlugin\"":"\"true\""},"\"current.parent\"":{"\"serviceMetaData_InstanceId\"":"\"89e49fe1-d5ef-42ca-9b7c-986fb841ca96\"","\"serviceMetaData_LogicalID\"":"\"6663a64d-bf34-4b64-ba3d-ef818e114572\"","\"serviceMetaData_Name\"":"\"Folders\"","\"serviceMetaData_PhysicalID\"":"\"6663a64d-bf34-4b64-ba3d-ef818e114572\"","\"serviceMetaData_ProvisioningId\"":"\"\"","\"AddCommitCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Add --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\"","\"AddExecuteCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Add --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\"","\"AddRollbackCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Add --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\"","\"Description\"":"\"Change this default description value\"","\"Id\"":"\"123\"","\"ModifyCommitCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Modify --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\"","\"ModifyExecuteCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Modify --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\"","\"ModifyRollbackCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Modify --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\"","\"Name\"":"\"ChangeMe\"","\"OperationMapping\"":"\"GetFullFolderPath:GetFullFolderPath\"","\"RemoveCommitCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Remove --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\"","\"RemoveExecuteCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Remove --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\"","\"RemoveRollbackCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Remove --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\"","\"StdinStdout\"":"\"false\"","\"UseCmdLinePlugin\"":"\"true\""}} {"\"current\"":{"\"serviceMetaData_InstanceId\"":"\"89e49fe1-d5ef-42ca-9b7c-986fb841ca96\"","\"serviceMetaData_LogicalID\"":"\"\"","\"serviceMetaData_Name\"":"\"Files\"","\"serviceMetaData_PhysicalID\"":"\"89e49fe1-d5ef-42ca-9b7c-986fb841ca96\"","\"serviceMetaData_ProvisioningId\"":"\"89e49fe1-d5ef-42ca-9b7c-986fb841ca96\"","\"AddCommitCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Add --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\"","\"AddExecuteCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Add --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\"","\"AddRollbackCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Add --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\"","\"Content\"":"\"123\"","\"Id\"":"\"123\"","\"ModifyCommitCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Modify --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {s\r\n\r\nervice[parent.Name]} --Content {service[Content]}\"","\"ModifyExecuteCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Modify --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\"","\"ModifyRollbackCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Modify --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\"","\"Name\"":"\"TestFile2.txt\"","\"OperationMapping\"":"\"GetFullFilePath:GetFullFilePath\"","\"ParentFolder\"":"\"ChangeMe\"","\"RemoveCommitCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Remove --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\"","\"RemoveExecuteCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Remove --RootFolder {resource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\"","\"RemoveRollbackCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Remove --RootFolder\r\n {res\r\nource[RootFolder]} --Name {service[Name]} --ParentFolder {service[parent.Name]} --Content {service[Content]}\"","\"StdinStdout\"":"\"true\"","\"TestChangesPropagation\"":"\"NewValueForTesting\"","\"UseCmdLinePlugin\"":"\"true\""},"\"current.parent\"":{"\"serviceMetaData_InstanceId\"":"\"89e49fe1-d5ef-42ca-9b7c-986fb841ca96\"","\"serviceMetaData_LogicalID\"":"\"6663a64d-bf34-4b64-ba3d-ef818e114572\"","\"serviceMetaData_Name\"":"\"Folders\"","\"serviceMetaData_PhysicalID\"":"\"6663a64d-bf34-4b64-ba3d-ef818e114572\"","\"serviceMetaData_ProvisioningId\"":"\"89e49fe1-d5ef-42ca-9b7c-986fb841ca96\"","\"AddCommitCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Add --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\"","\"AddExecuteCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Add --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\"","\"AddRollbackCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Add --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\"","\"Description\"":"\"Change this default description value\"","\"Id\"":"\"123\"","\"ModifyCommitCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Modify --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\"","\"ModifyExecuteCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Modify --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\"","\"ModifyRollbackCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Modify --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\"","\"Name\"":"\"ChangeMe\"","\"OperationMapping\"":"\"GetFullFolderPath:GetFullFolderPath\"","\"RemoveCommitCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Remove --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\"","\"RemoveExecuteCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Remove --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\"","\"RemoveRollbackCmd\"":"\"Atomia.Provisioning.Modules.Folders.exe --Remove --RootFolder {resource[RootFolder]} --Name {service[Name]} --Description {service[Description]}\"","\"StdinStdout\"":"\"false\"","\"UseCmdLinePlugin\"":"\"true\""}}
            //args = new string[8];
            //args[0] = "Files";
            //args[1] = "CommitTransaction";
            //args[2] = "Modify";
            //args[3] = "{\"RootFolder\":\"c:\\TestProvisioningExample\\\"}";
            //args[4] = "{\"Name\":\"TestFile.txt\",\"ParentFolder\":\"ChangeMe\",\"Content\":\"123\"}";
            //args[5] = "{\"Name\":\"TestFile2.txt\",\"ParentFolder\":\"ChangeMe\",\"Content\":\"123\"}";
            //args[6] = "";
            //args[7] = "";

            //Folders CallOperation operationName:GetFullFolderPath operationArgument: {"RootFolder":"c:\\TestProvisioningExample\\"} {"Name":"ChangeMe"}
            //args = new string[6];
            //args[0] = "Folders";
            //args[1] = "CallOperation";
            //args[2] = "operationName:GetFullFolderPath";
            //args[3] = "operationArguments:";
            //args[4] = "{\"RootFolder\":\"c:\\TestProvisioningExample\\\"}";
            //args[5] = "{\"Name\":\"ChangeMe\"}";

            //Files CallOperation operationName:GetFullFilePath operationArgument: {"RootFolder":"c:\\TestProvisioningExample\\"} {"Name":"TestFile.txt","ParentFolder":"WillTakeValueFromParentService"}
            //args = new string[6];
            //args[0] = "Files";
            //args[1] = "CallOperation";
            //args[2] = "operationName:GetFullFilePath";
            //args[3] = "operationArguments:";
            //args[4] = "{\"RootFolder\":\"c:\\TestProvisioningExample\\\"}";
            //args[5] = "{\"Name\":\"TestFile.txt\",\"ParentFolder\":\"WillTakeValueFromParentService\"}";

            #endregion Test data as they are send from console

            #region Check args and prepare variables
            //serviceName TransContext CommandType Resource [Service] [ServiceOld ServiceNew for modify command] [full services serialized]
            //Folders CommitTransaction Add {"RootFolder":"c:\\TestProvisioningExample\\"} {"FolderName":"ChangeMe","FolderDescription":"Change this default description value"}

            if (args == null)
            {
                throw ExceptionHelper.GetModuleException("ID422001", null, null);
            }
            if (args.Length < 3)
            {
                throw ExceptionHelper.GetModuleException("ID422001", null, null);
            }

            string serviceName = args[0].ToString();
            string commandType = string.Empty;

            switch (args[1])
            {
                case "CallOperation":
                    {
                        commandType = args[1].ToString();
                    }
                    break;
                default:
                    {
                        transactionContext = args[1].ToString().Replace("$", "");
                        commandType = args[2].ToString();
                    }
                    break;
            }

            ModuleService service = new ModuleService(serviceName, "");
            ModuleService serviceOld = new ModuleService(serviceName, "");
            ModuleService serviceNew = new ModuleService(serviceName, "");

            ModuleService serviceFull = null;
            ModuleService serviceOldFull = null;
            ModuleService serviceNewFull = null;

            ResourceDescription resource = new ResourceDescription(serviceName, "ResourceDescriptionFile");

            #endregion Check args and prepare variables

            switch (commandType)
            {
                case "Add":
                case "Remove":
                    {
                        #region Add/Remove Handling

                        #region Check args number
                        if (!((args.Length == 5) || (args.Length == 6)))
                        {
                            throw ExceptionHelper.GetModuleException("ID422002", null, null);
                        }
                        #endregion Check args number

                        resource = Helpers.Common.ReadAndFillResourceData(args[3], serviceName);

                        service = Helpers.Common.ReadAndFillServiceData(args[4], serviceName);

                        #region Read and fill full serialized service
                        if (args.Length == 6)
                        {
                            serviceFull = Helpers.Common.DeserializeService(args[5]);
                        }
                        #endregion Read and fill full serialized service

                        switch (commandType)
                        {
                            case "Add":
                                {
                                    ProvideService(service, resource);
                                }
                                break;

                            case "Remove":
                                {
                                    RemoveService(service, resource);
                                }
                                break;
                        }

                        #region After add we should update service properties if any is changed, if StdinStdOut is true
                        if (serviceFull != null)
                        {
                            if (serviceFull["StdinStdout"].ToLower() == "true")
                            {
                                foreach (ModuleServiceProperty prop in service.Properties)
                                {
                                    serviceFull[prop.Name] = prop.Value;
                                    //serviceFull.Properties.Add(new ModuleServiceProperty(prop.Name, prop.Value));
                                }
                                string jsonSerializedFullService = Helpers.Common.SerializeService(serviceFull);

                                bool bLoop = true;
                                string sCurrentMessagePart = string.Empty;
                                string sRestOfMessage = jsonSerializedFullService;
                                while (bLoop)
                                {
                                    if (sRestOfMessage.Length < 1024)
                                    {
                                        sCurrentMessagePart = sRestOfMessage;
                                        bLoop = false;
                                    }
                                    else
                                    {
                                        sCurrentMessagePart = sRestOfMessage.Substring(0, 1023);
                                        sRestOfMessage = sRestOfMessage.Replace(sCurrentMessagePart, "");
                                    }

                                    Console.WriteLine(sCurrentMessagePart);

                                }

                            }
                        }
                        #endregion After add we should update service properties if any is changed, if StdinStdOut is true

                        #endregion Add/Remove Handling
                    }
                    break;

                case "Modify":
                    {
                        #region Modify Handling

                        #region Check args number
                        if (!((args.Length == 6) || (args.Length == 8)))
                        {
                            throw ExceptionHelper.GetModuleException("ID422003", null, null);
                        }
                        #endregion Check args number

                        resource = Helpers.Common.ReadAndFillResourceData(args[3], serviceName);

                        serviceOld = Helpers.Common.ReadAndFillServiceData(args[4], serviceName);

                        serviceNew = Helpers.Common.ReadAndFillServiceData(args[5], serviceName);

                        #region Read and fill full serialized service
                        if (args.Length == 8)
                        {
                            serviceOldFull = Helpers.Common.DeserializeService(args[6]);
                            serviceNewFull = Helpers.Common.DeserializeService(args[7]);
                        }
                        #endregion Read and fill full serialized service

                        ModifyService(serviceOld, resource, serviceNew);

                        #region After modify we should update service properties if any is changed, if StdinStdOut is true
                        if (serviceNewFull != null)
                        {
                            if (serviceNewFull["StdinStdout"].ToLower() == "true")
                            {
                                foreach (ModuleServiceProperty prop in serviceNew.Properties)
                                {
                                    serviceNewFull[prop.Name] = prop.Value;
                                }
                                string jsonSerializedFullService = Helpers.Common.SerializeService(serviceNewFull);

                                bool bLoop = true;
                                string sCurrentMessagePart = string.Empty;
                                string sRestOfMessage = jsonSerializedFullService;
                                while (bLoop)
                                {
                                    if (sRestOfMessage.Length < 1024)
                                    {
                                        sCurrentMessagePart = sRestOfMessage;
                                        bLoop = false;
                                    }
                                    else
                                    {
                                        sCurrentMessagePart = sRestOfMessage.Substring(0, 1023);
                                        sRestOfMessage = sRestOfMessage.Replace(sCurrentMessagePart, "");
                                    }

                                    Console.WriteLine(sCurrentMessagePart);
                                }
                            }
                        }
                        #endregion after modify we should update service properties if any is changed, if StdinStdOut is true

                        #endregion Modify Handling
                    }
                    break;

                case "CallOperation":
                    {
                        #region CallOperation Handling

                        #region Check args number
                        if (args.Length != 6)
                        {
                            throw ExceptionHelper.GetModuleException("ID422002", null, null);
                        }
                        #endregion Check args number

                        //string args = service.Name + " " + ModuleCommandType.CallOperation.ToString() + " " + "operationName:" + operationName + " " + "operationArgument:" + operationArgument + " " + jsonSerializedResourceProperties + " " + jsonSerializedServiceProperties;

                        string operationName = string.Empty;
                        string operationArgument = string.Empty;

                        string oneParam = args[2];
                        string[] oneParamSplitted = oneParam.Split(":".ToArray(), 2, StringSplitOptions.None);
                        if (oneParamSplitted.Length != 2)
                        {
                            throw ExceptionHelper.GetModuleException("ID422001", null, null);
                        }
                        else
                        {
                            operationName = oneParamSplitted[1];
                        }

                        oneParam = args[3];
                        oneParamSplitted = oneParam.Split(":".ToArray(), 2, StringSplitOptions.None);
                        if (oneParamSplitted.Length != 2)
                        {
                            throw ExceptionHelper.GetModuleException("ID422001", null, null);
                        }
                        else
                        {
                            operationArgument = oneParamSplitted[1];
                        }

                        resource = Helpers.Common.ReadAndFillResourceData(args[4], serviceName);
                        service = Helpers.Common.ReadAndFillServiceData(args[5], serviceName);

                        string operationResult = CallOperation(service, operationName, operationArgument, resource);

                        bool bLoop = true;
                        string sCurrentMessagePart = string.Empty;
                        string sRestOfMessage = operationResult;
                        while (bLoop)
                        {
                            if (sRestOfMessage.Length < 1024)
                            {
                                sCurrentMessagePart = sRestOfMessage;
                                bLoop = false;
                            }
                            else
                            {
                                sCurrentMessagePart = sRestOfMessage.Substring(0, 1023);
                                sRestOfMessage = sRestOfMessage.Replace(sCurrentMessagePart, "");
                            }

                            Console.WriteLine(sCurrentMessagePart);
                        }

                        #endregion CallOperation Handling
                    }
                    break;
            }
        }
 void PopulateBreakerProperties(Breaker x, ResourceDescription rd)
 {
     PopulateProtectedSwitchProperties(x, rd);
 }
Example #34
0
        /// <summary>
        /// Gets the module command.
        /// </summary>
        /// <param name="resource">The server resource.</param>
        /// <param name="commandType">Type of the command.</param>
        /// <param name="childService">The child service.</param>
        /// <returns>Module command</returns>
        private ModuleCommand GetModuleCommand(ResourceDescription resource, ModuleCommandType commandType, int listDepth, params ModuleService[] childService)
        {
            ModuleCommand command = null;
            string serviceName = childService[0].Name;

            Type command_type = null;

            switch (serviceName)
            {
                case "Folders":
                    {
                        command_type = typeof(Commands.FoldersCommand);
                    }
                    break;
                case "OtherCommand":
                    {
                        //command_type = typeof(Commands.OtherCommand);
                    }
                    break;
            }

            command = (ModuleCommand)Activator.CreateInstance(command_type, new object[] { childService[0], resource, commandType == ModuleCommandType.Modify ? childService[1] : null, commandType, listDepth });

            return command;
        }
 void PopulateRecloserProperties(Recloser x, ResourceDescription rd)
 {
     PopulateProtectedSwitchProperties(x, rd);
 }
Example #36
0
 public FileCommand(ModuleService service, ResourceDescription resource, ModuleService newServiceSettings, ModuleCommandType commandType, int listDepth, string transContext)
     : base(service, resource, newServiceSettings, commandType, listDepth)
 {
     this.transContext = transContext;
 }
 void PopulateDisconnectorProperties(Disconnector x, ResourceDescription rd)
 {
     PopulateSwitchProperties(x, rd);
 }
 public HaproxyCommandBase(ModuleService service, ResourceDescription resource, ModuleService newServiceSettings, ModuleCommandType commandType, int listDepth)
     : base(service, resource, newServiceSettings, commandType, listDepth)
 {
     this.jsonSerializer = new JavaScriptSerializer();
 }
Example #39
0
        private static Dictionary<string, ResourceDescription> FillBindingsElement(System.Xml.Linq.XElement resourceAndPolicy, string moduleName)
        {
            Dictionary<string, ResourceDescription> resources = new Dictionary<string, ResourceDescription>();

            // find all resources descriptions for module
            foreach (System.Xml.Linq.XElement module in resourceAndPolicy.Element("moduleList").Elements())
            {
                if (module.Attribute("name").Value == moduleName)
                {

                    foreach (System.Xml.Linq.XElement resourceItem in resourceAndPolicy.Element("resourceList").Elements())
                    {

                        ResourceDescription resourceDesc = new ResourceDescription(resourceItem.Attribute("name").Value, moduleName);

                        resourceDesc.ShouldBeLocked = true;

                        foreach (System.Xml.Linq.XElement propElem in resourceItem.Elements("property"))
                        {
                            resourceDesc[propElem.Attribute("name").Value] = propElem.Value;
                        }

                        foreach (System.Xml.Linq.XElement propListEl in resourceItem.Elements("propertyList"))
                        {
                            ResourceDescriptionPropertyList resDescPropList = new ResourceDescriptionPropertyList();
                            resDescPropList.PropertyListName = propListEl.Attribute("name").Value;
                            foreach (System.Xml.Linq.XElement propListItem in propListEl.Elements("propertyListItem"))
                            {
                                resDescPropList.PropertyListItems.Add(propListItem.Value);
                            }

                            resourceDesc.PropertyList.Add(resDescPropList);
                        }

                        // first check if this resource already exist in list of resoources
                        if (resources.ContainsKey(resourceDesc.Name))
                        {
                            // check if they are the same
                            if (resourceDesc.Equals(resources[resourceDesc.Name]))
                            {
                                resourceDesc = resources[resourceDesc.Name];
                            }
                            else
                            {
                                // they have the same name but settings are different.
                                // this is not allowed
                                throw ExceptionHelper.GetModuleException("ID422005", new Dictionary<string, string>() { { "Message", resourceDesc.Name } }, null);
                            }
                        }
                        else
                        {
                            resources[resourceDesc.Name] = resourceDesc;
                        }

                    }

                }
            }

            return resources;
        }