factory.go 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. // Copyright 2022 EMQ Technologies Co., Ltd.
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. package binder
  15. import (
  16. "github.com/lf-edge/ekuiper/internal/plugin"
  17. "github.com/lf-edge/ekuiper/pkg/api"
  18. )
  19. type SourceFactory interface {
  20. Source(name string) (api.Source, error)
  21. LookupSource(name string) (api.LookupSource, error)
  22. // SourcePluginInfo use source type name (mqtt/video) to get source plugin installation information
  23. // first return value is extension type, only native/portable plugin type have installation information
  24. // second return value is the plugin name
  25. // third is the plugin installation information
  26. SourcePluginInfo(name string) (plugin.EXTENSION_TYPE, string, string)
  27. }
  28. type SinkFactory interface {
  29. Sink(name string) (api.Sink, error)
  30. // SinkPluginInfo use sink type name (mqtt/redis) to get sink plugin installation information
  31. // first return value is extension type, only native/portable plugin type have installation information
  32. // second return value is the plugin name
  33. // third is the plugin installation information
  34. SinkPluginInfo(name string) (plugin.EXTENSION_TYPE, string, string)
  35. }
  36. type FuncFactory interface {
  37. Function(name string) (api.Function, error)
  38. // HasFunctionSet Some functions are bundled together into a plugin which shares the same json file.
  39. // This function can return if the function set name exists.
  40. HasFunctionSet(funcName string) bool
  41. // ConvName Convert the name of the function usually to lowercase.
  42. // This is only be used when parsing the SQL statement.
  43. ConvName(funcName string) (string, bool)
  44. // FunctionPluginInfo Use function name to get the function plugin install script
  45. // first return value is extension type, only native/portable plugin type have installation information
  46. // second return value is the plugin name
  47. // third is the plugin installation information
  48. FunctionPluginInfo(funcName string) (plugin.EXTENSION_TYPE, string, string)
  49. }
  50. type FactoryEntry struct {
  51. Name string
  52. Factory interface{}
  53. Weight int // bigger weight will be initialized first
  54. }
  55. type Entries []FactoryEntry
  56. func (e Entries) Len() int {
  57. return len(e)
  58. }
  59. func (e Entries) Less(i, j int) bool {
  60. return e[i].Weight > e[j].Weight
  61. }
  62. func (e Entries) Swap(i, j int) {
  63. e[i], e[j] = e[j], e[i]
  64. }