Imported Upstream version 14.45.0
[platform/upstream/libzypp.git] / zypp / Patch.h
index d3d7891..31782a8 100644 (file)
@@ -12,6 +12,7 @@
 #ifndef ZYPP_PATCH_H
 #define ZYPP_PATCH_H
 
+#include "zypp/base/Flags.h"
 #include "zypp/sat/SolvAttr.h"
 #include "zypp/ResObject.h"
 
@@ -52,6 +53,34 @@ namespace zypp
         CAT_DOCUMENT
       };
 
+      /**
+       * Flags defining if and why this
+       * patch is interactive.
+       */
+      enum InteractiveFlag {
+        NoFlags = 0x0000,
+        Reboot  = 0x0001,
+        Message = 0x0002,
+        License = 0x0004
+      };
+      ZYPP_DECLARE_FLAGS(InteractiveFlags, InteractiveFlag);
+
+      /**
+       * \brief Possible severity levels for (security) patches.
+       * Metadata string values are mapped to this enum to ease
+       * computations. For a string representation call
+       * \ref asSring( const Patch::SeverityFlag & ).
+       */
+      enum SeverityFlag {
+       SEV_NONE        = 0,    //!< no value specified
+       SEV_OTHER       = 1,    //!< unknown value specified
+       SEV_LOW         = 1<<1, //!< Low
+       SEV_MODERATE    = 1<<2, //!< Moderate
+       SEV_IMPORTANT   = 1<<3, //!< Important
+       SEV_CRITICAL    = 1<<4  //!< Critical
+      };
+      ZYPP_DECLARE_FLAGS(SeverityFlags, SeverityFlag);
+
     public:
       /**
        * Issue date time. For now it is the same as
@@ -60,16 +89,50 @@ namespace zypp
       Date timestamp() const
       { return buildtime(); }
 
+      /** \name Patch Category */
+      //@{
       /**
        * Patch category (recommended, security,...)
        */
       std::string category() const;
 
-      /** Patch category as enum of wellknown categories.
+      /** This patch's category as enum of wellknown categories.
        * Unknown values are mapped to \ref CAT_OTHER.
        */
       Category categoryEnum() const;
 
+      /** Whether this patch's category matches \a category_r */
+      bool isCategory( const std::string & category_r ) const;
+
+      /** Patch category as enum of wellknown categories.
+       * Unknown values are mapped to \ref CAT_OTHER.
+       */
+      static Category categoryEnum( const std::string & category_r );
+      //@}
+
+      /** \name Patch Severity */
+      //@{
+      /**
+       * Severity string as specified in metadata.
+       * For use in computaions see \ref severityFlag.
+       */
+      std::string severity() const;
+
+      /**
+       * Severity string mapped to an enum.
+       * Unknown string values are mapped to \ref SEV_OTHER
+       */
+      SeverityFlag severityFlag() const;
+
+      /** Whether this patch's severity matches \a severity_r */
+      bool isSeverity( const std::string & severity_r ) const;
+
+      /** Severity string mapped to an enum.
+       * Unknown string values are mapped to \ref SEV_OTHER
+       */
+      static SeverityFlag severityFlag( const std::string & category_r );
+      //@}
+
       /**
        * Does the system need to reboot to finish the update process?
        */
@@ -93,6 +156,16 @@ namespace zypp
       std::string message( const Locale & lang_r = Locale() ) const;
 
       /**
+       * Get the InteractiveFlags of this Patch
+       */
+      InteractiveFlags interactiveFlags() const;
+
+      /**
+       * Is the patch still interactive when ignoring this flags?
+       */
+      bool interactiveWhenIgnoring( InteractiveFlags flags_r = NoFlags ) const;
+
+      /**
        * Is the patch installation interactive? (does it need user input?)
        *
        * For security reasons patches requiring a reboot are not
@@ -102,7 +175,7 @@ namespace zypp
        * off this behavior and include those patches (unless they actually
        * contain interactive components as well, like messages or licenses).
        */
-      bool interactive( bool ignoreRebootFlag_r = false ) const;
+      bool interactive() const;
 
     public:
       /**
@@ -132,7 +205,11 @@ namespace zypp
       /** Dtor */
       virtual ~Patch();
   };
+  ZYPP_DECLARE_OPERATORS_FOR_FLAGS(Patch::InteractiveFlags);
+  ZYPP_DECLARE_OPERATORS_FOR_FLAGS(Patch::SeverityFlags);
 
+  /** \relates Patch::SeverityFlag string representation.*/
+  std::string asString( const Patch::SeverityFlag & obj );
 
   /**
    * Query class for Patch issue references