All Downloads are FREE. Search and download functionalities are using the official Maven repository.

br.com.anteros.persistence.metadata.EntityCache Maven / Gradle / Ivy

There is a newer version: 1.2.0
Show newest version
/*******************************************************************************
 * Copyright 2012 Anteros Tecnologia
 * 
 * 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 br.com.anteros.persistence.metadata;

import java.sql.Types;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

import br.com.anteros.core.converter.ConversionHelper;
import br.com.anteros.core.utils.ObjectUtils;
import br.com.anteros.core.utils.ReflectionUtils;
import br.com.anteros.core.utils.StringUtils;
import br.com.anteros.persistence.metadata.annotation.type.GeneratedType;
import br.com.anteros.persistence.metadata.annotation.type.ScopeType;
import br.com.anteros.persistence.metadata.descriptor.DescriptionColumn;
import br.com.anteros.persistence.metadata.descriptor.DescriptionConvert;
import br.com.anteros.persistence.metadata.descriptor.DescriptionField;
import br.com.anteros.persistence.metadata.descriptor.DescriptionGenerator;
import br.com.anteros.persistence.metadata.descriptor.DescriptionIndex;
import br.com.anteros.persistence.metadata.descriptor.DescriptionNamedQuery;
import br.com.anteros.persistence.metadata.descriptor.DescriptionSQL;
import br.com.anteros.persistence.metadata.descriptor.DescriptionUniqueConstraint;
import br.com.anteros.persistence.metadata.descriptor.ParamDescription;
import br.com.anteros.persistence.metadata.descriptor.type.ColumnType;
import br.com.anteros.persistence.metadata.descriptor.type.ConnectivityType;
import br.com.anteros.persistence.metadata.descriptor.type.SQLStatementType;
import br.com.anteros.persistence.metadata.identifier.IdentifierPath;
import br.com.anteros.persistence.session.SQLSession;

public class EntityCache {
	private Set columns = new LinkedHashSet();
	private Class entityClass;
	private String tableName;
	private String schema;
	private String catalog;
	private DescriptionColumn discriminatorColumn;
	private List primaryKey = new LinkedList();
	private List fields = new LinkedList();
	private List uniqueConstraints = new LinkedList();
	private String discriminatorValue;
	private ScopeType cacheScope = ScopeType.TRANSACTION;
	private int maxTimeCache = 0;
	private String aliasTableName;
	private List namedQueries = new LinkedList();
	private List indexes = new LinkedList();
	private Map descriptionSql = new LinkedHashMap();
	private boolean abstractClass;
	private String mobileActionImport;
	private String mobileActionExport;
	private String displayLabel;
	private int exportOrderToSendData;
	private String[] exportColumns;
	private Map exportParams;
	private Map importParams;
	private ConnectivityType importConnectivityType = ConnectivityType.ALL_CONNECTION;
	private ConnectivityType exportConnectivityType = ConnectivityType.ALL_CONNECTION;
	private List converts = new ArrayList();
	private Map generators = new HashMap();

	public String generateAndGetAliasTableName() {
		generateAliasTableName();
		return this.aliasTableName;
	}

	public void generateAliasTableName() {
		this.aliasTableName = RandomAliasName.randomTableName();
	}

	public String getAliasTableName() {
		if (this.aliasTableName == null)
			generateAliasTableName();
		return this.aliasTableName;
	}

	public EntityCache(Class sourceClazz) {
		this.entityClass = sourceClazz;
	}

	/**
	 * Retorna tempo de Cache do objeto (milisegundos)
	 * 
	 * @return
	 */
	public int getMaxTimeCache() {
		return maxTimeCache;
	}

	/**
	 * Seta tempo de Cache do objeto (milisegundos)
	 * 
	 * @return
	 */
	public void setMaxTimeCache(int maxTimeCache) {
		this.maxTimeCache = maxTimeCache;
	}

	/**
	 * Seta tipo de escopo do Objeto.
	 * 
	 * @return
	 */
	public ScopeType getCacheScope() {
		return cacheScope;
	}

	public List getDescriptionFields() {
		return fields;
	}

	public List getDescriptionFieldsExcludingIds() {
		List result = new ArrayList();
		for (DescriptionField f : fields) {
			if (!f.isPrimaryKey())
				result.add(f);
		}
		return result;
	}

	public void setDescriptionFields(List fields) {
		this.fields = fields;
	}

	public void addDescriptionFields(DescriptionField descriptonField) {
		this.fields.add(descriptonField);
	}

	public Class getEntityClass() {
		return entityClass;
	}

	public void add(DescriptionColumn descriptionColumn) {
		if (descriptionColumn.getColumnType() == ColumnType.PRIMARY_KEY || descriptionColumn.isCompositeId()) {
			this.primaryKey.add(descriptionColumn);
		} else if (descriptionColumn.getColumnType() == ColumnType.DISCRIMINATOR)
			this.discriminatorColumn = descriptionColumn;
		this.columns.add(descriptionColumn);
	}

	public String getTableName() {
		return tableName;
	}

	public void setTableName(String tableName) {
		this.tableName = tableName;
	}

	public void addDiscriminatorColumn(DescriptionColumn discriminatorColumn) {
		this.discriminatorColumn = discriminatorColumn;
		this.columns.add(this.discriminatorColumn);
	}

	public void setDiscriminatorValue(String discriminatorValue) {
		this.discriminatorValue = discriminatorValue;
	}

	public void addAllDescriptionColumn(Set columns) {
		for (DescriptionColumn c : columns) {
			add(c);
		}
	}

	public boolean hasCompositeKey() {
		return this.primaryKey.size() > 1;
	}

	public List getCompositeKeys() {
		return Collections.unmodifiableList(this.primaryKey);
	}

	public DescriptionColumn getDiscriminatorColumn() {
		return discriminatorColumn;
	}

	public Set getDescriptionColumns() {
		return columns;
	}

	public void addPrimaryKeyColumn(DescriptionColumn primaryKey) {
		add(primaryKey);
	}

	public List getPrimaryKeyColumns() {
		return Collections.unmodifiableList(primaryKey);
	}

	public boolean hasDiscriminatorValue() {
		return this.discriminatorValue != null;
	}

	public boolean hasDiscriminatorColumn() {
		return this.discriminatorColumn != null;
	}

	public Object newInstance() throws Exception {
		return entityClass.newInstance();
	}

	public DescriptionField getDescriptionField(String name) {
		for (DescriptionField f : fields) {
			if (name.equalsIgnoreCase(f.getField().getName())) {
				return f;
			}
		}
		return null;
	}

	public String getDiscriminatorValue() {
		return this.discriminatorValue;
	}

	public DescriptionColumn getDescriptionColumnByField(String fieldName) {
		for (DescriptionColumn c : columns) {
			if ((c.getField() != null) && (fieldName.equalsIgnoreCase(c.getField().getName()))) {
				return c;
			}
		}
		return null;

	}

	public DescriptionColumn[] getDescriptionColumns(String fieldName) {
		ArrayList result = new ArrayList();
		for (DescriptionColumn descriptionColumn : columns) {
			if ((descriptionColumn.getField() != null) && (fieldName.equalsIgnoreCase(descriptionColumn.getField().getName()))) {
				result.add(descriptionColumn);
			}
		}
		return result.toArray(new DescriptionColumn[] {});

	}

	public DescriptionColumn getDescriptionColumnByName(String columnName) {
		for (DescriptionColumn descriptionColumn : columns) {
			if (columnName.equalsIgnoreCase(descriptionColumn.getColumnName()))
				return descriptionColumn;
		}
		return null;
	}

	public void addAllDescriptionField(List descriptionFields) {
		this.fields.addAll(descriptionFields);

	}

	public DescriptionColumn getDescriptionColumnByColumnName(String columnName) {
		for (DescriptionColumn c : columns) {
			if (columnName.equals(c.getColumnName()))
				return c;
		}
		return null;
	}

	public void setEntityClass(Class clazz) {
		this.entityClass = clazz;

	}

	@Override
	public String toString() {
		return getEntityClass().getName() + ":" + tableName + "";
	}

	/**
	 * Seta Escopo do Cache
	 * 
	 * @param scope
	 */
	public void setCacheScope(ScopeType scope) {
		this.cacheScope = scope;
	}

	public void addDescriptionColumns(List descriptionColumn) {
		for (DescriptionColumn d : descriptionColumn) {
			add(d);
		}
	}

	public String getCacheUniqueId(Object object) throws Exception {
		StringBuilder sb = new StringBuilder("");
		Map columns = new TreeMap();
		for (DescriptionColumn column : primaryKey)
			columns.put(column.getColumnName(), column.getDescriptionField().getObjectValue(object));

		for (Object value : columns.values()) {
			if (!"".equals(sb.toString()))
				sb.append("_");
			sb.append(value);
		}
		return sb.toString();
	}

	public void add(DescriptionField descriptionField) {
		this.fields.add(descriptionField);

	}

	private Object getValue(String columnName, Object object) throws Exception {
		for (DescriptionColumn column : this.getDescriptionColumns()) {
			if (column.isForeignKey() && column.isPrimaryKey()) {
				try {
					Object value = column.getDescriptionField().getObjectValue(object);
					return column.getDescriptionField().getTargetEntity().getValue(
							(StringUtils.isEmpty(column.getReferencedColumnName()) ? column.getColumnName() : column.getReferencedColumnName()), value);
				} catch (Exception ex) {
				}
			} else if (column.isPrimaryKey()) {
				try {
					Object value = column.getDescriptionField().getObjectValue(object);
					return value;
				} catch (Exception ex) {
				}
			}
		}
		return null;
	}

	private Object getDatabaseValue(String columnName, Object object) throws Exception {
		for (DescriptionColumn column : this.getDescriptionColumns()) {
			if (column.getColumnName().equals(columnName))
				if (column.isForeignKey() && column.isPrimaryKey()) {
					try {
						Object value = column.convertToDatabaseColumn(column.getDescriptionField().getObjectValue(object));
						return column.getDescriptionField().getTargetEntity().getValue(
								(StringUtils.isEmpty(column.getReferencedColumnName()) ? column.getColumnName() : column.getReferencedColumnName()), value);
					} catch (Exception ex) {
					}
				} else if (column.isPrimaryKey()) {
					try {
						Object value = column.convertToDatabaseColumn(column.getDescriptionField().getObjectValue(object));
						return value;
					} catch (Exception ex) {
					}
				}
		}
		return null;
	}

	public Map getPrimaryKeysAndValues(Object object) throws Exception {
		Map result = new LinkedHashMap();

		for (DescriptionColumn column : this.columns) {
			if (column.isForeignKey() && column.isPrimaryKey()) {
				try {
					Object value = ReflectionUtils.getFieldValueByName(object, column.getField().getName());
					Object columnValue = column.getDescriptionField().getTargetEntity().getColumnValue(
							(StringUtils.isEmpty(column.getReferencedColumnName()) ? column.getColumnName() : column.getReferencedColumnName()), value);
					result.put(column.getColumnName(), ObjectUtils.cloneObject(columnValue));
				} catch (Exception ex) {
				}
			} else if (column.isPrimaryKey()) {
				try {
					Object value = column.getDescriptionField().getObjectValue(object);
					result.put(column.getColumnName(), ObjectUtils.cloneObject(value));
				} catch (Exception ex) {
				}
			}
		}
		return result;
	}

	public Map getPrimaryKeysAndDatabaseValues(Object object) throws Exception {
		Map result = new LinkedHashMap();

		for (DescriptionColumn column : this.columns) {
			if (column.isForeignKey() && column.isPrimaryKey()) {
				try {
					Object value = column.convertToDatabaseColumn(ReflectionUtils.getFieldValueByName(object, column.getField().getName()));
					Object columnValue = column.getDescriptionField().getTargetEntity().getDatabaseValue(
							(StringUtils.isEmpty(column.getReferencedColumnName()) ? column.getColumnName() : column.getReferencedColumnName()), value);
					result.put(column.getColumnName(), ObjectUtils.cloneObject(columnValue));
				} catch (Exception ex) {
				}
			} else if (column.isPrimaryKey()) {
				try {
					Object value = column.convertToDatabaseColumn(column.getDescriptionField().getObjectValue(object));
					result.put(column.getColumnName(), ObjectUtils.cloneObject(value));
				} catch (Exception ex) {
				}
			}
		}
		return result;
	}

	private Object getColumnValue(String columnName, Object object) throws Exception {
		for (DescriptionColumn column : this.getDescriptionColumns()) {
			if (column.getColumnName().equals(columnName)) {
				if (column.isForeignKey() && column.isPrimaryKey()) {
					try {
						Object value = column.getDescriptionField().getObjectValue(object);
						return column.getDescriptionField().getTargetEntity().getValue(
								(StringUtils.isEmpty(column.getReferencedColumnName()) ? column.getColumnName() : column.getReferencedColumnName()), value);
					} catch (Exception ex) {
					}
				} else {
					try {
						Object value = column.getDescriptionField().getObjectValue(object);
						return value;
					} catch (Exception ex) {
					}
				}
			}
		}
		return null;
	}

	public Map getAllColumnValues(Object object) throws Exception {
		Map result = new LinkedHashMap();

		for (DescriptionColumn column : this.columns) {
			if (column.isForeignKey() && column.isPrimaryKey()) {
				try {
					Object value = column.getDescriptionField().getObjectValue(object);
					result.put(column.getColumnName(), column.getDescriptionField().getTargetEntity().getValue(
							(StringUtils.isEmpty(column.getReferencedColumnName()) ? column.getColumnName() : column.getReferencedColumnName()), value));
				} catch (Exception ex) {
				}
			} else {
				try {
					Object value = column.getDescriptionField().getObjectValue(object);
					result.put(column.getColumnName(), value);
				} catch (Exception ex) {
				}
			}
		}
		return result;
	}

	public Map getIdentifierColumns() {
		Map result = new LinkedHashMap();
		for (DescriptionColumn column : this.columns) {
			if (!column.isDiscriminatorColumn()) {
				String path = column.getField().getName();
				if (column.isForeignKey() && column.isPrimaryKey()) {
					try {
						column.getDescriptionField().getTargetEntity().getIdentifierPath(result, path);
					} catch (Exception ex) {
					}
				} else if (column.isPrimaryKey()) {
					try {
						result.put(column.getColumnName(), new IdentifierPath(column, path));
					} catch (Exception ex) {
					}
				}
			}
		}
		return result;
	}

	private void getIdentifierPath(Map map, String path) throws Exception {
		for (DescriptionColumn c : this.getDescriptionColumns()) {
			if (!c.isDiscriminatorColumn()) {
				if (!"".equals(path))
					path += ".";
				path += c.getField().getName();
				if (c.isForeignKey() && c.isPrimaryKey()) {
					try {
						c.getDescriptionField().getTargetEntity().getIdentifierPath(map, path);
					} catch (Exception ex) {
					}
				} else if (c.isPrimaryKey()) {
					try {
						map.put(c.getColumnName(), new IdentifierPath(c, path));
					} catch (Exception ex) {
					}
				}
			}
		}
	}

	public List getFieldsModified(SQLSession session, Object object) throws Exception {
		List result = new ArrayList();
		FieldEntityValue lastFieldValue;
		FieldEntityValue newFieldValue;
		for (DescriptionField field : fields) {
			if (fieldCanbeChanged(session, object, field.getField().getName())) {
				lastFieldValue = getLastFieldEntityValue(session, object, field.getField().getName());
				newFieldValue = field.getFieldEntityValue(session, object);
				if ((lastFieldValue != null) || (newFieldValue != null)) {
					if (((lastFieldValue == null) && (newFieldValue != null)) || ((lastFieldValue != null) && (newFieldValue == null))
							|| (newFieldValue.compareTo(lastFieldValue) != 0))
						result.add(field);
				}
			}
		}
		return result;
	}

	public FieldEntityValue getOriginalFieldEntityValue(SQLSession session, Object object, String fieldName) throws Exception {
		EntityManaged entityManaged = session.getPersistenceContext().getEntityManaged(object);
		if (entityManaged != null) {
			for (FieldEntityValue field : entityManaged.getOriginalValues()) {
				if (field.getName().equals(fieldName))
					return field;
			}
		}
		return null;
	}

	public Object getOriginalValueByColumn(SQLSession session, Object object, DescriptionColumn column) throws Exception {
		return getValueByColumn(object, column, getOriginalFieldEntityValue(session, object, column.getField().getName()));
	}

	public FieldEntityValue getLastFieldEntityValue(SQLSession session, Object object, String fieldName) throws Exception {
		EntityManaged entityManaged = session.getPersistenceContext().getEntityManaged(object);
		if (entityManaged != null) {
			for (FieldEntityValue field : entityManaged.getLastValues()) {
				if (field.getName().equals(fieldName))
					return field;
			}
		}
		return null;
	}

	public Object getLastValueByColumn(SQLSession session, Object object, DescriptionColumn column) throws Exception {
		return getValueByColumn(object, column, getLastFieldEntityValue(session, object, column.getField().getName()));
	}

	public Object getNewValueByColumn(SQLSession session, Object object, DescriptionColumn column) throws Exception {
		return getValueByColumn(object, column, column.getDescriptionField().getFieldEntityValue(session, object));
	}

	public boolean fieldCanbeChanged(SQLSession session, Object object, String fieldName) throws Exception {
		EntityManaged entityManaged = session.getPersistenceContext().getEntityManaged(object);
		if (entityManaged != null) {
			for (String field : entityManaged.getFieldsForUpdate()) {
				if (field.equals(fieldName))
					return true;
			}
		}
		return false;
	}

	private Object getValueByColumn(Object object, DescriptionColumn column, FieldEntityValue fieldEntityValue) throws Exception {
		Object result = null;
		if ((fieldEntityValue != null) && (fieldEntityValue.getValue() != null)) {
			if (column.isDiscriminatorColumn())
				result = this.getDiscriminatorValue();
			else {
				if (column.isForeignKey())
					result = ((Map) fieldEntityValue.getValue()).get(column.getReferencedColumnName());
				else
					result = ((Map) fieldEntityValue.getValue()).get(column.getColumnName());
				if (column.getColumnDataType() == Types.DATE)
					result = ConversionHelper.getInstance().convert(result, java.sql.Date.class);
				else if (column.getColumnDataType() == Types.TIME)
					result = ConversionHelper.getInstance().convert(result, java.sql.Time.class);
				else if (column.getColumnDataType() == Types.TIMESTAMP)
					result = ConversionHelper.getInstance().convert(result, java.sql.Timestamp.class);
			}
		}
		return result;
	}

	public String getVersionColumnName() {
		for (DescriptionColumn column : columns) {
			if (column.isVersioned())
				return column.getColumnName();
		}
		return null;
	}

	public DescriptionColumn getVersionColumn() {
		for (DescriptionColumn column : columns) {
			if (column.isVersioned())
				return column;
		}
		return null;
	}

	public boolean isVersioned() {
		for (DescriptionColumn column : columns) {
			if (column.isVersioned())
				return true;
		}
		return false;
	}

	public boolean isTable() {
		return !this.hasDiscriminatorValue();
	}

	public Set getAllFieldNames() {
		Set result = new HashSet();
		for (DescriptionField field : fields)
			result.add(field.getField().getName());
		return result;
	}

	public boolean hasDescriptionField() {
		return this.fields != null && this.fields.size() > 0;
	}

	public void addNamedQuery(DescriptionNamedQuery namedQuery) {
		this.namedQueries.add(namedQuery);
	}

	public List getDescriptionNamedQueries() {
		return this.namedQueries;
	}

	public DescriptionNamedQuery getDescriptionNamedQuery(String name) {
		for (DescriptionNamedQuery d : this.namedQueries)
			if (name.equals(d.getName()))
				return d;
		return null;
	}

	public boolean hasNamedQueries() {
		return this.namedQueries.size() > 0;
	}

	public void addDescriptionIndex(DescriptionIndex index) {
		this.indexes.add(index);
	}

	public DescriptionIndex getDescriptionIndex(String name) {
		for (DescriptionIndex i : this.indexes)
			if (name.equals(i.getName()))
				return i;

		return null;
	}

	public List getDescriptionIndexes() {
		return this.indexes;
	}

	public boolean hasIndexes() {
		return this.indexes.size() > 0;
	}

	public boolean existsColumn(String columnName) {
		for (DescriptionColumn column : this.columns)
			if (columnName.equals(column.getColumnName()))
				return true;
		return false;
	}

	public boolean isCompositeId() {
		for (DescriptionColumn column : this.columns)
			if (column.isCompositeId())
				return true;
		return false;
	}

	public Map getDescriptionSql() {
		return descriptionSql;
	}

	public void setDescriptionSql(Map descriptionSql) {
		this.descriptionSql = descriptionSql;
	}

	public DescriptionSQL getDescriptionSqlByType(SQLStatementType type) {
		if (descriptionSql != null)
			return descriptionSql.get(type);
		return null;
	}

	public boolean isExistsDescriptionSQL() {
		return (descriptionSql.size() > 0);
	}

	public DescriptionField[] getPrimaryKeyFields() {
		List result = new ArrayList();
		for (DescriptionField field : fields) {
			if (field.isPrimaryKey())
				result.add(field);
		}
		return result.toArray(new DescriptionField[] {});
	}

	public boolean isAbstractClass() {
		return abstractClass;
	}

	public void setAbstractClass(boolean abstractClass) {
		this.abstractClass = abstractClass;
	}

	public List getIndexes() {
		if (indexes == null)
			indexes = new ArrayList();
		return indexes;
	}

	public void setIndexes(List indexes) {
		this.indexes = indexes;
	}

	public DescriptionField getDescriptionFieldUsesColumns(Class sourceClass, List columNames) {
		for (DescriptionField descriptionField : getDescriptionFields()) {
			if (descriptionField.isRelationShip()) {
				boolean containsColumns = descriptionField.isContainsColumns(columNames);
				Class fc = descriptionField.getFieldClass();
				boolean isInheritance = ReflectionUtils.isExtendsClass(sourceClass, descriptionField.getFieldClass());
				if ((containsColumns) && ((fc == sourceClass) || (isInheritance)))
					return descriptionField;
			} else if (descriptionField.isCollectionEntity()) {
				boolean isInheritance = ReflectionUtils.isExtendsClass(sourceClass, descriptionField.getFieldClass());
				if ((descriptionField.getFieldClass() == sourceClass) || (isInheritance))
					return descriptionField;
			} else if (descriptionField.isJoinTable()) {
				boolean isInheritance = ReflectionUtils.isExtendsClass(sourceClass, descriptionField.getFieldClass());
				if ((descriptionField.getFieldClass() == sourceClass) || (isInheritance))
					return descriptionField;
			}
		}
		return null;
	}

	public String getSchema() {
		return schema;
	}

	public void setSchema(String schema) {
		this.schema = schema;
	}

	public String getCatalog() {
		return catalog;
	}

	public void setCatalog(String catalog) {
		this.catalog = catalog;
	}

	public List getUniqueConstraints() {
		return uniqueConstraints;
	}

	public void setUniqueConstraints(List uniqueConstraints) {
		this.uniqueConstraints = uniqueConstraints;
	}

	public void addUniqueConstraint(DescriptionUniqueConstraint uniqueConstraint) {
		uniqueConstraints.add(uniqueConstraint);
	}

	public void addIndex(DescriptionIndex index) {
		indexes.add(index);
	}

	public void addAllUniqueConstraints(List uniqueConstraints) {
		this.uniqueConstraints.addAll(uniqueConstraints);
	}

	public void addAllDescriptionIndex(List descriptionIndexes) {
		this.indexes.addAll(descriptionIndexes);
	}

	public ConnectivityType getImportConnectivityType() {
		return importConnectivityType;
	}

	public void setImportConnectivityType(ConnectivityType importConnectivityType) {
		this.importConnectivityType = importConnectivityType;
	}

	public ConnectivityType getExportConnectivityType() {
		return exportConnectivityType;
	}

	public void setExportConnectivityType(ConnectivityType exportConnectivityType) {
		this.exportConnectivityType = exportConnectivityType;
	}

	public String getDisplayLabel() {
		return displayLabel;
	}

	public void setDisplayLabel(String displayLabel) {
		this.displayLabel = displayLabel;
	}

	public Integer getExportOrderToSendData() {
		return exportOrderToSendData;
	}

	public void setExportOrderToSendData(Integer exportOrderToSendData) {
		this.exportOrderToSendData = exportOrderToSendData;
	}

	public String[] getExportColumns() {
		return exportColumns;
	}

	public void setExportColumns(String[] exportColumns) {
		this.exportColumns = exportColumns;
	}

	public DescriptionColumn getColumnIdSynchronism() {
		for (DescriptionColumn column : columns) {
			if (column.isIdSynchronism())
				return column;
		}
		return null;
	}

	public int exportColumnsCount() {
		if (exportColumns != null)
			return exportColumns.length;
		return 0;
	}

	public String getMobileActionImport() {
		return mobileActionImport;
	}

	public void setMobileActionImport(String mobileActionImport) {
		this.mobileActionImport = mobileActionImport;
	}

	public String getMobileActionExport() {
		return mobileActionExport;
	}

	public void setMobileActionExport(String mobileActionExport) {
		this.mobileActionExport = mobileActionExport;
	}

	public Map getExportParams() {
		if (exportParams == null)
			exportParams = new HashMap();
		return exportParams;
	}

	public void setExportParams(Map exportParams) {
		this.exportParams = exportParams;
	}

	public Map getImportParams() {
		if (importParams == null)
			importParams = new HashMap();
		return importParams;
	}

	public void setImportParams(Map importParams) {
		this.importParams = importParams;
	}

	public boolean isExportTable() {
		return StringUtils.isNotEmpty(mobileActionExport);
	}

	public boolean isImportTable() {
		return StringUtils.isNotEmpty(mobileActionImport);
	}

	public DescriptionColumn getColumnDescription(String columnName) {
		for (DescriptionColumn column : columns) {
			if (columnName.equals(column.getColumnName()))
				return column;
		}
		return null;
	}

	public List getConverts() {
		return converts;
	}

	public void setConverts(List converts) {
		this.converts = converts;
	}

	public boolean isInheritance() {
		if (discriminatorValue == null)
			return false;
		return (!"".equals(discriminatorValue));
	}

	public void setObjectValues(Object target, Map values) throws Exception {
		if ((values == null) || (target == null))
			return;
		for (String fieldName : values.keySet()) {
			DescriptionField descriptionField = getDescriptionField(fieldName);
			if (descriptionField == null) {
				throw new EntityCacheException("Não foi possível atribuir o mapa de valores ao objeto pois o campo " + fieldName + " não encontrado na classe "
						+ this.getEntityClass().getName());
			}
			descriptionField.setObjectValue(fieldName, values.get(fieldName));
		}
	}

	public DescriptionField getDescriptionFieldWithMappedBy(Class sourceType, String mappedBy) {
		for (DescriptionField descriptionField : getDescriptionFields()) {
			if (mappedBy.equals(descriptionField.getMappedBy())) {
				if (descriptionField.getTargetClass().equals(sourceType))
					return descriptionField;
			}
		}
		return null;
	}

	public boolean hasDescriptionFieldWithMappedBy(Class sourceType, String mappedBy) {
		DescriptionField result = getDescriptionFieldWithMappedBy(sourceType, mappedBy);
		return (result != null);
	}

	public boolean isIncompletePrimaryKeyValue(Object source) throws Exception {
		if (source == null)
			return true;
		for (DescriptionField descriptionField : this.getPrimaryKeyFields()) {
			if (descriptionField.getObjectValue(source) == null)
				return true;
		}
		return false;
	}

	public void setPrimaryKeyValue(Object source, Object target) throws Exception {
		if ((source == null) || (target == null))
			return;
		if (!(source.getClass().equals(target.getClass())))
			return;

		for (DescriptionField descriptionField : this.getPrimaryKeyFields()) {
			descriptionField.setObjectValue(target, descriptionField.getObjectValue(source));
		}
	}

	public String getSimpleName() {
		if (entityClass != null)
			return entityClass.getSimpleName();
		return "";
	}

	public boolean containsDescriptionField(DescriptionField descriptionField) {
		for (DescriptionField descField : fields) {
			if (descField.equals(descriptionField))
				return true;
		}
		return false;
	}

	public Map getGenerators() {
		return Collections.unmodifiableMap(generators);
	}

	public void add(GeneratedType type, DescriptionGenerator descriptionGenerator) {
		generators.put(type, descriptionGenerator);
	}

	public DescriptionGenerator getGeneratorByName(String generator) {
		for (DescriptionGenerator descriptionGenerator : generators.values()) {
			if (descriptionGenerator.getValue().equalsIgnoreCase(generator)) {
				return descriptionGenerator;
			}
		}
		return null;
	}

	public boolean hasGenerators() {
		return getGenerators().size() > 0;
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy