package com.alvazan.orm.layer5.query; import java.util.ArrayList; import java.util.List; import java.util.Map; import javax.inject.Inject; import javax.inject.Provider; import com.alvazan.orm.api.z5api.NoSqlSession; import com.alvazan.orm.api.z5api.SpiMetaQuery; import com.alvazan.orm.api.z5api.SpiQueryAdapter; import com.alvazan.orm.api.z8spi.meta.TypeInfo; import com.alvazan.orm.api.z8spi.meta.TypedColumn; import com.alvazan.orm.api.z8spi.meta.ViewInfo; import com.alvazan.orm.parser.antlr.ExpressionNode; public class SpiMetaQueryImpl implements SpiMetaQuery { @Inject private Provider<SpiIndexQueryImpl> factory; private ExpressionNode astTreeRoot; private List<TypedColumn> updateList; private Map<String, TypeInfo> parameterFieldMap; private String query, queryType; private List<ViewInfo> viewsEagerJoin; private List<ViewInfo> viewsDelayedJoin; private List<ViewInfo> views = new ArrayList<ViewInfo>(); @Override public SpiQueryAdapter createQueryInstanceFromQuery(NoSqlSession session) { SpiIndexQueryImpl indexQuery = factory.get(); indexQuery.setup(this, session); return indexQuery; } public void setASTTree(ExpressionNode node, List<ViewInfo> viewsEagerJoin, List<ViewInfo> viewsDelayedJoin) { this.astTreeRoot = node; this.viewsEagerJoin = viewsEagerJoin; this.viewsDelayedJoin = viewsDelayedJoin; views.addAll(viewsEagerJoin); views.addAll(viewsDelayedJoin); } public ExpressionNode getASTTree() { return astTreeRoot; } public void setParameterFieldMap(Map<String, TypeInfo> parameterFieldMap) { this.parameterFieldMap = parameterFieldMap; } public void setQuery(String query) { this.query = query; } @Override public TypeInfo getMetaFieldByParameter(String name) { return parameterFieldMap.get(name); } @Override public String getQuery() { return query; } @Override public List<ViewInfo> getTargetViews() { return views; } @Override public List<ViewInfo> getViewsDelayedJoin() { return viewsDelayedJoin; } @Override public List<ViewInfo> getViewsEagerJoin() { return viewsEagerJoin; } public void setUpdateList(List<TypedColumn> updateList) { this.updateList = updateList; } @Override public List<TypedColumn> getUpdateList() { return updateList; } @Override public String getQueryType() { return queryType; } public void setQueryType(String queryType) { this.queryType = queryType; } }