Files
HRMS/hrmsEjb/net/sf/jasperreports/engine/fill/JRClonePool.java
2025-07-28 13:56:49 +05:30

50 lines
1.4 KiB
Java

package net.sf.jasperreports.engine.fill;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Set;
import net.sf.jasperreports.engine.JRRuntimeException;
public class JRClonePool {
private final JRFillCloneable original;
private final LinkedList availableClones;
private final boolean trackLockedClones;
private final Set lockedClones;
public JRClonePool(JRFillCloneable original, boolean trackLockedClones, boolean useOriginal) {
this.original = original;
this.availableClones = new LinkedList();
this.trackLockedClones = trackLockedClones;
if (trackLockedClones) {
this.lockedClones = new HashSet();
} else {
this.lockedClones = null;
}
if (useOriginal)
this.availableClones.add(original);
}
public Object getClone() {
JRFillCloneable clone;
if (this.availableClones.isEmpty()) {
JRFillCloneFactory factory = new JRFillCloneFactory();
clone = this.original.createClone(factory);
} else {
clone = this.availableClones.removeFirst();
}
if (this.trackLockedClones)
this.lockedClones.add(clone);
return clone;
}
public void releaseClone(Object clone) {
if (this.trackLockedClones)
if (!this.lockedClones.remove(clone))
throw new JRRuntimeException("Cannot release clone.");
this.availableClones.addLast(clone);
}
}