// Create supply chain definition for Physical Machine.
func (this *SupplyChainFactory) physicalMachineSupplyChainNodeBuilder() *builder.SupplyChainNodeBuilder {
	// PM Creation Process
	pmSupplyChainNodeBuilder := builder.NewSupplyChainNodeBuilder()
	// Creates a Physical Machine entity and sets the type of commodity it sells to CPU
	pmSupplyChainNodeBuilder = pmSupplyChainNodeBuilder.
		Entity(proto.EntityDTO_PHYSICAL_MACHINE).
		Sells(cpuTemplateComm).
		Sells(memTemplateComm)

	return pmSupplyChainNodeBuilder
}
// Create supply chain definition for Vitual Machine
func (this *SupplyChainFactory) virtualMachineSupplyChainNodeBuilder() *builder.SupplyChainNodeBuilder {
	// VM Creation Process
	vmSupplyChainNodeBuilder := builder.NewSupplyChainNodeBuilder()
	// Creates a Virtual Machine entity
	vmSupplyChainNodeBuilder = vmSupplyChainNodeBuilder.
		Entity(proto.EntityDTO_VIRTUAL_MACHINE).
		Sells(vCpuTemplateComm).
		Sells(vMemTemplateComm)

	// The Entity type for the Virtual Machine's commodity provider is defined by the Provider() method.
	// The Commodity type for Virtual Machine's buying relationship is define by the Buys() method
	vmSupplyChainNodeBuilder = vmSupplyChainNodeBuilder.
		Provider(proto.EntityDTO_PHYSICAL_MACHINE, proto.Provider_HOSTING).
		Buys(cpuTemplateComm).
		Buys(memTemplateComm)

	return vmSupplyChainNodeBuilder
}