All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.ebean.bean.NodeUsageCollector Maven / Gradle / Ivy

There is a newer version: 15.8.0
Show newest version
package io.ebean.bean;

import java.lang.ref.Cleaner;
import java.util.LinkedHashSet;
import java.util.Set;

/**
 * Collects profile information for a bean (or reference/proxy bean) at a given node.
 * 

* The node identifies the location of the bean in the object graph. */ public final class NodeUsageCollector { private final static Cleaner cleaner = Cleaner.create(); public static final class State implements Runnable { private final NodeUsageListener listener; /** * The properties used at this profile point. */ private final Set used = new LinkedHashSet<>(); /** * The point in the object graph for a specific query and call stack point. */ private final ObjectGraphNode node; /** * set to true if the bean is modified (setter called) */ private boolean modified; private State(ObjectGraphNode node, NodeUsageListener listener) { this.node = node; this.listener = listener; } @Override public String toString() { return node + " read:" + used + " modified:" + modified; } @Override public void run() { listener.collectNodeUsage(this); } /** * Return true if no properties where used. */ public boolean isEmpty() { return used.isEmpty(); } /** * Return the associated node which identifies the location in the object * graph of the bean/reference. */ public ObjectGraphNode node() { return node; } /** * Return the set of used properties. */ public Set used() { return used; } /** * Return true if the bean was modified by a setter. */ public boolean isModified() { return modified; } } private final State state; public NodeUsageCollector(ObjectGraphNode node, NodeUsageListener listener) { this.state = new State(node, listener); cleaner.register(this, state); } /** * Return the underlying state. */ public State state() { return state; } /** * The bean has been modified by a setter method. */ public void setModified() { state.modified = true; } /** * Add the name of a property that has been used. */ public void addUsed(String property) { state.used.add(property); } @Override public String toString() { return state.toString(); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy