/** * 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.adapter.user; import java.util.HashMap; import java.util.Map; import org.ralasafe.db.Column; import org.ralasafe.db.ColumnAdapter; import org.ralasafe.db.Comparator; import org.ralasafe.db.ComplexWhereElement; import org.ralasafe.db.FieldWhereElement; import org.ralasafe.db.GroupPart; import org.ralasafe.db.LWhereElement; import org.ralasafe.db.MapStorgeColumnAdapter; import org.ralasafe.db.NoValueComparator; import org.ralasafe.db.OrderPart; import org.ralasafe.db.SelectCondition; import org.ralasafe.db.SingleValueComparator; import org.ralasafe.db.Type; import org.ralasafe.db.WhereElement; import org.ralasafe.metadata.user.FieldMetadata; import org.ralasafe.metadata.user.UserMetadata; import org.ralasafe.user.UserSelectCondition; public class SelectConditionAdapter { private Map columnMap; private static Map compartorMap=new HashMap(); static { compartorMap.put( org.ralasafe.user.NoValueComparator.IS_NULL.getType(), NoValueComparator.IS_NULL ); compartorMap.put( org.ralasafe.user.NoValueComparator.NOT_NULL.getType(), NoValueComparator.NOT_NULL ); compartorMap.put( org.ralasafe.user.SingleValueComparator.EQUAL.getType(), SingleValueComparator.EQUAL ); compartorMap.put( org.ralasafe.user.SingleValueComparator.GREATER.getType(), SingleValueComparator.GREATER ); compartorMap.put( org.ralasafe.user.SingleValueComparator.LEFT_LIKE.getType(), SingleValueComparator.LEFT_LIKE ); compartorMap.put( org.ralasafe.user.SingleValueComparator.LESS.getType(), SingleValueComparator.LESS ); compartorMap.put( org.ralasafe.user.SingleValueComparator.LIKE.getType(), SingleValueComparator.LIKE ); compartorMap.put( org.ralasafe.user.SingleValueComparator.NOT_EQUAL.getType(), SingleValueComparator.NOT_EQUAL ); compartorMap.put( org.ralasafe.user.SingleValueComparator.NOT_GREATER.getType(), SingleValueComparator.NOT_GREATER ); compartorMap.put( org.ralasafe.user.SingleValueComparator.NOT_LESS.getType(), SingleValueComparator.NOT_LESS ); compartorMap.put( org.ralasafe.user.SingleValueComparator.NOT_LIKE.getType(), SingleValueComparator.NOT_LIKE ); compartorMap.put( org.ralasafe.user.SingleValueComparator.RIGHT_LIKE.getType(), SingleValueComparator.RIGHT_LIKE ); } public SelectConditionAdapter( UserMetadata metadata ) { columnMap=new HashMap(); FieldMetadata[] fields=metadata.getMainTableMetadata().getFields(); for( int i=0; i<fields.length; i++ ) { FieldMetadata fieldMetadata=fields[i]; String columnName=fieldMetadata.getColumnName(); ColumnAdapter adapter=new MapStorgeColumnAdapter( columnName, fieldMetadata.getJavaType() ); Column column=new Column(); column.setAdapter( adapter ); column.setName( columnName ); column.setType( new Type( fieldMetadata.getJavaType(), fieldMetadata.getSqlType() ) ); columnMap.put( fieldMetadata.getName(), column ); } } public SelectCondition adapter( UserSelectCondition userCdtn ) { if( userCdtn==null ) { return null; } SelectCondition cdtn=new SelectCondition(); GroupPart gp=adapter( userCdtn.getGroupPart() ); OrderPart op=adapter( userCdtn.getOrderPart() ); WhereElement whereEmt=adapter( userCdtn.getWhereElement() ); cdtn.setGroupPart( gp ); cdtn.setOrderPart( op ); cdtn.setWhereElement( whereEmt ); return cdtn; } private WhereElement adapter( org.ralasafe.user.WhereElement whereElement ) { if( whereElement==null ) { return null; } if( whereElement instanceof org.ralasafe.user.FieldWhereElement ) { return adapter( (org.ralasafe.user.FieldWhereElement)whereElement ); } else if( whereElement instanceof org.ralasafe.user.ComplexWhereElement ) { return adapter( (org.ralasafe.user.ComplexWhereElement) whereElement ); } return null; } private ComplexWhereElement adapter( org.ralasafe.user.ComplexWhereElement whereElement ) { if( whereElement==null ) { return null; } ComplexWhereElement cpx=new ComplexWhereElement(); cpx.setFirstPart( adapter( whereElement.getFirstPart() ) ); cpx.setLinkedParts( adapter( whereElement.getLinkedParts() ) ); return cpx; } private LWhereElement[] adapter( org.ralasafe.user.LWhereElement[] linkedParts ) { if( linkedParts==null ) { return null; } LWhereElement[] lwes=new LWhereElement[ linkedParts.length ]; for( int i=0; i<linkedParts.length; i++ ) { LWhereElement lwe=new LWhereElement(); lwe.setLinkType( linkedParts[i].getLinkType() ); lwe.setWhereElement( adapter( linkedParts[i].getWhereElement() ) ); } return lwes; } private WhereElement adapter( org.ralasafe.user.FieldWhereElement whereElement ) { if( whereElement==null ) { return null; } FieldWhereElement fwe=new FieldWhereElement(); fwe.setCompartor( adapter( whereElement.getCompartor() ) ); fwe.setContextValue( false ); fwe.setValue( whereElement.getValue() ); fwe.setColumn( (Column) columnMap.get( whereElement.getName() ) ); return fwe; } private Comparator adapter( org.ralasafe.user.Comparator compartor ) { if( compartor==null ) { return null; } return (Comparator) compartorMap.get( compartor.getType() ); } private OrderPart adapter( org.ralasafe.user.OrderPart orderPart ) { if( orderPart==null ) { return null; } OrderPart op=new OrderPart(); op.setColumnNames( adapter( orderPart.getNames() ) ); op.setOrderTypes( orderPart.getOrderTypes() ); return op; } private GroupPart adapter( org.ralasafe.user.GroupPart groupPart ) { if( groupPart==null ) { return null; } GroupPart gp=new GroupPart(); gp.setColumnNames( adapter( groupPart.getNames() ) ); return gp; } private String[] adapter( String[] names ) { if( names==null ) { return null; } String[] columnNames=new String[names.length]; for( int i=0; i<names.length; i++ ) { String name=names[i]; Column column=(Column) columnMap.get( name ); columnNames[i]=column.getName(); } return columnNames; } }