Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refine the Logger/Issue API #582

Open
agarny opened this issue Mar 20, 2020 · 0 comments
Open

Refine the Logger/Issue API #582

agarny opened this issue Mar 20, 2020 · 0 comments

Comments

@agarny
Copy link
Contributor

agarny commented Mar 20, 2020

PR #521 has gone a long way to get our original Error class replaced with the Issue class. However, I feel that it inherited an API that is is not the most convenient to use (as originally discussed here). Indeed, to create a full-fledged warning (from a Logger-based class), we need to do something like:

IssuePtr warning = Issue::create();
issue->setDescription("Some warning message.");
issue->setLevel(Issue::Level::WARNING);
issue->setCause(Issue::Cause::MODEL);
issue->setReferenceRule(Issue::ReferenceRule::MODEL_NAME);
issue->setModel(model);
addIssue(issue);

while I would find it much easier/cleaner if we could simply do something like:

addWarning("Some warning message."
           Issue::Cause::MODEL,
           Issue::ReferenceRule::MODEL_NAME,
           model);

In other words, I would change the Issue class to have the following new API:

static IssuePtr createError(const std::string &description, Cause cause,
                            ReferenceRule referenceRule,
                            const ComponentPtr &component) noexcept;
static IssuePtr createError(const std::string &description, Cause cause,
                            ReferenceRule referenceRule,
                            const ImportSourcePtr &importSource) noexcept;
static IssuePtr createError(const std::string &description, Cause cause,
                            ReferenceRule referenceRule,
                            const ModelPtr &model) noexcept;
static IssuePtr createError(const std::string &description, Cause cause,
                            ReferenceRule referenceRule,
                            const UnitsPtr &units) noexcept;
static IssuePtr createError(const std::string &description, Cause cause,
                            ReferenceRule referenceRule,
                            const VariablePtr &variable) noexcept;
static IssuePtr createError(const std::string &description, Cause cause,
                            ReferenceRule referenceRule,
                            const ResetPtr &reset) noexcept;

static IssuePtr createWarning(const std::string &description, Cause cause,
                              ReferenceRule referenceRule,
                              const ComponentPtr &component) noexcept;
static IssuePtr createWarning(const std::string &description, Cause cause,
                              ReferenceRule referenceRule,
                              const ImportSourcePtr &importSource) noexcept;
static IssuePtr createWarning(const std::string &description, Cause cause,
                              ReferenceRule referenceRule,
                              const ModelPtr &model) noexcept;
static IssuePtr createWarning(const std::string &description, Cause cause,
                              ReferenceRule referenceRule,
                              const UnitsPtr &units) noexcept;
static IssuePtr createWarning(const std::string &description, Cause cause,
                              ReferenceRule referenceRule,
                              const VariablePtr &variable) noexcept;
static IssuePtr createWarning(const std::string &description, Cause cause,
                              ReferenceRule referenceRule,
                              const ResetPtr &reset) noexcept;

static IssuePtr createHint(const std::string &description, Cause cause,
                           ReferenceRule referenceRule,
                           const ComponentPtr &component) noexcept;
static IssuePtr createHint(const std::string &description, Cause cause,
                           ReferenceRule referenceRule,
                           const ImportSourcePtr &importSource) noexcept;
static IssuePtr createHint(const std::string &description, Cause cause,
                           ReferenceRule referenceRule,
                           const ModelPtr &model) noexcept;
static IssuePtr createHint(const std::string &description, Cause cause,
                           ReferenceRule referenceRule,
                           const UnitsPtr &units) noexcept;
static IssuePtr createHint(const std::string &description, Cause cause,
                           ReferenceRule referenceRule,
                           const VariablePtr &variable) noexcept;
static IssuePtr createHint(const std::string &description, Cause cause,
                           ReferenceRule referenceRule,
                           const ResetPtr &reset) noexcept;

bool isError() const;
bool isWarning() const;
bool isHint() const;

std::string description() const;
Cause cause() const;
ReferenceRule referneceRule() const;

// std::string url() const;

std::string referenceHeading() const;

ComponentPtr component() const;
ImportSourcePtr importSource() const;
ModelPtr model() const;
UnitsPtr units() const;
VariablePtr variable() const;
ResetPtr reset() const;

and our Logger class to have the following new API:

IssuePtr addError(const std::string &description, Issue::Cause cause,
                  Issue::ReferenceRule referenceRule,
                  const ComponentPtr &component);
IssuePtr addError(const std::string &description, Issue::Cause cause,
                  Issue::ReferenceRule referenceRule,
                  const ImportSourcePtr &importSource);
IssuePtr addError(const std::string &description, Issue::Cause cause,
                  Issue::ReferenceRule referenceRule,
                  const ModelPtr &model);
IssuePtr addError(const std::string &description, Issue::Cause cause,
                  Issue::ReferenceRule referenceRule,
                  const UnitsPtr &units);
IssuePtr addError(const std::string &description, Issue::Cause cause,
                  Issue::ReferenceRule referenceRule,
                  const VariablePtr &variable);
IssuePtr addError(const std::string &description, Issue::Cause cause,
                  Issue::ReferenceRule referenceRule,
                  const ResetPtr &reset);

IssuePtr addWarning(const std::string &description, Issue::Cause cause,
                    Issue::ReferenceRule referenceRule,
                    const ComponentPtr &component);
IssuePtr addWarning(const std::string &description, Issue::Cause cause,
                    Issue::ReferenceRule referenceRule,
                    const ImportSourcePtr &importSource);
IssuePtr addWarning(const std::string &description, Issue::Cause cause,
                    Issue::ReferenceRule referenceRule,
                    const ModelPtr &model);
IssuePtr addWarning(const std::string &description, Issue::Cause cause,
                    Issue::ReferenceRule referenceRule,
                    const UnitsPtr &units);
IssuePtr addWarning(const std::string &description, Issue::Cause cause,
                    Issue::ReferenceRule referenceRule,
                    const VariablePtr &variable);
IssuePtr addWarning(const std::string &description, Issue::Cause cause,
                    Issue::ReferenceRule referenceRule,
                    const ResetPtr &reset);

IssuePtr addHint(const std::string &description, Issue::Cause cause,
                 Issue::ReferenceRule referenceRule,
                 const ComponentPtr &component);
IssuePtr addHint(const std::string &description, Issue::Cause cause,
                 Issue::ReferenceRule referenceRule,
                 const ImportSourcePtr &importSource);
IssuePtr addHint(const std::string &description, Issue::Cause cause,
                 Issue::ReferenceRule referenceRule,
                 const ModelPtr &model);
IssuePtr addHint(const std::string &description, Issue::Cause cause,
                 Issue::ReferenceRule referenceRule,
                 const UnitsPtr &units);
IssuePtr addHint(const std::string &description, Issue::Cause cause,
                 Issue::ReferenceRule referenceRule,
                 const VariablePtr &variable);
IssuePtr addHint(const std::string &description, Issue::Cause cause,
                 Issue::ReferenceRule referenceRule,
                 const ResetPtr &reset);

size_t issueCount() const;
IssuePtr issue(size_t index) const;
void removeAllIssues();

size_t errorCount() const;
IssuePtr error(size_t index) const;
void removeAllErrors();

size_t warningCount() const;
IssuePtr warning(size_t index) const;
void removeAllWarnings();

size_t hintCount() const;
IssuePtr hint(size_t index) const;
void removeAllHints();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant