package org.teiid.translator.odata4; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.Map; import java.util.Set; import org.apache.olingo.client.api.uri.QueryOption; import org.teiid.core.util.StringUtil; import org.teiid.metadata.Table; import org.teiid.translator.document.DocumentNode; public class ODataDocumentNode extends DocumentNode { enum ODataDocumentType {PRIMARY, COMPLEX, EXPAND}; private final ODataDocumentType type; private LinkedHashSet<String> columns = new LinkedHashSet<String>(); private String filterStr; public ODataDocumentNode(Table t, ODataDocumentType type, boolean collection) { super(t, collection); this.type = type; } boolean isComplexType() { return type == ODataDocumentType.COMPLEX; } boolean isExpandType() { return type == ODataDocumentType.EXPAND; } boolean isPrimaryType() { return type == ODataDocumentType.PRIMARY; } void appendSelect(String columnName) { if (isComplexType()) { this.columns.add(getName()); } else { this.columns.add(columnName); } } Set<String> getSelects(){ return this.columns; } Map<QueryOption, Object> getOptions() { Map<QueryOption, Object> options = new LinkedHashMap<QueryOption, Object>(); if (isExpandType()) { if (!columns.isEmpty()) { options.put(QueryOption.SELECT, StringUtil.join(this.columns, ",")); } if (this.filterStr != null) { options.put(QueryOption.FILTER, this.filterStr); } } return options; } void addFilter(String string) { if (this.filterStr == null) { this.filterStr = string; } else { this.filterStr = this.filterStr +" and " + string; //$NON-NLS-1$ } } String getFilter() { return this.filterStr; } }