1 package org
.argeo
.init
.osgi
;
3 import java
.lang
.System
.Logger
;
4 import java
.lang
.System
.Logger
.Level
;
5 import java
.util
.ArrayList
;
6 import java
.util
.HashMap
;
9 import java
.util
.Objects
;
10 import java
.util
.Optional
;
11 import java
.util
.ServiceLoader
;
12 import java
.util
.StringTokenizer
;
14 import org
.osgi
.framework
.Bundle
;
15 import org
.osgi
.framework
.BundleException
;
16 import org
.osgi
.framework
.launch
.Framework
;
17 import org
.osgi
.framework
.launch
.FrameworkFactory
;
19 /** Utilities, mostly related to logging. */
20 public class OsgiBootUtils
{
21 private final static Logger logger
= System
.getLogger(OsgiBootUtils
.class.getName());
23 public static void info(Object obj
) {
24 logger
.log(Level
.INFO
, () -> Objects
.toString(obj
));
27 public static void debug(Object obj
) {
28 logger
.log(Level
.TRACE
, () -> Objects
.toString(obj
));
31 public static void warn(Object obj
) {
32 logger
.log(Level
.WARNING
, () -> Objects
.toString(obj
));
35 public static void error(Object obj
, Throwable e
) {
36 logger
.log(Level
.ERROR
, () -> Objects
.toString(obj
), e
);
39 public static boolean isDebug() {
40 return logger
.isLoggable(Level
.TRACE
);
43 public static String
stateAsString(int state
) {
45 case Bundle
.UNINSTALLED
:
47 case Bundle
.INSTALLED
:
58 return Integer
.toString(state
);
63 * @return ==0: versions are identical, <0: tested version is newer, >0:
64 * currentVersion is newer.
66 public static int compareVersions(String currentVersion
, String testedVersion
) {
67 List
<String
> cToks
= new ArrayList
<String
>();
68 StringTokenizer cSt
= new StringTokenizer(currentVersion
, ".");
69 while (cSt
.hasMoreTokens())
70 cToks
.add(cSt
.nextToken());
71 List
<String
> tToks
= new ArrayList
<String
>();
72 StringTokenizer tSt
= new StringTokenizer(currentVersion
, ".");
73 while (tSt
.hasMoreTokens())
74 tToks
.add(tSt
.nextToken());
77 comp
: for (int i
= 0; i
< cToks
.size(); i
++) {
78 if (tToks
.size() <= i
) {
79 // equals until then, tested shorter
84 String c
= (String
) cToks
.get(i
);
85 String t
= (String
) tToks
.get(i
);
88 int cInt
= Integer
.parseInt(c
);
89 int tInt
= Integer
.parseInt(t
);
96 } catch (NumberFormatException e
) {
100 comp
= c
.compareTo(t
);
106 if (comp
== 0 && tToks
.size() > cToks
.size()) {
107 // equals until then, current shorter
114 public static Framework
launch(Map
<String
, String
> configuration
) {
115 Optional
<FrameworkFactory
> frameworkFactory
= ServiceLoader
.load(FrameworkFactory
.class).findFirst();
116 if (frameworkFactory
.isEmpty())
117 throw new IllegalStateException("No framework factory found");
118 return launch(frameworkFactory
.get(), configuration
);
121 /** Launch an OSGi framework. */
122 public static Framework
launch(FrameworkFactory frameworkFactory
, Map
<String
, String
> configuration
) {
124 Framework framework
= frameworkFactory
.newFramework(configuration
);
127 } catch (BundleException e
) {
128 throw new IllegalStateException("Cannot start OSGi framework", e
);
134 public static Map
<String
, String
> equinoxArgsToConfiguration(String
[] args
) {
135 // FIXME implement it
136 return new HashMap
<>();