def initAlgorithm(self, config=None):
        """ Virtual override
    
           see https://qgis.org/api/classQgsProcessingAlgorithm.html
        """
        param = QgsProcessingParameterMultipleLayers(self.INPUT,
                                                     'Multiple Layer')
        param.setMinimumNumberInputs(1)

        self.addParameter(param)
    def initAlgorithm(self, config=None):
        """
        Here we define the inputs and output of the algorithm, along
        with some other properties.
        """

        parameter_input = \
            QgsProcessingParameterMultipleLayers(
                self.INPUTS,
                self.tr('All input raster files to process'),
                QgsProcessing.TypeRaster,
            )
        parameter_input.setMinimumNumberInputs(2)
        self.addParameter(parameter_input)

        self.addParameter(
            QgsProcessingParameterEnum(
                self.STAT,
                self.tr('Statistic for compute the composed'),
                self.STAT_DESC,
                allowMultiple=False,
            ))

        self.addParameter(
            QgsProcessingParameterNumber(
                self.BAND,
                self.tr('Set the band number to process'),
                type=QgsProcessingParameterNumber.Integer,
                minValue=1,
                defaultValue=1,
                optional=False))

        self.addParameter(
            QgsProcessingParameterNumber(
                self.NODATA_INPUT,
                self.tr('Input pixel value to treat as "nodata"'),
                type=QgsProcessingParameterNumber.Integer,
                defaultValue=None,
                optional=True))

        self.addParameter(
            QgsProcessingParameterEnum(
                self.DATA_TYPE,
                self.tr('Output data type'),
                self.TYPES,
                allowMultiple=False,
                defaultValue='Default',
            ))

        parameter_num_process = \
            QgsProcessingParameterNumber(
                self.NUM_PROCESS,
                self.tr('Set the number of process'),
                type=QgsProcessingParameterNumber.Integer,
                defaultValue=cpu_count(),
                optional=True
            )
        parameter_num_process.setFlags(
            parameter_num_process.flags()
            | QgsProcessingParameterDefinition.FlagAdvanced)
        self.addParameter(parameter_num_process)

        parameter_chunks = \
            QgsProcessingParameterNumber(
                self.CHUNKS,
                self.tr('Chunks size for parallel process'),
                type=QgsProcessingParameterNumber.Integer,
                defaultValue=500,
                optional=True
            )
        parameter_chunks.setFlags(
            parameter_chunks.flags()
            | QgsProcessingParameterDefinition.FlagAdvanced)
        self.addParameter(parameter_chunks)

        self.addParameter(
            QgsProcessingParameterRasterDestination(
                self.OUTPUT, self.tr('Output raster stack composed')))
    def initAlgorithm(self, config):

        #super(MappiaPublisherAlgorithm, self).initAlgorithm()
        """
        Here we define the inputs and output of the algorithm, along
        with some other properties.
        """

        options = OptionsCfg.read()

        #self.addParameter(
        #    QgsProcessingParameterEnum(
        #        self.OPERATION,
        #        self.tr('Operation Type'),
        #        options=[self.tr(curOption) for curOption in OperationType.getOptions()],
        #        defaultValue=9
        #    )
        #)

        #TODO Implement layer attribute later.
        # self.addParameter(
        #     QgsProcessingParameterString(
        #         self.LAYER_ATTRIBUTE,
        #         self.tr('Layer style name (Change to different style names only if interested in publishing multiple (layers or attributes) of the same file.)'),
        #         optional=False,
        #         defaultValue=options['attrName']
        #     )
        # )

        self.addParameter(
            QgsProcessingParameterString(
                self.GITHUB_REPOSITORY,
                self.tr('Repository name (or map group name)'),
                optional=False,
                defaultValue=options['gh_repository']))

        # We add the input vector features source. It can have any kind of
        # geometry.
        layerParam = QgsProcessingParameterMultipleLayers(
            self.LAYERS,
            self.tr('Maps to display online'),
            QgsProcessing.TypeMapLayer,
            defaultValue=[
                layer.dataProvider().dataSourceUri(False)
                for layer in iface.mapCanvas().layers()
            ])
        layerParam.setMinimumNumberInputs(1)
        self.addParameter(layerParam)

        maxZoomParameter = QgsProcessingParameterNumber(
            self.ZOOM_MAX,
            self.tr('Map max Zoom level [1 ~ 13] (lower is faster)'),
            minValue=1,
            maxValue=13,
            defaultValue=options["zoom_max"])
        maxZoomParameter.setFlags(
            maxZoomParameter.flags()
            | QgsProcessingParameterDefinition.FlagAdvanced)
        self.addParameter(maxZoomParameter)

        gitExeParameter = QgsProcessingParameterString(
            self.GIT_EXECUTABLE,
            self.tr('Git client executable path.'),
            optional=True,
            defaultValue=self.getGitDefault(options))
        gitExeParameter.setFlags(
            gitExeParameter.flags()
            | QgsProcessingParameterDefinition.FlagAdvanced)
        self.addParameter(gitExeParameter)

        ghUserParameter = QgsProcessingParameterString(
            self.GITHUB_USER,
            self.tr('Github USERNAME (Credentials for https://github.com)'),
            optional=True,
            defaultValue=options['gh_user'])
        ghUserParameter.setFlags(
            ghUserParameter.flags()
            | QgsProcessingParameterDefinition.FlagAdvanced)
        self.addParameter(ghUserParameter)

        ghPassParameter = QgsProcessingParameterString(
            self.GITHUB_PASS,
            self.tr('Github Access Token'),
            optional=True,
            defaultValue=options['gh_pass'])
        ghPassParameter.setFlags(
            ghPassParameter.flags()
            | QgsProcessingParameterDefinition.FlagAdvanced)
        self.addParameter(ghPassParameter)

        outputDirParameter = QgsProcessingParameterFolderDestination(
            self.OUTPUT_DIRECTORY,
            self.tr('Output directory'),
            optional=True,
            defaultValue=options["folder"])
        outputDirParameter.setFlags(
            outputDirParameter.flags()
            | QgsProcessingParameterDefinition.FlagAdvanced)
        self.addParameter(outputDirParameter)
    def initAlgorithm(self, config):
        print('initAlgorithm()')

        #super(MappiaPublisherAlgorithm, self).initAlgorithm()
        """
        Here we define the inputs and output of the algorithm, along
        with some other properties.
        """

        options = OptionsCfg.read()

        self.last_update_date = options[OptionsCfg.UPDATE_CHECK]

        #self.addParameter(
        #    QgsProcessingParameterEnum(
        #        self.OPERATION,
        #        self.tr('Operation Type'),
        #        options=[self.tr(curOption) for curOption in OperationType.getOptions()],
        #        defaultValue=9
        #    )
        #)

        #TODO Implement layer attribute later.
        # self.addParameter(
        #     QgsProcessingParameterString(
        #         self.LAYER_ATTRIBUTE,
        #         self.tr('Layer style name (Change to different style names only if interested in publishing multiple (layers or attributes) of the same file.)'),
        #         optional=False,
        #         defaultValue=options['attrName']
        #     )
        # )

        self.addParameter(
            QgsProcessingParameterString(
                self.GITHUB_REPOSITORY,
                self.tr('* Repository name (or map group name)'),
                optional=False,
                defaultValue=options['gh_repository']))

        # We add the input vector features source. It can have any kind of
        # geometry.
        layerParam = QgsProcessingParameterMultipleLayers(
            self.LAYERS, self.tr('* Maps to display online'),
            QgsProcessing.TypeMapLayer
            #, defaultValue=[layer.id() for layer in iface.mapCanvas().layers()]#[layer.dataProvider().dataSourceUri(False) for layer in iface.mapCanvas().layers()]
        )
        layerParam.setMinimumNumberInputs(1)
        self.addParameter(layerParam)
        self.m_layerParam = layerParam

        maxZoomParameter = QgsProcessingParameterNumber(
            self.ZOOM_MAX,
            self.tr('Map max Zoom level [1 ~ 13] (lower is faster)'),
            minValue=1,
            maxValue=13,
            defaultValue=options["zoom_max"])
        maxZoomParameter.setFlags(
            maxZoomParameter.flags()
            | QgsProcessingParameterDefinition.FlagAdvanced)
        self.addParameter(maxZoomParameter)

        includeSourceDownload = QgsProcessingParameterBoolean(
            self.INCLUDE_DOWNLOAD,
            self.tr(
                'Upload maps for further download (2GB limit per unique map)'),
            defaultValue=options['include_dl'])
        includeSourceDownload.setFlags(
            includeSourceDownload.flags()
            | QgsProcessingParameterDefinition.FlagAdvanced)
        self.addParameter(includeSourceDownload)

        gitExeParameter = QgsProcessingParameterString(
            self.GIT_EXECUTABLE,
            self.tr('Git client executable path.'),
            optional=True,
            defaultValue=UTILS.getGitDefault(options['git_exe']))
        gitExeParameter.setFlags(
            gitExeParameter.flags()
            | QgsProcessingParameterDefinition.FlagAdvanced)
        self.addParameter(gitExeParameter)

        ghUserParameter = QgsProcessingParameterString(
            self.GITHUB_USER,
            self.tr('Github USERNAME (Credentials for https://github.com)'),
            optional=True,
            defaultValue=options['gh_user'])
        ghUserParameter.setFlags(
            ghUserParameter.flags()
            | QgsProcessingParameterDefinition.FlagAdvanced)
        self.addParameter(ghUserParameter)

        # ghPassParameter = QgsProcessingParameterString(
        #     self.GITHUB_PASS,
        #     self.tr('Github Access Token *'),
        #     optional=True,
        #     defaultValue=options['gh_pass']
        # )
        # ghPassParameter.setFlags(ghPassParameter.flags() | QgsProcessingParameterDefinition.FlagAdvanced)
        # self.addParameter(ghPassParameter)

        askUserConfirmation = QgsProcessingParameterBoolean(
            self.ASK_USER,
            self.tr('Ask user confirmation before each step.'),
            defaultValue=options['ask_user'])
        askUserConfirmation.setFlags(
            askUserConfirmation.flags()
            | QgsProcessingParameterDefinition.FlagAdvanced)
        self.addParameter(askUserConfirmation)

        outputDirParameter = QgsProcessingParameterFolderDestination(
            self.OUTPUT_DIRECTORY,
            self.tr('Output directory'),
            optional=True,
            defaultValue=options["folder"] or None)
        outputDirParameter.setFlags(
            outputDirParameter.flags()
            | QgsProcessingParameterDefinition.FlagAdvanced)
        self.addParameter(outputDirParameter)