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  }