From ee2d2bb63a8406bfec62429f6a086763b2e8d1bb Mon Sep 17 00:00:00 2001 From: deadlocker8 <deadlocker@gmx.de> Date: Fri, 22 Jul 2016 23:06:16 +0200 Subject: [PATCH] initial commit --- .classpath | 6 + .project | 17 +++ .settings/org.eclipse.jdt.core.prefs | 11 ++ README.md | 3 +- bin/application/Controller$1.class | Bin 0 -> 1271 bytes bin/application/Controller.class | Bin 0 -> 4869 bytes bin/application/Main.class | Bin 0 -> 1741 bytes bin/application/MainGUI.fxml | 22 ++++ bin/application/_de.properties | 12 ++ bin/commands/Command.class | Bin 0 -> 1167 bytes bin/commands/CommandClear.class | Bin 0 -> 1119 bytes bin/commands/CommandHelp.class | Bin 0 -> 1666 bytes bin/commands/CommandList$1.class | Bin 0 -> 1042 bytes bin/commands/CommandList.class | Bin 0 -> 1789 bytes bin/commands/HistoryEntry.class | Bin 0 -> 1002 bytes bin/commands/HistoryType.class | Bin 0 -> 967 bytes bin/commands/PossibleCommands.class | Bin 0 -> 801 bytes src/application/Controller.java | 185 +++++++++++++++++++++++++++ src/application/Main.java | 43 +++++++ src/application/MainGUI.fxml | 22 ++++ src/application/_de.properties | 12 ++ src/commands/Command.java | 43 +++++++ src/commands/CommandClear.java | 28 ++++ src/commands/CommandHelp.java | 35 +++++ src/commands/CommandList.java | 50 ++++++++ src/commands/HistoryEntry.java | 28 ++++ src/commands/HistoryType.java | 6 + src/commands/PossibleCommands.java | 14 ++ 28 files changed, 535 insertions(+), 2 deletions(-) create mode 100644 .classpath create mode 100644 .project create mode 100644 .settings/org.eclipse.jdt.core.prefs create mode 100644 bin/application/Controller$1.class create mode 100644 bin/application/Controller.class create mode 100644 bin/application/Main.class create mode 100644 bin/application/MainGUI.fxml create mode 100644 bin/application/_de.properties create mode 100644 bin/commands/Command.class create mode 100644 bin/commands/CommandClear.class create mode 100644 bin/commands/CommandHelp.class create mode 100644 bin/commands/CommandList$1.class create mode 100644 bin/commands/CommandList.class create mode 100644 bin/commands/HistoryEntry.class create mode 100644 bin/commands/HistoryType.class create mode 100644 bin/commands/PossibleCommands.class create mode 100644 src/application/Controller.java create mode 100644 src/application/Main.java create mode 100644 src/application/MainGUI.fxml create mode 100644 src/application/_de.properties create mode 100644 src/commands/Command.java create mode 100644 src/commands/CommandClear.java create mode 100644 src/commands/CommandHelp.java create mode 100644 src/commands/CommandList.java create mode 100644 src/commands/HistoryEntry.java create mode 100644 src/commands/HistoryType.java create mode 100644 src/commands/PossibleCommands.java diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..fb50116 --- /dev/null +++ b/.classpath @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<classpath> + <classpathentry kind="src" path="src"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> + <classpathentry kind="output" path="bin"/> +</classpath> diff --git a/.project b/.project new file mode 100644 index 0000000..b2f045f --- /dev/null +++ b/.project @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projectDescription> + <name>CommandLine</name> + <comment></comment> + <projects> + </projects> + <buildSpec> + <buildCommand> + <name>org.eclipse.jdt.core.javabuilder</name> + <arguments> + </arguments> + </buildCommand> + </buildSpec> + <natures> + <nature>org.eclipse.jdt.core.javanature</nature> + </natures> +</projectDescription> diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..3a21537 --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/README.md b/README.md index 50664bc..5ca6fdc 100644 --- a/README.md +++ b/README.md @@ -1,2 +1 @@ -# CommandLine - +# CommandLine \ No newline at end of file diff --git a/bin/application/Controller$1.class b/bin/application/Controller$1.class new file mode 100644 index 0000000000000000000000000000000000000000..9443f57368164992a75c52bf12b88f549fcef31f GIT binary patch literal 1271 zcmX^0Z`VEs1_l!bH+BXlMh1z*f`XjP<iwK9{5*Z<{JfH){G6QBA{9e+1{OvJfvm)` zME#t^ymWp4q^#8B5_SeQMg~ccXj+ASYFTPtiM}g{^hnH0$w@6@WMC`F$ShVdU}TW+ z!EUlOBLkaFW?p8A9V3IZ1};UKVT=qc&iN^+oD7T%ygUr-3>;hx%nbZI44e!Cj10^g zAO-wBnR%&xrMXF|MInhvIjM{cLO%J)i8*13MVTNzRFDPaBt`})9CoP~f}E5A_5dS; zf`$*&cg4x6d8zuDc?G2<`rfIPU~gJ$hH)`SFi5d8NHQ`=<59@NAk84d$iSYSS_1L~ zBZHiVCJuu^^46RTatsRW4DyT&QrJxesp4T!WKd#cV0HBiaSdW*kilml7lRyw3J-%S zgBl|PTWVoxVoot5gDAvv$PsF-8O6n*!Jx&?pvlM}hCRx77_=F<7#TPclao`6i&YFj zj@9L1&;vP!DKr42-++g~5Lt~ONR2TMg9%6tn`^MMV}L72of!{<IVb{ol5<iMi=6ZG zit|D7#tKeKj100kyaWk+Mh4#ClEma}-^2oF)QUqqgqjw?k;KSg%flebAjZhR6`WsM zl$`3839^VEk;L^t0nNz38JwA(msnC-l*-891GXL|c)%j4=0nrE4NMAaLb0=EWZ-wr zOU}tJ&df{qO)bgDPvK#30r{N;l=>MNcs%p+Qj45(5{rvdiy0Ic7#Wxu7#Ua@7zG4C z$(@0Lfti7Ufs=uYfsuimfq}t-fr){Mfq{WbOM5E=kJfeuzKskF3``7yATh8ENVgV) z5Ca1P4+A4uRG2}8fq{V$6cA8Tra(=x)!xP+zKKD08-wyp1}?2F3_Lp+)FEOz$YS~s zF(ZW7HU?9W#mr!f<rvr*7#Q>!co_^CL>NpM6dBAIG#D%yOc|^hY#408ju8Vp&Xxh< z7zPGg1`7sD21W)e1_lOJ24)dqVF5=5Q3h+M3pJrG<kZqWz#y@W!3Ja-#G7njZ!v;R m1qB5QgB>^s>=_)uv?GHP0|NsKg9d{$gDW@y7{NLi7#INZ+#~q_ literal 0 HcmV?d00001 diff --git a/bin/application/Controller.class b/bin/application/Controller.class new file mode 100644 index 0000000000000000000000000000000000000000..abdd41f6c449844cf366c2927e5ce7fed4ffb582 GIT binary patch literal 4869 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 O89-eiMutEJFaQAfJC)4< literal 0 HcmV?d00001 diff --git a/bin/application/Main.class b/bin/application/Main.class new file mode 100644 index 0000000000000000000000000000000000000000..b5b3eedf81bec76ca1d9917dcdd2460e72266410 GIT binary patch literal 1741 zcmX^0Z`VEs1_l#`5_SeAMh1bzf`XjP<iwK9{5*Z%#LPT)1{OvJxva#p#Iy>1WJyPa zLPiEQo6Nk-5<5l)W)00SMg|t={FGEK24)6M9tKthHbw@1pUk{eztY^K)S{5Yq?}Yn z1|gsP<iwn?#G*_PA1cUFl95>ql0&u#<O*v>2G-(|#G(>L25}7^sB4N#64O)lgF&RV zW*9qzAR~hqR4T0^H%H$s!q>+qKQSe>h>Jm(L6n_Agpol2q(DC>F)v-;KPf9UxrB#7 zj6s}{fg?SpIixR{YaSVI$R14I>A(3*oml97Q2<P!H#Pd$+7Tny3-vg`~pj12q; zBf*M!7~~k_85y|KQ%izUi}Op1l2aKOlpwB#m>FDBl$n=q4YejOwM0KO$j6$CL4ZLK z6kbY<41!SQFgeXIkgN(1gDQg>BLhoLeqstEg9wU4A>OfOXV73|5C%CZtwO&zIW;d; zKOnIvHLrx7L5q<=2t^_oB+cf~bbtW_xEM4U^g#COGcrg)>_;=g+QkLr5JLuIb_OFP z!$2_ri3c7A69!X82A*QD-!rQ~am&cSq7kJT#=&6D$iVHKpPQSQmjX%-TnvT`mOKnr z4AzVc9L1?6A(<thgdqyC8a1TCK#Fa780;AAA&S9HM@bAIzvzR7tu@2g9P%ANeqsRW zbLL@iVQ_`G$~QC5BQ-NUqXgtC7m&hAusX0pPaXy@kV5X_)Dqv!yztDFk_=F|`|vRM zg2J5_lt}XPN{aGxa#D-f8T=U;#E?^}GhB{~!H*%3harf8AL?9C5P<|kco;%K8G;3r zUqFrv=V6Ed3lwMMmvb>hF~qPlL_=c`5(cgn$*BdP{K&%)3sT8nP?VWh5?qp)oE=h> z2ufU_tdX9|$RGkvx1dM^SqF&`Yeoh(P;yBvVq}nj$%7IwQueTBWMC=E&o5zQ5QV8g zPC4Mr2MS(f8$f($a5FM+CBuCVvITpXSTiy(roya1^O`jy125P|zKI2}vLH7xGmnu$ zOd}fXCWwY$XwC`aVqj#*<6+2W$N~8;u{19^gOPzHu_zssfwAadWZ()0XGOP6P$J_5 zWo123W?)ccU}RthrvYXLMo?+Rz{tSPz`&r-z{tSJz`($&wVi=uBLf2i69X3m0|Oga zkduL%fq{Vs%w}caVc=z8U|?k6W8jBqX4Gb2XJBJsV949eAP}jwjX_9AVjF|hb_NAs zoox)t2N=}-b~9*3>WVOEi!f+!XVA4`(Pr7kV4y8zwvE9;TaslPgAGJLgu!7OgOj!h zgWEO+51nlc-Uk@`tXL&kwYM<@NV0BY2-e=l5Vo9w17vRGMzDKQ88R567?{DXbz=}@ zU|<kn5M&T!kYo^M&}0y0&|?r|Fkuj9uwsy4uxF5DaAS~S@MVx;2xE|Ch+&XpNMw*_ zNM%r9$Y4-p$YfAv$YoFk`_=;-EO}7hGBD&Z#4*G(Ffs@-gfJv9Br-5DNHX{^Brzm2 zFf(W}*f69pq%yEDgfZ|lq%ov3urg#aurOpWWHK-@WHB%>a56A`XUJe@h+<*jWXNX7 qfdm|bF+9|FFytaaor{5qfq_AjfrUW}>=sza7cdlpL%s+cKg9s80FMs< literal 0 HcmV?d00001 diff --git a/bin/application/MainGUI.fxml b/bin/application/MainGUI.fxml new file mode 100644 index 0000000..3d7ae6e --- /dev/null +++ b/bin/application/MainGUI.fxml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<?import javafx.geometry.Insets?> +<?import javafx.scene.control.TextArea?> +<?import javafx.scene.control.TextField?> +<?import javafx.scene.layout.AnchorPane?> +<?import javafx.scene.layout.VBox?> + +<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="600.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.Controller"> + <children> + <VBox layoutX="14.0" layoutY="14.0" AnchorPane.bottomAnchor="14.0" AnchorPane.leftAnchor="14.0" AnchorPane.rightAnchor="14.0" AnchorPane.topAnchor="14.0"> + <children> + <TextArea fx:id="textareaHistory" prefHeight="508.0" prefWidth="572.0" VBox.vgrow="ALWAYS" /> + <TextField fx:id="textfieldInput" prefHeight="46.0" prefWidth="572.0"> + <VBox.margin> + <Insets top="14.0" /> + </VBox.margin> + </TextField> + </children> + </VBox> + </children> +</AnchorPane> diff --git a/bin/application/_de.properties b/bin/application/_de.properties new file mode 100644 index 0000000..1ea1c0a --- /dev/null +++ b/bin/application/_de.properties @@ -0,0 +1,12 @@ +app.name=CommandLine +version.code=0 +version.name=0.0.1 +version.date=22.07.16 + +help.list=list - lists all possible commands +help.help=help - shows help for given command\nSYNTAX: help [COMMAND] +help.clear=clear - clears the history + +error.unknown.command=Unknown command. Use \"list\" for a list of possible commands. +error.invalid.arguments=Invalid arguments. Use \"help commandname\" for help. +error.no.help=Unknown command as parameter. Can't display help. Use \"list\" for a list of possible commands \ No newline at end of file diff --git a/bin/commands/Command.class b/bin/commands/Command.class new file mode 100644 index 0000000000000000000000000000000000000000..40fddff4115933d253769c294cf92c52705ce2d1 GIT binary patch literal 1167 zcmX^0Z`VEs1_l!bb9M$MMh1c8{M_8cyp&>nX9$CxfrXJlAS<yfQ9ma!FJ0e1DJwO( zgpq+gJGHVrzbJ)~LC6Oo8(dP9nU`+O$iSCZnwykb<ewIhSd^Gs%*ep#$;iN&k(yIb z5|Ua`!pOjuRGOEPlgh{-1<_twl9{6)lv<o$T9lmX1eUXAWMH$&%*!mXV`N~~&<tZ_ zU~$e*N#$Z-W)R?E;9=n9U=U(t;7Kef$jMAjEXmBz)8}LmVGv_y5QRAzY^qOwa$-&@ z4}&;^1S12xyK9iIqhBQ4-AGETxfrAvWY`&`85tzNegey(I*NxumO+k@fipd|1ma3Y z1_up@7r@~I4FQM<SU<#iYfU5}R3oi985kK9co?`CxEUGveKPY>{lI}2l9&VvAR({; zVTnbVAU;%(r6eP>7~}`^__AhX;7U&|@rK2Yhz8VRWY>W#)Zk%YWng1u5KK=kf!K$L zEM^T&PmmfN9tL&>4n_v<^wbiM)SLoH)Ujt4hb87@rZ6&yX+%SOg>1NH6e9yW)LD!S z!dO%=GVlhMBqnG3CKf=w!=74^np|3v%E+LH%}5{QICjp@D=Es)$w@7;2BitEU~rOg z%LIiL4>Z;4fufH^k%5tcnSp_Ug@F;|R|W<KMv#BNG$#Wa0|SE~D9{-g7}yvXK?#b1 zk%5nafx(%9nSl``tF@hhUrR`E6NB&$2Fa}q@*5c#7?>Co85kJ&zy@<LurTm42rzIk zC^0ZF@IW*%C^M*ltx#o9gBqyMzzCLO)!M?Kz5#9s$X1XW5Sm%xnl%};uxQp^gQi&w z$!3IRUE*w(#;RG50pwgzI3zGIF)%SOFi2_dV@c84!l1p7fe*%9!obSBh6UstW~2a7 vU;sHtf<X;zvKT}+)K3fyQVa$Rh761hM&LMM5@TdxWH4qh0SA^T*kfh@=#=e7 literal 0 HcmV?d00001 diff --git a/bin/commands/CommandClear.class b/bin/commands/CommandClear.class new file mode 100644 index 0000000000000000000000000000000000000000..71d46c5942d1e34952a7e6785b6a07bab70240e5 GIT binary patch literal 1119 zcmX^0Z`VEs1_l!b4|WD7Mh4O3{M_8cyp&>nX9&YNCpEE%oq>gsK>%Hfk%7%7GcU8m zj*)>`Lo<w#fyFsLC6$YTnSqmsft7)cgMpiofi)Rq04D=811}E)9|J!l1ABIAWqE#4 z3L}G%PgY`CqJB<dUb=p8Nl|8Ax;03lAP<8OgD@ilUtVc$QfiTZT0mk^Vs0@b1EVJg zgD4{dS4L`1fgapkaUKQ<khz>7;gXQliV{W!exJ;|R6nrxki?{%RFGZy$%#2(iA9+p zK2(sUBqOt!kwM%C-D_Z9TQf4Sr&gpUmzJb5GU#bUW4hKSv7jI)GdZy&Ge1w?IX|zY zC_g7Bwa8jCjEjMhL4k)skwJ-(fjzT0EHNiDg^@uFn<1J}oD7T%Dm)CT3~G!FY)Peg zDIf<+L98n+$;{CYN-fSWElN&x0?S!*FlaC`h^H16<rnE?=9PiW)=Ml(FU?KOD=Fq; z&|=VGXV7M3kN}4+76W(~bQ$y*8938ZOCZ6{$e^YHu?{&dG%<y^7z`MU*cl8N8N{%A zorl4g!Gw{4wV)_7uY{376q~VOAXChE7|a>i7#VoL@#v9RT#{c@36iknVXy*8@FPq3 z<fnt=Y<L)KL2?jH&iQ%8`8lZ|340y}2ap6e*xrDm{M>>PMh13hv@$XXV~IRQ2Cigy zlrb_$;EGH}2HxP3#N=$>!~$rt;R*)FhFc~mo&=FIiXJG)859{98JHPBfQf+-loJ>j z8Q2*Z7y=kTd<F(Ft?djPT0&e~8F;jqw=xK535jfF5ZlPWz`(>H$-uxM#=y$Jz`)MH z!obPE#lXeD&%n(f%D}@Q#lXP8!@vkuA<ZDez`(%BAj=>JHNA_08EmV%mi9IV`B@Bt zI$B#8l!er{F=%dM(BG)DjlooB8-s<;HU?{*Z47oG>zKjTDKT&`Ffa%*a4-lnh%$&U zh%tyWNHIt-$T3JVC^1Mes4+-`tyX{-&j7KSfkB<Yk--V<9CZd~1{Ve<23H0K24)6E MF$P8kH?VKq0rTAiU;qFB literal 0 HcmV?d00001 diff --git a/bin/commands/CommandHelp.class b/bin/commands/CommandHelp.class new file mode 100644 index 0000000000000000000000000000000000000000..0ab23cd743bcbf327044dc67dc0c65fd44037e11 GIT binary patch literal 1666 zcmX^0Z`VEs1_l#`Jaz^qMh21O{M_8cyp&>nX9&Y1HK%}`frXJl09}TWfz2i}FSEps zk%3u5GmMde#W_DEm5YIyfs==Um4S_eft!(mB_lPbfRlllftQDYkAa_&fjv95vOK>i zg^@wXCo8cmQ9ma!FI_*lq$o2l-5R7&kcUBtL70(&FRwH=DYeKyEg-QdF}IkJfzgwL zL6nh!6J(+uhybY;=V6cl84DII2}!LeVPxR<$;?aj1M3b+Ov*_GS(Trhm=l&*lnLTP z1zAcmGK(1*#C*^_2J*5sBLjPCMQU<sNh%|Qo<=mLTYVA>3UV@&6H7Al^Yoqb^Gb^H zb8=FPtTn^97#JB8co-BJlo%P<GmFC#b23vH8N{#|q8Y`>z{sG&!=TEb#>l{yRGOCp za<3G`y3&%&9Q~lw;{4L0<WwiHoHYl71|x%bYEe;skzQtA8OUtC#G>@l+|<01VlD<P z1|4<=ZAJzOaM)rofQLbsL64DvGd;Bg66lN!Y8nvhkYhp<Q;3VffWe5J!H|(b47=BP z7>pTA7#Ua#iZb&`7#T#d85_pQV8&p<&S1{SAPEomfc)a(%%q%DXp$@DVX$PdVq_2~ zKoe(V5QR7k>@UZnqQpv{%;FMjE(RM0J9Y+JMh0Pox8c$}4E78Tj0_x^C8<S;CHY05 zsDOG8Y>p>X+?t!giNS@P!I_ak2w@CNmWRQW!HtoDB@dj$L^Pl#fWyo`DJwM@<P2s8 z4;}_j1}{biuJqIrZ&*r4RSgMtYc2*K20wNNUq%K2ux((IAaXnm{tN+(3~Z@|rHMJk zXdwx;Of!m|A&8Md99^$dX=YAJY7qxR2qOb4D3|DQF$6M%fpVk?h!w%Z5Xlh5$iS9Z zP>`CJ!pNYDEt(*~jN~M!vDP3XVt5#0L4M>Y$%nWX6mao83<(U0j124<iN${4Fk;rw zjN)KOW@O-nq}IHAaIR%!V24ILBZDxOe8tGXl?=~Kj0_UE@);uob8;@Y7=apB3@fs% z85wwkOA?c_eG?17d7Yghm63rf7@UpVGC>(k0GiZ5SzQklgba!dj10^SAi%`H2r9l9 z7#Y|Z7#IQ=Kzs%UF|F+k99lwLTN!w?Shg|<XbFjIWf0rQz`(%7Aj!bMAjZJTz`(%C zz{0@Az{SALz|X+LAj-hYAjQDIz{9`@Rw2zG!@$76$RNug2Q~dC11nfxzLxej2KiYG zf;w7T7?g$7w=rmLW6<BYiNSOmgS8dQat2FDmYocaj0^`DnEiCOF}Q297;R(lp2?sH z*07r)Fj6RZJ3}Z~ID8vJG}Hi)t~f@9S^p1%)d?j*#TghFn8D80V&Gz6U=U*9U=U#t zWe{Z$V~}9bVUS|5WRPJ9V~}MCXOLh>WKd+tV^9KnMT>!jfq@~P0pb-9D}^By?7e)3 zG=_8rCI%e_ZH5enOa^9#ECvP!2?l1d{|sCVtn3Vo><roL3<eDB3{DITrVNY>IpDy{ F1ps+eoMiw2 literal 0 HcmV?d00001 diff --git a/bin/commands/CommandList$1.class b/bin/commands/CommandList$1.class new file mode 100644 index 0000000000000000000000000000000000000000..e3b2858a80d5ef11794f98dfb5e40c266a2e2159 GIT binary patch literal 1042 zcmX^0Z`VEs1_l!b6LtnBMh3Cu{M_8cyp&>nX9&Y5v$#aXkez{rkwG9Uu`E$PCowNw z-#;lUHMxYHfsK(t1T0!wl9>b2Qjl1bSdw4F$iP;Tky)%_z{nuxgUv{5Mg}&U%)HDJ zJ4Oac4eUxZ!x$M@obyvsIT;ukczGDu892BYm>Kwa7&sXO7#Wx~KnnPMGV@aXN^_G^ zi$W5Ua#9%?gnaUo6LZ26i!wocs2~f-IgAVvSZz`<v}R;rPtMORNGwWaWKhR+k2Quq zYfVp11_=f!b_PjC1_5+0@-Rp<$S^XnXQx({=NF}b90d+0aNq@(6lLb6TXQkUF(|Mz z$fE=-M2?3+kwJ-(ffMSakbFi4Q4Jpq6Er;;8JO}7L8hZSz#1fD1ojI;8zk1Okqm;0 zXnJxnFfwTHFo-gUF*0xk=a&{Gr@Cc=LQ?=K9q56KVr1Y9&P>lsEGY$rl?|q05D~Nl zVS^cfcGipx{H}S)Ir+tzdFj5XB^miC><s#h3?k^B0i{76215oTMh5oOiqz!Nl2k?p zJ&kCHO~_&DlUPuYlbM`Yl9`{U@0_1kQk0*QlUigAN+~>^d3mWt&N+$2#i_*%3Ji=4 z%nXbStPG3-0-&VDz`(%Fz`(%C0166j1_lNT1||k31_lN$E$yugJX+fs_%<>yFfcI) zg2ccwAl)(yLJSNHJPeFrQDFuV1_lO3P&hI$GJs6+VqgNB%cH%8L0o4GgZMTE*)?!; z*ueS}!Dc8x)G<KJ0GX-GpaPcXVNhjIVPFz)WDsRggPN<$zzkN;tEGK_K|<#MgTyul sb##Ln!3Kjo!NQ;kwp5Ej8%*mk=rS-curTN`7%&)voz4ihih+Rv0A~E})Bpeg literal 0 HcmV?d00001 diff --git a/bin/commands/CommandList.class b/bin/commands/CommandList.class new file mode 100644 index 0000000000000000000000000000000000000000..0b0782e573ce2e8ead6b801933d467ba4ef11a9d GIT binary patch literal 1789 zcmX^0Z`VEs1_l#`Y<31FMh21O{M_8cyp&>nX9&Y5v$%wvfrXJl09}TWfz2i}FSEps zk%3u5GmMde#W_DEm5YIyfs==Um4S_eft!(mB`34Egp+}pftQDYkAa_&fjv95vOK>i zg^@wXCo8cmQ9ma!FI_*lq$o2l-5R7&kcUBtL70(&FRwH=DYeKyEg-QdF}IkJfzgwL zL6nh!Gb1&pKo4fDI1hsa$XKvwNl0o%2_pl)Pi9`KA6R!tVp2{j$g2G0#GJ6iqD&AU zD#%ijky*^hAm)SaF_4$785!79D^in7OHvsb^faO|-RhHAP>_?EoLG{XpQrDfpI1_p zpOceXWUU#-#lXm*z{8-(pv1_)o>?50n3I{p$RLKz5X~q~21W)I9tKqgHAV)uq|&?; zkb9*d)|HlI=I95d7U!21C8s)p<*YdvG#DAgQ;Ul7i}W({%0Oo8B^ITZ=BDPA6mv0X zG3c-}XfrZMfWsDx0Xz)440?<Voaw10kU(c-P}6`|ha3}{m_l3(1`I~*42FyhV%WXT z!(hx{!pOi{P?VWh!pI<s&Dbzb1~Uc=b_R1s21$6h2jmwQXC~#OLX%uE4}&Fx6(fT{ z0h%}?gDAvVV1GFl6(v@J<BFZZhLJ%GZXDDYkd%rc7lSo}9Vk88GcrhOV2^81lsPgu zvokm`G6*9A4sHPtgA0QzBLhoueo+b76oeY*{M>@XqQsJXP{gw{xHB?{gC&u|(y25v zCndFri@}Y7lY_yFkwM%sCr1J1HwBopt++rce0Ugq8T=R-*b)m0Qu9(68FaCQA|w<r z?Xc!zaAXMJVF+XhVq{=WPX)(<Cvsf+CuOB3mw?rU@GyijfU<3IW>qRU4|{SjL@+Wi zf*lgY!w}67!^pr<k`GHKA{xjhK}13M1nL7u24O7Ogpq+O8J;;986<FJ8%72Ws5!-q z3{1sIj0}=EeaXncm<h_bD4DvlAQhUip{_(tBsLgPZ*6DI$iN$1l9-(Bn^*wV%M}dH zY;KvLY$$+~lJr2)%E-XunU|MZ<eZaOT%20Wpvb_;z{~&wObm>mGLM0gft`VYA%FqI zXJ8Q1+RnhCCB(Irfk%sZD}#WRkjPdBv5gE23``7?3=9ln46F<c3_J`h47?0npz@J{ zpFxyCfI$i@$_Q2=%^<_Tz`)2L%OD3aol&2Gg@KKMfuTZ6dmDrNECxXxtt|}7Lh9QX zG`BJ6Z`{OS>ZiM#!8%fFJA>^u28Z1YZjsv=JgitGS%f^dF?feFo3Sou(3WJ;6=mJV z;D3ODc?$y%NL-XvcN;@6OUir(Zb=rQaF9?7D<ed7;r~lIk}TU8B0)AVFfg!y-EYOf z$H2fK%D}-O&LGMl!63#U%^<}f!=T2X%An7n#$e8%&S1-+$>7hR#Sq1y!;r+F&XC7o zz);R$2==2L#2*Y0KQb^>FvK#%F@XGC!4S`oz`(>H#Sq7k$Y905%%IQU$&kd5%)r86 z#bCma!XV7R%8&{TCy1&v24;qI1_lOx1{Se@3~KBQj_eF>j4DhFObi*|AkSpTVqjnZ M70=e7IAdS{00n2bu>b%7 literal 0 HcmV?d00001 diff --git a/bin/commands/HistoryEntry.class b/bin/commands/HistoryEntry.class new file mode 100644 index 0000000000000000000000000000000000000000..555ac2bee0604b0272bb28b80dbf6e2bbba727d7 GIT binary patch literal 1002 zcmX^0Z`VEs1_l!bBX$NRMh4O3{M_8cyp&>nkIdqd{Gv+Nypp0yb_Nzk27#=^vPAuy z#JqHU|D>$c<Pt^(mXgYXR7M6dA9P(Il?AERAo<ja5=I6gAB5K6lA_GKbZbTiHk-`6 z%o00B25k-O+A%e0hA}d*IOnINaxpM7@bWNlGVn1nFl%UraWXJ62=FklGO&SILOcxY z3>=IM{63j^seYxoNvTC4iAg!BAcy29C+37D7G;9?P(hZGjLc$225}5mfW2<b$iSYS zS_1MABZGv7CWb1I3``N&w;~#vm`-P8;3&z5_??|WmXSdmJw%*JGjmc>i#QnM85x9; z!(Jg86v(z*3^ELgATKL1GKgwmTA&#QQlY}bpvs`e$iS9ZP>`CJ!pNYDtP~P$)|k$N zT5iq3puxz%uA@+rT2TVFQ43_AHkvUIZ{RgXmyv-n7UUp(9tLR!DMkja;QZ2}<W#pz zP&5c4`%e!P5)6tAj10^S3=B*ROrU54v)CCp7#J8>7#JBi8Mqi28Mql37$O;%!0Pz5 zwlnZ(X>VoV*V5U_Ah;2%L70JoL5P8cfq{X8frWvKfs=uofscWQL4<*UK>?zTL6kv^ z0R;HL)-W<KFz|y?3j-4aBZD}D1k@UR21W*u9IMtA2L26j!`Z-s0$>Aqz-(5ifs722 z3{qG$3!-Zl#j05vuGyb~8EmlXZU&i1A-U}g3LqzJV^9`S-^QS+wS_@&8-u2h&Nc?k UZ47$ohD#wCt_pXV0oeV905~np!2kdN literal 0 HcmV?d00001 diff --git a/bin/commands/HistoryType.class b/bin/commands/HistoryType.class new file mode 100644 index 0000000000000000000000000000000000000000..8c58db9dbfa891c57a2d7ab322752bb56300d7d2 GIT binary patch literal 967 zcmX^0Z`VEs1_l!bJ$42rMh21O{M_8cyp&>nkIdqd{G!T`%7RpO1{OvJzO2NuME#t^ zymWonywY4o26ktEUtdQ*7e)p#A8fj;85!7pU4w%i-CY?OxLy51eO1C7eL`J>85zW* zap~Z&NzTd4%Pg^DWMJ0N3}a+qan4Uk<zQgtVqj$8=V1_F5M*Rvvw<oR)9^vKD!8O5 zGcVoRQ!|W{fssL&hk=!Wje~(5#1Z3RU}s<hu_SmHI2bq?8TfrN^HTjvbCXhwLK2g5 zQW+V9eDaeMbHWmfGC_Q>AQuBO13x1JOG!p%F(U(8Sz=CUYB3{&q=qIA_j55QFetGz zC^9k#Ai1luxFj`~he4S^g^__Xv8X7qGC9AXl953R+4cTOS*gh-)}BZnf(dzo!hs!Z zyMG#*HmIjHv4<zf0~$OGstlTp45rAoIp-u67h5CQ1vdxbZcr>+Gcs@m=a&{Gr@Cc= z0!aWVRp^0~GBR)mXQt;RmXsEyGBO}r0n%=R-C1_l4u%Yj49pA+49pIapm<_naF7H= z5d(vO6exli7#LU>I2gDXxEUB3co-NMf*4pBKtOLd17oBRFY|T=zRe6mV2%h2m?O%% zmw_>oc@u+Ba3sqn2GQWn4B{IZ7#NrsBpDbOxEPoi7#LU?q!^ePq`;ye836`CsQHEr z%wYGhYiY}DXOKo{WMg0iITNgj2h3(?kYQkBU|`^6kY$jAYBytG1#1`E#2_B&&8)RA z(gx%jUuNkY4Dvb~z!rj>0WpmcY#PWxoD8ZAYEUz@7?{B3a|tnO?O;$pz`%%G9}|NX M*i3B(9Wbp60J56RG5`Po literal 0 HcmV?d00001 diff --git a/bin/commands/PossibleCommands.class b/bin/commands/PossibleCommands.class new file mode 100644 index 0000000000000000000000000000000000000000..3757d2e80d89e17e3c8bc2acd1889e00262fb30d GIT binary patch literal 801 zcmX^0Z`VEs1_l!bU3La0Mh3~`{M_8cyp&@7fc)a(%%q%DXQ%)>0}CUAKvrT|qJB<d zUb?=2QdVkm2_u6*0h&Ta22mfdveJ^w9DT>4qQpv{%;FMjMh4E{%=Em(lG377Mg~o6 zYHWPq)<dnewzFnr;IK)~$;`_vv14Rl*3b-NWMFa5Pf2BG;ALbG#$ppY13x2!0J=%+ z41$adBIu$ZmvJ!&FbMN7h%j(5GO*czEn;U7!=l(DHK%}!L6kw5ok5b3K@{CA=bY5U zA}$6A24OA+83s9a23c5uAwr^<he4h}fsuhNu^41EBZI0&G$bUD0@WHha6rnexfpmD zlt4~YW@M1mfM@_4>YSgGlbT$TnV)B^8OF)L$e_x@z{<eJ$iVNDnV0HUnwykb6q1;f zlgh{-<ddJAm=l&*lnLU41-TfQ8H5=bSV}T7iy0ZD5uuMB`PPgKT*3LJMaijdnIN-7 z(G}={;(<Ytfsuikfq{XMK@#K&21W*U1_lNu1`aUhWZ+_8WZ-6CU`PRrGcXwJX5fir z+snWg$-J9EAaXl{P;ey6ZU)iF?F{0<k*vEJBqFynNCod;klxOqxS2s^BiJ-G1_lNx z1~vu;29Swd3?dBN3~~%S3~CIV4EhYb4C-K2AXkXMZPaIAWME`qU|`kS&Y*!Xh7Byp V2G+s@X0tMAGH8Llpba)g2LL%<ytn`W literal 0 HcmV?d00001 diff --git a/src/application/Controller.java b/src/application/Controller.java new file mode 100644 index 0000000..3066586 --- /dev/null +++ b/src/application/Controller.java @@ -0,0 +1,185 @@ +package application; + +import java.util.ArrayList; +import java.util.Locale; +import java.util.ResourceBundle; + +import commands.PossibleCommands; +import commands.Command; +import commands.HistoryEntry; +import commands.HistoryType; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.scene.control.TextArea; +import javafx.scene.control.TextField; +import javafx.scene.input.KeyCode; +import javafx.scene.input.KeyEvent; +import javafx.stage.Stage; + +public class Controller +{ + @FXML private TextArea textareaHistory; + @FXML private TextField textfieldInput; + + public Stage stage; + private final ResourceBundle bundle = ResourceBundle.getBundle("application/", Locale.GERMANY); + + private ArrayList<HistoryEntry> globalHistory = new ArrayList<>(); + private int lastShwonCommand = 1; + private ArrayList<HistoryEntry> history = new ArrayList<>(); + private final String promptText = ">>>"; + + public void setStage(Stage stage) + { + this.stage = stage; + } + + public void init() + { + textareaHistory.setEditable(false); + textareaHistory.setWrapText(true); + + textfieldInput.setOnKeyPressed(new EventHandler<KeyEvent>() + { + @Override + public void handle(KeyEvent event) + { + if(event.getCode().equals(KeyCode.ENTER)) + { + parse(); + } + + if(event.getCode().equals(KeyCode.UP)) + { + showLastCommand(); + } + + if(event.getCode().equals(KeyCode.ESCAPE)) + { + clearConsole(); + } + } + }); + + printPrompt(); + } + + public void printPrompt() + { + setConsoleText(); + clearConsole(); + } + + public void print(String message) + { + history.add(new HistoryEntry(HistoryType.MESSAGE, message)); + setConsoleText(); + printPrompt(); + } + + public void clearHistoryLog() + { + textareaHistory.setText(""); + } + + public void clearHistory() + { + history = new ArrayList<>(); + } + + public void clearConsole() + { + textfieldInput.setText(""); + textfieldInput.requestFocus(); + } + + private void setConsoleText() + { + clearHistoryLog(); + + StringBuilder sb = new StringBuilder(); + boolean printedLastEntry = false; + for(int i = 0; i < history.size(); i++) + { + HistoryEntry currentEntry = history.get(i); + if(currentEntry.getType().equals(HistoryType.COMMAND)) + { + if(printedLastEntry) + { + sb.append("\n"); + } + sb.append(promptText); + sb.append(" "); + sb.append(currentEntry.getText()); + printedLastEntry = true; + } + else + { + if(i != 0) + { + sb.append("\n"); + } + sb.append(currentEntry.getText()); + printedLastEntry = true; + } + } + + textareaHistory.setText(sb.toString()); + textareaHistory.positionCaret(sb.toString().length()); + } + + private boolean executeCommand(String[] command) + { + for(Command cmd : PossibleCommands.possibleCommands) + { + if(cmd.getKeyword().equals(command[0])) + { + cmd.execute(command, this); + return true; + } + } + return false; + } + + private void parse() + { + String input = textfieldInput.getText().replace("\n", ""); + + if(input.equals("")) + { + printPrompt(); + return; + } + + globalHistory.add(new HistoryEntry(HistoryType.COMMAND, input)); + history.add(new HistoryEntry(HistoryType.COMMAND, input)); + lastShwonCommand = -1; + + String[] command = input.split(" "); + if(!executeCommand(command)) + { + print(bundle.getString("error.unknown.command")); + } + else + { + printPrompt(); + } + } + + private void showLastCommand() + { + if(globalHistory.size() > 0) + { + if(lastShwonCommand <= 0) + { + textfieldInput.setText(globalHistory.get(globalHistory.size()-1).getText()); + lastShwonCommand = globalHistory.size()-1; + } + else + { + textfieldInput.setText(globalHistory.get(lastShwonCommand - 1).getText()); + lastShwonCommand--; + } + } + } +} \ No newline at end of file diff --git a/src/application/Main.java b/src/application/Main.java new file mode 100644 index 0000000..4adcc79 --- /dev/null +++ b/src/application/Main.java @@ -0,0 +1,43 @@ +package application; + +import javafx.application.Application; +import javafx.fxml.FXMLLoader; +import javafx.scene.Parent; +import javafx.scene.Scene; +import javafx.stage.Stage; + +public class Main extends Application +{ + @Override + public void start(Stage stage) + { + try + { + FXMLLoader loader = new FXMLLoader(getClass().getResource("MainGUI.fxml")); + Parent root = (Parent)loader.load(); + + Scene scene = new Scene(root, 600, 600); + + stage.setResizable(true); + stage.setTitle("CommandLine"); + stage.setScene(scene); + stage.setResizable(true); + stage.setMinHeight(250); + stage.setMinWidth(400); + + Controller controller = (Controller)loader.getController(); + controller.setStage(stage); + controller.init(); + stage.show(); + } + catch(Exception e) + { + e.printStackTrace(); + } + } + + public static void main(String[] args) + { + launch(args); + } +} \ No newline at end of file diff --git a/src/application/MainGUI.fxml b/src/application/MainGUI.fxml new file mode 100644 index 0000000..3d7ae6e --- /dev/null +++ b/src/application/MainGUI.fxml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<?import javafx.geometry.Insets?> +<?import javafx.scene.control.TextArea?> +<?import javafx.scene.control.TextField?> +<?import javafx.scene.layout.AnchorPane?> +<?import javafx.scene.layout.VBox?> + +<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="600.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.Controller"> + <children> + <VBox layoutX="14.0" layoutY="14.0" AnchorPane.bottomAnchor="14.0" AnchorPane.leftAnchor="14.0" AnchorPane.rightAnchor="14.0" AnchorPane.topAnchor="14.0"> + <children> + <TextArea fx:id="textareaHistory" prefHeight="508.0" prefWidth="572.0" VBox.vgrow="ALWAYS" /> + <TextField fx:id="textfieldInput" prefHeight="46.0" prefWidth="572.0"> + <VBox.margin> + <Insets top="14.0" /> + </VBox.margin> + </TextField> + </children> + </VBox> + </children> +</AnchorPane> diff --git a/src/application/_de.properties b/src/application/_de.properties new file mode 100644 index 0000000..34e77ae --- /dev/null +++ b/src/application/_de.properties @@ -0,0 +1,12 @@ +app.name=CommandLine +version.code=1 +version.name=1.0.0 +version.date=22.07.16 + +help.list=list - lists all possible commands +help.help=help - shows help for given command\nSYNTAX: help [COMMAND] +help.clear=clear - clears the history + +error.unknown.command=Unknown command. Use \"list\" for a list of possible commands. +error.invalid.arguments=Invalid arguments. Use \"help commandname\" for help. +error.no.help=Unknown command as parameter. Can't display help. Use \"list\" for a list of possible commands \ No newline at end of file diff --git a/src/commands/Command.java b/src/commands/Command.java new file mode 100644 index 0000000..2f9d39e --- /dev/null +++ b/src/commands/Command.java @@ -0,0 +1,43 @@ +package commands; + +import java.util.Locale; +import java.util.ResourceBundle; + +import application.Controller; + +public abstract class Command +{ + public String keyword; + public int numberOfParams; + public String helptText; + public final ResourceBundle bundle = ResourceBundle.getBundle("application/", Locale.GERMANY); + + public String getKeyword() + { + return keyword; + } + + public int getNumberOfParams() + { + return numberOfParams; + } + + public String getHelpText() + { + return keyword; + } + + public boolean isValid(String[] command) + { + if((command.length - 1) < numberOfParams || (command.length -1) > numberOfParams) + { + return false; + } + else + { + return true; + } + } + + public abstract void execute(String[] command, Controller controller); +} \ No newline at end of file diff --git a/src/commands/CommandClear.java b/src/commands/CommandClear.java new file mode 100644 index 0000000..1facf0b --- /dev/null +++ b/src/commands/CommandClear.java @@ -0,0 +1,28 @@ +package commands; + +import application.Controller; + +public class CommandClear extends Command +{ + public CommandClear() + { + super.keyword = "clear"; + super.numberOfParams = 0; + super.helptText = "help.clear"; + } + + @Override + public void execute(String[] command, Controller controller) + { + if(!isValid(command)) + { + controller.print(bundle.getString("error.invalid.arguments")); + return; + } + + controller.clearHistory(); + controller.clearHistoryLog(); + controller.clearConsole(); + controller.printPrompt(); + } +} \ No newline at end of file diff --git a/src/commands/CommandHelp.java b/src/commands/CommandHelp.java new file mode 100644 index 0000000..36fb39a --- /dev/null +++ b/src/commands/CommandHelp.java @@ -0,0 +1,35 @@ +package commands; + +import application.Controller; + +public class CommandHelp extends Command +{ + public CommandHelp() + { + super(); + super.keyword = "help"; + super.numberOfParams = 1; + super.helptText = "help.help"; + } + + @Override + public void execute(String[] command, Controller controller) + { + if(!isValid(command)) + { + controller.print(bundle.getString("error.invalid.arguments")); + return; + } + + for(Command cmd : PossibleCommands.possibleCommands) + { + if(cmd.getKeyword().equals(command[1])) + { + controller.print(bundle.getString("help." + command[1])); + return; + } + } + + controller.print(bundle.getString("error.no.help")); + } +} diff --git a/src/commands/CommandList.java b/src/commands/CommandList.java new file mode 100644 index 0000000..2deaa74 --- /dev/null +++ b/src/commands/CommandList.java @@ -0,0 +1,50 @@ +package commands; + +import java.util.ArrayList; +import java.util.Comparator; + +import application.Controller; + +public class CommandList extends Command +{ + public CommandList() + { + super(); + super.keyword = "list"; + super.numberOfParams = 0; + super.helptText = "help.list"; + } + + @Override + public void execute(String[] command, Controller controller) + { + if(!isValid(command)) + { + controller.print(bundle.getString("error.invalid.arguments")); + return; + } + + ArrayList<Command> commands = PossibleCommands.possibleCommands; + commands.sort(new Comparator<Command>() + { + @Override + public int compare(Command o1, Command o2) + { + return o1.keyword.compareTo(o2.keyword); + } + }); + + StringBuilder sb = new StringBuilder(); + sb.append("All possible commands:\n"); + for(int i = 0; i < commands.size(); i++) + { + sb.append(commands.get(i).keyword); + if(i != (commands.size()-1)) + { + sb.append("\n"); + } + } + + controller.print(sb.toString()); + } +} \ No newline at end of file diff --git a/src/commands/HistoryEntry.java b/src/commands/HistoryEntry.java new file mode 100644 index 0000000..ffaf0a9 --- /dev/null +++ b/src/commands/HistoryEntry.java @@ -0,0 +1,28 @@ +package commands; + +public class HistoryEntry +{ + private HistoryType type; + private String text; + + public HistoryEntry(HistoryType type, String text) + { + this.type = type; + this.text = text; + } + + public HistoryType getType() + { + return type; + } + + public String getText() + { + return text; + } + + public String toString() + { + return "HistoryEntry [type=" + type + ", text=" + text + "]"; + } +} \ No newline at end of file diff --git a/src/commands/HistoryType.java b/src/commands/HistoryType.java new file mode 100644 index 0000000..169f897 --- /dev/null +++ b/src/commands/HistoryType.java @@ -0,0 +1,6 @@ +package commands; + +public enum HistoryType +{ + COMMAND, MESSAGE +} diff --git a/src/commands/PossibleCommands.java b/src/commands/PossibleCommands.java new file mode 100644 index 0000000..8de7de2 --- /dev/null +++ b/src/commands/PossibleCommands.java @@ -0,0 +1,14 @@ +package commands; + +import java.util.ArrayList; +import java.util.Arrays; + +public class PossibleCommands +{ + + public static final ArrayList<Command> possibleCommands = new ArrayList<>(Arrays.asList( + new CommandList(), + new CommandHelp(), + new CommandClear() + )); +} \ No newline at end of file -- GitLab