/**
* Copyright (c) 2013-2016 Angelo ZERR.
* 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:
* Angelo Zerr <angelo.zerr@gmail.com> - initial API and implementation
*/
package tern.angular.protocol;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import tern.server.protocol.JsonHelper;
import tern.utils.StringUtils;
import com.eclipsesource.json.JsonArray;
import com.eclipsesource.json.JsonObject;
public class TernAngularScope extends JsonObject {
private static final String MODULE_FIELD_NAME = "module";
private static final Pattern NGREPEAT_PATTERN = Pattern
.compile("^\\s*(.+)\\s+in\\s+(.*?)\\s*(\\s+track\\s+by\\s+(.+)\\s*)?$");
private static final Pattern NGREPEAT_LHS_PATTERN = Pattern
.compile("^(?:([\\$\\w]+)|\\(([\\$\\w]+)\\s*,\\s*([\\$\\w]+)\\))$");
public void setModule(String module) {
super.add(MODULE_FIELD_NAME, module);
}
public String getModule() {
return JsonHelper.getString(this, MODULE_FIELD_NAME);
}
public boolean hasModule() {
return !StringUtils.isEmpty(getModule());
}
public void addController(String controller) {
getControllers().add(controller);
}
public JsonArray getControllers() {
JsonArray controllers = (JsonArray) super.get("controllers");
if (controllers == null) {
controllers = new JsonArray();
super.add("controllers", controllers);
}
return controllers;
}
public boolean hasControllers() {
JsonArray controllers = (JsonArray) super.get("controllers");
if (controllers == null) {
return false;
}
return controllers.size() > 0;
}
public void addModel(String model) {
// JsonObject json = new JsonObject();
if (model.indexOf('.') == -1) {
getProps().add(model, model);
}
}
public JsonObject getProps() {
JsonObject props = (JsonObject) super.get("props");
if (props == null) {
props = new JsonObject();
super.add("props", props);
}
return props;
}
public void addRepeat(String expression) {
Matcher matcher = NGREPEAT_PATTERN.matcher(expression);
if (matcher.find()) {
String lhs = matcher.group(1);
String rhs = matcher.group(2);
matcher = NGREPEAT_LHS_PATTERN.matcher(lhs);
if (matcher.find()) {
String valueIdentifier = matcher.group(3) != null ? matcher
.group(3) : matcher.group(1);
String keyIdentifier = matcher.group(2);
JsonObject repeat = new JsonObject();
repeat.add("ngRepeat", rhs);
if (keyIdentifier != null) {
getProps().add(keyIdentifier, repeat);
}
if (valueIdentifier != null) {
getProps().add(valueIdentifier, repeat);
}
}
}
}
}