/* * Copyright 2008 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.google.common.css.compiler.ast; import com.google.common.base.Preconditions; import java.util.List; import javax.annotation.Nullable; /** * A node representing a style rule. * * @author oana@google.com (Oana Florescu) */ public class CssRulesetNode extends CssNode { /** List of selectors of this style rule. */ private CssSelectorListNode selectors; /** The block of declarations inside this style rule. */ private CssDeclarationBlockNode declarations; /** * Constructor of a ruleset node. * * @param declarations * @param comments */ public CssRulesetNode(CssDeclarationBlockNode declarations, @Nullable List<CssCommentNode> comments) { super(null, comments, null); Preconditions.checkNotNull(declarations); this.declarations = declarations; becomeParentForNode(this.declarations); this.selectors = new CssSelectorListNode(); becomeParentForNode(this.selectors); } /** * Constructor of a ruleset node. * * @param declarations */ public CssRulesetNode(CssDeclarationBlockNode declarations) { this(declarations, null); } /** * Constructor of a ruleset node. */ public CssRulesetNode() { this(new CssDeclarationBlockNode()); } /** * Constructor of a ruleset node. * * @param comments */ public CssRulesetNode(List<CssCommentNode> comments) { this(new CssDeclarationBlockNode(), comments); } /** * Copy constructor. * * @param node */ public CssRulesetNode(CssRulesetNode node) { this(node.getDeclarations().deepCopy()); this.setSourceCodeLocation(node.getSourceCodeLocation()); this.setComments(node.getComments()); this.selectors = node.getSelectors().deepCopy(); } @Override public CssRulesetNode deepCopy() { return new CssRulesetNode(this); } public CssSelectorListNode getSelectors() { return selectors; } public void setSelectors(CssSelectorListNode selectors) { Preconditions.checkNotNull(selectors); removeAsParentOfNode(this.selectors); this.selectors = selectors; becomeParentForNode(this.selectors); } public CssDeclarationBlockNode getDeclarations() { return declarations; } public void addDeclaration(CssNode declaration) { declarations.addChildToBack(declaration); } public void addSelector(CssSelectorNode selector) { selectors.addChildToBack(selector); } /** * For debugging only. */ @Override public String toString() { String output = ""; if (!getComments().isEmpty()) { output = getComments().toString(); } output += selectors.toString() + "{" + declarations.toString() + "}"; return output; } }