first commit
This commit is contained in:
49
hrmsEjb/net/sf/jasperreports/engine/fill/JRClonePool.java
Normal file
49
hrmsEjb/net/sf/jasperreports/engine/fill/JRClonePool.java
Normal file
@@ -0,0 +1,49 @@
|
||||
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);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user