From 69e3b556438db5b4568245e2adac61cfb7a8c1f8 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 zcmb7q1yCH@x;5?^+}#Fu8{FO9Ex|o_a3{FC6I_D3yGwAF03o<*e)3N4yE(c4eN|^q zO;t}#@73KiYp?yuQj`IQKnH<=fdMH~f073IZNP#+fXIod3eii+i!;8AfPjF5D9S*? z{5%8f*J+CXbu#+v8UH(3PDox#TueokK~DTqZfsOmhMr*>QHCBcF*aGN%rwWkx#!3r zEk`FMH~qd80#@??rw%hA`R`QPSZQK zc9TdCNsDXm9@QR0Io7;<@kY%yu$M|q-_uS&PnQ$4EO?xV z&ysMp;~^CKJmEw3oY70Lx$O8FeUP6;kg0`3ppp0&AKsdY5Y@}`M%7S?DtJFaN#hiYiJ6qg z#I6)7N8RKv}RZ9xtHP^Ui`!+w)3l!hsxmas< zfstrlf!|U0U5g0%2QEW406SQ3SDj8WQcndsGC|!Cte|*o7Ze9FwO0H2z$2iNAOPn> zk=jRKk?TgXmV#TGT{6Ly%bTlc8qMcLg0pGzl?3nyD=&g@W4F2#*%Uh+2+_r-=OehLAa<4z{hluE8D%)GC zWM`0nRx2{!@9_jAZNYLonjAyk5}*eiUoO-DT({fSKjoM=$qQ|^kE4VG{r0gAx4~NK zMFe08nvaU|#-(@(+w(a4Fi)umFUd3zZ_R)g&`?QoY?Q3v0H66 z+!9E9izhW^@SFI2xr94N%j1c6p*L6w{O9F?T7Gu)iePC%BonsC-h0E&FUO`6O=a?$HecFxruARcP zTRW=hM?c8t?df|B1`%J5n! z5M-FxO0n`6X;j$Kxf#fE%BXbg42NB43{T7_DC-s@Q20Q@SmaHEJ5X}Mg(wWkrGkj% zwDZhV&q;26*309C1rlFq%~U`CbPMuowg?^S(x!@SB$1g@E&X#skyqVun%=T~w}8}= zq?up;UPjY9lSG53S(D#Tu^}UBm}#Rf@Sf|SQO-5H(I!pHoaa@!nyi9$+>~L%u_ z;2=LRuD0f=^CeByhGQibpeYr}!;;jvQZP)MjNzY=?4i4s8iB1!5P#mLhQ}ELS3=L5 zwvfQwH!hc8PAWo9Y*b7%p}u$wJ!f3*^_i+;P78+IHGc;7!%7~GquhZNM*41`1PX8X zGgLJsc<2*#h*XyDYjg@GO?lAQ?rdz75e=wDOfy!gj6(@6ShV?BEq*MfWlJwejc7vG zQo@d)?juFl?KZPiCYK1fLX*PKSVC4NN0T>K$oedlx-h)iJcNWvQ?QTxlZ~yiIHS_9 z0v7&H*~s=^1WX3@Rlvm6TweujCJ(OhFD~A&;n)u(5mo$G0dxAA!MnfyQ^3G9{n#N1 zIPr?N=hU6LX#TbeRx@2k}kV zU@ZwiO?uP=DbMDIZ1t}hU3)Ji(WV@XSl6a@j9)k+XPWc9g2gZeM_^D9d9DahK2=`69`UXX4Wlc5 zkmV>6{767E*xhmu@SfeOo&}tG=Ag_3ZkJNbs(1>Xt)+d^aE-CpD^Ck@mTeve92g|E zvj-ML`PL6OvRJG(-4hgdFt)R#=mT zYCx(f)FzJ(S<|pOo7^c}wz(skHX#tkt~-3L;Sl-4Q@I26_QJ|k`u-B_CuO2Y)lGj2 z*bnf3xaYC|qKxX2?W`gSAE!$ak31}_rceFF&EH98rpA%I9K?w^iEuK)TcQ6;g$%~d#*Ha!uKpp z%#wxlYg?guQ;TRme(J6^Y2s}&nU>DAI9gratHk+so`?U2xj0=I`y{QOZ}LodL27eG zWP2R3xe6Jfs$Y+v{FBGM+N{fC+TzYc)&Q?AGEh$R<8r8*%3bivPD_olyOcYxgW>hA zL!Wf&fn7s08db(llu3Iu5TX$~E0Z!p_P0ZBQ`bXhSOBu20pqbVv5$cW3}v%Q9zT)|)915eT$ zrZ|lKj9gfvNK7K$Gh61XBHcn;hI`Z)jbc`6jGI;sHNw{H zzzO5s`@w`YHjAo!z*ghM|D8qZ4IlTI|5u?Iz#C_9>G~VQ@&|%2#sZ3%Pp;u!zL*m; zk3B>1kQv~lG@|*JzL%zWMmGJLmdC{RpceOJriUthZlUx1{zXyKs=9p?pA9Iv!vZhJ zAv*kXsD4+?UzZB_dQtK2G zucJ0g(a?*DiVBG~llNgt3ci_x{xmwnVErzAjXtn*JKnDC&X-bns_*W*&)Fw8?%Fk9 zLCJ%F_OUE(r-|DSP7}i~ch7rxzD8s7`JnBn=AoQ9$gmjCsMM0;F+IL@GuL$pBekB6 zILZzN{Y)Yi8cb^^LcyAEhj)x4d95PUx$VN4dGI)c4&|8Y`V@$6DwwEMZqmA^5}1RS z4H&*6yi47uyI^}~ovA~+%Dl&K4~PpDN=NIlFQPkX38ocM0CSB-v8x;6Yd36)SltqX zlkPWoXHAujxzbjb`IWmed9CgYXBK0ddkbfRXCbntL!+P-ot%;(>veM#-59%2CgvKE zp|Bc^Mp-p>(~1lSxE&oHE~(OP7gI7S)9GYseU|N2I`_Siaao#<)KUqzvd}Eu)QoYZQ}nR}d*KWM4L8eJ zxtA5Vz!YSG$eL1A!?R`(Ji$72WR~k$L_bsO*FELgEzHE0WolSl+yAlniU~hCK>H}o zedMOmi7o8h;xKYJt$?24;xK46IM*{Fl@sX0wl{QZ76tD0>ATu+O+>>xx)p?-b5_tV zb&PFH0=-jC-UAM)G%XYK`@j&H*wOPJEWz))xsErH+NIe%%BnSGCm^+q9ym#$f@MtQ zh(!&E;|_ixBykBIkR1z~7u6>j`*ND+UQ1KJB@g@CNwJj*RBmhgUXymsJap2W<^oz3 zdx*RSOzIkc2fks1 z*2Zrz*QD;k(J(+I!fXAuk;rK}Gf!p%xYSxRnfB=OU>cwOOY;J}`F6iwjV=e-dH~S9 zuqwQ9aHb!!JAbYi0O6TGp1dK!)UnmQz;m5+c$TPh$ysw zlGlS})`V9Mw;$M7A}599lLm4LwJh;Ouf0d5KaW{}WwY+2hc+6I)oH8QJA-pgk0nDB z`$W-3Y=TQ!G`(|b$P0SW^q8W5?+Ec>!ATeAewQG?~#n3gHu-HZ4 zO?+n&O3K!+Ormf6jQU@Yt$cN^7SgW3Yjx!j6X_yP=sbjWsH|{tT0m+wA3)Vtg}(B( zo5ke6qcZZP&nVmv!i4+41x=o0oX@ch?AO+vRADHq`{Wax>*H7XK@J^xkssf<_GXFh zRp`SFC|kjCE>lT6{L5(0OC4uY87)jYbJ~kcuy}eu5je-RM^4yaw;qga>gb#kArJ4} z?p>5*1Y5zr@Yqh3>`>O13EXqxI{Nn+{N(F)T0w^OD_=qWDPOsM@l{<%15XY8Mg9#7 zN^l%l#q#`e(p<12uB}=^11Yw(b(17@yE|_xeovPv<%Dbw@aRHJCpo&~{%ZvCmqN+b zq-RhDA73Bwe@|Yg!Z=_n>wUgYQJ{#+g--jb2)CA(NOpZoda!LcA1xr(_O2Ovz# z&hNd=TDf=6*PR-7SZ>WrZ}E)G?~7rw|y-RW7;O) z_62(lFX9LYgK1VUu5A|lgA?6#EA%f&Ha>*UiKe|wc%87-ru9xZeiW{#FN zAZ2ji-sh6$7Bk9EAN=IK8wo_p%!-?{gNV*Z&}Dn9~G3DA50qxR3un@B#H+sklD*o&m=5Nl`yB_kmwE zm!Y*q3DH@(3YNWxU5;yR8>$5N@;yk%_CD(b$uNz6MyQC*X4 z@SA41y#?T2ej4UL{plXq3^1Tn-gJM2hQsn;%a%#Wvx10#AnbFf;u%#MwAEBcsgR26 zlxmxJ7E1<2Go;^8AOwGiKGB_Bori7J4Ri<**$|2wlux}t${j{IZCy~(6cNk@Y@Dm@Mh--F_QUqGRq5Xu`GBaJc4~ooSk;P*6LAZVFP^7+$GKM--8D3uF@rDyeUI z_4&nK{2}n^X9Ij8#R90`)JlU~U%-DVTbkXnRMKnQdJq2(cVg~e%9iwKhpvV`*y;Mt zrD09pqR^K?SW$5CBp<#Q1CuUMx$d(~EGGIHJ1_4V()Wq-+FE*Ia!QUA!_a{~QHqPR zSaC5@(FlxgiH~8FFWWjhM21g(KECFBw-awyY)Ntjm{ywGolg0pAG!ClQcr(8erNIZ zv~R+cnZoEJaBG6n32;Lx0co*P3dth&sG*l^m-x0h=+aTd=<98^b9eOQ5uk9qslw}i zSv-Sux~&j>{#GN#`Sj~J;maM@!VAPH-|)3SVcmion6zj90_^4?2pd#C0b9hV1~XgH zgYNiouIE=QMXWyrYwHfi~L7D~W2Dl^`tK=yKs zU^H#*S(*Mo3OY()uU?WB7kHX&x!t;)H`a)MEM78M*=|@zl@4tJLFEEm&?;z6&x|7i z@7tYzy6+D`jR>`|CG?BE!7ASgG<&;Rs3WMowR+{2w2Z%|X;)T>;y(6r_8T>1=TcT3 zpE~2O7!}XTM44#Xc5cPUl?>6dMqEUYY~G8?1F|^Max+XUTHXg6X6rdRn?wvdaLOqJ zCbci4(Ayl;U1jL8RaiG}AuXqZ%mAECRae6b0ZAkxl=aR^L4KgYiJVRF7+MHWhNX)U z9{`R+W!2T{L6Kh&Mk~w2SVKliCTy@&f#BaTwo0iT&Pmp-cgH`p;d~wU##eMenJncB z6be^)-@{6mX=ImUdRS?p6Gp#>)SGeWhz_>$t*%WqvF8amk9s_OZPiN?#S}YRZk;#z z9%idP57_$#QuEvKp=s060}XSSpE{>}+M(PjyK}NGnL;1xeqp|QIFYg9Zk5Tt&B8$= z4oBcSx)eE%d2|_zh3O`(POchN%bs-ZXzjI$*`+t)#XlhcbdW6e3QQ7eP$iBYhz=F6@pTz=9NS9cmtH+SPOzBrjUZoe|t66Wl} z#k)t%%gR16(?kmAx?bMQCqnrsDgYXx>wAjNcVF$_2{cDM1E?#vcIgB$k#2u@gT6cj zmlvA&-iH22IX`(%1!gEerjYfDPHy^U8QsQGEIph{+nk@|=@N3Kd0S2MnC30?!8OI~ zTw-xuk&b1A7XpU{ZUCKuzfUqcFERy3a2K}afYOo32DU$zQlk~&9DIsOs>RtBSCl#< zp#<3yPmt*tTC-WHWIXa3*_+mevEi_Q`~}Q(sy@m}s(EHOnm4V!_qxvK@M>{hZ@al{ zueb8yTGZ!M9x0i*gs>Hi(d3Pg0DhXA_|gG z@IWbd=WRF1tb#hQ`Z@iA8z;Ix3hAfOgggVq4=-_{AA)-Ca3#(ob7sEU6bSEO&!fVZ zl3)udD{6_>d-GkB&zKm2Uz^S}Am5_VbQ0IYbim@0s@nvXT}WtoC+c(Zzvxp3)JppM z#AH_Z?%-Lctm-QOX$Iq8E;Tg?B>~D-#3!in3i)hr3>_F}ZL9o+fo);^YG_jKEL{HY za?;+-5GikyXiXv9L%Kzmv+y{O7s$rhq%3HuFH z=mX8Cb^kQLHqe9x zkv~(eFyXvdqRlGe^L_)PwpzW8#4cNxn~AaJ{nchxSMQhm21G*yE~Dp86ae(e&qkQX}JrtY*61k@Oly`@>5fF%h)loIICS|&QLam( z2Q!|2$oMln*^-BLvVTpyM*h#z+RrBc-}~!-F}7Xv$N*mh$9rP^Ee<6FOfCuf49X1M zXk1WC9E7=bdJGgi30UNe<#Dy_5c%kL7Z=P>T)W7MhHKk)9Y(bs3QIitgvyF9^Q9HZ z0$s@0tp-n}o!J$qo^KZ+U1T)nR?Q}l`S#tjZ&~&;w!Uy?d4hI%KZ%J6u;_B>nl`7X zInaLXNzt(H06Xn{#PAXngJdXHJQK<~&t>8--y{Q++LL^Y2DmATA#yST?oz^eZ29|S zh}6#Del0?ii@L#i9rX zn`+UtcX|GdB?n!}YF>~Ad-DsbUIZJP+zR&Rats}6LjHDTcSu>~eXi$xgpb|_4eCS4 zw+u9Qe*Q#o<^f4&ixP1jlqRMS!p}u!JRy*IvAGF+1dU&>u5@*?=g^j9fth3S>FQ4f z<-zY|vN^tYG^l|2k(JPh7+%I$;81;LjSuFlRG_pdaG_3|ivQ%ivfIIlZ9kDxQ0iem zHeErpmgNZg2$6t;rD`|{RSzGiGVi+w_DCjML~2IB&UzwwUAKiW_Gu7dg^gt=n2*ff z)wCLWC9YtH;Z|sr`TML#&wm1Z0I&@Q4&d>tX;1ar!CYp+~mO} zcta-X#zRO{v=aBo9%Z=D_G)!jQcdm?=?}Bdtd+eG87zw#U*282%`?ZJ&uYtK%2!q?P|R@0_t@@2&S} zh)ioonykE)C zGUC@3>f3Qw$7!{x_5S6^ANrnJll6Aq211wo^IqpZQ(lPKMjKwPewwZp$-3E@nglXt z$AJ!GyYIY5EfYPLgb`hhBzs$#a<>Suzc7Ub1~+bTEW0m5YKN=tWirQcSg%Pf!Fd;K z4K~SAjafd;GeAASVhMaXV+D%E5cJnlza`ZM$`YcTZ*M)bd1VKGk~wS*GUbg3@nqBO zp0tpdqhjr!0Vij=tJ9+8l5~*K?%xSHn416^@`ABj9Usq~!2|P+KqH*3?UqcVFT+Z)7PGncfd(uxDQG=H&XB?11U@r?$LEk1W!QDL@&R zQc8bM((nVE3+`#`5}6ECHbh#micD(`pmL#WIrx6$Zm^I`UgQpkk!;#L*vuRp)ab&L zKV~t~s6j|ga$;epLWxND@C_XspRPLxLYo;f++w%*O5NyrXjh9&Xi_Lebx4O*qRJ)+ zjC<&v*RuS00lo>4Vv2|+O)-l5$XXJTHo$`?6F7-A(fZ@3q(rh? zF4h{vjM6t z$jJa$TGTLSp*?8!*ICwUX$SRDu(zr{l=@EI+W?gF%6#Xe_|`YkyAD)z>3L zP#0IhG!=zX;sz14$VGsyDD;=LJZ`(5w{_cuq&TK}?j{}uu)+-|g;y8DNmd_&sn^LO zn;EmIfJg0YM+x}n&v@y>#OI9Pd!AX&c%BcC4j~;A=2?tc2MdrwsL8X!Op%ZAqsGeE zX~=HM-Ja4fWz+Y_h)a8!?3a5_^_mkQ=8N>NOKnVfIwLdA?PW8r?V*OW=F$=q8Q2A@(m_882(AtckL}C7jAAkOS^9{3Ved|l4e*1XYQCrJESy@|4PsLwV z2i8JXZ0DnjL>Dv3@6DdSV+iRoI$(#Sc_*J<76XW+J>hBlbDa6;8`706cseXR? Ee_sBDfB*mh literal 0 HcmV?d00001