package org.ow2.mind.idl;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.Map;
import org.ow2.mind.InputResource;
import org.ow2.mind.inject.InjectDelegate;
import org.ow2.mind.io.OutputFileLocator;
import com.google.inject.Inject;
public class OutputBinaryIDLLocator implements IDLLocator {
@InjectDelegate
protected IDLLocator clientLocatorItf;
@Inject
protected OutputFileLocator outputFileLocatorItf;
// ---------------------------------------------------------------------------
// Implementation of the IDLLocator interface
// ---------------------------------------------------------------------------
public Iterable<String> getResourceKind() {
return clientLocatorItf.getResourceKind();
}
public URL findSourceItf(final String name, final Map<Object, Object> context) {
return clientLocatorItf.findSourceItf(name, context);
}
public URL findBinaryItf(final String name, final Map<Object, Object> context) {
URL binADL = null;
try {
final File binADLOutputFile = outputFileLocatorItf.getMetadataOutputFile(
BasicIDLLocator.getItfBinaryName(name), context);
if (binADLOutputFile.exists()) {
binADL = binADLOutputFile.toURI().toURL();
}
} catch (final IOException e) {
// ignore
}
if (binADL == null) {
binADL = clientLocatorItf.findBinaryItf(name, context);
}
return binADL;
}
public URL findSourceHeader(final String path,
final Map<Object, Object> context) {
return clientLocatorItf.findSourceHeader(path, context);
}
public URL findBinaryHeader(final String path,
final Map<Object, Object> context) {
URL binADL = null;
try {
final File binADLOutputFile = outputFileLocatorItf.getMetadataOutputFile(
BasicIDLLocator.getHeaderBinaryName(path), context);
if (binADLOutputFile.exists()) {
binADL = binADLOutputFile.toURI().toURL();
}
} catch (final IOException e) {
// ignore
}
if (binADL == null) {
binADL = clientLocatorItf.findBinaryHeader(path, context);
}
return binADL;
}
public InputResource toInterfaceInputResource(final String name) {
return clientLocatorItf.toInterfaceInputResource(name);
}
public InputResource toSharedTypeInputResource(final String name) {
return clientLocatorItf.toSharedTypeInputResource(name);
}
public URL findResource(final String name, final Map<Object, Object> context) {
return clientLocatorItf.findResource(name, context);
}
}