| package org.eclipse.osee.ote.classserver; |
| |
| import java.io.File; |
| import java.io.FileFilter; |
| import java.io.IOException; |
| import java.net.InetAddress; |
| import java.net.MalformedURLException; |
| import java.net.URL; |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| import org.eclipse.osee.ote.core.BundleInfo; |
| |
| |
| |
| public class HeadlessClassServer { |
| |
| private ClassServer classServer; |
| private List<BundleInfo> jars; |
| |
| public HeadlessClassServer(int port, InetAddress address, List<File> bundleFolders) throws IOException{ |
| // Thread.currentThread().setName("BundleClassServer"); |
| classServer = new ClassServer(port, address); |
| jars = new ArrayList<>(); |
| for(File dir:bundleFolders){ |
| if(dir.exists() && dir.isDirectory()){ |
| findJarFiles(dir, jars); |
| } else if(dir.exists()){//it may be a jar |
| BundleInfo info = getBundleInfo(dir); |
| if(info != null){ |
| jars.add(info); |
| } |
| } |
| } |
| BundleResourceFinder bundleResourceFinder = new BundleResourceFinder(jars); |
| classServer.addResourceFinder(bundleResourceFinder); |
| classServer.start(); |
| |
| } |
| |
| public void stop(){ |
| classServer.terminate(); |
| } |
| |
| public List<BundleInfo> getBundles(){ |
| return jars; |
| } |
| |
| private void findJarFiles(File dir, final List<BundleInfo> jars) { |
| dir.listFiles(new FileFilter(){ |
| @Override |
| public boolean accept(File pathname) { |
| if(pathname.isDirectory()){ |
| findJarFiles(pathname, jars); |
| } else { |
| BundleInfo info = getBundleInfo(pathname); |
| if(info != null){ |
| jars.add(info); |
| } |
| } |
| return false; |
| } |
| }); |
| } |
| |
| private BundleInfo getBundleInfo(File file){ |
| BundleInfo bundleInfo = null; |
| try { |
| if(file.getAbsolutePath().endsWith(".jar")){ |
| bundleInfo = new BundleInfo(file.toURI().toURL(), getHostName().toExternalForm(), true); |
| if(bundleInfo.getSymbolicName() != null && !bundleInfo.getSymbolicName().equalsIgnoreCase("unknown") && bundleInfo.getVersion() != null){ |
| if(bundleInfo.getManifest() == null){ |
| bundleInfo = null; |
| } |
| } |
| } |
| } catch (MalformedURLException e) { |
| e.printStackTrace(); |
| } catch (IOException e) { |
| e.printStackTrace(); |
| } |
| return bundleInfo; |
| } |
| |
| public URL getHostName(){ |
| return classServer.getHostName(); |
| } |
| } |