//idega 2000 - Tryggvi Larusson /* *Copyright 2000 idega.is All Rights Reserved. */ package com.idega.data; import java.util.HashMap; import java.util.Locale; import java.util.Map; /** *@author <a href="mailto:tryggvi@idega.is">Tryggvi Larusson</a> *@version 1.2 */ public class EntityAttribute implements IDOEntityField, IDOReportableField { private String name; private String _uniqueName = null; //private Object value; private String longName; private String relationShip; //private String storageClassName; //private int storageClassType; private Class storageClass; private boolean editable; private boolean visible; private Class relationShipClass; private int maxLength; private boolean nullable = true; private String attributeType; private boolean isPrimaryKey = false; private boolean isUnique = false; private String _description = null; private HashMap _localizedNames = new HashMap(); private GenericEntityDefinition entityDefinition; public static final int TYPE_JAVA_LANG_INTEGER = 1; public static final int TYPE_JAVA_LANG_STRING = 2; public static final int TYPE_JAVA_LANG_BOOLEAN = 3; public static final int TYPE_JAVA_LANG_FLOAT = 4; public static final int TYPE_JAVA_LANG_DOUBLE = 5; public static final int TYPE_JAVA_SQL_DATE = 6; public static final int TYPE_JAVA_SQL_TIMESTAMP = 7; public static final int TYPE_JAVA_SQL_TIME = 8; public static final int TYPE_COM_IDEGA_UTIL_GENDER = 9; public static final int TYPE_COM_IDEGA_DATA_BLOBWRAPPER = 10; public static final int TYPE_JAVA_UTIL_DATE = 11; public EntityAttribute() { setStorageClass(Integer.class); setRelationShipType("unconnected"); setEditable(false); setVisible(false); setAttributeType("column"); setMaxLength(-1); } public EntityAttribute(GenericEntityDefinition definition) { this(); this.setDeclaredEntity(definition); } public EntityAttribute(String columnName) { setName(columnName); setLongName(columnName); setStorageClass(Integer.class); setRelationShipType("unconnected"); setEditable(false); setVisible(false); setAttributeType("column"); setMaxLength(-1); } public EntityAttribute(String columnName, Object columnValue) { setName(columnName); setLongName(columnName); setStorageClass(columnValue.getClass()); setRelationShipType("unconnected"); setEditable(false); setVisible(false); setAttributeType("column"); setMaxLength(-1); } public void setName(String name) { //this.name=name.toLowerCase(); this.name = name.toUpperCase(); } public String getName() { return this.name; } public void setAttributeType(String attributeType) { this.attributeType = attributeType; } public String getAttributeType() { return this.attributeType; } public void setLongName(String longName) { this.longName = longName; } public String getLongName() { return this.longName; } public void setRelationShipType(String type) { this.relationShip = type; } public String getRelationShipType() { return this.relationShip; } public String getStorageClassName() { String className = this.storageClass.getName(); /*int classType=getStorageClassType(); if(classType==TYPE_JAVA_LANG_INTEGER){ className="java.lang.Integer"; } else if(classType==TYPE_JAVA_LANG_STRING){ className="java.lang.String"; } else if(classType==TYPE_JAVA_LANG_BOOLEAN){ className="java.lang.Boolean"; } else if(classType==TYPE_JAVA_LANG_FLOAT){ className="java.lang.Float"; } else if(classType==TYPE_JAVA_LANG_DOUBLE){ className="java.lang.Double"; } else if(classType==TYPE_JAVA_SQL_TIMESTAMP){ className="java.sql.Timestamp"; } else if(classType==TYPE_JAVA_SQL_DATE){ className="java.sql.Date"; } else if(classType==TYPE_JAVA_SQL_TIME){ className="java.sql.Time"; } else if(classType==TYPE_COM_IDEGA_UTIL_GENDER){ className="com.idega.util.Gender"; } else if(classType==TYPE_COM_IDEGA_DATA_BLOBWRAPPER){ className="com.idega.data.BlobWrapper"; }*/ return className; //return storageClassName; } public void setStorageClass(Class storageClass) { this.storageClass = storageClass; /*String className = storageClass.getName(); if(className.equals("java.lang.Integer")){ setStorageClassType(TYPE_JAVA_LANG_INTEGER); } else if(className.equals("java.lang.String")){ setStorageClassType(TYPE_JAVA_LANG_STRING); } else if(className.equals("java.lang.Boolean")){ setStorageClassType(TYPE_JAVA_LANG_BOOLEAN); } else if(className.equals("java.lang.Double")){ setStorageClassType(TYPE_JAVA_LANG_DOUBLE); } else if(className.equals("java.lang.Float")){ setStorageClassType(TYPE_JAVA_LANG_FLOAT); } else if(className.equals("java.sql.Timestamp")){ setStorageClassType(TYPE_JAVA_SQL_TIMESTAMP); } else if(className.equals("java.sql.Date")){ setStorageClassType(TYPE_JAVA_SQL_DATE); } else if(className.equals("java.util.Date")){ setStorageClassType(TYPE_JAVA_UTIL_DATE); } else if(className.equals("java.sql.Time")){ setStorageClassType(TYPE_JAVA_SQL_TIME); } else if(className.equals("com.idega.util.Gender")){ setStorageClassType(TYPE_COM_IDEGA_UTIL_GENDER); } else if(className.equals("com.idega.data.BlobWrapper")){ setStorageClassType(TYPE_COM_IDEGA_DATA_BLOBWRAPPER); } */ //storageClassName=className; } /** * @deprecated Replaced with setStorageClass(); */ public void setStorageClassType(int class_type) { if (class_type == TYPE_JAVA_LANG_INTEGER) { setStorageClass(java.lang.Integer.class); } else if (class_type == TYPE_JAVA_LANG_STRING) { setStorageClass(java.lang.String.class); } else if (class_type == TYPE_JAVA_LANG_BOOLEAN) { setStorageClass(java.lang.Boolean.class); } else if (class_type == TYPE_JAVA_LANG_FLOAT) { setStorageClass(java.lang.Float.class); } else if (class_type == TYPE_JAVA_LANG_DOUBLE) { setStorageClass(java.lang.Double.class); } else if (class_type == TYPE_JAVA_SQL_TIMESTAMP) { setStorageClass(java.lang.Integer.class); } else if (class_type == TYPE_JAVA_SQL_DATE) { setStorageClass(java.sql.Date.class); } else if (class_type == TYPE_JAVA_UTIL_DATE) { setStorageClass(java.util.Date.class); } else if (class_type == TYPE_JAVA_SQL_TIME) { setStorageClass(java.sql.Time.class); } else if (class_type == TYPE_COM_IDEGA_UTIL_GENDER) { setStorageClass(com.idega.util.Gender.class); } else if (class_type == TYPE_COM_IDEGA_DATA_BLOBWRAPPER) { setStorageClass(com.idega.data.BlobWrapper.class); } } public Class getStorageClass() { return this.storageClass; } /** * @deprecated replaced with getStorageClass() */ public int getStorageClassType() { //return storageClassType; String className = this.storageClass.getName(); if (className.equals("java.lang.Integer")) { return (TYPE_JAVA_LANG_INTEGER); } else if (className.equals("java.lang.String")) { return (TYPE_JAVA_LANG_STRING); } else if (className.equals("java.lang.Boolean")) { return (TYPE_JAVA_LANG_BOOLEAN); } else if (className.equals("java.lang.Double")) { return (TYPE_JAVA_LANG_DOUBLE); } else if (className.equals("java.lang.Float")) { return (TYPE_JAVA_LANG_FLOAT); } else if (className.equals("java.sql.Timestamp")) { return (TYPE_JAVA_SQL_TIMESTAMP); } else if (className.equals("java.sql.Date")) { return (TYPE_JAVA_SQL_DATE); } else if (className.equals("java.util.Date")) { return (TYPE_JAVA_UTIL_DATE); } else if (className.equals("java.sql.Time")) { return (TYPE_JAVA_SQL_TIME); } else if (className.equals("com.idega.util.Gender")) { return (TYPE_COM_IDEGA_UTIL_GENDER); } else if (className.equals("com.idega.data.BlobWrapper")) { return (TYPE_COM_IDEGA_DATA_BLOBWRAPPER); } else { throw new RuntimeException("StorageClassType for " + className + " not defined"); } } public void setEditable(boolean ifEditable) { this.editable = ifEditable; } public boolean getIfEditable() { return this.editable; } public void setVisible(boolean ifVisible) { this.visible = ifVisible; } public boolean getIfVisible() { return this.visible; } public String getRelationShipClassName() { if (this.relationShipClass != null) { return this.relationShipClass.getName(); } return null; } /** * Returns null if relationshipClass is not set */ public Class getRelationShipClass() { return this.relationShipClass; } public void setRelationShipClass(Class relClass) { this.relationShipClass = relClass; } public void setMaxLength(int maxLength) { this.maxLength = maxLength; } public int getMaxLength() { return this.maxLength; } public void setNullable(boolean ifNullable) { this.nullable = ifNullable; } public boolean getIfNullable() { return this.nullable; } public void setAsPrimaryKey(boolean primaryKey) { if (this.isPrimaryKey != primaryKey) { this.isPrimaryKey = primaryKey; if (primaryKey) { this.setNullable(false); if (this.entityDefinition != null) { this.entityDefinition.setFieldAsPartOfPrimaryKey(this); } } } } public boolean isPrimaryKey() { return this.isPrimaryKey; } public String getColumnName() { return getName().toUpperCase(); } public boolean getIfUnique() { return this.isUnique; } public void setUnique(boolean ifUnique) { this.isUnique = ifUnique; } public void setUniqueFieldName(String name) { this._uniqueName = name; } public boolean isOneToNRelationship() { return (this.relationShipClass != null); } public void setDeclaredEntity(GenericEntityDefinition definition) { this.entityDefinition = definition; } public IDOEntityDefinition getDeclaredEntity() { return this.entityDefinition; } public String getUniqueFieldName() { if(this._uniqueName==null){ return this.getColumnName(); } else { return this._uniqueName; } } public String getSQLFieldName() { return this.getColumnName(); } public Class getDataTypeClass() { return this.getStorageClass(); } public boolean isNullAllowed() { return this.nullable; } public boolean isPartOfPrimaryKey() { return this.isPrimaryKey; } public boolean isPartOfManyToOneRelationship() { return (getRelationShipClass() != null); } public IDOEntityDefinition getManyToOneRelated() throws IDORelationshipException { if(isPartOfManyToOneRelationship()){ return IDOLookup.instanciateEntity(this.getRelationShipClass()).getEntityDefinition(); } else { throw new IDORelationshipException("This field is not part of many-to-one relationship"); } } /* (non-Javadoc) * @see com.idega.data.IDOReportableField#getDescription() */ public String getDescription() { return this._description; } /* (non-Javadoc) * @see com.idega.data.IDOReportableField#setDescription(java.lang.String) */ public void setDescription(String description) { this._description = description; } /* (non-Javadoc) * @see com.idega.data.IDOReportableField#getValueClass() */ public Class getValueClass() { return this.getDataTypeClass(); } /* (non-Javadoc) * @see com.idega.data.IDOReportableField#getLocalizedName(java.util.Locale) */ public String getLocalizedName(Locale locale) { return (String)this._localizedNames.get(locale); } /* (non-Javadoc) * @see com.idega.data.IDOReportableField#setLocalizedName(java.lang.String, java.util.Locale) */ public void setLocalizedName(String name, Locale locale) { this._localizedNames.put(locale, name); } public Map getMapOfLocalizedNames(){ return (Map)this._localizedNames.clone(); } }