/**
* Copyright (c) 2006-2011 Floggy Open Source Group. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package net.sourceforge.floggy.persistence.impl;
import java.util.Hashtable;
import java.util.Vector;
/**
* <b>IMPORTANT:</b> This class is for internal use only.
*/
public class PersistableMetadata {
public static final int BOOLEAN = 1;
public static final int BYTE = 2;
public static final int CALENDAR = 4;
public static final int CHARACTER = 8;
public static final int DATE = 16;
public static final int DOUBLE = 32;
public static final int FLOAT = 64;
public static final int HASHTABLE = 128;
public static final int INT = 256;
public static final int LONG = 512;
public static final int PERSISTABLE = 1024;
public static final int SHORT = 2048;
public static final int STACK = 4096;
public static final int STRING = 8192;
public static final int STRINGBUFFER = 16384;
public static final int TIMEZONE = 32768;
public static final int VECTOR = 65536;
public static final int ARRAY = 131072;
public static final int PRIMITIVE = 262144;
public static final int JOINED_STRATEGY = 1;
public static final int PER_CLASS_STRATEGY = 2;
public static final int SINGLE_STRATEGY = 4;
private Hashtable persistableImplementations;
private String className;
private String recordStoreName;
private String recordStoreVersion;
private String suiteName;
private String superClassName;
private String vendorName;
private Vector indexMetadatas;
private String[] fieldNames;
private int[] fieldTypes;
private boolean isAbstract;
private transient int recordId = -1;
private String[] descendents;
private int persistableStrategy;
/**
* Creates a new PersistableMetadata object.
*
* @param isAbstract DOCUMENT ME!
* @param className DOCUMENT ME!
* @param superClassName DOCUMENT ME!
* @param fieldNames DOCUMENT ME!
* @param fieldTypes DOCUMENT ME!
* @param persistableImplementations DOCUMENT ME!
* @param indexMetadatas DOCUMENT ME!
* @param recordStoreName DOCUMENT ME!
* @param persistableStrategy DOCUMENT ME!
* @param descendents DOCUMENT ME!
*/
public PersistableMetadata(boolean isAbstract, String className,
String superClassName, String[] fieldNames, int[] fieldTypes,
Hashtable persistableImplementations, Vector indexMetadatas,
String recordStoreName, int persistableStrategy, String[] descendents) {
this(isAbstract, className, superClassName, fieldNames, fieldTypes,
persistableImplementations, indexMetadatas, recordStoreName, null,
persistableStrategy, -1);
this.descendents = descendents;
}
/**
* Creates a new PersistableMetadata object.
*
* @param isAbstract DOCUMENT ME!
* @param className DOCUMENT ME!
* @param superClassName DOCUMENT ME!
* @param fieldNames DOCUMENT ME!
* @param fieldTypes DOCUMENT ME!
* @param persistableImplementations DOCUMENT ME!
* @param indexMetadatas DOCUMENT ME!
* @param recordStoreName DOCUMENT ME!
* @param recordStoreVersion DOCUMENT ME!
* @param persistableStrategy DOCUMENT ME!
* @param recordId DOCUMENT ME!
*/
public PersistableMetadata(boolean isAbstract, String className,
String superClassName, String[] fieldNames, int[] fieldTypes,
Hashtable persistableImplementations, Vector indexMetadatas,
String recordStoreName, String recordStoreVersion, int persistableStrategy,
int recordId) {
super();
this.isAbstract = isAbstract;
this.className = className;
this.superClassName = superClassName;
this.fieldNames = fieldNames;
this.fieldTypes = fieldTypes;
this.persistableImplementations = persistableImplementations;
this.indexMetadatas = indexMetadatas;
this.recordStoreName = recordStoreName;
this.recordStoreVersion = recordStoreVersion;
this.persistableStrategy = persistableStrategy;
this.recordId = recordId;
}
/**
* DOCUMENT ME!
*
* @param obj DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
PersistableMetadata other = (PersistableMetadata) obj;
if (className == null) {
if (other.className != null)
return false;
} else if (!className.equals(other.className))
return false;
if (!Utils.equals(fieldNames, other.fieldNames))
return false;
if (!Utils.equals(fieldTypes, other.fieldTypes))
return false;
if (isAbstract != other.isAbstract)
return false;
if (PersistableMetadataManager.VERSION_1_4_0.equals(
PersistableMetadataManager.getRMSVersion())) {
if (indexMetadatas == null) {
if (other.indexMetadatas != null)
return false;
} else if (!Utils.equals(indexMetadatas, other.indexMetadatas))
return false;
}
if (persistableImplementations == null) {
if (other.persistableImplementations != null)
return false;
} else if (!Utils.equals(persistableImplementations,
other.persistableImplementations))
return false;
if (persistableStrategy != other.persistableStrategy)
return false;
if (recordStoreName == null) {
if (other.recordStoreName != null)
return false;
} else if (!recordStoreName.equals(other.recordStoreName))
return false;
if (superClassName == null) {
if (other.superClassName != null)
return false;
} else if (!superClassName.equals(other.superClassName))
return false;
return true;
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public String getClassName() {
return className;
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public String[] getDescendents() {
return descendents;
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public String[] getFieldNames() {
return fieldNames;
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public int[] getFieldTypes() {
return fieldTypes;
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public Vector getIndexMetadatas() {
return indexMetadatas;
}
/**
* DOCUMENT ME!
*
* @param fieldName DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public String getPersistableImplementationClassForField(String fieldName) {
return (String) persistableImplementations.get(fieldName);
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public Hashtable getPersistableImplementations() {
return persistableImplementations;
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public int getPersistableStrategy() {
return persistableStrategy;
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public int getRecordId() {
return recordId;
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public String getRecordStoreName() {
return recordStoreName;
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public String getRecordStoreVersion() {
return recordStoreVersion;
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public String getSuiteName() {
return suiteName;
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public String getSuperClassName() {
return superClassName;
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public String getVendorName() {
return vendorName;
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public int hashCode() {
final int prime = 31;
int result = 1;
result = (prime * result)
+ ((className == null) ? 0 : className.hashCode());
result = (prime * result) + Utils.hashCode(fieldNames);
result = (prime * result) + Utils.hashCode(fieldTypes);
result = (prime * result) + (isAbstract ? 1231 : 1237);
result = (prime * result)
+ ((persistableImplementations == null) ? 0
: persistableImplementations.hashCode());
if (PersistableMetadataManager.VERSION_1_4_0.equals(
PersistableMetadataManager.getRMSVersion())) {
result = (prime * result)
+ ((indexMetadatas == null) ? 0 : indexMetadatas.hashCode());
}
result = (prime * result) + persistableStrategy;
result = (prime * result)
+ ((recordStoreName == null) ? 0 : recordStoreName.hashCode());
result = (prime * result)
+ ((superClassName == null) ? 0 : superClassName.hashCode());
return result;
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public boolean isAbstract() {
return isAbstract;
}
/**
* DOCUMENT ME!
*
* @param descendents DOCUMENT ME!
*/
public void setDescendents(String[] descendents) {
this.descendents = descendents;
}
/**
* DOCUMENT ME!
*
* @param indexMetadatas DOCUMENT ME!
*/
public void setIndexMetadatas(Vector indexMetadatas) {
this.indexMetadatas = indexMetadatas;
}
/**
* DOCUMENT ME!
*
* @param persistableStrategy DOCUMENT ME!
*/
public void setPersistableStrategy(int persistableStrategy) {
this.persistableStrategy = persistableStrategy;
}
/**
* DOCUMENT ME!
*
* @param recordId DOCUMENT ME!
*/
public void setRecordId(int recordId) {
this.recordId = recordId;
}
/**
* DOCUMENT ME!
*
* @param recordStoreName DOCUMENT ME!
*/
public void setRecordStoreName(String recordStoreName) {
this.recordStoreName = recordStoreName;
}
/**
* DOCUMENT ME!
*
* @param recordStoreVersion DOCUMENT ME!
*/
public void setRecordStoreVersion(String recordStoreVersion) {
this.recordStoreVersion = recordStoreVersion;
}
/**
* DOCUMENT ME!
*
* @param suiteName DOCUMENT ME!
*/
public void setSuiteName(String suiteName) {
this.suiteName = suiteName;
}
/**
* DOCUMENT ME!
*
* @param vendorName DOCUMENT ME!
*/
public void setVendorName(String vendorName) {
this.vendorName = vendorName;
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public String toString() {
return "PersistableMetadata [isAbstract=" + isAbstract + ", className="
+ className + ", superClassName=" + superClassName + ", fieldNames="
+ ((fieldNames != null) ? arrayToString(fieldNames, fieldNames.length) : null)
+ ", fieldTypes="
+ ((fieldTypes != null) ? arrayToString(fieldTypes, fieldTypes.length) : null)
+ ", persistableImplementations=" + persistableImplementations
+ ", indexMetadatas=" + indexMetadatas + ", recordStoreName="
+ recordStoreName + ", persistableStrategy=" + persistableStrategy + "]";
}
private String arrayToString(Object array2, int len) {
StringBuffer buffer = new StringBuffer();
buffer.append("[");
for (int i = 0; i < len; i++) {
if (i > 0)
buffer.append(", ");
if (array2 instanceof int[])
buffer.append(((int[]) array2)[i]);
if (array2 instanceof Object[])
buffer.append(((Object[]) array2)[i]);
}
buffer.append("]");
return buffer.toString();
}
}