From 408c4f0379696a29e3e7265ae32270776ab0d80d Mon Sep 17 00:00:00 2001 From: rileyJones Date: Fri, 28 Jul 2017 11:17:54 -0700 Subject: [PATCH] Add external plugin support --- .idea/vcs.xml | 6 +++ src/org/nwapw/abacus/Abacus.java | 31 ++++++++++- .../nwapw/abacus/plugin/ClassFinderV2.java | 51 ++++++++++++++++++ src/org/nwapw/abacus/plugin/Standard.jar | Bin 0 -> 11127 bytes 4 files changed, 86 insertions(+), 2 deletions(-) create mode 100644 .idea/vcs.xml create mode 100644 src/org/nwapw/abacus/plugin/ClassFinderV2.java create mode 100644 src/org/nwapw/abacus/plugin/Standard.jar diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/org/nwapw/abacus/Abacus.java b/src/org/nwapw/abacus/Abacus.java index 08f4ba5..0522874 100644 --- a/src/org/nwapw/abacus/Abacus.java +++ b/src/org/nwapw/abacus/Abacus.java @@ -1,10 +1,14 @@ package org.nwapw.abacus; import org.nwapw.abacus.plugin.PluginManager; -import org.nwapw.abacus.plugin.StandardPlugin; +//import org.nwapw.abacus.plugin.StandardPlugin; import org.nwapw.abacus.window.Window; +import org.nwapw.abacus.plugin.ClassFinderV2; import javax.swing.*; +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; public class Abacus { @@ -22,10 +26,33 @@ public class Abacus { e.printStackTrace(); } manager = new PluginManager(); - manager.addInstantiated(new StandardPlugin(manager)); + ArrayList names = new ArrayList(); + try { + + ClassFinderV2 classFinder = new ClassFinderV2(); + File pluginFile = new File("C:\\Users\\galbraithja\\Desktop\\.git\\abacus\\src\\org\\nwapw\\abacus\\plugin"); + for(File classes:pluginFile.listFiles()){ + if(classes.getName().endsWith(".jar")){ + names.addAll(classFinder.addJar("C:\\Users\\galbraithja\\Desktop\\.git\\abacus\\src\\org\\nwapw\\abacus\\plugin\\Standard.jar")); + } + } + for(String name:names){ + System.out.println(name); + } + ArrayList classes = classFinder.getClasses(); + for(Class classGet:classes){ + manager.addClass(classGet); + } + + } catch (IOException e) { + e.printStackTrace(); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } mainUi = new Window(manager); mainUi.setVisible(true); manager.load(); + } public static void main(String[] args){ diff --git a/src/org/nwapw/abacus/plugin/ClassFinderV2.java b/src/org/nwapw/abacus/plugin/ClassFinderV2.java new file mode 100644 index 0000000..3cdba13 --- /dev/null +++ b/src/org/nwapw/abacus/plugin/ClassFinderV2.java @@ -0,0 +1,51 @@ +package org.nwapw.abacus.plugin; + +import java.io.File; +import java.io.IOException; +import java.net.URL; +import java.net.URLClassLoader; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.jar.JarEntry; +import java.util.jar.JarFile; + +public class ClassFinderV2 { + ArrayList classes; + URL[] urls; + public ClassFinderV2(){ + classes = new ArrayList(); + } + public ArrayList addJar(String path) throws IOException, ClassNotFoundException { + //urls = new URL[]{new URL("jar:file:" + path + "!/")}; + return addJar(new File(path)); + } + public ArrayList addJar(File jarLocation) throws IOException, ClassNotFoundException { + String path = jarLocation.getPath(); + urls = new URL[]{new URL("jar:file:" + path + "!/")}; + URLClassLoader classLoader = URLClassLoader.newInstance(urls); + JarFile jarFolder = new JarFile(jarLocation); + Enumeration jarList = jarFolder.entries(); + ArrayList classNames = new ArrayList(); + while(jarList.hasMoreElements()){ + JarEntry tempJar = (JarEntry)jarList.nextElement(); + if(tempJar.getName().endsWith(".class")){ + //System.out.println(tempJar.getName()); + classNames.add(tempJar.getName()); + classes.add(classLoader.loadClass(tempJar.getName().replace('/','.').substring(0,tempJar.getName().length()-6))); + } + } + return classNames; + } + public ArrayList getClasses(){ + return classes; + } + public Class getClass(int number){ + return classes.get(number); + } + public void delClasses(){ + classes=new ArrayList(); + } + public int classCount(){ + return classes.size(); + } +} diff --git a/src/org/nwapw/abacus/plugin/Standard.jar b/src/org/nwapw/abacus/plugin/Standard.jar new file mode 100644 index 0000000000000000000000000000000000000000..723c4112bc22030e2aac0a9d490f389b6e7ae968 GIT binary patch literal 11127 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 literal 0 HcmV?d00001