/*******************************************************************************
* Copyright (c) 2016 Rogue Wave Software, Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Rogue Wave Software, Inc. - initial API and implementation
*******************************************************************************/
package org.eclipse.che.plugin.zdb.server.expressions;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* Abstract implementation of Zend debug expression.
*
* @author Bartlomiej Laczkowski
*/
public class ZendDbgExpression implements IDbgExpression {
private final String expression;
private final List<String> expressionChain;
private final ZendDbgExpressionEvaluator expressionEvaluator;
private final Set<Facet> expressionFacets = new HashSet<Facet>();
private ZendDbgExpressionResult expressionResult;
public ZendDbgExpression(ZendDbgExpressionEvaluator expressionEvaluator, String expression,
List<String> expressionChain, Facet... facets) {
this.expressionEvaluator = expressionEvaluator;
this.expression = expression;
this.expressionChain = expressionChain;
this.expressionResult = ZendDbgExpressionResult.NULL;
addFacets(facets);
}
@Override
public String getExpression() {
return expression;
}
@Override
public List<String> getExpressionChain() {
return expressionChain;
}
@Override
public int getChildrenCount() {
return expressionResult.getChildrenCount();
}
@Override
public List<IDbgExpression> getChildren() {
return expressionResult.getChildren();
}
@Override
public String getValue() {
return expressionResult.getValue();
}
@Override
public boolean setValue(String value) {
return expressionEvaluator.assign(this, value, 1);
}
@Override
public void evaluate() {
expressionEvaluator.evaluate(this, 1);
}
@Override
public boolean hasFacet(Facet facet) {
return expressionFacets.contains(facet);
}
@Override
public void addFacets(Facet... facets) {
for (Facet facet : facets)
this.expressionFacets.add(facet);
}
@Override
public DataType getDataType() {
return expressionResult.getDataType();
}
protected ZendDbgExpressionEvaluator getExpressionEvaluator() {
return expressionEvaluator;
}
protected void setExpressionResult(ZendDbgExpressionResult expressionResult) {
this.expressionResult = expressionResult;
}
protected ZendDbgExpression createChild(String expression, Facet... facets) {
List<String> chain = new ArrayList<>(getExpressionChain());
chain.add(expression);
return new ZendDbgExpression(expressionEvaluator, expression, chain, facets);
}
}