/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.eas.client.reports;
import java.util.HashMap;
import java.util.Map;
import jdk.nashorn.api.scripting.JSObject;
import org.apache.commons.beanutils.DynaBean;
import org.apache.commons.beanutils.DynaClass;
import org.apache.commons.beanutils.DynaProperty;
/**
*
* @author Andrew
*/
public class JSDynaClass implements DynaClass {
private final JSObject delegate;
private final String name;
private final Map<String, DynaProperty> properties = new HashMap<>();
public JSDynaClass(JSObject aDelegate, String aName) {
super();
delegate = aDelegate;
name = aName;
}
@Override
public String getName() {
return name;
}
@Override
public DynaProperty getDynaProperty(String aName) {
if (name != null) {
if (properties.isEmpty()) {
if (delegate.hasMember(aName)) {
Object oMember = delegate.getMember(aName);
if (!(oMember instanceof JSObject) || !((JSObject) oMember).isFunction()) {
return new DynaProperty(aName);
}
return null;
}
} else {
return properties.get(aName);
}
}
throw new IllegalArgumentException("No property name specified");
}
@Override
public DynaProperty[] getDynaProperties() {
if (properties.isEmpty()) {
delegate.keySet().forEach((String key) -> {
Object oMember = delegate.getMember(key);
if (!(oMember instanceof JSObject) || !((JSObject) oMember).isFunction()) {
properties.put(key, new DynaProperty(key));
}
});
}
return properties.values().toArray(new DynaProperty[]{});
}
@Override
public DynaBean newInstance() throws IllegalAccessException, InstantiationException {
throw new UnsupportedOperationException("Not supported yet.");
}
}