package com.idega.block.dataquery.data.sql;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
import com.idega.block.dataquery.data.xml.QuerySQLPart;
import com.idega.util.StringHandler;
/**
* <p>Title: idegaWeb</p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2003</p>
* <p>Company: idega Software</p>
* @author <a href="thomas@idega.is">Thomas Hilbig</a>
* @version 1.0
* Created on Nov 4, 2003
*/
public class DirectSQLStatement implements DynamicExpression {
static public final String UNIQUE_IDENTIFIER = "UNIQUE_IDENTIFIER";
static public final int UNIQUE_IDENTIFIER_MAX_LENGTH = 15;
public static final String USER_ACCESS_VARIABLE = "user_access_variable";
public static final String GROUP_ACCESS_VARIABLE = "group_access_variable";
public static final String USER_GROUP_ACCESS_VARIABLE = "user_group_access_variable";
private String sqlStatement;
private String uniqueIdentifier;
private String postStatement;
private Map identifierValueMap = new LinkedHashMap(0);
private Map identifierInputDescriptionMap = new LinkedHashMap(0);
private Set keys;
public DirectSQLStatement(QuerySQLPart sqlPart, Object identifier, String uniqueIdentifier, SQLQuery sqlQuery) {
this.sqlStatement = sqlPart.getStatement();
Map variableValueMap = sqlPart.getVariableValueMap();
this.identifierValueMap.putAll(variableValueMap);
this.identifierInputDescriptionMap.putAll(sqlPart.getInputDescriptionValueMap());
this.keys = variableValueMap.keySet();
this.uniqueIdentifier = StringHandler.shortenToLength(uniqueIdentifier, UNIQUE_IDENTIFIER_MAX_LENGTH);
this.postStatement = sqlPart.getPostStatement();
}
public void setSQLStatement(String sqlStatement) {
this.sqlStatement = sqlStatement;
}
/* (non-Javadoc)
* @see com.idega.block.dataquery.data.sql.DynamicExpression#isDynamic()
*/
public boolean isDynamic() {
return ! this.keys.isEmpty();
}
/* (non-Javadoc)
* @see com.idega.block.dataquery.data.sql.DynamicExpression#getIdentifierValueMap()
*/
public Map getIdentifierValueMap() {
return this.identifierValueMap;
}
/* (non-Javadoc)
* @see com.idega.block.dataquery.data.sql.DynamicExpression#getIdentifierDescriptionMap()
*/
public Map getIdentifierInputDescriptionMap() {
return this.identifierInputDescriptionMap;
}
/* (non-Javadoc)
* @see com.idega.block.dataquery.data.sql.DynamicExpression#setIdentifierValueMap(java.util.Map)
*/
public void setIdentifierValueMap(Map identifierValueMap) {
this.identifierValueMap = identifierValueMap;
}
/* (non-Javadoc)
* @see com.idega.block.dataquery.data.sql.Expression#toSQLString()
*/
public String toSQLString() {
Iterator iterator = this.identifierValueMap.entrySet().iterator();
String result = StringHandler.replace(this.sqlStatement, UNIQUE_IDENTIFIER, this.uniqueIdentifier);
while (iterator.hasNext()) {
Map.Entry entry = (Map.Entry) iterator.next();
String key = (String) entry.getKey();
if (this.keys.contains(key)) {
String value = (String) entry.getValue();
result = StringHandler.replace(result, key, value);
}
}
return result;
}
public String getPostStatement() {
return (this.postStatement == null) ? null : StringHandler.replace(this.postStatement, UNIQUE_IDENTIFIER, this.uniqueIdentifier);
}
/* (non-Javadoc)
* @see com.idega.block.dataquery.data.sql.Expression#isValid()
*/
public boolean isValid() {
// TODO finish implementation
return true;
}
}