/*
* Copyright (c) 2013, the Dart project authors.
*
* Licensed under the Eclipse Public License v1.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.eclipse.org/legal/epl-v10.html
*
* 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.dart.engine.internal.html.angular;
import com.google.dart.engine.ast.Expression;
import com.google.dart.engine.html.ast.RawXmlExpression;
import com.google.dart.engine.html.ast.XmlAttributeNode;
import com.google.dart.engine.html.ast.XmlExpression;
import com.google.dart.engine.scanner.Token;
import java.util.List;
/**
* {@link NgDirectiveProcessor} describes any <code>Directive</code> annotation instance.
*/
abstract class NgDirectiveProcessor extends NgProcessor {
protected static boolean hasValue(XmlAttributeNode attribute) {
com.google.dart.engine.html.scanner.Token valueToken = attribute.getValueToken();
return valueToken != null && !valueToken.isSynthetic();
}
protected static AngularRawXmlExpression newAngularRawXmlExpression(AngularExpression e) {
return new AngularRawXmlExpression(e);
}
protected static RawXmlExpression newRawXmlExpression(Expression e) {
return new RawXmlExpression(e);
}
protected AngularExpression parseAngularExpression(AngularHtmlUnitResolver resolver,
XmlAttributeNode attribute) {
Token token = scanAttribute(resolver, attribute);
return resolver.parseAngularExpressionInToken(token);
}
protected Expression parseDartExpression(AngularHtmlUnitResolver resolver,
XmlAttributeNode attribute) {
Token token = scanAttribute(resolver, attribute);
return resolver.parseDartExpressionInToken(token);
}
/**
* Sets single {@link AngularExpression} for {@link XmlAttributeNode}.
*/
protected final void setAngularExpression(XmlAttributeNode attribute, AngularExpression expression) {
setExpression(attribute, newAngularRawXmlExpression(expression));
}
/**
* Sets single {@link Expression} for {@link XmlAttributeNode}.
*/
protected final void setExpression(XmlAttributeNode attribute, Expression expression) {
setExpression(attribute, newRawXmlExpression(expression));
}
// /**
// * Sets {@link Expression}s for {@link XmlAttributeNode}.
// */
// protected final void setExpressions(XmlAttributeNode attribute, List<Expression> expressions) {
// List<EmbeddedExpression> embExpressions = Lists.newArrayList();
// for (Expression expression : expressions) {
// embExpressions.add(newEmbeddedExpression(expression));
// }
// attribute.setExpressions(embExpressions.toArray(new EmbeddedExpression[embExpressions.size()]));
// }
protected void setExpressions(XmlAttributeNode attribute, List<XmlExpression> xmlExpressions) {
attribute.setExpressions(xmlExpressions.toArray(new XmlExpression[xmlExpressions.size()]));
}
private Token scanAttribute(AngularHtmlUnitResolver resolver, XmlAttributeNode attribute) {
int offset = attribute.getValueToken().getOffset() + 1;
String value = attribute.getText();
return resolver.scanDart(value, 0, value.length(), offset);
}
private void setExpression(XmlAttributeNode attribute, XmlExpression xmlExpression) {
attribute.setExpressions(new XmlExpression[] {xmlExpression});
}
}