abstracting the underlying multiple operating system architecture for comprehensive command line...
TRANSCRIPT
MorphAbstracting the Underlying Multiple Operating System Architecture for Comprehensive Command Line Graphical Interface
Objectives Bridge the gap for
new users
Create a more user friendly environment with the Command Line feel
Dynamic program that fits the user’s needs
Data StorageData about functions are stored in an XML
file.Additional functions can be added as they are
needed.Follows a standard format so Linux &
Windows commands can easily be swapped and the same parser can be used.
XML allows for commands to easily be added and removed (not hardcoded).
Data StorageThis is what our XML syntax is:
<category name="Terminal Management"> <command name="man"> <phrase>view help pages</phrase> <summary>This command is used to view help pages for...</summary> <commonparameters>Common parameters for this command include... </commonparameters> <synopsis>man [-acdfFhkKtwW] [--path] [-m system] [-p string]...</synopsis> <description>man formats and displays the on-line manual pages. If...</description> <parameters> <parameter name="-C config_file">Specify the configuration file ...</parameter> <parameter name="-M path">Specify the list of directories to...</parameter> </parameters> <examples> <example name="man ls">displays the manpage for the ls command</example> <example name="man -f ping">displays very short description of what...</example> </examples> </command></category name>
ParserThe parser is the part of the project that
takes the data from the XML and makes it available to the calling class.
It is agnostic to whether the XML is for Linux or Windows. It simply takes the file as a parameter and parses it.
It provides the parsed data as a series of get() methods. There are no set() methods.
ParserThe parser generates a DOM (Document-
Object Model) tree from the XML document.This tree is then parsed and the data from the tree is placed into a hash-table
The hash-table structure allows very quick O(1) access time for the data.
All the work is done on instantiation.
TestingTesting was crucial to make sure that
everything worked. Several interacting parts
Run with or without SSH Run on Linux/Windows/MacProper DropdownsHelp textParserXML Files
Research and Operating System PrinciplesProcess Builder• allows for execution of system processes• similar to concepts of Process Creation in
Chapter 3 of our textbook• ProcessBuilder.start() fork• ProcessBuilder.waitFor() join
Threads• used to isolate the execution of the thread so
the main GUI remained responsive (avoids complexity of thread synchronization)
• two ways to implement threads in Java• implement the Runnable interface• extend the Thread class
Research and Operating System Principles
Threads• override run() method with code wanted to
be run separately as a thread• start a thread by simply calling the
Thread.start() method.
Research and Operating System Principles
Networking ClassSends commands directly to a server
bypassing third party programs such as Putty or Chameleon
Application receives output sent from server and displays it in the command prompt window.
Networking ClassModification of the open source terminal
emulator JCTerm by Jcraft.Licensed under GNU LGPL License (allows use
of library in proprietary programs, either open or closed source)
JC Term is in turn based on the JSch SSH client, also by JcraftLicensed under BSD License (same restrictions
as LGPL, BSD code used in Mac OS X)
Networking ClassFeatures of JCTerm
Local/Remote Port ForwardingSFTP SupportSSH2 Protocol SupportPack Compression SupportAnti-Aliasing (set to disabled for Morph)
Interfacing with Command LineIf not using the networking class, the
command is executed using on the user’s local operating system using the ProcessBuilder class.
Since different tasks are independent and isolated processes, an additional command will be needed to get the current working directory.
Works on any operating systems, but the syntax is obviously different
Interfacing with Command LineWindows
Commands must be preceded by “cmd /c”This especially calls the Windows command
interpreter with the /c switch indicating to execute the command and then exit
Example: “cmd /c dir” command to list contents of current directory
To get current directory, append command with “ & cd” (ex: “cmd /c cd .. & cd”)
Interfacing with Command LineLinux
Commands must be preceded by “/bin/bash -c”This especially passes the Linux command to
the bash shell which then executes the command
Example: “/bin/bash -c ls” command to list contents of current directory
To get current directory, append command with “;pwd” (ex: “/bin/bash cd ..;pwd”)
CommandsLinux Windows clear cp ls mv mkdir rm ps top kill cd Compilation commands (javac, g++, gcc) Execute commands (java, gdb, a.out) man grep locate lpr exit ping ifconfig vi
cls copy xcopy dir move mkdir rmdir del tasklist taskkill cd javac java help find findstr print exit ping ipconfig rename
References Alexander, A. (2010, February 4). Java exec - execute system processes with
Java ProcessBuilder and Process (part 2). devdaily. Retrieved December 2, 2010, from http://www.devdaily.com/java/java-exec-processbuilder-process-2
Class ProcessBuilder. (2010).Java API. Retrieved December 2, 2010, from http://download.oracle.com/javase/1.5.0/docs/api/java/lang/ProcessBuilder.html
Class System. (2010). Java API. Retrieved December 2, 2010, from http://download.oracle.com/javase/1.4.2/docs/api/java/lang/System.html
Display ToolTip in JComboBox. (n.d.). Happy Codings - Java Programming. Retrieved December 2, 2010, from http://www.java.happycodings.com/Java_Swing/code17.html
Drake, Donald. G. (1996, April 1). Introduction to Java threads.JavaWorld. Retrieved December 3, 2010, from http://www.javaworld.com/javaworld/jw-04-1996/jw-04-threads.html
Freitag, P. (2005, September 27). Parsing, Modifying, and outputting XML Documents with Java. Retrieved December 2, 2010, from http://www.petefreitag.com/
References From Runtime.exec() to ProcessBuilder. (2008). Java Tips. Retrieved
December 2, 2010, from http://www.java-tips.org/java-se-tips/java.util/from-runtime.exec-to-processbuilder.html
How to read XML file in Java. (n.d.). Java Tips - Home. Retrieved December 2, 2010, from http://www.java-tips.org/java-se-tips/javax.xml.parsers/how-to-read-xml-file-in-java.html
Img source: http://www3.ntu.edu.sg/home/ehchua/programming/java/J6d_xml.html
JCTerm - SSH2 Terminal Emulator in Pure Java. (2010). JCraft. Retrieved December 2, 2010, from http://www.jcraft.com/jcterm/
Jericho HTML Parser. (n.d.).Jericho HTML Parser. Retrieved December 2, 2010, from http://jericho.htmlparser.net/docs/index.html
JSch - Java Secure Channel. (n.d.). JCraft. Retrieved December 2, 2010, from http://www.jcraft.com/jsch/
Tutorial: XML generation with Java. (2002, July 5).JavaZOOM. Retrieved December 2, 2010, from http://www.javazoom.net/
XML Tutorial. (2010). W3Schools Online Web Tutorials. Retrieved December 2, 2010, from http://www.w3schools.com/xml/