package org.kevoree.tools.ui.editor; import jet.runtime.typeinfo.JetValueParameter; import org.jetbrains.annotations.NotNull; import org.jsoup.Jsoup; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import org.kevoree.ContainerRoot; import org.kevoree.DeployUnit; import org.kevoree.api.helper.KModelHelper; import org.kevoree.factory.DefaultKevoreeFactory; import org.kevoree.kevscript.KevScriptEngine; import org.kevoree.log.Log; import org.kevoree.pmodeling.api.KMFContainer; import org.kevoree.pmodeling.api.compare.ModelCompare; import org.kevoree.pmodeling.api.json.JSONModelLoader; import org.kevoree.pmodeling.api.json.JSONModelSerializer; import org.kevoree.pmodeling.api.util.ModelVisitor; import org.kevoree.resolver.MavenResolver; import org.kevoree.tools.ui.editor.command.MergeDefaultLibrary; import org.kevoree.tools.ui.editor.menus.CommandActionListener; import javax.swing.*; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.net.URL; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.List; /** * Created by duke on 12/08/13. */ public class KevoreeStore { private String version; private DefaultKevoreeFactory factory = new DefaultKevoreeFactory(); private ModelCompare compare = factory.createModelCompare(); private JSONModelSerializer saver = new JSONModelSerializer(); private JSONModelLoader loader = new JSONModelLoader(factory); private MavenResolver resolver = new MavenResolver(); private KevScriptEngine engine = new KevScriptEngine(); public KevoreeStore() { version = new DefaultKevoreeFactory().getVersion(); } public ContainerRoot getCache(String groupIDparam) { try { String basePath = System.getProperty("user.home").toString() + File.separator + ".m2" + File.separator + "repository" + File.separator + "org" + File.separator + "kevoree" + File.separator + "cache"; File parentDir = new File(basePath); if (!parentDir.exists()) { parentDir.mkdirs(); } FileInputStream fip = new FileInputStream(new File(parentDir, groupIDparam.replace(".", "_").replace("*", "_"))); ContainerRoot model = (ContainerRoot) loader.loadModelFromStream(fip).get(0); fip.close(); return model; } catch (Exception e) { return null; } } public void setCache(String groupIDparam, ContainerRoot model) { try { String basePath = System.getProperty("user.home").toString() + File.separator + ".m2" + File.separator + "repository" + File.separator + "org" + File.separator + "kevoree" + File.separator + "cache"; File parentDir = new File(basePath); if (!parentDir.exists()) { parentDir.mkdirs(); } FileOutputStream fip = new FileOutputStream(new File(parentDir, groupIDparam.replace(".", "_").replace("*", "_"))); saver.serializeToStream(model, fip); fip.close(); } catch (Exception e) { e.printStackTrace(); } } public void populate(ContainerRoot model, String groupIDparam, String askedVersion) throws Exception { for (int h = 0; h < 10; h++) { try { URL url = new URL("https://oss.sonatype.org/service/local/lucene/search?g=" + groupIDparam + "&v=" + askedVersion); org.jsoup.nodes.Document doc = Jsoup.connect(url.toString()).get(); Elements nList = doc.getElementsByTag("artifact"); for (int i = 0; i < nList.size(); i++) { Element node = nList.get(i); Elements childNode = node.children(); String resourceURI = null; String groupId = null; String artifactId = null; String version = null; for (int j = 0; j < childNode.size(); j++) { Element nodeChild = childNode.get(j); if (nodeChild.nodeName().toLowerCase().endsWith("resourceURI".toLowerCase())) { resourceURI = nodeChild.text(); } if (nodeChild.nodeName().toLowerCase().endsWith("groupId".toLowerCase())) { groupId = nodeChild.text(); } if (nodeChild.nodeName().toLowerCase().endsWith("artifactId".toLowerCase())) { artifactId = nodeChild.text(); } if (nodeChild.nodeName().toLowerCase().endsWith("version".toLowerCase())) { version = nodeChild.text(); } } if (resourceURI == null || !resourceURI.contains("-source")) { /* StringBuffer buffer = new StringBuffer(); buffer.append("repo \"http://oss.sonatype.org/content/groups/public\"\n"); buffer.append("include mvn:" + groupId + ":" + artifactId + ":" + version + "\n"); engine.execute(buffer.toString(), model); */ DeployUnit du = factory.createDeployUnit(); du.setName(artifactId); du.setVersion(version); KModelHelper.fqnCreate(groupId, model, factory).addDeployUnits(du); KModelHelper.fqnCreate(groupId, model, factory).addDeployUnits(du); } } setCache(groupIDparam, model); return; } catch (Exception e) { e.printStackTrace(); Thread.sleep(500); } } } public ContainerRoot getFromGroupID(String groupIDparam) { ContainerRoot model = factory.createContainerRoot(); factory.root(model); try { MavenResolver mavenResolver = new MavenResolver(); HashSet<String> urls = new HashSet<String>(); urls.add("http://repo1.maven.org/maven2/"); File s2 = mavenResolver.resolve("org.kevoree.library", "org.kevoree.library", "release", "pom", urls); String releaseVersion; if (s2 != null) { releaseVersion = s2.getAbsolutePath().substring(s2.getAbsolutePath().indexOf("org.kevoree.library-") + "org.kevoree.library-".length(), s2.getAbsolutePath().indexOf(".pom")); populate(model, groupIDparam, releaseVersion); } else { Log.info("No version found for release, try cache"); throw new Exception(); } return model; } catch (Exception e) { e.printStackTrace(); return getCache(groupIDparam); } } public JMenu buildModelMenu(final KevoreeUIKernel kernel) { final JMenu mergelibraries = new JMenu("Load Kevoree Libraries"); new Thread(new Runnable() { @Override public void run() { List<String> sub = Arrays.asList("java", "cloud"); for (String s : sub) { JMenu subMenu = new JMenu(s.toUpperCase()); subMenu.setAutoscrolls(true); ContainerRoot model = getFromGroupID("org.kevoree.library." + s); final HashMap<String, DeployUnit> cache = new HashMap<String, DeployUnit>(); if (model != null) { model.deepVisitContained(new ModelVisitor() { @Override public void visit(@JetValueParameter(name = "elem") @NotNull KMFContainer kmfContainer, @JetValueParameter(name = "refNameInParent") @NotNull String s, @JetValueParameter(name = "parent") @NotNull KMFContainer kmfContainer2) { if (kmfContainer instanceof DeployUnit) { DeployUnit td = (DeployUnit) kmfContainer; cache.put(td.path(), td); } } }); } else { Log.error("No library found"); } for (DeployUnit du : cache.values()) { JMenuItem mergeDefLib1 = new JMenuItem(KModelHelper.fqnGroup(du) + ":" + du.getName() + ":" + du.getVersion()); MergeDefaultLibrary cmdLDEFL1 = new MergeDefaultLibrary(KModelHelper.fqnGroup(du), du.getName(), du.getVersion()); cmdLDEFL1.setKernel(kernel); mergeDefLib1.addActionListener(new CommandActionListener(cmdLDEFL1)); subMenu.add(mergeDefLib1); } mergelibraries.add(subMenu); } } }).start(); return mergelibraries; } }