--
-- TODO: Put general module description here
--


--
-- standard module/plugin functions
-- 

-- this function is called first by MySQL Workbench core to determine number of plugins in this module and basic plugin info
-- see the comments in the function body and adjust the parameters as appropriate
function getModuleInfo()
	return {
		name= "ModuleName",                     -- put your module name here; must be a valid identifier unique among 
                                                        -- all other plugin names
		author= "CompanyName",                  -- put your company name here
		version= "1.0",                         -- put module version string in form major.minor
		implements= "PluginInterface",          -- don't change this
		functions= {
                  "getPluginInfo:l<o@app.Plugin>:",     -- don't change this
                  "PluginFunctionName:i:o@db.Catalog"   -- list all your plugin function names and accepted argument types, 
                                                        -- keeping the rest unchanged; in this example there's only one 
                                                        -- function, function name is PluginFunctionName and argument type 
                                                        -- is db.Catalog
		}
	}
end


-- helper function to create a descriptor for an argument of a specific type of object
-- you don't need to change here anything
function objectPluginInput(type)
	return grtV.newObj("app.PluginObjectInput", {objectStructName= type})
end

-- this function is called by MySQL Workbench core after a successful call to getModuleInfo() 
-- to gather information about the plugins in this module and the functions that the plugins expose;
-- a plugin should expose only one function that will handle a menu command for a class of objects
-- see the comments in the function body and adjust the parameters as appropriate
function getPluginInfo()
    local l
    local plugin

    -- create the list of plugins that this module exports
    l= grtV.newList("object", "app.Plugin")

    -- create a new app.Plugin object for every plugin
    plugin= grtV.newObj("app.Plugin", {
		name= "wb.catalog.util.pluginFunctionName",      -- plugin namespace
                caption= "Menu item descrption",                 -- plugin textual description (will appear as menu item name)
		moduleName= "ModuleName",                        -- this should be in sync with what you sepcified previously for module 
                                                                 -- name in getModuleInfo()
		pluginType= "normal",                            -- don't change this
		moduleFunctionName= "pluginFunctionName",        -- the function that this plugin exposes
		inputValues= {objectPluginInput("db.Catalog")},  -- the type of object
		rating= 100,                                     -- don't change this
		showProgress= 0,                                 -- don't change this                
		groups= {"Catalog/Utilities", "Menu/Utilities"}  -- use "Catalog/Utilities" to show the menu item on the overview page,
                                                                 -- or "Model/Utilities" to show the menu item on the canvas;
                                                                 -- the "Menu/*" entries control how the plugin will appear in main menu
                                                                 -- the possible values for it are "Menu/Model", "Menu/Catalog", "Menu/Objects",
                                                                 -- "Menu/Database", "Menu/Utilities"
	})

    -- fixup owner
    plugin.inputValues[1].owner= plugin
  
    -- add to the list of plugins
    grtV.insert(l, plugin)
  
    return l
end

--    
-- pluginFunctionName definition
-- the obj argument is guaranteed to be of class or subclass of class
-- specififed in plugin definition
-- the plugins for db.Catalog and its cubclasses are automatically 
-- available and enabled in the main menu in "Plugins" submenu

function pluginFunctionName(obj)

  return 0
end