/*
* 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.List;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.Resource;
import org.teiid.core.designer.util.CoreArgCheck;
import org.teiid.designer.core.resource.EmfResource;
import org.teiid.designer.core.util.ModelContents;
import org.teiid.designer.metamodels.core.ModelAnnotation;
/**
* The URIModelSelector represents a selector for a model that exists and can be loaded via a URI.
*
* @since 8.0
*/
public class URIModelSelector extends TemporaryResourceModelSelector {
protected Resource resource;
private final URI modelUri;
protected ModelContents contents;
private ModelHelper helper;
/**
* Construct an instance of ModelResourceSelector.
*/
public URIModelSelector( final URI modelUri ) {
super();
CoreArgCheck.isNotNull(modelUri);
this.modelUri = modelUri;
}
/**
* @see ModelSelector#open()
*/
@Override
public void open() {
if (this.resource == null) {
this.resource = this.getResourceSet().getResource(modelUri, true);
if (this.resource instanceof EmfResource) {
this.contents = ((EmfResource)this.resource).getModelContents();
}
if (this.contents == null) {
this.contents = new ModelContents(this.resource);
}
}
}
/**
* Get the resource underlying this selector
*/
@Override
public Resource getResource() {
open();
return this.resource;
}
/**
* @see org.teiid.designer.compare.selector.ModelSelector#getRootObjects()
*/
@Override
public List getRootObjects() {
open();
return this.resource.getContents();
}
/**
* @see ModelSelector#getUri()
*/
@Override
public URI getUri() {
return modelUri;
}
/**
* @see ModelSelector#close()
*/
@Override
public void close() {
try {
if (this.resource != null) {
this.resource.unload();
}
} finally {
this.contents = null;
this.helper = null;
this.resource = null;
}
}
/**
* @see org.teiid.designer.compare.selector.ModelSelector#getModelAnnotation()
*/
@Override
public ModelAnnotation getModelAnnotation() {
open();
return this.contents.getModelAnnotation();
}
/**
* @see org.teiid.designer.compare.selector.ModelSelector#getModelHelper()
*/
@Override
public ModelHelper getModelHelper() {
if (this.helper == null) {
open();
this.helper = new ModelContentsModelHelper(this.contents);
}
return this.helper;
}
/**
* @see org.teiid.designer.compare.selector.ModelSelector#getModelContents()
*/
@Override
public ModelContents getModelContents() {
open();
return this.contents;
}
}