152 lines
4.3 KiB
Java
152 lines
4.3 KiB
Java
package net.sf.jasperreports.engine;
|
|
|
|
import java.io.IOException;
|
|
import java.io.ObjectInputStream;
|
|
import java.io.Serializable;
|
|
import java.util.ArrayList;
|
|
import java.util.Collection;
|
|
import java.util.HashMap;
|
|
import java.util.LinkedHashSet;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
|
|
public class JRPropertiesMap implements Serializable, Cloneable {
|
|
private static final long serialVersionUID = 10200L;
|
|
|
|
private Map propertiesMap;
|
|
|
|
private List propertiesList;
|
|
|
|
private JRPropertiesMap base;
|
|
|
|
public JRPropertiesMap() {}
|
|
|
|
public JRPropertiesMap(JRPropertiesMap propertiesMap) {
|
|
this();
|
|
this.base = propertiesMap.base;
|
|
String[] propertyNames = propertiesMap.getPropertyNames();
|
|
if (propertyNames != null && propertyNames.length > 0)
|
|
for (int i = 0; i < propertyNames.length; i++)
|
|
setProperty(propertyNames[i], propertiesMap.getProperty(propertyNames[i]));
|
|
}
|
|
|
|
protected synchronized void ensureInit() {
|
|
if (this.propertiesMap == null)
|
|
init();
|
|
}
|
|
|
|
private void init() {
|
|
this.propertiesMap = new HashMap();
|
|
this.propertiesList = new ArrayList();
|
|
}
|
|
|
|
public String[] getPropertyNames() {
|
|
String[] names;
|
|
if (hasOwnProperties()) {
|
|
if (this.base == null) {
|
|
names = (String[])this.propertiesList.toArray((Object[])new String[this.propertiesList.size()]);
|
|
} else {
|
|
LinkedHashSet namesSet = new LinkedHashSet();
|
|
collectPropertyNames(namesSet);
|
|
names = (String[])namesSet.toArray((Object[])new String[namesSet.size()]);
|
|
}
|
|
} else if (this.base != null) {
|
|
names = this.base.getPropertyNames();
|
|
} else {
|
|
names = new String[0];
|
|
}
|
|
return names;
|
|
}
|
|
|
|
protected void collectPropertyNames(Collection names) {
|
|
if (this.base != null)
|
|
this.base.collectPropertyNames(names);
|
|
if (this.propertiesList != null)
|
|
names.addAll(this.propertiesList);
|
|
}
|
|
|
|
public String getProperty(String propName) {
|
|
String val;
|
|
if (hasOwnProperty(propName)) {
|
|
val = getOwnProperty(propName);
|
|
} else if (this.base != null) {
|
|
val = this.base.getProperty(propName);
|
|
} else {
|
|
val = null;
|
|
}
|
|
return val;
|
|
}
|
|
|
|
public boolean containsProperty(String propName) {
|
|
return (hasOwnProperty(propName) || (this.base != null && this.base.containsProperty(propName)));
|
|
}
|
|
|
|
protected boolean hasOwnProperty(String propName) {
|
|
return (this.propertiesMap != null && this.propertiesMap.containsKey(propName));
|
|
}
|
|
|
|
protected String getOwnProperty(String propName) {
|
|
return (this.propertiesMap != null) ? (String)this.propertiesMap.get(propName) : null;
|
|
}
|
|
|
|
public void setProperty(String propName, String value) {
|
|
ensureInit();
|
|
if (!hasOwnProperty(propName))
|
|
this.propertiesList.add(propName);
|
|
this.propertiesMap.put(propName, value);
|
|
}
|
|
|
|
public void removeProperty(String propName) {
|
|
if (hasOwnProperty(propName)) {
|
|
this.propertiesList.remove(propName);
|
|
this.propertiesMap.remove(propName);
|
|
}
|
|
}
|
|
|
|
public JRPropertiesMap cloneProperties() {
|
|
return new JRPropertiesMap(this);
|
|
}
|
|
|
|
public Object clone() {
|
|
return cloneProperties();
|
|
}
|
|
|
|
public String toString() {
|
|
return (this.propertiesMap == null) ? "" : this.propertiesMap.toString();
|
|
}
|
|
|
|
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
|
|
in.defaultReadObject();
|
|
if (this.propertiesList == null && this.propertiesMap != null) {
|
|
this.propertiesList = new ArrayList(this.propertiesMap.keySet());
|
|
this.propertiesMap = new HashMap(this.propertiesMap);
|
|
}
|
|
}
|
|
|
|
public boolean hasProperties() {
|
|
return (hasOwnProperties() || (this.base != null && this.base.hasProperties()));
|
|
}
|
|
|
|
public boolean hasOwnProperties() {
|
|
return (this.propertiesList != null && !this.propertiesList.isEmpty());
|
|
}
|
|
|
|
public static JRPropertiesMap getPropertiesClone(JRPropertiesHolder propertiesHolder) {
|
|
JRPropertiesMap clone;
|
|
if (propertiesHolder.hasProperties()) {
|
|
clone = propertiesHolder.getPropertiesMap().cloneProperties();
|
|
} else {
|
|
clone = null;
|
|
}
|
|
return clone;
|
|
}
|
|
|
|
public JRPropertiesMap getBaseProperties() {
|
|
return this.base;
|
|
}
|
|
|
|
public void setBaseProperties(JRPropertiesMap base) {
|
|
this.base = base;
|
|
}
|
|
}
|