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 // /** ISO8601 (as per log4j) and difference to UTC */
24 // private static DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss,SSS Z");
26 // static boolean debug = System.getProperty(OsgiBoot.PROP_ARGEO_OSGI_BOOT_DEBUG) == null ? false
27 // : !System.getProperty(OsgiBoot.PROP_ARGEO_OSGI_BOOT_DEBUG).trim().equals("false");
30 public static void info(Object obj
) {
31 // System.out.println("# OSGiBOOT # " + dateFormat.format(new Date()) + " # " + obj);
32 logger
.log(Level
.INFO
, () -> Objects
.toString(obj
));
36 public static void debug(Object obj
) {
38 // System.out.println("# OSGiBOOT DBG # " + dateFormat.format(new Date()) + " # " + obj);
39 logger
.log(Level
.TRACE
, () -> Objects
.toString(obj
));
43 public static void warn(Object obj
) {
44 // System.out.println("# OSGiBOOT WARN # " + dateFormat.format(new Date()) + " # " + obj);
45 logger
.log(Level
.WARNING
, () -> Objects
.toString(obj
));
49 public static void error(Object obj
, Throwable e
) {
50 // System.err.println("# OSGiBOOT ERR # " + dateFormat.format(new Date()) + " # " + obj);
52 // e.printStackTrace();
53 logger
.log(Level
.ERROR
, () -> Objects
.toString(obj
), e
);
57 public static boolean isDebug() {
59 return logger
.isLoggable(Level
.TRACE
);
62 public static String
stateAsString(int state
) {
64 case Bundle
.UNINSTALLED
:
66 case Bundle
.INSTALLED
:
77 return Integer
.toString(state
);
82 * @return ==0: versions are identical, <0: tested version is newer, >0:
83 * currentVersion is newer.
85 public static int compareVersions(String currentVersion
, String testedVersion
) {
86 List
<String
> cToks
= new ArrayList
<String
>();
87 StringTokenizer cSt
= new StringTokenizer(currentVersion
, ".");
88 while (cSt
.hasMoreTokens())
89 cToks
.add(cSt
.nextToken());
90 List
<String
> tToks
= new ArrayList
<String
>();
91 StringTokenizer tSt
= new StringTokenizer(currentVersion
, ".");
92 while (tSt
.hasMoreTokens())
93 tToks
.add(tSt
.nextToken());
96 comp
: for (int i
= 0; i
< cToks
.size(); i
++) {
97 if (tToks
.size() <= i
) {
98 // equals until then, tested shorter
103 String c
= (String
) cToks
.get(i
);
104 String t
= (String
) tToks
.get(i
);
107 int cInt
= Integer
.parseInt(c
);
108 int tInt
= Integer
.parseInt(t
);
112 comp
= (cInt
- tInt
);
115 } catch (NumberFormatException e
) {
119 comp
= c
.compareTo(t
);
125 if (comp
== 0 && tToks
.size() > cToks
.size()) {
126 // equals until then, current shorter
133 public static Framework
launch(Map
<String
, String
> configuration
) {
134 Optional
<FrameworkFactory
> frameworkFactory
= ServiceLoader
.load(FrameworkFactory
.class).findFirst();
135 if (frameworkFactory
.isEmpty())
136 throw new IllegalStateException("No framework factory found");
137 return launch(frameworkFactory
.get(), configuration
);
140 /** Launch an OSGi framework. */
141 public static Framework
launch(FrameworkFactory frameworkFactory
, Map
<String
, String
> configuration
) {
143 Framework framework
= frameworkFactory
.newFramework(configuration
);
146 } catch (BundleException e
) {
147 throw new IllegalStateException("Cannot start OSGi framework", e
);
153 public static Map
<String
, String
> equinoxArgsToConfiguration(String
[] args
) {
154 // FIXME implement it
155 return new HashMap
<>();