Skip to content
This repository was archived by the owner on Apr 25, 2025. It is now read-only.

Commit ab16930

Browse files
committed
[FAB-7661] Functional parameters for fabsdk.New
This patch adjusts fabsdk to use a functional parameter style to provide more explicit options and better flexibility. Change-Id: Ib2bc77062f68447d3550aff82952e756fd5f1556 Signed-off-by: Troy Ronda <troy@troyronda.com>
1 parent 06a1bae commit ab16930

File tree

9 files changed

+248
-251
lines changed

9 files changed

+248
-251
lines changed

def/fabapi/deprecated.go

Lines changed: 40 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,18 @@ Copyright SecureKey Technologies Inc. All Rights Reserved.
44
SPDX-License-Identifier: Apache-2.0
55
*/
66

7+
// Package fabapi is deprecated and will be removed - see pkg/fabsdk
78
package fabapi
89

910
import (
1011
"github.com/hyperledger/fabric-sdk-go/api/apilogging"
12+
"github.com/hyperledger/fabric-sdk-go/def/factory/defclient"
13+
"github.com/hyperledger/fabric-sdk-go/def/factory/defcore"
14+
"github.com/hyperledger/fabric-sdk-go/def/factory/defsvc"
1115
"github.com/hyperledger/fabric-sdk-go/pkg/fabsdk"
1216
apisdk "github.com/hyperledger/fabric-sdk-go/pkg/fabsdk/api"
1317
"github.com/hyperledger/fabric-sdk-go/pkg/logging"
18+
"github.com/hyperledger/fabric-sdk-go/pkg/logging/deflogger"
1419
)
1520

1621
var logger = logging.NewLogger("fabric_sdk_go")
@@ -42,36 +47,52 @@ type StateStoreOpts struct {
4247
// NewSDK wraps the NewSDK func moved to the pkg folder.
4348
// Notice: this wrapper is deprecated and will be removed.
4449
func NewSDK(options Options) (*fabsdk.FabricSDK, error) {
45-
opts := newSDKOptionsFromWrapper(options)
46-
sdk, err := fabsdk.NewSDK(opts)
50+
sdk, err := fabsdk.New(
51+
fabsdk.ConfigBytes(options.ConfigByte, options.ConfigType),
52+
fabsdk.ConfigFile(options.ConfigFile),
53+
fabsdk.StateStorePath(options.StateStoreOpts.Path),
54+
pkgSuiteFromOptions(options))
55+
4756
if err != nil {
4857
return nil, err
4958
}
5059

51-
logger.Info("fabapi.NewSDK is depecated - please use fabsdk.NewSDK")
60+
logger.Debug("fabapi.NewSDK is deprecated - please use fabsdk.New")
5261

5362
return sdk, nil
5463
}
5564

56-
// newSDKOptionsFromWrapper populates the SDK options with the default implementation referenced by the fabapi package
57-
func newSDKOptionsFromWrapper(opt Options) fabsdk.Options {
58-
stateStoreOpts := fabsdk.StateStoreOpts{
59-
Path: opt.StateStoreOpts.Path,
65+
func pkgSuiteFromOptions(options Options) fabsdk.SDKOption {
66+
impl := apisdk.PkgSuite{}
67+
if options.CoreFactory != nil {
68+
impl.Core = options.CoreFactory
69+
} else {
70+
impl.Core = defcore.NewProviderFactory()
71+
}
72+
73+
if options.ServiceFactory != nil {
74+
impl.Service = options.ServiceFactory
75+
} else {
76+
impl.Service = defsvc.NewProviderFactory()
6077
}
6178

62-
sdkOpt := fabsdk.Options{
63-
ConfigFile: opt.ConfigFile,
64-
ConfigByte: opt.ConfigByte,
65-
ConfigType: opt.ConfigType,
66-
StateStoreOpts: stateStoreOpts,
67-
CoreFactory: opt.CoreFactory,
68-
ServiceFactory: opt.ServiceFactory,
69-
ContextFactory: opt.ContextFactory,
70-
SessionFactory: opt.SessionFactory,
71-
LoggerFactory: opt.LoggerFactory,
79+
if options.ContextFactory != nil {
80+
impl.Context = options.ContextFactory
81+
} else {
82+
impl.Context = defclient.NewOrgClientFactory()
7283
}
7384

74-
PopulateSDKOpts(&sdkOpt)
85+
if options.SessionFactory != nil {
86+
impl.Session = options.SessionFactory
87+
} else {
88+
impl.Session = defclient.NewSessionClientFactory()
89+
}
90+
91+
if options.LoggerFactory != nil {
92+
impl.Logger = options.LoggerFactory
93+
} else {
94+
impl.Logger = deflogger.LoggerProvider()
95+
}
7596

76-
return sdkOpt
97+
return fabsdk.PkgSuiteAsOpt(impl)
7798
}

def/fabapi/fabapi.go

Lines changed: 0 additions & 46 deletions
This file was deleted.

def/fabapi/fabapi_test.go

Lines changed: 0 additions & 42 deletions
This file was deleted.

def/pkgsuite/defpkgsuite/pkgsuite.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/*
2+
Copyright SecureKey Technologies Inc. All Rights Reserved.
3+
4+
SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
// Package defpkgsuite provides a default implementation of the fabric API for fabsdk
8+
package defpkgsuite
9+
10+
import (
11+
"github.com/hyperledger/fabric-sdk-go/def/factory/defclient"
12+
"github.com/hyperledger/fabric-sdk-go/def/factory/defcore"
13+
"github.com/hyperledger/fabric-sdk-go/def/factory/defsvc"
14+
"github.com/hyperledger/fabric-sdk-go/pkg/fabsdk"
15+
sdkapi "github.com/hyperledger/fabric-sdk-go/pkg/fabsdk/api"
16+
"github.com/hyperledger/fabric-sdk-go/pkg/logging/deflogger"
17+
)
18+
19+
// SDKOpt provides the default implementation for the SDK
20+
func SDKOpt() fabsdk.SDKOption {
21+
return fabsdk.PkgSuiteAsOpt(newPkgSuite())
22+
}
23+
24+
func newPkgSuite() sdkapi.PkgSuite {
25+
pkgSuite := sdkapi.PkgSuite{
26+
Core: defcore.NewProviderFactory(),
27+
Service: defsvc.NewProviderFactory(),
28+
Context: defclient.NewOrgClientFactory(),
29+
Session: defclient.NewSessionClientFactory(),
30+
Logger: deflogger.LoggerProvider(),
31+
}
32+
return pkgSuite
33+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
/*
2+
Copyright SecureKey Technologies Inc. All Rights Reserved.
3+
4+
SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
package defpkgsuite
8+
9+
import (
10+
"testing"
11+
12+
"github.com/hyperledger/fabric-sdk-go/pkg/fabsdk"
13+
)
14+
15+
func TestSDKOpt(t *testing.T) {
16+
opt := SDKOpt()
17+
18+
_, err := fabsdk.New(opt, fabsdk.ConfigFile("../../../test/fixtures/config/config_test.yaml"))
19+
if err != nil {
20+
t.Fatalf("Unexpected error constructing SDK: %v", err)
21+
}
22+
}
23+
24+
func TestNewPkgSuite(t *testing.T) {
25+
pkgsuite := newPkgSuite()
26+
27+
if pkgsuite.Context == nil {
28+
t.Fatalf("Context is nil")
29+
}
30+
if pkgsuite.Core == nil {
31+
t.Fatalf("Core is nil")
32+
}
33+
if pkgsuite.Logger == nil {
34+
t.Fatalf("Logger is nil")
35+
}
36+
if pkgsuite.Service == nil {
37+
t.Fatalf("Service is nil")
38+
}
39+
if pkgsuite.Session == nil {
40+
t.Fatalf("Session is nil")
41+
}
42+
}

pkg/fabsdk/api/factory.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"github.com/hyperledger/fabric-sdk-go/api/apicore"
1212
"github.com/hyperledger/fabric-sdk-go/api/apicryptosuite"
1313
fab "github.com/hyperledger/fabric-sdk-go/api/apifabclient"
14+
"github.com/hyperledger/fabric-sdk-go/api/apilogging"
1415
txn "github.com/hyperledger/fabric-sdk-go/api/apitxn"
1516
chmgmt "github.com/hyperledger/fabric-sdk-go/api/apitxn/chmgmtclient"
1617
resmgmt "github.com/hyperledger/fabric-sdk-go/api/apitxn/resmgmtclient"
@@ -61,3 +62,12 @@ type SessionClientFactory interface {
6162
NewResourceMgmtClient(context SDK, session Session, config apiconfig.Config, filter resmgmt.TargetFilter) (resmgmt.ResourceMgmtClient, error)
6263
NewChannelClient(context SDK, session Session, config apiconfig.Config, channelID string) (txn.ChannelClient, error)
6364
}
65+
66+
// PkgSuite holds the package factories that create clients and providers
67+
type PkgSuite struct {
68+
Core CoreProviderFactory
69+
Service ServiceProviderFactory
70+
Context OrgClientFactory
71+
Session SessionClientFactory
72+
Logger apilogging.LoggerProvider
73+
}

0 commit comments

Comments
 (0)