com.clickntap.smart.SmartController Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of click_framework Show documentation
Show all versions of click_framework Show documentation
Java Framework based on Spring Framework, Freemarker and Simplicity
The newest version!
package com.clickntap.smart;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.springframework.core.io.Resource;
import org.springframework.util.StringUtils;
import com.clickntap.utils.ConstUtils;
import com.clickntap.utils.IOUtils;
import com.clickntap.utils.XMLUtils;
public class SmartController {
private Boolean authenticated;
private String loginRef;
private String errorRef;
private SmartController parent;
private List children;
private String demo;
private String name;
private String viewName;
private SmartAction cacheAction;
private List actions;
private List methods;
private boolean ajax;
public SmartController(Resource controllerDir, Element element, SmartController parent) throws Exception {
this.parent = parent;
this.authenticated = false;
this.loginRef = ConstUtils.EMPTY;
this.errorRef = ConstUtils.EMPTY;
if (element.attributeValue("viewName") != null)
viewName = element.attributeValue("viewName");
else if (parent != null)
viewName = parent.getViewName();
if (element.attributeValue("demo") != null)
demo = element.attributeValue("demo");
else if (parent != null)
demo = parent.getDemo();
if (element.attributeValue("authenticated") != null)
authenticated = element.attributeValue("authenticated").equals("true");
else if (parent != null)
authenticated = parent.isAuthenticated();
if (element.attributeValue("loginRef") != null)
loginRef = element.attributeValue("loginRef");
else if (parent != null)
loginRef = parent.getLoginRef();
if (element.attributeValue("errorRef") != null)
errorRef = element.attributeValue("errorRef");
else if (parent != null)
errorRef = parent.getErrorRef();
name = element.attributeValue("name");
ajax = Boolean.valueOf(element.attributeValue("ajax"));
children = new ArrayList();
for (Element child : (List) element.elements("app"))
children.add(new SmartController(controllerDir, child, this));
String ref = getRef();
if (!ConstUtils.EMPTY.equals(ref)) {
try {
Element root = null;
File file = getFile(controllerDir, ref);
if (file.exists())
root = XMLUtils.copyFrom(file).getRootElement();
else
root = DocumentHelper.createDocument().addElement("smart-controller");
this.actions = new ArrayList();
this.methods = new ArrayList();
initController(controllerDir, root);
} catch (Exception e) {
throw new SmartControllerDescriptorException(e);
}
}
}
public String getErrorRef() {
return errorRef;
}
public List getActions() {
return actions;
}
public List getMethods() {
return methods;
}
public boolean isAjax() {
return ajax;
}
private void initController(Resource controllerDir, Element root) throws Exception {
for (Element include : (List) root.elements("include"))
initController(controllerDir, XMLUtils.copyFrom(getFile(controllerDir, include.attributeValue("ref"))).getRootElement());
Element cacheActionElement = root.element("cache-action");
if (cacheActionElement != null)
cacheAction = new SmartAction(cacheActionElement);
List actionElements = root.elements("action");
if (actionElements != null)
for (Element actionElement : actionElements)
this.actions.add(new SmartAction(actionElement));
List methodElements = root.elements("method");
if (methodElements != null)
for (Element methodElement : methodElements) {
String[] names = StringUtils.commaDelimitedListToStringArray(methodElement.attributeValue("name"));
for (String name : names)
this.methods.add(new SmartMethod(name, methodElement));
}
}
public SmartAction getCacheAction() {
return cacheAction;
}
private File getFile(Resource controllerDir, String ref) throws IOException {
File file = new File(IOUtils.toString(controllerDir.getFile()) + ConstUtils.SLASH + ref + ConstUtils.EXTENSION_DOTXML);
return file;
}
public String getRef() {
if (getParent() != null) {
String ref = getParent().getRef();
if (ConstUtils.EMPTY.equals(ref))
return name;
else
return getParent().getRef() + ConstUtils.SLASH + name;
}
return ConstUtils.EMPTY;
}
public Boolean isAuthenticated() {
return authenticated;
}
public String getLoginRef() {
return loginRef;
}
public SmartController getParent() {
return parent;
}
public List getChildren() {
return children;
}
public List getPath() {
List path = null;
if (parent == null)
path = new ArrayList();
else
path = parent.getPath();
path.add(this);
return path;
}
public SmartController getController(String ref) {
int x = ref.indexOf(ConstUtils.SLASH);
return x > 0 ? getChildByName(ref.substring(0, x)).getController(ref.substring(x + 1)) : getChildByName(ref);
}
private SmartController getChildByName(String ref) {
if (ref.equals(ConstUtils.DOTDOT))
return getParent();
for (SmartController controller : getChildren())
if (ref.equals(controller.getName()))
return controller;
return null;
}
public String getDemo() {
return demo;
}
public String getName() {
return name;
}
public String getViewName() {
return viewName;
}
}