/*
* 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.compare.selector;
import java.util.Iterator;
import java.util.List;
import org.eclipse.emf.ecore.resource.Resource;
import org.teiid.core.designer.ModelerCoreException;
import org.teiid.designer.core.refactor.OrganizeImportCommand;
import org.teiid.designer.core.refactor.OrganizeImportHandler;
/**
* AbstractModelSelector
*
* @since 8.0
*/
public abstract class AbstractModelSelector implements ModelSelector {
/**
* Construct an instance of AbstractModelSelector.
*
*/
public AbstractModelSelector() {
super();
}
/**
*/
public abstract Resource getResource() throws ModelerCoreException;
/**
* Adds the supplied objects as new root-level objects. The objects will be added immediately
* after the last {@link #getRootObjects() exposed root} object.
* @see org.teiid.designer.compare.selector.ModelSelector#addRootObjects(java.util.List)
*/
@Override
public void addRootObjects(final List newRoots, final int startingIndex) throws ModelerCoreException {
if ( newRoots == null || newRoots.isEmpty() ) {
return;
}
final List roots = this.getResource().getContents();
int index = startingIndex;
// Add the new roots that haven't been added yet ...
final Iterator iter = newRoots.iterator();
while (iter.hasNext()) {
final Object newRoot = iter.next();
if ( !roots.contains(newRoot) ) {
if ( index >= 0 && roots.size() >= index ) {
roots.add(index,newRoot);
++index;
} else {
roots.add(newRoot);
}
}
}
}
/**
* Adds the supplied objects as new root-level objects. The objects will be added immediately
* after the last {@link #getRootObjects() exposed root} object.
* @see org.teiid.designer.compare.selector.ModelSelector#addRootObjects(java.util.List)
*/
@Override
public void addRootObjects(final List newRoots) throws ModelerCoreException {
if ( newRoots == null || newRoots.isEmpty() ) {
return;
}
final List exposedRoots = this.getRootObjects();
final int indexOfNextExposedRoot = exposedRoots.size();
addRootObjects(newRoots,indexOfNextExposedRoot);
}
/**
* @see org.teiid.designer.compare.selector.ModelSelector#rebuildModelImports()
*/
@Override
public void rebuildModelImports() throws ModelerCoreException {
final OrganizeImportHandler handler = new OrganizeImportHandler() {
@Override
public Object choose(List options) {
return null;
}
};
final OrganizeImportCommand command = new OrganizeImportCommand();
command.setResource(this.getResource());
command.setHandler(handler);
command.execute(null);
}
}