blob: 271b0797c099a3f608f884ac7093f73dd0afc74b [file] [log] [blame]
/*-
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 org.apache.sling.query.impl.selector.parser;
import java.util.ArrayList;
import java.util.List;
public class ParserContext {
private final List<Selector> selectors = new ArrayList<Selector>();
private final List<SelectorSegment> segments = new ArrayList<SelectorSegment>();
private final List<Attribute> attributes = new ArrayList<Attribute>();
private final List<Modifier> modifiers = new ArrayList<Modifier>();
private char hierarchyOperator;
private State state = State.START;
private StringBuilder builder = new StringBuilder();
private String type;
private String name;
private String attributeKey;
private String attributeOperator;
private String attributeValue;
private String currentModifierName;
private int parenthesesCount = 0;
List<Attribute> getAttributes() {
return attributes;
}
List<Modifier> getModifiers() {
return modifiers;
}
String getType() {
return type;
}
String getName() {
return name;
}
char getHierarchyOperator() {
return hierarchyOperator;
}
public State getState() {
return state;
}
void increaseParentheses() {
parenthesesCount++;
}
int decreaseParentheses() {
return --parenthesesCount;
}
void setType() {
type = builder.toString();
builder = new StringBuilder();
}
void setName() {
name = builder.toString();
builder = new StringBuilder();
}
void setAttributeKey() {
attributeKey = builder.toString();
builder = new StringBuilder();
}
void setAttributeOperator() {
attributeOperator = builder.toString();
builder = new StringBuilder();
}
void setAttributeValue() {
attributeValue = builder.toString();
builder = new StringBuilder();
}
void addAttribute() {
attributes.add(new Attribute(attributeKey, attributeOperator, attributeValue));
attributeKey = null;
attributeOperator = null;
attributeValue = null;
}
void setModifierName() {
currentModifierName = builder.toString();
builder = new StringBuilder();
}
void addModifier() {
Modifier modifier;
if (currentModifierName == null) {
modifier = new Modifier(builder.toString(), null);
} else {
modifier = new Modifier(currentModifierName, builder.toString());
currentModifierName = null;
}
modifiers.add(modifier);
builder = new StringBuilder();
}
void setState(State state) {
this.state = state;
}
void setHierarchyOperator(char hierarchyOperator) {
this.hierarchyOperator = hierarchyOperator;
}
void finishSelectorSegment() {
segments.add(new SelectorSegment(this, segments.isEmpty()));
attributes.clear();
modifiers.clear();
hierarchyOperator = ' ';
type = null;
name = null;
}
void finishSelector() {
selectors.add(new Selector(segments));
segments.clear();
}
void append(char c) {
builder.append(c);
}
public List<Selector> getSelectors() {
return selectors;
}
}