/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.eas.client.model.query; import com.eas.client.DatabasesClient; import com.eas.client.SqlQuery; import com.eas.client.metadata.Parameters; import com.eas.client.model.Model; import com.eas.client.model.Relation; import com.eas.client.model.visitors.ModelVisitor; import com.eas.client.queries.QueriesProxy; import com.eas.client.sqldrivers.SqlDriver; import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; /** * * @author mg */ public class QueryModel extends Model<QueryEntity, SqlQuery> { public static final long PARAMETERS_ENTITY_ID = -1L; public static final String PARAMETERS_SCRIPT_NAME = "params"; protected QueryParametersEntity parametersEntity; // protected Parameters parameters = new Parameters(); protected QueriesProxy<SqlQuery> queries; protected DatabasesClient basesProxy; protected String datasourceName; private Set<String> supportedTypes; public QueryModel(QueriesProxy<SqlQuery> aQueries) { super(); queries = aQueries; parametersEntity = new QueryParametersEntity(); parametersEntity.setModel(this); } public QueryModel(DatabasesClient aBasesProxy, QueriesProxy<SqlQuery> aQueries) { this(aQueries); basesProxy = aBasesProxy; } public QueryModel(DatabasesClient aBasesProxy, QueriesProxy<SqlQuery> aQueries, String aDatasourceName) { this(aBasesProxy, aQueries); datasourceName = aDatasourceName; } public DatabasesClient getBasesProxy() { return basesProxy; } public QueriesProxy<SqlQuery> getQueries() { return queries; } public String getDatasourceName() { return datasourceName; } public void setDatasourceName(String aValue) { datasourceName = aValue; } @Override public Model<QueryEntity, SqlQuery> copy() throws Exception { Model<QueryEntity, SqlQuery> copied = super.copy(); if (parameters != null) { ((QueryModel) copied).setParameters(parameters.copy()); } if (getParametersEntity() != null) { ((QueryModel) copied).setParametersEntity(getParametersEntity().copy()); } return copied; } public QueryParametersEntity getParametersEntity() { return parametersEntity; } public Parameters getParameters() { return parameters; } public void setParameters(Parameters aParams) { parameters = aParams; } public void setParametersEntity(QueryParametersEntity aParamsEntity) { if (parametersEntity != null) { parametersEntity.setModel(null); } parametersEntity = aParamsEntity; if (parametersEntity != null) { parametersEntity.setModel(this); } } @Override public <M extends Model<QueryEntity, ?>> void accept(ModelVisitor<QueryEntity, M> visitor) { visitor.visit((M) this); } @Override public QueryEntity newGenericEntity() { return new QueryEntity(this); } @Override public void addEntity(QueryEntity aEntity) { aEntity.setModel(this); super.addEntity(aEntity); } @Override protected void resolveRelationEntities(Relation<QueryEntity> aRelation) { if (aRelation.getLeftEntity() != null) { if (aRelation.getLeftEntity() instanceof QueryParametersEntity) { aRelation.setLeftEntity(getParametersEntity()); } else { aRelation.setLeftEntity(getEntityById(aRelation.getLeftEntity().getEntityId())); } } if (aRelation.getRightEntity() != null) { if (aRelation.getRightEntity() instanceof QueryParametersEntity) { aRelation.setRightEntity(getParametersEntity()); } else { aRelation.setRightEntity(getEntityById(aRelation.getRightEntity().getEntityId())); } } } protected void checkSupportedTypes() { if (supportedTypes == null && basesProxy != null) { try { SqlDriver driver = basesProxy.getMetadataCache(datasourceName).getDatasourceSqlDriver(); assert driver != null; supportedTypes = driver.getTypesResolver().getSupportedTypes(); } catch (Exception ex) { Logger.getLogger(QueryModel.class.getName()).log(Level.SEVERE, null, ex); } } } /** * Validates queries in force way. Such case is used in designer ONLY! * * @return * @throws Exception */ @Override protected boolean validateEntities() throws Exception { for (QueryEntity e : entities.values()) { queries.getQuery(e.getQueryName(), null, null, null); } return super.validateEntities(); } }