package net.refractions.udig.georss;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import org.eclipse.core.runtime.IProgressMonitor;
import org.geotools.data.FeatureSource;
import org.geotools.data.FeatureStore;
import net.refractions.udig.catalog.*;
public class GeoRSSGeoResource extends IGeoResource {
IResolve parent;
String typename = null;
private URL identifier;
public GeoRSSGeoResource(IResolve parent, String typename){
this.parent = parent;
this.typename = typename;
try{
identifier = new URL(parent.getIdentifier().toString()+"#"+typename);
}catch (MalformedURLException e){
identifier=parent.getIdentifier();
}
}
@Override
public URL getIdentifier() {
return identifier;
}
public Throwable getMessage() {
return parent.getMessage();
}
public Status getStatus() {
return parent.getStatus();
}
public <T> T resolve (Class<T> adaptee, IProgressMonitor monitor)throws IOException{
if(adaptee == null)
return null;
if(adaptee.isAssignableFrom(IService.class))
return adaptee.cast(parent);
if(adaptee.isAssignableFrom(GeoRSSDataStore.class))
return parent.resolve(adaptee, monitor);
if(adaptee.isAssignableFrom(IGeoResource.class))
return adaptee.cast(this);
if(adaptee.isAssignableFrom(IGeoResourceInfo.class))
return adaptee.cast(getInfo(monitor));
if(adaptee.isAssignableFrom(FeatureStore.class)){
FeatureSource fs = parent.resolve(GeoRSSDataStore.class, monitor).getFeatureSource(typename);
if (fs instanceof FeatureStore)
return adaptee.cast(fs);
if(adaptee.isAssignableFrom(FeatureSource.class))
return adaptee.cast(parent.resolve(GeoRSSDataStore.class, monitor).getFeatureSource(typename));
}
return super.resolve(adaptee, monitor);
}
public <T> boolean canResolve (Class <T> adaptee){
if (adaptee == null)
return false;
return adaptee.isAssignableFrom(IGeoResourceInfo.class) ||
adaptee.isAssignableFrom(GeoRSSDataStore.class) ||
adaptee.isAssignableFrom(IService.class) ||
adaptee.isAssignableFrom(IGeoResource.class) ||
adaptee.isAssignableFrom(FeatureStore.class) ||
adaptee.isAssignableFrom(FeatureSource.class) ||
super.canResolve(adaptee);
}
@Override
public IService service(IProgressMonitor monitor) throws IOException {
// TODO Auto-generated method stub
return (IService) parent;
}
private volatile IGeoResourceInfo info;
public IGeoResourceInfo getInfo(IProgressMonitor monitor) throws IOException {
if(info== null && getStatus()!=Status.BROKEN){
if(info ==null)
info = new IGeoResourceGeoRSSInfo(service(monitor));
}
return info;
}
}