/* * Created on 25.6.2003 * * To change the template for this generated file go to * Window>Preferences>Java>Code Generation>Code and Comments */ package com.idega.data; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Vector; /** * Title: GenericEntityDefinition * Description: * Copyright: Copyright (c) 2003 * Company: idega Software * @author 2003 - idega team - <br><a href="mailto:gummi@idega.is">Gudmundur Agust Saemundsson</a><br> * @version 1.0 */ public class GenericEntityDefinition implements IDOEntityDefinition { private String _uniqueEntityName = null; private String _sqlTableName = null; private IDOEntityDefinition[] _manyToManyRelatedEntities = new IDOEntityDefinition[0]; private EntityAttribute[] _fields = new EntityAttribute[0]; private PrimaryKeyDefinition _pkDefinition = null; private HashMap _indexes = null; private Class _interfaceClass=null; private Class _beanClass = null; private boolean _hasAutoIncrementColumn = true; private Boolean _isBeanCachingActive = null; /** * */ public GenericEntityDefinition() { super(); this._pkDefinition = new PrimaryKeyDefinition(this); } public void addManyToManyRelatedEntity(IDOEntityDefinition def) { if (!containsEquivalentRelation(def)) { int length = this._manyToManyRelatedEntities.length; IDOEntityDefinition[] tempArray = new IDOEntityDefinition[length + 1]; System.arraycopy(this._manyToManyRelatedEntities, 0, tempArray, 0, length); tempArray[length] = def; this._manyToManyRelatedEntities = tempArray; } else { //System.err.println(this.getUniqueEntityName() + ": already contains relation to " + def.getUniqueEntityName()); } } protected boolean containsEquivalentRelation(IDOEntityDefinition def) { for (int i = 0; i < this._manyToManyRelatedEntities.length; i++) { if (this._manyToManyRelatedEntities[i].getSQLTableName().equals(def.getSQLTableName())) { return true; } } return false; } public void addFieldEntity(IDOEntityField eField) { try { EntityAttribute field = (EntityAttribute)eField; if(field.isPartOfPrimaryKey()){ setFieldAsPartOfPrimaryKey(field); } if (!containsEquivalentField(field)) { int length = this._fields.length; EntityAttribute[] tempArray = new EntityAttribute[length + 1]; System.arraycopy(this._fields, 0, tempArray, 0, length); tempArray[length] = field; if(field.getDeclaredEntity()== null){ (field).setDeclaredEntity(this); } this._fields = tempArray; } else { System.err.println(this.getUniqueEntityName() + ": already contains equivalent field \"" + field.getSQLFieldName() + "\""); } } catch (ClassCastException e) { System.err.println("ClassCastException: "+this.getClass()+" only supports "+ EntityAttribute.class +" as "+IDOEntityField.class); throw e; } } protected boolean containsEquivalentField(IDOEntityField field) { for (int i = 0; i < this._fields.length; i++) { if (this._fields[i].getSQLFieldName().equals(field.getSQLFieldName())) { return true; } } return false; } public void setFieldAsPartOfPrimaryKey(IDOEntityField field){ this._pkDefinition.addFieldEntity(field); } public void setUniqueEntityName(String name) { this._uniqueEntityName = name; } public void setSQLTableName(String name) { this._sqlTableName = name; } public HashMap getIndexes() throws NoIndexException{ if (this._indexes == null) { throw new NoIndexException("No Indexes"); } return this._indexes; } public void addIndex(String field) { addIndex(field+"_index", field); } public void addIndex(String name, String field) { addIndex(name, new String[] {field}); } public void addIndex(String name, String[] fields) { if (name != null && !name.equals("") && fields != null && fields.length > 0) { if (this._indexes == null) { this._indexes = new HashMap(); } this._indexes.put(name, fields); } else { throw new IllegalArgumentException("Name must and fields must bet be set"); } } public EntityAttribute getEntityAttribute(String attributeName){ for (int i = 0; i < this._fields.length; i++) { if (this._fields[i].getSQLFieldName().equals(attributeName)) { return this._fields[i]; } } return null; } public Collection getEntityFieldsCollection(){ Vector coll = new Vector(this._fields.length); for (int i = 0; i < this._fields.length; i++) { coll.add(this._fields[i]); } return coll; } public void setInterfaceClass(Class interfaceClass){ this._interfaceClass = interfaceClass; } // IDOEntityDefinition begins // /* (non-Javadoc) * @see com.idega.data.IDOEntityDefinition#getUniqueEntityName() */ public String getUniqueEntityName() { return this._uniqueEntityName; } /* (non-Javadoc) * @see com.idega.data.IDOEntityDefinition#getSQLTableName() */ public String getSQLTableName() { return this._sqlTableName; } /* (non-Javadoc) * @see com.idega.data.IDOEntityDefinition#getManyToManyRelatedEntities() */ public IDOEntityDefinition[] getManyToManyRelatedEntities() { return this._manyToManyRelatedEntities; } /* (non-Javadoc) * @see com.idega.data.IDOEntityDefinition#getFields() */ public IDOEntityField[] getFields() { return this._fields; } /* (non-Javadoc) * @see com.idega.data.IDOEntityDefinition#getPrimaryKeyClass() */ public IDOPrimaryKeyDefinition getPrimaryKeyDefinition() { return this._pkDefinition; } /* (non-Javadoc) * @see com.idega.data.IDOEntityDefinition#getInterfaceClass() */ public Class getInterfaceClass() { return this._interfaceClass; } public Class getBeanClass() { if(this._beanClass == null){ this._beanClass = IDOLookup.getBeanClassFor(this._interfaceClass); } return this._beanClass; } public IDOEntityField[] findFieldByRelation(Class interfaceClass){ ArrayList list = new ArrayList(); for (int i = 0; i < this._fields.length; i++) { if(this._fields[i].getRelationShipClass().equals(interfaceClass)){ list.add(this._fields[i]); } } if(list.size() > 0) { return (IDOEntityField[])list.toArray(new IDOEntityField[list.size()]); } else { return new IDOEntityField[0]; } } // IDOEntityDefinition ends // public IDOEntityField findFieldByUniqueName(String name){ for (int i = 0; i < this._fields.length; i++) { if(this._fields[i].getUniqueFieldName().equalsIgnoreCase(name)){ return this._fields[i]; } } return null; } public boolean hasField(String uniqueName){ IDOEntityField field = findFieldByUniqueName(uniqueName); if(field!=null){ return true; } else { return false; } } /* * @see java.lang.Object#equals(java.lang.Object) */ public boolean equals(Object obj) { if (obj instanceof IDOEntityDefinition) { IDOEntityDefinition compareObject = (IDOEntityDefinition) obj; return compareObject.getSQLTableName().equals(this._sqlTableName) && this._interfaceClass.equals(compareObject.getInterfaceClass()); } return false; } /* * @see com.idega.data.IDOEntityDefinition#getMiddleTableNameForRelation(java.lang.String) */ public String getMiddleTableNameForRelation(String relatedTable) { EntityRelationship rel = EntityControl.getManyToManyRelationShip(this._sqlTableName, relatedTable); if (rel != null) { return rel.getTableName(); } else { return null; } } /** * @return Returns the _hasAutoIncrementColumn. */ public boolean hasAutoIncrementColumn() { return this._hasAutoIncrementColumn; } /** * @param autoIncrementColumn The _hasAutoIncrementColumn to set. */ public void setHasAutoIncrementColumn(boolean autoIncrementColumn) { this._hasAutoIncrementColumn = autoIncrementColumn; } /** * @return Boolean.TRUE if active by default, Boolean.FALSE if inactive by default, null if system-default */ public Boolean isBeanCachingActive() { return this._isBeanCachingActive; } public void setBeanCachingActiveByDefault(boolean value){ this._isBeanCachingActive = ((value)?Boolean.TRUE:Boolean.FALSE); } }