@Nullable
  public static CascadingStyleSheet getWrappedInMediaQuery (@Nonnull final CascadingStyleSheet aCSS,
                                                            @Nonnull @Nonempty final Iterable <? extends CSSMediaQuery> aMediaQueries,
                                                            final boolean bAllowNestedMediaQueries)
  {
    ValueEnforcer.notNull (aCSS, "CSS");
    ValueEnforcer.notEmpty (aMediaQueries, "MediaQueries");

    if (!canWrapInMediaQuery (aCSS, bAllowNestedMediaQueries))
      return null;

    final CascadingStyleSheet ret = new CascadingStyleSheet ();

    // Copy all import rules
    for (final CSSImportRule aImportRule : aCSS.getAllImportRules ())
    {
      if (aImportRule.hasMediaQueries ())
      {
        // import rule already has a media query - do not alter
        ret.addImportRule (aImportRule);
      }
      else
      {
        // Create a new rule and add the passed media queries
        final CSSImportRule aNewImportRule = new CSSImportRule (aImportRule.getLocation ());
        for (final CSSMediaQuery aMediaQuery : aMediaQueries)
          aNewImportRule.addMediaQuery (aMediaQuery);
        ret.addImportRule (aNewImportRule);
      }
    }

    // Copy all namespace rules
    for (final CSSNamespaceRule aNamespaceRule : aCSS.getAllNamespaceRules ())
      ret.addNamespaceRule (aNamespaceRule);

    // Create a single top-level media rule ...
    // into this media rule
    final CSSMediaRule aNewMediaRule = new CSSMediaRule ();
    for (final CSSMediaQuery aMediaQuery : aMediaQueries)
      aNewMediaRule.addMediaQuery (aMediaQuery);
    // ... and add the existing top-level rules into this media rule
    for (final ICSSTopLevelRule aRule : aCSS.getAllRules ())
      aNewMediaRule.addRule (aRule);

    // Finally add the resulting media rule into the new CSS
    ret.addRule (aNewMediaRule);

    return ret;
  }
@ Nullable public static CascadingStyleSheet getWrappedInMediaQuery ( @ Nonnull final CascadingStyleSheet aCSS , @ Nonnull @ Nonempty final Iterable < ? extends CSSMediaQuery > aMediaQueries , final boolean bAllowNestedMediaQueries ) { ValueEnforcer . notNull ( aCSS , "CSS" ) ; ValueEnforcer . notEmpty ( aMediaQueries , "MediaQueries" ) ; if ( ! canWrapInMediaQuery ( aCSS , bAllowNestedMediaQueries ) ) return null ; final CascadingStyleSheet ret = new CascadingStyleSheet ( ) ; for ( final CSSImportRule aImportRule : aCSS . getAllImportRules ( ) ) { if ( aImportRule . hasMediaQueries ( ) ) { ret . addImportRule ( aImportRule ) ; } else { final CSSImportRule aNewImportRule = new CSSImportRule ( aImportRule . getLocation ( ) ) ; for ( final CSSMediaQuery aMediaQuery : aMediaQueries ) aNewImportRule . addMediaQuery ( aMediaQuery ) ; ret . addImportRule ( aNewImportRule ) ; } } for ( final CSSNamespaceRule aNamespaceRule : aCSS . getAllNamespaceRules ( ) ) ret . addNamespaceRule ( aNamespaceRule ) ; final CSSMediaRule aNewMediaRule = new CSSMediaRule ( ) ; for ( final CSSMediaQuery aMediaQuery : aMediaQueries ) aNewMediaRule . addMediaQuery ( aMediaQuery ) ; for ( final ICSSTopLevelRule aRule : aCSS . getAllRules ( ) ) aNewMediaRule . addRule ( aRule ) ; ret . addRule ( aNewMediaRule ) ; return ret ; }
Get the CSS wrapped in the specified media query. Note: all existing rule
objects are reused, so modifying them also modifies the original CSS!

@param aCSS
The CSS to be wrapped. May not be <code>null</code>.
@param aMediaQueries
The media queries to use. May neither be <code>null</code> nor empty
nor may it contain <code>null</code> elements.
@param bAllowNestedMediaQueries
if <code>true</code> nested media queries are allowed,
<code>false</code> if they are prohibited.
@return <code>null</code> if out CSS cannot be wrapped, the newly created
{@link CascadingStyleSheet} object otherwise.