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 Import extends ASTCssNode {
private ImportMultiplicity multiplicity = ImportMultiplicity.IMPORT;
private ImportContent contentKind = ImportContent.SUFFIX_BASED;
private boolean isInline = false;
private boolean isReferenceOnly = false;
private boolean isOptional = false;
private Expression urlExpression;
private List<MediaQuery> mediums = new ArrayList<MediaQuery>();
public Import(HiddenTokenAwareTree underlyingStructure) {
super(underlyingStructure);
}
public boolean isReferenceOnly() {
return isReferenceOnly;
}
public void setReferenceOnly(boolean isReferenceOnly) {
this.isReferenceOnly = isReferenceOnly;
}
public boolean isInline() {
return isInline;
}
public void setInline(boolean isInline) {
this.isInline = isInline;
}
public boolean isOptional() {
return isOptional;
}
public void setOptional(boolean isOptional) {
this.isOptional = isOptional;
}
public ImportContent getContentKind() {
return contentKind;
}
public void setContentKind(ImportContent contentKind) {
this.contentKind = contentKind;
}
public ImportMultiplicity getMultiplicity() {
return multiplicity;
}
public void setMultiplicity(ImportMultiplicity multiplicity) {
this.multiplicity = multiplicity;
}
public boolean isImportOnce() {
ImportMultiplicity multiplicity = getMultiplicity();
return multiplicity == ImportMultiplicity.IMPORT || multiplicity == ImportMultiplicity.IMPORT_ONCE;
}
public boolean isImportMultiple() {
return !isImportOnce();
}
public Expression getUrlExpression() {
return urlExpression;
}
public void setUrlExpression(Expression urlExpression) {
this.urlExpression = urlExpression;
}
public List<MediaQuery> getMediums() {
return mediums;
}
public void setMediums(List<MediaQuery> mediums) {
this.mediums = mediums;
}
public void add(MediaQuery medium) {
mediums.add(medium);
}
public boolean hasMediums() {
return !mediums.isEmpty();
}
@Override
@NotAstProperty
public List<? extends ASTCssNode> getChilds() {
List<ASTCssNode> result = ArraysUtils.asNonNullList((ASTCssNode) urlExpression);
result.addAll(mediums);
return result;
}
@Override
public Import clone() {
Import result = (Import) super.clone();
result.urlExpression = urlExpression == null ? null : urlExpression.clone();
result.mediums = ArraysUtils.deeplyClonedList(mediums);
result.configureParentToAllChilds();
return result;
}
@Override
public ASTCssNodeType getType() {
return ASTCssNodeType.IMPORT;
}
public enum ImportMultiplicity {
IMPORT, IMPORT_ONCE, IMPORT_MULTIPLE
}
public enum ImportContent {
LESS, CSS, SUFFIX_BASED
}
}