package com.github.sommeri.less4j.core.ast;
import java.util.ArrayList;
import java.util.List;
import com.github.sommeri.less4j.core.ast.annotations.NotAstProperty;
import com.github.sommeri.less4j.core.parser.HiddenTokenAwareTree;
import com.github.sommeri.less4j.utils.ArraysUtils;
public class MediaQuery extends ASTCssNode {
private Medium medium;
private List<MediaExpression> expressions;
public MediaQuery(HiddenTokenAwareTree token) {
this(token, null, new ArrayList<MediaExpression>());
}
public MediaQuery(HiddenTokenAwareTree token, Medium medium, List<MediaExpression> expressions) {
super(token);
this.medium = medium;
this.expressions = expressions;
}
public Medium getMedium() {
return medium;
}
public void setMedium(Medium medium) {
this.medium = medium;
}
public List<MediaExpression> getExpressions() {
return expressions;
}
public void setExpressions(List<MediaExpression> expressions) {
this.expressions = expressions;
}
public void addExpression(MediaExpression expression) {
if (expressions == null)
expressions = new ArrayList<MediaExpression>();
this.expressions.add(expression);
}
public void addExpressions(List<MediaExpression> expressions) {
if (expressions == null)
expressions = new ArrayList<MediaExpression>();
this.expressions.addAll(expressions);
}
/**
* May throw class cast exception if the member in parameter is
* does not have the right type.
*/
public void addMember(ASTCssNode member) {
if (member.getType() == ASTCssNodeType.MEDIUM) {
setMedium((Medium) member);
} else {
addExpression((MediaExpression) member);
}
}
public boolean hasInterpolatedExpression() {
for (MediaExpression mediaExpression : getExpressions()) {
if (mediaExpression.getType()==ASTCssNodeType.INTERPOLATED_MEDIA_EXPRESSION)
return true;
}
return false;
}
@Override
@NotAstProperty
public List<? extends ASTCssNode> getChilds() {
List<ASTCssNode> result = ArraysUtils.asNonNullList((ASTCssNode)medium);
result.addAll(expressions);
return result;
}
@Override
public ASTCssNodeType getType() {
return ASTCssNodeType.MEDIA_QUERY;
}
@Override
public MediaQuery clone() {
MediaQuery result = (MediaQuery) super.clone();
result.medium = medium==null?null:medium.clone();
result.expressions = ArraysUtils.deeplyClonedList(expressions);
result.configureParentToAllChilds();
return result;
}
}