github.com/adnan-c/fabric_e2e_couchdb@v0.6.1-preview.0.20170228180935-21ce6b23cf91/core/common/sysccprovider/sysccprovider.go (about) 1 /* 2 Copyright IBM Corp. 2017 All Rights Reserved. 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 package sysccprovider 18 19 // SystemChaincodeProvider provides an abstraction layer that is 20 // used for different packages to interact with code in the 21 // system chaincode package without importing it; more methods 22 // should be added below if necessary 23 type SystemChaincodeProvider interface { 24 // IsSysCC returns true if the supplied chaincode is a system chaincode 25 IsSysCC(name string) bool 26 } 27 28 var sccFactory SystemChaincodeProviderFactory 29 30 // SystemChaincodeProviderFactory defines a factory interface so 31 // that the actual implementation can be injected 32 type SystemChaincodeProviderFactory interface { 33 NewSystemChaincodeProvider() SystemChaincodeProvider 34 } 35 36 // RegisterSystemChaincodeProviderFactory is to be called once to set 37 // the factory that will be used to obtain instances of ChaincodeProvider 38 func RegisterSystemChaincodeProviderFactory(sccfact SystemChaincodeProviderFactory) { 39 sccFactory = sccfact 40 } 41 42 // GetSystemChaincodeProvider returns instances of SystemChaincodeProvider; 43 // the actual implementation is controlled by the factory that 44 // is registered via RegisterSystemChaincodeProviderFactory 45 func GetSystemChaincodeProvider() SystemChaincodeProvider { 46 if sccFactory == nil { 47 panic("The factory must be set first via RegisterSystemChaincodeProviderFactory") 48 } 49 return sccFactory.NewSystemChaincodeProvider() 50 }