📄 util.java
字号:
// found an exporter to target - add it to closure closure.add(allBundles[i]); // Then, get closure from the exporter, if not already // handled. Add that closure set to the target closure. if(!handled.contains(allBundles[i])) { handled.add(allBundles[i]); // call recursivley with exporter as target Set trans = getPackageClosure(pkgAdmin, allBundles, allBundles[i], handled); closure.addAll(trans); } } } } } return closure; } /** * Get transitive closure of bundles a target bundle depends * on via services. * * @param target target bundle to get closure for * @param handles set of already handled bundles. Should be null or * empty set on top level call. * @return Set of <tt>Bundle</tt> */ static public Set getServiceClosure(Bundle target, Set handled) { if(handled == null) { handled = new HashSet(); } Set closure = new TreeSet(Util.bundleIdComparator); ServiceReference[] srl = target.getServicesInUse(); for(int i = 0; srl != null && i < srl.length; i++) { Bundle b = srl[i].getBundle(); closure.add(b); if(!handled.contains(b)) { handled.add(b); Set trans = getServiceClosure(b, handled); closure.addAll(trans); } } return closure; } static String[] STD_PROPS = { "org.knopflerfish.verbosity=0", "org.knopflerfish.gosg.jars", "org.knopflerfish.framework.debug.packages=false", "org.knopflerfish.framework.debug.errors=false", "org.knopflerfish.framework.debug.classloader=false", "org.knopflerfish.framework.debug.startlevel=false", "org.knopflerfish.framework.debug.ldap=false", "org.osgi.framework.system.packages=", "org.knopflerfish.http.dnslookup=false", "org.knopflerfish.startlevel.use=true", "org.knopflerfish.log.out=false", "org.knopflerfish.log.level=info", }; public static StringBuffer getXARGS(Bundle target, Set pkgClosure, Set serviceClosure) { StringBuffer sb = new StringBuffer(); String jarBase = System.getProperty("org.knopflerfish.gosg.jars", ""); Set all = new TreeSet(Util.bundleIdComparator); all.addAll(pkgClosure); all.addAll(serviceClosure); all.remove(Activator.getTargetBC().getBundle(0)); if(target != null) { all.add(target); } for(int i = 0; i < STD_PROPS.length; i++) { String[] w = Text.splitwords(STD_PROPS[i], "=", '\"'); String def = null; if(w.length == 2) { def = w[1]; } String val = System.getProperty(w[0]); if(null != val && !val.equals(def)) { sb.append("-D" + w[0] + "=" + val); sb.append("\n"); } } StartLevel sl = (StartLevel)Activator.desktop.slTracker.getService(); int levelMax = -1; int n = 0; int lastLevel = -1; for(Iterator it = all.iterator(); it.hasNext(); ) { Bundle b = (Bundle)it.next(); int level = -1; try { level = sl.getBundleStartLevel(b); } catch (Exception ignored) { } levelMax = Math.max(level, levelMax); if(level != -1 && level != lastLevel) { sb.append("-initlevel " + level + "\n"); lastLevel = level; } sb.append("-install " + Text.replace(b.getLocation(), jarBase, "") + "\n"); n++; } sb.append("-launch\n"); n = 0; for(Iterator it = all.iterator(); it.hasNext(); ) { Bundle b = (Bundle)it.next(); n++; if(b.getState() == Bundle.ACTIVE) { sb.append("-start " + n + "\n"); } } if(levelMax != -1) { sb.append("-startlevel " + levelMax); } return sb; } public static final String[] FWPROPS = new String[] { Constants.FRAMEWORK_VENDOR, Constants.FRAMEWORK_VERSION, Constants.FRAMEWORK_LANGUAGE, Constants.FRAMEWORK_OS_NAME , Constants.FRAMEWORK_OS_VERSION, Constants.FRAMEWORK_PROCESSOR, Constants.FRAMEWORK_EXECUTIONENVIRONMENT, }; static public String getSystemInfo() { StringBuffer sb = new StringBuffer(); try { Map props = new TreeMap(Activator.getSystemProperties()); sb.append("<table>\n"); sb.append(" <tr><td colspan=2 bgcolor=\"#eeeeee\">"); sb.append(fontify("Framework properties", -1)); String spid = (String)props.get("org.osgi.provisioning.spid"); if(spid != null && !"".equals(spid)) { sb.append(fontify(" (" + spid + ")", -1)); } sb.append("</td>\n"); sb.append(" </tr>\n"); for(int i = 0; i < FWPROPS.length; i++) { sb.append(" <tr>\n"); sb.append(" <td valign=\"top\">"); sb.append(fontify(FWPROPS[i])); sb.append("</td>\n"); sb.append(" <td valign=\"top\">"); sb.append(fontify(Activator.getTargetBC().getProperty(FWPROPS[i]))); sb.append("</td>\n"); sb.append(" </tr>\n"); } sb.append("<tr><td colspan=2 bgcolor=\"#eeeeee\">"); sb.append(fontify("System properties", -1)); sb.append("</td>\n"); sb.append("</tr>\n"); for(Iterator it = props.keySet().iterator(); it.hasNext();) { String key = (String)it.next(); String val = (String)props.get(key); sb.append(" <tr>\n"); sb.append(" <td valign=\"top\">"); sb.append(fontify(key)); sb.append("</td>\n"); sb.append(" <td valign=\"top\">"); sb.append(fontify(val)); sb.append("</td>\n"); sb.append("</tr>\n"); } } catch (Exception e) { sb.append("<tr><td colspan=2>" + fontify("Failed to get system props: " + e) + "</td></tr>"); } sb.append("</table>"); return sb.toString(); } static public String fontify(Object o) { return fontify(o, -2); } public static String fontify(Object o, int size) { return "<font size=\"" + size + "\" face=\"Verdana, Arial, Helvetica, sans-serif\">" + o + "</font>"; } static public void printObject(PrintWriter out, Object val) throws IOException { if(val == null) { out.println("null"); } else if(val.getClass().isArray()) { printArray(out, (Object[])val); } else if(val instanceof Vector) { printVector(out, (Vector)val); } else if(val instanceof Map) { printMap(out, (Map)val); } else if(val instanceof Set) { printSet(out, (Set)val); } else if(val instanceof Dictionary) { printDictionary(out, (Dictionary)val); } else { out.print(Util.fontify(val)); // out.print(" (" + val.getClass().getName() + ")"); } } static public void printDictionary(PrintWriter out, Dictionary d) throws IOException { out.println("<table border=0>"); for(Enumeration e = d.keys(); e.hasMoreElements();) { Object key = e.nextElement(); Object val = d.get(key); out.println("<tr>"); out.println("<td valign=top>"); printObject(out, key); out.println("</td>"); out.println("<td valign=top>"); printObject(out, val); out.println("</td>"); out.println("</tr>"); } out.println("</table>"); } static public void printMap(PrintWriter out, Map m) throws IOException { out.println("<table border=0>"); for(Iterator it = m.keySet().iterator(); it.hasNext();) { Object key = it.next(); Object val = m.get(key); out.println("<tr>"); out.println("<td valign=top>"); printObject(out, key); out.println("</td>"); out.println("<td valign=top>"); printObject(out, val); out.println("</td>"); out.println("</tr>"); } out.println("</table>"); } static public void printArray(PrintWriter out, Object[] a) throws IOException { for(int i = 0; i < a.length; i++) { printObject(out, a[i]); if(i < a.length - 1) { out.println("<br>"); } } } static public void printSet(PrintWriter out, Set a) throws IOException { for(Iterator it = a.iterator(); it.hasNext();) { printObject(out, it.next()); if(it.hasNext()) { out.println("<br>"); } } } static public void printVector(PrintWriter out, Vector a) throws IOException { for(int i = 0; i < a.size(); i++) { printObject(out, a.elementAt(i)); if(i < a.size() - 1) { out.println("<br>"); } } } static public void openExternalURL(URL url) throws IOException { if(Util.isWindows()) { // Yes, this only works on windows String systemBrowser = "explorer.exe"; Runtime rt = Runtime.getRuntime(); Process proc = rt.exec(new String[] { systemBrowser, "\"" + url.toString() + "\"", }); } else { throw new IOException("Only windows browsers are yet supported"); } } public static boolean isWindows() { String os = System.getProperty("os.name"); if(os != null) { return -1 != os.toLowerCase().indexOf("win"); } return false; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -