def _getRemoveOperations(self, param, context, removePkgs):
        if param.noDependents:
            operations = {}
            for pkg in removePkgs:
                if pkg:
                    operations[pkg] = resolver.REMOVE
            return operations

        resolverOption = ResolverOption()
        depResolver = RecursiveDepResolver(context, resolverOption)
        ret, operations, topOrder = depResolver.remove(removePkgs)
        if ret != error.ERROR_NONE:
            Log.cout(Log.ERROR, 'Dependency resovle failed')
            return None
        return operations
    def install(self, pkgs, param, command):
        streamer = RootInfoDbStreamer()
        rootInfo = streamer.load(self._ainstConf.rootinfo)
        if rootInfo is None:
            Log.cout(Log.ERROR, 'Load root info failed')
            return OperatorRet.OPERATE_FAILED
        context = self._contextBuilder.buildAinstContext(self._installRoot,
                                                         self._ainstConf,
                                                         True,
                                                         param.repos,
                                                         param.localRepos,
                                                         localRoots=rootInfo.installRootSet)
        if context is None:
            Log.cout(Log.ERROR, 'Build context failed')
            return OperatorRet.OPERATE_FAILED

        installPkgs = self._selectInstallPkgs(context, pkgs)
        if not installPkgs:
            Log.cout(Log.INFO, 'No package to install')
            return OperatorRet.OPERATE_FAILED

        resolverOption = self._getResolverOption(param)
        depResolver = RecursiveDepResolver(context, resolverOption)
        ret, operations, topOrder = depResolver.install(installPkgs)
        if ret != error.ERROR_NONE:
            Log.cout(Log.ERROR, 'Dependency resovle failed')
            return OperatorRet.OPERATE_FAILED
        if not operations:
            Log.cout(Log.INFO, 'No effective operations')
            return OperatorRet.OPERATE_SUCCESS
        
        self._displayOperations(operations)
        if param.dryRun:
            return OperatorRet.OPERATE_SUCCESS

        if not param.confirmYes and not Log.coutConfirm():
            return True
        if not self._doRpmTransaction(operations):
            Log.cout(Log.ERROR, 'Do rpm transaction failed')
            return OperatorRet.OPERATE_FAILED

        return OperatorRet.OPERATE_SUCCESS