/**
* Copyright (c) 2004-2011 Wang Jinbao(Julian Wong), http://www.ralasafe.com
* Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php
*/
package org.ralasafe.servlet;
import org.ralasafe.EntityExistException;
import org.ralasafe.db.sql.xml.Column;
import org.ralasafe.db.sql.xml.ContextValue;
import org.ralasafe.db.sql.xml.Parameter;
import org.ralasafe.db.sql.xml.Query;
import org.ralasafe.db.sql.xml.QueryType;
import org.ralasafe.db.sql.xml.RawSQL;
import org.ralasafe.db.sql.xml.Select;
import org.ralasafe.db.sql.xml.UserValue;
import org.ralasafe.entitle.QueryManager;
import org.ralasafe.util.StringUtil;
import org.ralasafe.util.Util;
public class QueryRawHandler {
private final QueryType query;
private String[][] mappingClassPropertyAndTypes;
public QueryRawHandler( QueryType xmlQuery ) {
this.query=xmlQuery;
String mappingClass=query.getRawSQL().getSelect().getMappingClass();
if( !StringUtil.isEmpty( mappingClass ) ) {
mappingClassPropertyAndTypes=Util.reflectJavaBean( mappingClass );
}
}
public QueryType getQuery() {
return query;
}
public String[] format( Parameter param ) {
Object value=param.getChoiceValue();
if( value instanceof ContextValue ) {
return new String[]{"Context value", param.getContextValue().getKey()};
} /*else if( param.getSimpleValue()!=null ) {
SimpleValue value=param.getSimpleValue();
return new String[]{"simpleValue", param.getSimpleValue().getContent()};
} */else if( value instanceof UserValue ) {
return new String[]{"User value", param.getUserValue().getKey()};
}
return null;
}
public Parameter getParameter( int index ) {
return query.getRawSQL().getParameter( index );
}
public void addParameter( String type, String key ) {
Parameter param=new Parameter();
if( "userValue".equals( type ) ) {
UserValue value=new UserValue();
value.setKey( key );
param.setContextValue( null );
param.setUserValue( value );
} else if( "contextValue".equals( type ) ) {
ContextValue value=new ContextValue();
value.setKey( key );
param.setUserValue( null );
param.setContextValue( value );
}
query.getRawSQL().addParameter( param );
}
public void updateParameter( int index, String type, String key ) {
Parameter param=query.getRawSQL().getParameter( index );
if( "userValue".equals( type ) ) {
UserValue value=new UserValue();
value.setKey( key );
param.setContextValue( null );
param.setUserValue( value );
} else if( "contextValue".equals( type ) ) {
ContextValue value=new ContextValue();
value.setKey( key );
param.setUserValue( null );
param.setContextValue( value );
}
}
public void deleteParameter( int index ) {
query.getRawSQL().removeParameterAt( index );
}
public void moveParameter( String direct, int index ) {
RawSQL rawSql=query.getRawSQL();
Parameter[] parameters=rawSql.getParameter();
int moveIndex=index;
// change parameter with it
int changeIndex=-1;
if( "top".equals( direct ) ) {
if( moveIndex!=0 ) {
changeIndex=0;
}
} else if( "up".equals( direct ) ) {
if( moveIndex!=0 ) {
changeIndex=moveIndex-1;
}
} else if( "down".equals( direct ) ) {
if( moveIndex!=(parameters.length-1) ) {
changeIndex=moveIndex+1;
}
} else if( "bottom".equals( direct ) ) {
if( moveIndex!=(parameters.length-1) ) {
changeIndex=parameters.length-1;
}
}
if( changeIndex!=-1 ) {
Parameter moveCol=parameters[moveIndex];
if( "top".equals( direct ) ) {
rawSql.removeParameterAt( moveIndex );
rawSql.addParameter( 0, moveCol );
} else if( "bottom".equals( direct ) ) {
rawSql.removeParameterAt( moveIndex );
rawSql.addParameter( rawSql.getParameterCount(), moveCol );
} else if( "up".equals( direct ) || "down".equals( direct ) ) {
Parameter changeCol=parameters[changeIndex];
rawSql.setParameter( changeIndex, moveCol );
rawSql.setParameter( moveIndex, changeCol );
}
}
}
public Column getColumn( int index ) {
return query.getRawSQL().getSelect().getColumn( index );
}
public void addProperty( String columnName, String javaProp, String javaType, boolean readOnly ) {
Column column=new Column();
column.setName( columnName );
column.setTableAlias( "" );
column.setProperty( javaProp );
column.setJavaType( javaType );
column.setReadOnly( readOnly );
query.getRawSQL().getSelect().addColumn( column );
}
public void updateProperty( int index, String columnName, String javaProp, String javaType,
boolean readOnly ) {
Column column=query.getRawSQL().getSelect().getColumn( index );
column.setName( columnName );
column.setTableAlias( "" );
column.setProperty( javaProp );
column.setJavaType( javaType );
column.setReadOnly( readOnly );
}
public void deleteProperty( int index ) {
query.getRawSQL().getSelect().removeColumnAt( index );
}
public void moveProperty( String direct, int index ) {
Select select=query.getRawSQL().getSelect();
Column[] columns=select.getColumn();
int moveIndex=index;
// change parameter with it
int changeIndex=-1;
if( "top".equals( direct ) ) {
if( moveIndex!=0 ) {
changeIndex=0;
}
} else if( "up".equals( direct ) ) {
if( moveIndex!=0 ) {
changeIndex=moveIndex-1;
}
} else if( "down".equals( direct ) ) {
if( moveIndex!=(columns.length-1) ) {
changeIndex=moveIndex+1;
}
} else if( "bottom".equals( direct ) ) {
if( moveIndex!=(columns.length-1) ) {
changeIndex=columns.length-1;
}
}
if( changeIndex!=-1 ) {
Column moveCol=columns[moveIndex];
if( "top".equals( direct ) ) {
select.removeColumnAt( moveIndex );
select.addColumn( 0, moveCol );
} else if( "bottom".equals( direct ) ) {
select.removeColumnAt( moveIndex );
select.addColumn( select.getColumnCount(), moveCol );
} else if( "up".equals( direct ) || "down".equals( direct ) ) {
Column changeCol=columns[changeIndex];
select.setColumn( changeIndex, moveCol );
select.setColumn( moveIndex, changeCol );
}
}
}
public void setMappingClass( String mappingClass ) {
// update query
query.getRawSQL().getSelect().setMappingClass( mappingClass );
mappingClassPropertyAndTypes=Util.reflectJavaBean( mappingClass );
// clear mapping
// Column[] columns=query.getRawSQL().getSelect().getColumn();
// for( int i=0; i<columns.length; i++ ) {
// Column column=columns[i];
// column.setJavaType( null );
// column.setProperty( null );
// }
}
public String[][] getMappingClassPropertyAndTypes() {
return mappingClassPropertyAndTypes;
}
public void setRawSql( String rawSql ) {
query.getRawSQL().setContent( rawSql );
}
public void save( int id, QueryManager queryManager ) throws EntityExistException {
queryManager.updateQuery( id, (Query) query );
}
public String getManagePage() {
return "./queryMng.rls";
}
}