package org.springframework.roo.addon.roobot.client; import java.util.List; import java.util.Map; import java.util.Map.Entry; 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.addon.roobot.client.model.Bundle; import org.springframework.roo.addon.roobot.client.model.BundleVersion; import org.springframework.roo.shell.Completion; import org.springframework.roo.shell.Converter; import org.springframework.roo.shell.MethodTarget; /** * {@link Converter} for {@link AddOnBundleSymbolicName}. * * @author Stefan Schmidt * @since 1.1 */ @Component @Service public class AddOnBundleSymbolicNameConverter implements Converter<AddOnBundleSymbolicName> { @Reference private AddOnRooBotOperations addonManagerOperations; public AddOnBundleSymbolicName convertFromText(final String value, final Class<?> requiredType, final String optionContext) { return new AddOnBundleSymbolicName(value.trim()); } public boolean getAllPossibleValues(final List<Completion> completions, final Class<?> requiredType, final String originalUserInput, final String optionContext, final MethodTarget target) { final Map<String, Bundle> bundles = addonManagerOperations .getAddOnCache(false); for (final Entry<String, Bundle> entry : bundles.entrySet()) { final String bsn = entry.getKey(); final Bundle bundle = entry.getValue(); if (bundle.getVersions().size() > 1) { for (final BundleVersion bundleVersion : bundle.getVersions()) { completions.add(new Completion(bsn + ";" + bundleVersion.getVersion())); } } completions.add(new Completion(bsn)); } return false; } public boolean supports(final Class<?> requiredType, final String optionContext) { return AddOnBundleSymbolicName.class.isAssignableFrom(requiredType); } }