/* * 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.modelgenerator.processor; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import org.eclipse.core.runtime.CoreException; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.EObject; import org.teiid.core.designer.util.CoreArgCheck; /** * MultiDatatypeFinder * * @since 8.0 */ public class MultiDatatypeFinder implements DatatypeFinder { private final List datatypeFinders; /** * Construct an instance of MultiDatatypeFinder. * */ public MultiDatatypeFinder( final List datatypeFinders ) { super(); CoreArgCheck.isNotNull(datatypeFinders); CoreArgCheck.isPositive(datatypeFinders.size()); this.datatypeFinders = datatypeFinders; } /** * Go through the finders until the first one is found ... * @see org.teiid.designer.modelgenerator.processor.DatatypeFinder#findDatatype(java.lang.String) */ @Override public EObject findDatatype(final String name) throws CoreException { final Iterator iter = this.datatypeFinders.iterator(); while (iter.hasNext()) { final DatatypeFinder finder = (DatatypeFinder)iter.next(); final EObject result = finder.findDatatype(name); if ( result != null ) { return result; } } return null; } /** * @see org.teiid.designer.modelgenerator.processor.DatatypeFinder#findDatatype(org.eclipse.emf.common.util.URI) */ @Override public EObject findDatatype(URI uri) throws CoreException { final Iterator iter = this.datatypeFinders.iterator(); while (iter.hasNext()) { final DatatypeFinder finder = (DatatypeFinder)iter.next(); final EObject result = finder.findDatatype(uri); if ( result != null ) { return result; } } return null; } /** * @see org.teiid.designer.modelgenerator.processor.DatatypeFinder#findAllDatatypes(java.lang.String) */ @Override public List findAllDatatypes(String name) throws CoreException { final List results = new LinkedList(); final Iterator iter = this.datatypeFinders.iterator(); while (iter.hasNext()) { final DatatypeFinder finder = (DatatypeFinder)iter.next(); final List result = finder.findAllDatatypes(name); final Iterator resultIter = result.iterator(); while (resultIter.hasNext()) { final EObject object = (EObject)resultIter.next(); if ( !results.contains(object) ) { results.add(object); } } } return results; } /** * @see org.teiid.designer.modelgenerator.processor.DatatypeFinder#findAllDatatypes(org.eclipse.emf.common.util.URI) */ @Override public List findAllDatatypes(URI uri) throws CoreException { final List results = new LinkedList(); final Iterator iter = this.datatypeFinders.iterator(); while (iter.hasNext()) { final DatatypeFinder finder = (DatatypeFinder)iter.next(); final List result = finder.findAllDatatypes(uri); final Iterator resultIter = result.iterator(); while (resultIter.hasNext()) { final EObject object = (EObject)resultIter.next(); if ( !results.contains(object) ) { results.add(object); } } } return results; } }