/** * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE, Version 3, 29 June 2007; * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.gnu.org/licenses/lgpl-3.0.txt * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.kevoree.platform.standalone.gui; import com.explodingpixels.macwidgets.MacUtils; import com.explodingpixels.macwidgets.UnifiedToolBar; import org.kevoree.kcl.api.FlexyClassLoader; import org.kevoree.microkernel.KevoreeKernel; import org.kevoree.microkernel.impl.KevoreeMicroKernelImpl; import javax.swing.*; import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.lang.reflect.InvocationTargetException; import java.net.URL; import java.util.SortedSet; public class KevoreeGUIFrame extends JFrame { public static KevoreeGUIFrame singleton = null; public KevoreeGUIFrame(String nodeName, String groupName, String hostName) throws NoSuchMethodException, ClassNotFoundException, IllegalAccessException, InvocationTargetException, InstantiationException { singleton = this; MacUtils.makeWindowLeopardStyle(this.getRootPane()); UnifiedToolBar toolBar = new UnifiedToolBar(); add(toolBar.getComponent(), BorderLayout.NORTH); URL urlSmallIcon = getClass().getClassLoader().getResource("kev-logo-full.png"); final ImageIcon smallIcon = new ImageIcon(urlSmallIcon); this.setIconImage(smallIcon.getImage()); URL urlIcon = getClass().getClassLoader().getResource("kevoree-logo-full.png"); ImageIcon topIIcon = new ImageIcon(urlIcon); JLabel topImage = new JLabel(topIIcon); topImage.setOpaque(false); toolBar.addComponentToLeft(topImage); setVisible(true); setPreferredSize(new Dimension(1024, 768)); setSize(getPreferredSize()); final ConsoleShell shell = new ConsoleShell(); singleton.add(shell, BorderLayout.CENTER); singleton.pack(); setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); KevoreeKernel kernel = new KevoreeMicroKernelImpl(); String version = System.getProperty("version"); if (version == null) { SortedSet<String> sets = kernel.getResolver().listVersion("org.kevoree", "org.kevoree.bootstrap", "jar", kernel.getSnapshotURLS()); for (String s : sets) { if (!s.toLowerCase().contains("snapshot")) { version = s; break; } } } System.setProperty("node.name", nodeName); System.setProperty("node.script", createBootstrapScript(nodeName, groupName, hostName, version)); String bootJar = "mvn:org.kevoree:org.kevoree.bootstrap:" + version; final FlexyClassLoader bootstrapKCL = kernel.install(bootJar, bootJar); kernel.boot(bootstrapKCL.getResourceAsStream("KEV-INF/bootinfo")); addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent windowEvent) { new Thread() { @Override public void run() { try { dispose(); shell.restore(); System.setSecurityManager(null); Runtime.getRuntime().exit(0); } catch (Throwable e) { e.printStackTrace(); } } }.start(); } }); } private static String createBootstrapScript(String nodeName, String groupName, String hostName, String version) { StringBuilder buffer = new StringBuilder(); String versionRequest; if (version.toLowerCase().contains("snapshot")) { buffer.append("repo \"https://oss.sonatype.org/content/groups/public/\"\n"); versionRequest = "latest"; } else { buffer.append("repo \"http://repo1.maven.org/maven2/\"\n"); versionRequest = "release"; } buffer.append("include mvn:org.kevoree.library.java:org.kevoree.library.java.javaNode:"); buffer.append(versionRequest); buffer.append("\n"); buffer.append("include mvn:org.kevoree.library.java:org.kevoree.library.java.editor:"); buffer.append(versionRequest); buffer.append("\n"); buffer.append("include mvn:org.kevoree.library.java:org.kevoree.library.java.ws:"); buffer.append(versionRequest); buffer.append("\n"); if (hostName != null) { buffer.append("include mvn:org.kevoree.library.java:org.kevoree.library.java.mqtt:"); buffer.append(versionRequest); buffer.append("\n"); } buffer.append("add " + nodeName + " : org.kevoree.library.JavaNode\n"); buffer.append("add sync : org.kevoree.library.WSGroup\n"); buffer.append("attach " + nodeName + " sync\n"); int groupPort = FreeSocketDetector.detect(9000, 9999); int editorPort = FreeSocketDetector.detect(3042, 3300); buffer.append("set sync.port/" + nodeName + " = \"" + groupPort + "\"\n"); buffer.append("add " + nodeName + ".editor : org.kevoree.library.WebEditor\n"); buffer.append("set " + nodeName + ".editor.port = \"" + editorPort + "\"\n"); if (hostName != null && !hostName.isEmpty()) { buffer.append("add " + groupName + " : org.kevoree.library.MQTTGroup\n"); buffer.append("attach " + nodeName + " " + groupName + "\n"); buffer.append("set " + groupName + ".broker = \"" + hostName + "\""); } return buffer.toString(); } }