mirror of
https://github.com/danieldemus/openhab-core.git
synced 2025-02-04 08:03:53 +01:00
Merge pull request #35 from kaikreuzer/ext
improved robustness of feature/package installer
This commit is contained in:
commit
4acce34de7
@ -32,7 +32,7 @@ public class FeatureInstaller {
|
|||||||
public static final String[] addonTypes = new String[] { "binding", "ui", "persistence", "action", "tts",
|
public static final String[] addonTypes = new String[] { "binding", "ui", "persistence", "action", "tts",
|
||||||
"transformation", "misc" };
|
"transformation", "misc" };
|
||||||
|
|
||||||
private final Logger logger = LoggerFactory.getLogger(FeatureInstaller.class);
|
private static final Logger logger = LoggerFactory.getLogger(FeatureInstaller.class);
|
||||||
|
|
||||||
private FeaturesService featuresService;
|
private FeaturesService featuresService;
|
||||||
|
|
||||||
@ -53,13 +53,13 @@ public class FeatureInstaller {
|
|||||||
scheduler.execute(new Runnable() {
|
scheduler.execute(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
installPackage(config);
|
installPackage(featuresService, config);
|
||||||
|
|
||||||
// install addons
|
// install addons
|
||||||
for (String type : addonTypes) {
|
for (String type : addonTypes) {
|
||||||
Object install = config.get(type);
|
Object install = config.get(type);
|
||||||
if (install instanceof String) {
|
if (install instanceof String) {
|
||||||
installFeatures(type, (String) install);
|
installFeatures(featuresService, type, (String) install);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -67,19 +67,18 @@ public class FeatureInstaller {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void installFeatures(String type, String install) {
|
private void installFeatures(FeaturesService featuresService, String type, String install) {
|
||||||
for (String addon : install.split(",")) {
|
for (String addon : install.split(",")) {
|
||||||
if (StringUtils.isNotBlank(addon)) {
|
if (StringUtils.isNotBlank(addon)) {
|
||||||
String name = PREFIX + type + "-" + addon.trim();
|
String name = PREFIX + type + "-" + addon.trim();
|
||||||
installFeature(name);
|
installFeature(featuresService, name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void installFeature(String name) {
|
private static void installFeature(FeaturesService featuresService, String name) {
|
||||||
try {
|
try {
|
||||||
Feature feature = featuresService.getFeature(name);
|
if (!isInstalled(featuresService, name)) {
|
||||||
if (feature != null && !featuresService.isInstalled(feature)) {
|
|
||||||
featuresService.installFeature(name);
|
featuresService.installFeature(name);
|
||||||
logger.info("Installed '{}'", name);
|
logger.info("Installed '{}'", name);
|
||||||
}
|
}
|
||||||
@ -88,10 +87,11 @@ public class FeatureInstaller {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void installPackage(final Map<String, Object> config) {
|
private static void installPackage(FeaturesService featuresService, final Map<String, Object> config) {
|
||||||
Object packageName = config.get("package");
|
Object packageName = config.get("package");
|
||||||
|
if (packageName instanceof String) {
|
||||||
String name = PREFIX + PREFIX_PACKAGE + ((String) packageName).trim();
|
String name = PREFIX + PREFIX_PACKAGE + ((String) packageName).trim();
|
||||||
installFeature(name);
|
installFeature(featuresService, name);
|
||||||
|
|
||||||
// uninstall all other packages
|
// uninstall all other packages
|
||||||
try {
|
try {
|
||||||
@ -109,5 +109,18 @@ public class FeatureInstaller {
|
|||||||
logger.error("Failed retrieving features: {}", e.getMessage());
|
logger.error("Failed retrieving features: {}", e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean isInstalled(FeaturesService featuresService, String name) {
|
||||||
|
try {
|
||||||
|
for (Feature feature : featuresService.listInstalledFeatures()) {
|
||||||
|
if (feature.getName().equals(name)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
logger.error("Failed retrieving features: {}", e.getMessage());
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user