/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.eas.client.model.dbscheme;
import com.eas.client.MetadataCache;
import com.eas.client.DatabasesClient;
import com.eas.client.SQLUtils;
import com.eas.client.SqlQuery;
import com.eas.client.metadata.DbTableIndexSpec;
import com.eas.client.metadata.DbTableIndexes;
import com.eas.client.model.Entity;
import com.eas.client.model.store.Model2XmlDom;
import com.eas.client.model.visitors.ModelVisitor;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author mg
*/
public class FieldsEntity extends Entity<DbSchemeModel, SqlQuery, FieldsEntity> {
public static final String INDEXES_PROPERTY = "indexes"; //NOI18N
public static final String FIELDS_PROPERTY = "fields"; //NOI18N
protected List<DbTableIndexSpec> grabedIndexes = new ArrayList<>();
public FieldsEntity() {
super();
}
public FieldsEntity(DbSchemeModel aModel) {
super(aModel);
}
public FieldsEntity(String aSqlId) {
super(aSqlId);
}
@Override
public void accept(ModelVisitor<FieldsEntity, DbSchemeModel> visitor) {
visitor.visit(this);
}
@Override
public String getTableDatasourceName() {
return model != null ? model.getDatasourceName() : null;
}
@Override
public void setTableDatasourceName(String tableDbId) {
}
@Override
public String getTableSchemaName() {
return model != null ? model.getSchema() : null;
}
@Override
public void setTableSchemaName(String tableSchemaName) {
}
/**
* {@inheritDoc}
*/
@Override
protected String getTableNameForDescription() {
return tableName;
}
public String getFullTableName() {
String fullTableName = tableName;
if (getTableSchemaName() != null && !getTableSchemaName().isEmpty()) {
fullTableName = getTableSchemaName() + "." + fullTableName;
}
return fullTableName;
}
public List<DbTableIndexSpec> getIndexes() {
return grabedIndexes;
}
public void achiveIndexes() {
DatabasesClient basesProxy = getModel().getBasesProxy();
if (basesProxy != null) {
try {
MetadataCache mdCache = basesProxy.getMetadataCache(getTableDatasourceName());
assert getTableName() != null;
String ltblName = getTableName();
if (getTableSchemaName() != null && !getTableSchemaName().isEmpty()) {
ltblName = getTableSchemaName() + "." + ltblName;
}
DbTableIndexes indexes = mdCache.getTableIndexes(ltblName);
if (indexes != null && indexes.getIndexes() != null && !indexes.getIndexes().isEmpty()) {
List<DbTableIndexSpec> indexesVector = new ArrayList<>();
for (DbTableIndexSpec index : indexes.getIndexes().values()) {
indexesVector.add(index);
}
setIndexes(indexesVector);
}
} catch (Exception ex) {
Logger.getLogger(FieldsEntity.class.getName()).log(Level.SEVERE, null, ex);
List<DbTableIndexSpec> indexesVector = new ArrayList<>();
DbTableIndexSpec errorIndex = new DbTableIndexSpec();
errorIndex.setName(ex.getMessage());
indexesVector.add(errorIndex);
setIndexes(indexesVector);
}
}
}
public void setIndexes(List<DbTableIndexSpec> aValue) {
List<DbTableIndexSpec> oldValue = grabedIndexes;
grabedIndexes = aValue;
changeSupport.firePropertyChange(INDEXES_PROPERTY, oldValue, aValue);
}
@Override
protected boolean isTagValid(String aTagName) {
return aTagName != null && !aTagName.equals(Model2XmlDom.DATASOURCE_TITLE_ATTR_NAME);
}
@Override
public void validateQuery() throws Exception {
if (query == null && tableName != null) {
query = SQLUtils.validateTableSqlQuery(getTableDatasourceName(), getTableName(), getTableSchemaName(), model.getBasesProxy(), true);
}
}
}