/* * 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.util.Iterator; import java.util.LinkedList; import java.util.List; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.teiid.core.designer.util.CoreArgCheck; import org.teiid.designer.core.index.CompositeIndexSelector; import org.teiid.designer.core.index.IndexSelector; import org.teiid.designer.core.workspace.ModelResource; import org.teiid.designer.core.workspace.ModelWorkspace; import org.teiid.designer.core.workspace.ModelWorkspaceItem; /** * ModelWorkspaceIndexSelectorFactory * * @since 8.0 */ public class ModelWorkspaceIndexSelectorFactory implements IndexSelectorFactory { /** * Construct an instance of ModelWorkspaceIndexSelectorFactory. * */ public ModelWorkspaceIndexSelectorFactory() { super(); } /** * @see org.teiid.designer.core.index.IndexSelectorFactory#createIndexSelector(java.util.List) */ @Override public IndexSelector createIndexSelector( final List modelWorkspaceItems ) throws CoreException { CoreArgCheck.isNotNull(modelWorkspaceItems); final int numItems = modelWorkspaceItems.size(); if ( numItems == 0 ) { return new ModelWorkspaceIndexSelector(); } else if ( numItems == 1 ) { final Object item = modelWorkspaceItems.get(0); if ( item instanceof ModelWorkspace ) { // It's the workspace ... return new ModelWorkspaceIndexSelector(); } } final List modelResources = new LinkedList(); final Iterator iter = modelWorkspaceItems.iterator(); while (iter.hasNext()) { final ModelWorkspaceItem item = (ModelWorkspaceItem)iter.next(); final ModelWorkspaceItem wsItem = item; doAddModelResources(wsItem,modelResources); } final List selectors = new LinkedList(); final Iterator resourceIter = modelResources.iterator(); while (resourceIter.hasNext()) { final ModelResource modelResource = (ModelResource)resourceIter.next(); final IResource resource = modelResource.getCorrespondingResource(); final String filePath = resource.getFullPath().toString(); final IndexSelector selector = new ResourceFileIndexSelector(filePath); selectors.add(selector); } if ( selectors.size() == 0 ) { return new ModelWorkspaceIndexSelector(); } if ( selectors.size() == 1 ) { return (IndexSelector)selectors.get(0); } return new CompositeIndexSelector(selectors); } protected void doAddModelResources( final ModelWorkspaceItem item, final List modelResources ) throws CoreException { if ( item instanceof ModelWorkspace ) { modelResources.add(item); } else if ( item instanceof ModelResource ) { modelResources.add(item); } else { // It's not a resource, so must be some container ... final ModelWorkspaceItem[] children = item.getChildren(); for (int i = 0; i < children.length; ++i) { final ModelWorkspaceItem child = children[i]; doAddModelResources(child,modelResources); } } } }