package org.springframework.roo.converters;
import java.io.File;
import java.util.logging.Logger;
import org.apache.commons.lang3.Validate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.Service;
import org.springframework.roo.shell.Shell;
import org.springframework.roo.converters.FileConverter;
import org.osgi.service.component.ComponentContext;
import org.osgi.framework.BundleContext;
import org.osgi.framework.InvalidSyntaxException;
import org.osgi.framework.ServiceReference;
import org.springframework.roo.support.logging.HandlerUtils;
/**
* OSGi component launcher for {@link FileConverter}.
*
* @author Ben Alex
* @since 1.1
*/
@Component
@Service
public class FileConverterComponent extends FileConverter {
private Shell shell;
protected final static Logger LOGGER = HandlerUtils.getLogger(FileConverterComponent.class);
// ------------ OSGi component attributes ----------------
private BundleContext context;
protected void activate(final ComponentContext context) {
this.context = context.getBundleContext();
}
@Override
protected File getWorkingDirectory() {
if (shell == null) {
shell = getShell();
}
Validate.notNull(shell, "Shell required");
return shell.getHome();
}
public Shell getShell() {
// Get all Services implement Shell interface
try {
ServiceReference<?>[] references =
this.context.getAllServiceReferences(Shell.class.getName(), null);
for (ServiceReference<?> ref : references) {
return (Shell) this.context.getService(ref);
}
return null;
} catch (InvalidSyntaxException e) {
LOGGER.warning("Cannot load Shell on DefaultFileManager.");
return null;
}
}
}