/*
* 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.workspace;
import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IResourceVisitor;
import org.teiid.designer.core.index.IndexUtil;
/**
* Visitor that collects all associated {@link org.eclipse.core.resources.IResource}s. Index names and index files are also
* collected.
*
* @since 8.0
*/
public class SearchIndexResourceVisitor implements IResourceVisitor {
// /////////////////////////////////////////////////////////////////////////////////////////////
// FIELDS
// /////////////////////////////////////////////////////////////////////////////////////////////
private Collection indexNames = new HashSet();
private List resources = new ArrayList();
// /////////////////////////////////////////////////////////////////////////////////////////////
// METHODS
// /////////////////////////////////////////////////////////////////////////////////////////////
/**
* Obtains the index files of all indexes associated with this visitor. The result will be empty if the resource hasn't been
* visited yet.
*
* @return the index files (never <code>null</code>)
* @since 5.0.1
*/
public File[] getIndexFiles() {
File[] result = null;
File[] files = new File(IndexUtil.INDEX_PATH).listFiles(); // all index files
if (files.length != 0) {
List temp = new ArrayList(files.length);
for (int ndx = files.length; --ndx >= 0;) {
File file = files[ndx];
if (IndexUtil.isIndexFile(file) && this.indexNames.contains(file.getName())) {
temp.add(file);
}
}
if (!temp.isEmpty()) {
temp.toArray(result = new File[temp.size()]);
} else {
result = new File[0];
}
} else {
result = new File[0];
}
return result;
}
/**
* Obtains the file names of all indexes associated with this visitor. The result will be empty if the visitor hasn't visited
* the resource yet.
*
* @return the file names of all indexes (never <code>null</code>)
* @since 5.0.1
*/
public Collection getIndexNames() {
return this.indexNames;
}
/**
* Obtains the {@link IResource}s associated with this visitor. The result will be empty if the visitor hasn't visited the
* resource yet.
*
* @return the resources (never <code>null</code>)
* @since 5.0.1
*/
public List getResources() {
return this.resources;
}
private boolean isIncludedResource( final IResource theResource ) {
if ((theResource == null) || !theResource.exists()) {
return false;
}
if (ModelUtil.isModelFile(theResource) || ModelUtil.isXsdFile(theResource) || ModelUtil.isVdbArchiveFile(theResource)) {
return true;
}
return false;
}
/**
* @see org.eclipse.core.resources.IResourceVisitor#visit(org.eclipse.core.resources.IResource)
* @since 5.0.1
*/
@Override
public boolean visit( IResource theResource ) {
if (isIncludedResource(theResource)) {
this.resources.add(theResource);
this.indexNames.add(IndexUtil.getRuntimeIndexFileName(theResource));
this.indexNames.add(IndexUtil.getSearchIndexFileName(theResource));
}
return true;
}
}