/*
* Copyright 2011 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 keyframe style rule.
* This is used inside a Webkit keyframes rule to represent the style of
* one or more points (specified by the keys) in the animation.
*
* @author fbenz@google.com (Florian Benz)
*/
public class CssKeyframeRulesetNode extends CssNode {
/** List of keys. */
private CssKeyListNode keys;
/** The block of declarations inside this style rule. */
private CssDeclarationBlockNode declarations;
/**
* Constructor of a keyframe ruleset node.
*
* @param declarations
* @param comments
*/
public CssKeyframeRulesetNode(CssDeclarationBlockNode declarations,
@Nullable List<CssCommentNode> comments) {
super(null, comments, null);
Preconditions.checkNotNull(declarations);
this.declarations = declarations;
becomeParentForNode(this.declarations);
this.keys = new CssKeyListNode();
becomeParentForNode(this.keys);
}
/**
* Constructor of a keyframe ruleset node.
*
* @param declarations
*/
public CssKeyframeRulesetNode(CssDeclarationBlockNode declarations) {
this(declarations, null);
}
/**
* Constructor of a keyframe ruleset node.
*/
public CssKeyframeRulesetNode() {
this(new CssDeclarationBlockNode());
}
/**
* Constructor of a keyframe ruleset node.
*
* @param comments
*/
public CssKeyframeRulesetNode(List<CssCommentNode> comments) {
this(new CssDeclarationBlockNode(), comments);
}
/**
* Copy constructor.
*
* @param node
*/
public CssKeyframeRulesetNode(CssKeyframeRulesetNode node) {
this(node.getDeclarations().deepCopy());
this.setComments(node.getComments());
this.keys = node.getKeys().deepCopy();
}
@Override
public CssKeyframeRulesetNode deepCopy() {
return new CssKeyframeRulesetNode(this);
}
public CssKeyListNode getKeys() {
return keys;
}
void setKeys(CssKeyListNode keys) {
Preconditions.checkNotNull(keys);
removeAsParentOfNode(this.keys);
this.keys = keys;
becomeParentForNode(this.keys);
}
public CssDeclarationBlockNode getDeclarations() {
return declarations;
}
public void addDeclaration(CssDeclarationNode declaration) {
declarations.addChildToBack(declaration);
}
public void addKey(CssKeyNode key) {
keys.addChildToBack(key);
}
/**
* For debugging only.
*/
@Override
public String toString() {
String output = "";
if (!getComments().isEmpty()) {
output = getComments().toString();
}
output += keys.toString() + "{" + declarations.toString() + "}";
return output;
}
}