/* * JBoss, Home of Professional Open Source. * * See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing. * * See the AUTHORS.txt file distributed with this work for a full listing of individual contributors. */ package org.teiid.designer.core.index; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; import org.teiid.core.designer.util.CoreArgCheck; /** * CompositeIndexSelector, this selector returns indexes if aggrgates from all the * selectors it is constructed from. * * @since 8.0 */ public class CompositeIndexSelector extends AbstractIndexSelector { private List indexSelectors; public CompositeIndexSelector(List indexSelectors) { this.indexSelectors = indexSelectors; } /* * @See org.teiid.designer.core.index.IndexSelector#getIndexes() */ @Override public Index[] getIndexes() throws IOException { List indexes = new ArrayList(); for(final Iterator selectIter = indexSelectors.iterator();selectIter.hasNext();) { IndexSelector indexSelector = (IndexSelector) selectIter.next(); if(indexSelector != null) { for(int i=0; i < indexSelector.getIndexes().length; i++) { indexes.add(indexSelector.getIndexes()[i]); } } } return (Index[]) indexes.toArray(new Index[0]); } /** * @see org.teiid.designer.core.index.IndexSelector#getFilePaths() * @since 4.2 */ @Override public String[] getFilePaths() { List paths = new ArrayList(); for(final Iterator selectIter = indexSelectors.iterator();selectIter.hasNext();) { IndexSelector indexSelector = (IndexSelector) selectIter.next(); if(indexSelector != null) { for(int i=0; i < indexSelector.getFilePaths().length; i++) { paths.add(indexSelector.getFilePaths()[i]); } } } return (String[]) paths.toArray(new String[0]); } /** * Read the contents of the files at the specefied paths in the index directory * and return the contents as String in a collection. */ @Override public List getFileContentsAsString(List paths) { CoreArgCheck.isNotEmpty(paths); for(final Iterator indexIter = this.indexSelectors.iterator();indexIter.hasNext();) { IndexSelector selector = (IndexSelector) indexIter.next(); if(selector instanceof RuntimeIndexSelector) { RuntimeIndexSelector runtimeSelector = (RuntimeIndexSelector) selector; List contents = runtimeSelector.getFileContentsAsString(paths); if(!contents.isEmpty()) { return contents; } } } return Collections.EMPTY_LIST; } /** * @see org.teiid.designer.core.index.IndexSelector#getFileContent(java.lang.String) * @since 4.2 */ @Override public InputStream getFileContent(String path) { CoreArgCheck.isNotNull(path); for(final Iterator indexIter = this.indexSelectors.iterator();indexIter.hasNext();) { IndexSelector selector = (IndexSelector) indexIter.next(); if(selector instanceof RuntimeIndexSelector) { RuntimeIndexSelector runtimeSelector = (RuntimeIndexSelector) selector; InputStream contents = runtimeSelector.getFileContent(path); if(contents != null) { return contents; } } } return null; } /** * @see org.teiid.designer.core.index.IndexSelector#getFile(java.lang.String) * @since 4.2 */ @Override public File getFile(String path) { CoreArgCheck.isNotNull(path); for(final Iterator indexIter = this.indexSelectors.iterator();indexIter.hasNext();) { IndexSelector selector = (IndexSelector) indexIter.next(); if(selector instanceof RuntimeIndexSelector) { RuntimeIndexSelector runtimeSelector = (RuntimeIndexSelector) selector; File file = runtimeSelector.getFile(path); if(file != null) { return file; } } } return null; } /** * @see org.teiid.designer.core.index.IndexSelector#getFileContentAsString(java.lang.String) * @since 4.2 */ @Override public String getFileContentAsString(String path) { CoreArgCheck.isNotNull(path); for(final Iterator indexIter = this.indexSelectors.iterator();indexIter.hasNext();) { IndexSelector selector = (IndexSelector) indexIter.next(); if(selector instanceof RuntimeIndexSelector) { RuntimeIndexSelector runtimeSelector = (RuntimeIndexSelector) selector; String contents = runtimeSelector.getFileContentAsString(path); if(contents != null) { return contents; } } } return null; } /** * @see org.teiid.designer.core.index.IndexSelector#getFileSize(java.lang.String) * @since 4.2 */ @Override public long getFileSize(String path) { CoreArgCheck.isNotNull(path); for(final Iterator indexIter = this.indexSelectors.iterator();indexIter.hasNext();) { IndexSelector selector = (IndexSelector) indexIter.next(); if(selector instanceof RuntimeIndexSelector) { RuntimeIndexSelector runtimeSelector = (RuntimeIndexSelector) selector; long length = runtimeSelector.getFileSize(path); if(length != 0) { return length; } } } return 0; } /** * @see org.teiid.designer.core.index.IndexSelector#getFileContent(java.lang.String, java.lang.String[], java.lang.String[]) * @since 4.2 */ @Override public InputStream getFileContent(final String path, final String[] tokens, final String[] tokenReplacements) { CoreArgCheck.isNotNull(path); for(final Iterator indexIter = this.indexSelectors.iterator();indexIter.hasNext();) { IndexSelector selector = (IndexSelector) indexIter.next(); if(selector instanceof RuntimeIndexSelector) { RuntimeIndexSelector runtimeSelector = (RuntimeIndexSelector) selector; InputStream contents = runtimeSelector.getFileContent(path, tokens, tokenReplacements); if(contents != null) { return contents; } } } return null; } public List getIndexSelectors() { return this.indexSelectors; } }