package org.aksw.jena_sparql_api.mapper.proxy; import java.beans.PropertyDescriptor; import java.lang.reflect.Method; import org.aksw.jena_sparql_api.mapper.impl.type.RdfClass; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanWrapperImpl; import org.springframework.beans.PropertyValue; import org.springframework.cglib.proxy.MethodInterceptor; import org.springframework.cglib.proxy.MethodProxy; import org.apache.jena.graph.Node; import org.apache.jena.sparql.core.DatasetGraph; import org.apache.jena.sparql.core.DatasetGraphFactory; public class MethodInterceptorRdf implements MethodInterceptor { //private Map<String, Coordinate> propertyToCoordinate; //private Map<> protected Object proxied; protected RdfClass rdfClass; protected Node presetSubject; // The subject URI that corresponds to the proxied object protected DatasetGraph datasetGraph; public MethodInterceptorRdf(Object proxied, RdfClass rdfClass, Node subject) { this(proxied, rdfClass, subject, DatasetGraphFactory.createMem()); } public MethodInterceptorRdf(Object proxied, RdfClass rdfClass, Node subject, DatasetGraph datasetGraph) { this.proxied = proxied; this.rdfClass = rdfClass; /** * Pre-set subject - may be null */ this.presetSubject = subject; /** * Pre-set datasetGraph, may be empty (but must not be null) */ this.datasetGraph = datasetGraph; } public RdfClass getRdfClass() { return rdfClass; } public Object getProxied() { return proxied; } public Node getPresetSubject() { return presetSubject; } public DatasetGraph getDatasetGraph() { return datasetGraph; } public void setDatasetGraph(DatasetGraph datasetGraph) { this.datasetGraph = datasetGraph; } @Override public Object intercept(Object object, Method method, Object[] args, MethodProxy methodProxy) throws Throwable { BeanWrapperImpl bean = new BeanWrapperImpl(proxied); PropertyDescriptor pd = BeanUtils.findPropertyForMethod(method); if(pd != null) { String propertyName = pd.getName(); PropertyValue x; boolean writable = bean.isWritableProperty(propertyName); boolean readable = bean.isReadableProperty(propertyName); System.out.println(propertyName + " " + readable + " " + writable); } //return methodProxy.invokeSuper(object, args); return methodProxy.invoke(proxied, args); } }