private ExtensionService getExtensionService(final String extensionId) { for (ExtensionService extensionService : extensionServices) { for (Extension extension : extensionService.getExtensions(Locale.getDefault())) { if (extensionId.equals(extension.getId())) { return extensionService; } } } throw new IllegalArgumentException("No extension service registered for " + extensionId); }
@Activate protected void activate() { types.add(new ExtensionType("binding", "Bindings")); types.add(new ExtensionType("ui", "User Interfaces")); types.add(new ExtensionType("persistence", "Persistence Services")); for (ExtensionType type : types) { for (int i = 0; i < 10; i++) { String id = type.getId() + Integer.toString(i); boolean installed = Math.random() > 0.5; String name = RandomStringUtils.randomAlphabetic(5); String label = name + " " + StringUtils.capitalize(type.getId()); String typeId = type.getId(); String version = "1.0"; String link = (Math.random() < 0.5) ? null : "http://lmgtfy.com/?q=" + name; String description = createDescription(); String imageLink = null; String backgroundColor = createRandomColor(); Extension extension = new Extension(id, typeId, label, version, link, installed, description, backgroundColor, imageLink); extensions.put(extension.getId(), extension); } } }
private Extension getExtension(Feature feature) { String name = getName(feature.getName()); String type = getType(feature.getName()); String extId = type + "-" + name; String label = feature.getDescription(); String version = feature.getVersion(); String link = null; if (type.equals("binding")) { link = "https://www.openhab.org/addons/bindings/" + name + "/"; } else if (type.equals("action")) { link = "https://www.openhab.org/addons/actions/" + name + "/"; } else if (type.equals("persistence")) { link = "https://www.openhab.org/addons/persistence/" + name + "/"; } boolean installed = featuresService.isInstalled(feature); return new Extension(extId, type, label, version, link, installed); }
@Override public void install(String id) { try { Thread.sleep((long) (Math.random() * 10000)); Extension extension = getExtension(id, null); extension.setInstalled(true); postInstalledEvent(id); } catch (InterruptedException e) { } }
@Override public List<ExtensionType> getTypes(Locale locale) { ArrayList<ExtensionType> types = new ArrayList<>(2); List<Extension> exts = getExtensions(locale); if (includeBindings) { for (Extension ext : exts) { if (ext.getType().equals(MarketplaceExtension.EXT_TYPE_BINDING)) { types.add(new ExtensionType(MarketplaceExtension.EXT_TYPE_BINDING, "Bindings")); break; } } } if (includeRuleTemplates) { for (Extension ext : exts) { if (ext.getType().equals(MarketplaceExtension.EXT_TYPE_RULE_TEMPLATE)) { types.add(new ExtensionType(MarketplaceExtension.EXT_TYPE_RULE_TEMPLATE, "Rule Templates")); break; } } } return Collections.unmodifiableList(types); }
@Override public List<Extension> getExtensions(Locale locale) { List<Extension> extensions = new LinkedList<>(); try { for (Feature feature : featuresService.listFeatures()) { if (feature.getName().startsWith(FeatureInstaller.PREFIX) && Arrays.asList(FeatureInstaller.addonTypes).contains(getType(feature.getName()))) { Extension extension = getExtension(feature); // for simple packaging, we filter out all openHAB 1 add-ons as they cannot be used through the UI if (!"simple".equals(featureInstaller.getCurrentPackage()) || !extension.getVersion().startsWith("1.")) { extensions.add(extension); } } } } catch (Exception e) { logger.error("Exception while retrieving features: {}", e.getMessage()); return Collections.emptyList(); } // let's sort the result alphabetically Collections.sort(extensions, new Comparator<Extension>() { @Override public int compare(Extension ext1, Extension ext2) { return ext1.getLabel().compareTo(ext2.getLabel()); } }); return extensions; }
@Override public void uninstall(String id) { try { Thread.sleep((long) (Math.random() * 5000)); Extension extension = getExtension(id, null); extension.setInstalled(false); postUninstalledEvent(id); } catch (InterruptedException e) { } }
@Override public Extension getExtension(String id, Locale locale) { for (Extension extension : getExtensions(locale)) { if (extension.getId().equals(id)) { return extension; } } return null; }