Files
EMARS/mars/tools/UnitAnimation.java
T
adolphenom 0da1c5dcca Source code of MARS Assembler
First commit of the 4.5 version (latest version available)
2014-12-21 12:49:28 +01:00

828 lines
28 KiB
Java

package mars.tools;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.MouseInfo;
import java.awt.PointerInfo;
import java.awt.RenderingHints;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.font.FontRenderContext;
import java.awt.font.TextLayout;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Vector;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import mars.Globals;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
class UnitAnimation extends JPanel
implements ActionListener {
/**
*
*/
private static final long serialVersionUID = -2681757800180958534L;
//config variables
private int PERIOD = 8; // velocity of frames in ms
private static final int PWIDTH = 1000; // size of this panel
private static final int PHEIGHT = 574;
private GraphicsConfiguration gc;
private GraphicsDevice gd; // for reporting accl. memory usage
private int accelMemory;
private DecimalFormat df;
private int counter; //verify then remove.
private boolean justStarted; //flag to start movement
private int indexX; //counter of screen position
private int indexY;
private boolean xIsMoving, yIsMoving; //flag for mouse movement.
// private Vertex[][] inputGraph;
private Vector<Vector<Vertex>> outputGraph;
private ArrayList<Vertex> vertexList;
private ArrayList<Vertex> vertexTraversed;
//Screen Label variables
private HashMap<String, String> registerEquivalenceTable;
private String instructionCode;
private int countRegLabel;
private int countALULabel;
private int countPCLabel;
private int register = 1;
private int control = 2;
private int aluControl = 3;
private int alu = 4;
private int datapatTypeUsed;
private Boolean cursorInIM, cursorInALU, cursorInDataMem, cursorInReg;
private Graphics2D g2d;
private BufferedImage datapath;
class Vertex {
private int numIndex;
private int init;
private int end;
private int current;
private String name;
public static final int movingUpside = 1;
public static final int movingDownside = 2;
public static final int movingLeft = 3;
public static final int movingRight = 4;
public int direction;
public int oppositeAxis;
private boolean isMovingXaxis;
private Color color;
private boolean first_interaction;
private boolean active;
private boolean isText;
private ArrayList<Integer> targetVertex;
public Vertex(int index, int init, int end, String name, int oppositeAxis, boolean isMovingXaxis,
String listOfColors, String listTargetVertex, boolean isText){
this.numIndex = index;
this.init = init;
this.current = this.init;
this.end = end;
this.name = name;
this.oppositeAxis = oppositeAxis;
this.isMovingXaxis = isMovingXaxis;
this.first_interaction = true;
this.active = false;
this.isText = isText;
this.color = new Color(0,153,0);
if(isMovingXaxis == true){
if( init < end)
direction = movingLeft;
else
direction = movingRight;
}
else{
if( init < end)
direction = movingUpside;
else
direction = movingDownside;
}
String[] list = listTargetVertex.split("#");
targetVertex = new ArrayList<Integer>();
for(int i = 0; i < list.length; i++){
targetVertex.add(Integer.parseInt(list[i]));
// System.out.println("Adding " + i + " " + Integer.parseInt(list[i])+ " in target");
}
String[] listColor = listOfColors.split("#");
this.color = new Color(Integer.parseInt(listColor[0]) , Integer.parseInt(listColor[1]), Integer.parseInt(listColor[2]) );
}
public int getDirection(){
return direction;
}
public boolean isText(){
return this.isText;
}
public ArrayList<Integer> getTargetVertex() {
return targetVertex;
}
public int getNumIndex() {
return numIndex;
}
public void setNumIndex(int numIndex) {
this.numIndex = numIndex;
}
public int getInit() {
return init;
}
public void setInit(int init) {
this.init = init;
}
public int getEnd() {
return end;
}
public void setEnd(int end) {
this.end = end;
}
public int getCurrent() {
return current;
}
public void setCurrent(int current) {
this.current = current;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getOppositeAxis() {
return oppositeAxis;
}
public void setOppositeAxis(int oppositeAxis) {
this.oppositeAxis = oppositeAxis;
}
public boolean isMovingXaxis() {
return isMovingXaxis;
}
public void setMovingXaxis(boolean isMovingXaxis) {
this.isMovingXaxis = isMovingXaxis;
}
public Color getColor() {
return color;
}
public void setColor(Color color) {
this.color = color;
}
public boolean isFirst_interaction() {
return first_interaction;
}
public void setFirst_interaction(boolean first_interaction) {
this.first_interaction = first_interaction;
}
public boolean isActive() {
return active;
}
public void setActive(boolean active) {
this.active = active;
}
}
public UnitAnimation(String instructionBinary, int datapathType)
{
datapatTypeUsed = datapathType;
cursorInIM = false;
cursorInALU = false;
cursorInDataMem = false;
df = new DecimalFormat("0.0"); // 1 dp
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
gd = ge.getDefaultScreenDevice();
gc = ge.getDefaultScreenDevice().getDefaultConfiguration();
accelMemory = gd.getAvailableAcceleratedMemory(); // in bytes
setBackground(Color.white);
setPreferredSize( new Dimension(PWIDTH, PHEIGHT) );
// load and initialise the images
initImages();
vertexList = new ArrayList<Vertex>();
counter = 0;
justStarted = true;
instructionCode = instructionBinary;
//declaration of labels definition.
registerEquivalenceTable = new HashMap<String, String>();
countRegLabel = 400;
countALULabel = 380;
countPCLabel = 380;
loadHashMapValues();
} // end of ImagesTests()
//set the binnary opcode value of the basic instructions of MIPS instruction set
public void loadHashMapValues(){
if(datapatTypeUsed == register){
importXmlStringData("/registerDatapath.xml", registerEquivalenceTable, "register_equivalence", "bits", "mnemonic");
importXmlDatapathMap("/registerDatapath.xml", "datapath_map");
}
else if(datapatTypeUsed == control){
importXmlStringData("/controlDatapath.xml", registerEquivalenceTable, "register_equivalence", "bits", "mnemonic");
importXmlDatapathMap("/controlDatapath.xml", "datapath_map");
}
else if(datapatTypeUsed == aluControl){
importXmlStringData("/ALUcontrolDatapath.xml", registerEquivalenceTable, "register_equivalence", "bits", "mnemonic");
importXmlDatapathMapAluControl("/ALUcontrolDatapath.xml", "datapath_map");
}
}
//import the list of opcodes of mips set of instructions
public void importXmlStringData(String xmlName, HashMap table, String elementTree, String tagId, String tagData){
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(false);
DocumentBuilder docBuilder;
try {
//System.out.println();
docBuilder = dbf.newDocumentBuilder();
Document doc = docBuilder.parse(getClass().getResource(xmlName).toString());
Element root = doc.getDocumentElement();
Element equivalenceItem;
NodeList bitsList, mnemonic;
NodeList equivalenceList = root.getElementsByTagName(elementTree);
for(int i = 0; i < equivalenceList.getLength(); i++){
equivalenceItem = (Element)equivalenceList.item(i);
bitsList = equivalenceItem.getElementsByTagName(tagId);
mnemonic = equivalenceItem.getElementsByTagName(tagData);
for(int j= 0; j < bitsList.getLength(); j++){
table.put(bitsList.item(j).getTextContent(),mnemonic.item(j).getTextContent());
}
}
}
catch (Exception e) {
e.printStackTrace();
}
}
//import the parameters of the animation on datapath
public void importXmlDatapathMap(String xmlName, String elementTree){
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(false);
DocumentBuilder docBuilder;
try {
docBuilder = dbf.newDocumentBuilder();
Document doc = docBuilder.parse(getClass().getResource(xmlName).toString());
Element root = doc.getDocumentElement();
Element datapath_mapItem;
NodeList index_vertex, name, init, end,color, other_axis, isMovingXaxis, targetVertex, sourceVertex, isText ;
NodeList datapath_mapList = root.getElementsByTagName(elementTree);
for(int i = 0; i < datapath_mapList.getLength(); i++){ //extract the vertex of the xml input and encapsulate into the vertex object
datapath_mapItem = (Element)datapath_mapList.item(i);
index_vertex = datapath_mapItem.getElementsByTagName("num_vertex");
name = datapath_mapItem.getElementsByTagName("name");
init = datapath_mapItem.getElementsByTagName("init");
end = datapath_mapItem.getElementsByTagName("end");
//definition of colors line
if(instructionCode.substring(0,6).equals("000000")){//R-type instructions
color = datapath_mapItem.getElementsByTagName("color_Rtype");
//System.out.println("rtype");
}
else if(instructionCode.substring(0,6).matches("00001[0-1]")){ //J-type instructions
color = datapath_mapItem.getElementsByTagName("color_Jtype");
//System.out.println("jtype");
}
else if(instructionCode.substring(0,6).matches("100[0-1][0-1][0-1]")){ //LOAD type instructions
color = datapath_mapItem.getElementsByTagName("color_LOADtype");
//System.out.println("load type");
}
else if(instructionCode.substring(0,6).matches("101[0-1][0-1][0-1]")){ //LOAD type instructions
color = datapath_mapItem.getElementsByTagName("color_STOREtype");
//System.out.println("store type");
}
else if(instructionCode.substring(0,6).matches("0001[0-1][0-1]")){ //BRANCH type instructions
color = datapath_mapItem.getElementsByTagName("color_BRANCHtype");
//System.out.println("branch type");
}
else{ //BRANCH type instructions
color = datapath_mapItem.getElementsByTagName("color_Itype");
//System.out.println("immediate type");
}
other_axis = datapath_mapItem.getElementsByTagName("other_axis");
isMovingXaxis = datapath_mapItem.getElementsByTagName("isMovingXaxis");
targetVertex = datapath_mapItem.getElementsByTagName("target_vertex");
isText = datapath_mapItem.getElementsByTagName("is_text");
for(int j= 0; j < index_vertex.getLength(); j++){
Vertex vert = new Vertex(Integer.parseInt(index_vertex.item(j).getTextContent()), Integer.parseInt(init.item(j).getTextContent()),
Integer.parseInt(end.item(j).getTextContent()), name.item(j).getTextContent(), Integer.parseInt(other_axis.item(j).getTextContent()),
Boolean.parseBoolean(isMovingXaxis.item(j).getTextContent()), color.item(j).getTextContent(), targetVertex.item(j).getTextContent(), Boolean.parseBoolean(isText.item(j).getTextContent()));
vertexList.add(vert);
}
}
//loading matrix of control of vertex.
outputGraph = new Vector<Vector<Vertex>>();
vertexTraversed = new ArrayList<Vertex>();
int size = vertexList.size();
Vertex vertex;
ArrayList<Integer> targetList;
for(int i = 0; i < vertexList.size(); i++){
vertex = vertexList.get(i);
targetList = vertex.getTargetVertex();
Vector<Vertex> vertexOfTargets = new Vector<Vertex>();
for(int k = 0; k < targetList.size(); k++){
vertexOfTargets.add(vertexList.get(targetList.get(k)));
}
outputGraph.add(vertexOfTargets);
}
for(int i=0; i< outputGraph.size(); i++){
Vector<Vertex> vert = outputGraph.get(i);
}
vertexList.get(0).setActive(true);
vertexTraversed.add(vertexList.get(0));
}
catch (Exception e) {
e.printStackTrace();
}
}
public void importXmlDatapathMapAluControl(String xmlName, String elementTree){
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(false);
DocumentBuilder docBuilder;
try {
docBuilder = dbf.newDocumentBuilder();
Document doc = docBuilder.parse(getClass().getResource(xmlName).toString());
Element root = doc.getDocumentElement();
Element datapath_mapItem;
NodeList index_vertex, name, init, end,color, other_axis, isMovingXaxis, targetVertex, sourceVertex, isText ;
NodeList datapath_mapList = root.getElementsByTagName(elementTree);
for(int i = 0; i < datapath_mapList.getLength(); i++){ //extract the vertex of the xml input and encapsulate into the vertex object
datapath_mapItem = (Element)datapath_mapList.item(i);
index_vertex = datapath_mapItem.getElementsByTagName("num_vertex");
name = datapath_mapItem.getElementsByTagName("name");
init = datapath_mapItem.getElementsByTagName("init");
end = datapath_mapItem.getElementsByTagName("end");
//definition of colors line
if(instructionCode.substring(0,6).equals("000000")){//R-type instructions
if(instructionCode.substring(28,32).matches("0000")){ //BRANCH type instructions
color = datapath_mapItem.getElementsByTagName("ALU_out010");
System.out.println("ALU_out010 type " + instructionCode.substring(28,32));
}
else if(instructionCode.substring(28,32).matches("0010")){ //BRANCH type instructions
color = datapath_mapItem.getElementsByTagName("ALU_out110");
System.out.println("ALU_out110 type " + instructionCode.substring(28,32));
}
else if(instructionCode.substring(28,32).matches("0100")){ //BRANCH type instructions
color = datapath_mapItem.getElementsByTagName("ALU_out000");
System.out.println("ALU_out000 type " + instructionCode.substring(28,32));
}
else if(instructionCode.substring(28,32).matches("0101")){ //BRANCH type instructions
color = datapath_mapItem.getElementsByTagName("ALU_out001");
System.out.println("ALU_out001 type " + instructionCode.substring(28,32));
}
else{ //BRANCH type instructions
color = datapath_mapItem.getElementsByTagName("ALU_out111");
System.out.println("ALU_out111 type " + instructionCode.substring(28,32));
}
}
else if(instructionCode.substring(0,6).matches("00001[0-1]")){ //J-type instructions
color = datapath_mapItem.getElementsByTagName("color_Jtype");
System.out.println("jtype");
}
else if(instructionCode.substring(0,6).matches("100[0-1][0-1][0-1]")){ //LOAD type instructions
color = datapath_mapItem.getElementsByTagName("color_LOADtype");
System.out.println("load type");
}
else if(instructionCode.substring(0,6).matches("101[0-1][0-1][0-1]")){ //LOAD type instructions
color = datapath_mapItem.getElementsByTagName("color_STOREtype");
System.out.println("store type");
}
else if(instructionCode.substring(0,6).matches("0001[0-1][0-1]")){ //BRANCH type instructions
color = datapath_mapItem.getElementsByTagName("color_BRANCHtype");
System.out.println("branch type");
}
else{
color = datapath_mapItem.getElementsByTagName("color_Itype");
System.out.println("immediate type");
}
other_axis = datapath_mapItem.getElementsByTagName("other_axis");
isMovingXaxis = datapath_mapItem.getElementsByTagName("isMovingXaxis");
targetVertex = datapath_mapItem.getElementsByTagName("target_vertex");
isText = datapath_mapItem.getElementsByTagName("is_text");
for(int j= 0; j < index_vertex.getLength(); j++){
Vertex vert = new Vertex(Integer.parseInt(index_vertex.item(j).getTextContent()), Integer.parseInt(init.item(j).getTextContent()),
Integer.parseInt(end.item(j).getTextContent()), name.item(j).getTextContent(), Integer.parseInt(other_axis.item(j).getTextContent()),
Boolean.parseBoolean(isMovingXaxis.item(j).getTextContent()), color.item(j).getTextContent(), targetVertex.item(j).getTextContent(), Boolean.parseBoolean(isText.item(j).getTextContent()));
vertexList.add(vert);
}
}
//loading matrix of control of vertex.
outputGraph = new Vector<Vector<Vertex>>();
vertexTraversed = new ArrayList<Vertex>();
int size = vertexList.size();
Vertex vertex;
ArrayList<Integer> targetList;
for(int i = 0; i < vertexList.size(); i++){
vertex = vertexList.get(i);
targetList = vertex.getTargetVertex();
Vector<Vertex> vertexOfTargets = new Vector<Vertex>();
for(int k = 0; k < targetList.size(); k++){
vertexOfTargets.add(vertexList.get(targetList.get(k)));
}
outputGraph.add(vertexOfTargets);
}
for(int i=0; i< outputGraph.size(); i++){
Vector<Vertex> vert = outputGraph.get(i);
}
vertexList.get(0).setActive(true);
vertexTraversed.add(vertexList.get(0));
}
catch (Exception e) {
e.printStackTrace();
}
}
//set the initial state of the variables that controls the animation, and start the timer that triggers the animation.
public void startAnimation(String codeInstruction){
instructionCode = codeInstruction;
new Timer(PERIOD, this).start(); // start timer
this.repaint();
}
//initialize the image of datapath.
private void initImages(){
try {
BufferedImage im;
if(datapatTypeUsed == register){
im = ImageIO.read(
getClass().getResource(Globals.imagesPath+"register.png") );
}
else if(datapatTypeUsed == control){
im = ImageIO.read(
getClass().getResource(Globals.imagesPath+"control.png") );
}
else if(datapatTypeUsed == aluControl){
im = ImageIO.read(
getClass().getResource(Globals.imagesPath+"ALUcontrol.png") );
}
else{
im = ImageIO.read(
getClass().getResource(Globals.imagesPath+"alu.png") );
}
int transparency = im.getColorModel().getTransparency();
datapath = gc.createCompatibleImage(
im.getWidth(), im.getHeight(),
transparency );
g2d = datapath.createGraphics();
g2d.drawImage(im,0,0,null);
g2d.dispose();
}
catch(IOException e) {
System.out.println("Load Image error for " +
getClass().getResource(Globals.imagesPath+"register.png") + ":\n" + e);
}
}
public void updateDisplay(){
this.repaint();
}
public void actionPerformed(ActionEvent e)
// triggered by the timer: update, repaint
{
if (justStarted)
justStarted = false;
if(xIsMoving)
indexX++;
if(yIsMoving)
indexY--;
repaint();
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g2d = (Graphics2D)g;
// use antialiasing
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
// smoother (and slower) image transformations (e.g. for resizing)
g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g2d = (Graphics2D)g;
drawImage(g2d, datapath, 0,0,null);
executeAnimation(g);
counter = (counter + 1)% 100;
g2d.dispose();
}
private void drawImage(Graphics2D g2d, BufferedImage im, int x, int y,Color c){
if (im == null) {
g2d.setColor(c);
g2d.fillOval(x, y, 20, 20);
g2d.setColor(Color.black);
g2d.drawString(" ", x, y);
}
else
g2d.drawImage(im, x, y, this);
}
//draw lines.
//method to draw the lines that run from left to right.
public void printTrackLtoR(Vertex v){
int size;
int[] track;
size = v.getEnd() - v.getInit();
track = new int[size];
for(int i = 0; i < size; i++)
track[i] = v.getInit()+i;
if(v.isActive() == true){
v.setFirst_interaction(false);
for(int i = 0; i < size; i++){
if(track[i] <= v.getCurrent()){
g2d.setColor(v.getColor());
g2d.fillRect(track[i], v.getOppositeAxis(), 3, 3);
}
}
if (v.getCurrent() == track[size-1])
v.setActive(false);
v.setCurrent(v.getCurrent()+1);
}
else if(v.isFirst_interaction() == false){
for(int i = 0; i < size ; i++){
g2d.setColor(v.getColor());
g2d.fillRect(track[i],v.getOppositeAxis(), 3, 3);
}
}
}
//method to draw the lines that run from right to left.
//public boolean printTrackRtoL(int init, int end ,int currentIndex, Graphics2D g2d, Color color, int otherAxis,
// boolean active, boolean firstInteraction){
public void printTrackRtoL(Vertex v){
int size;
int[] track;
size = v.getInit() - v.getEnd();
track = new int[size];
for(int i = 0; i < size; i++)
track[i] = v.getInit()-i;
if(v.isActive() == true){
v.setFirst_interaction(false);
for(int i = 0; i < size; i++){
if(track[i] >= v.getCurrent()){
g2d.setColor(v.getColor());
g2d.fillRect(track[i], v.getOppositeAxis(), 3, 3);
}
}
if (v.getCurrent() == track[size-1])
v.setActive(false);
v.setCurrent(v.getCurrent()-1);
}
else if(v.isFirst_interaction() == false){
for(int i = 0; i < size ; i++){
g2d.setColor(v.getColor());
g2d.fillRect(track[i],v.getOppositeAxis(), 3, 3);
}
}
}
//method to draw the lines that run from down to top.
// public boolean printTrackDtoU(int init, int end ,int currentIndex, Graphics2D g2d, Color color, int otherAxis,
// boolean active, boolean firstInteraction){
public void printTrackDtoU(Vertex v){
int size;
int[] track;
if(v.getInit() > v.getEnd()){
size = v.getInit() - v.getEnd();
track = new int[size];
for(int i = 0; i < size; i++)
track[i] = v.getInit()-i;
}
else{
size = v.getEnd() - v.getInit();
track = new int[size];
for(int i = 0; i < size; i++)
track[i] = v.getInit()+i;
}
if(v.isActive() == true){
v.setFirst_interaction(false);
for(int i = 0; i < size; i++){
if(track[i] >= v.getCurrent()){
g2d.setColor(v.getColor());
g2d.fillRect(v.getOppositeAxis(), track[i], 3, 3);
}
}
if (v.getCurrent() == track[size-1])
v.setActive(false);
v.setCurrent(v.getCurrent()-1);
}
else if(v.isFirst_interaction() == false){
for(int i = 0; i < size; i++){
g2d.setColor(v.getColor());
g2d.fillRect(v.getOppositeAxis(), track[i], 3, 3);
}
}
}
//method to draw the lines that run from top to down.
// public boolean printTrackUtoD(int init, int end ,int currentIndex, Graphics2D g2d, Color color, int otherAxis,
// boolean active, boolean firstInteraction){
public void printTrackUtoD(Vertex v){
int size;
int[] track;
size = v.getEnd() - v.getInit();
track = new int[size];
for(int i = 0; i < size; i++)
track[i] = v.getInit()+i;
if(v.isActive() == true){
v.setFirst_interaction(false);
for(int i = 0; i < size; i++){
if(track[i] <= v.getCurrent()){
g2d.setColor(v.getColor());
g2d.fillRect(v.getOppositeAxis(), track[i], 3, 3);
}
}
if (v.getCurrent() == track[size-1])
v.setActive(false);
v.setCurrent(v.getCurrent()+1);
}
else if(v.isFirst_interaction() == false){
for(int i = 0; i < size; i++){
g2d.setColor(v.getColor());
g2d.fillRect(v.getOppositeAxis(), track[i], 3, 3);
}
}
}
//convert binnary value to integer.
public String parseBinToInt(String code){
int value = 0;
for(int i =code.length()-1; i >= 0; i--){
if("1".equals(code.substring(i,i+1))){
value = value + (int)Math.pow(2,code.length()-i-1);
}
}
return Integer.toString(value);
}
//set and execute the information about the current position of each line of information in the animation,
//verifies the previous status of the animation and increment the position of each line that interconnect the unit function.
private void executeAnimation(Graphics g){
g2d = (Graphics2D)g;
Vertex vert;
for(int i = 0; i < vertexTraversed.size(); i++){
vert = vertexTraversed.get(i);
if(vert.isMovingXaxis == true){
if(vert.getDirection() == vert.movingLeft){
printTrackLtoR(vert);
if(vert.isActive() == false){
int j = vert.getTargetVertex().size();
Vertex tempVertex;
for(int k = 0; k < j; k++){
tempVertex = outputGraph.get(vert.getNumIndex()).get(k);
Boolean hasThisVertex = false;
for(int m = 0 ; m < vertexTraversed.size(); m++){
if(tempVertex.getNumIndex() == vertexTraversed.get(m).getNumIndex())
hasThisVertex = true;
}
if(hasThisVertex == false){
outputGraph.get(vert.getNumIndex()).get(k).setActive(true);
vertexTraversed.add( outputGraph.get(vert.getNumIndex()).get(k));
}
}
}
}
else{
printTrackRtoL(vert);
if(vert.isActive() == false){
int j = vert.getTargetVertex().size();
Vertex tempVertex;
for(int k = 0; k < j; k++){
tempVertex = outputGraph.get(vert.getNumIndex()).get(k);
Boolean hasThisVertex = false;
for(int m = 0 ; m < vertexTraversed.size(); m++){
if(tempVertex.getNumIndex() == vertexTraversed.get(m).getNumIndex())
hasThisVertex = true;
}
if(hasThisVertex == false){
outputGraph.get(vert.getNumIndex()).get(k).setActive(true);
vertexTraversed.add( outputGraph.get(vert.getNumIndex()).get(k));
}
}
}
}
} //end of condition of X axis
else{
if(vert.getDirection() == vert.movingDownside){
if(vert.isText == true)
;
else
printTrackDtoU(vert);
if(vert.isActive() == false){
int j = vert.getTargetVertex().size();
Vertex tempVertex;
for(int k = 0; k < j; k++){
tempVertex = outputGraph.get(vert.getNumIndex()).get(k);
Boolean hasThisVertex = false;
for(int m = 0 ; m < vertexTraversed.size(); m++){
if(tempVertex.getNumIndex() == vertexTraversed.get(m).getNumIndex())
hasThisVertex = true;
}
if(hasThisVertex == false){
outputGraph.get(vert.getNumIndex()).get(k).setActive(true);
vertexTraversed.add( outputGraph.get(vert.getNumIndex()).get(k));
}
}
}
}
else{
printTrackUtoD(vert);
if(vert.isActive() == false){
int j = vert.getTargetVertex().size();
Vertex tempVertex;
for(int k = 0; k < j; k++){
tempVertex = outputGraph.get(vert.getNumIndex()).get(k);
Boolean hasThisVertex = false;
for(int m = 0 ; m < vertexTraversed.size(); m++){
if(tempVertex.getNumIndex() == vertexTraversed.get(m).getNumIndex())
hasThisVertex = true;
}
if(hasThisVertex == false){
outputGraph.get(vert.getNumIndex()).get(k).setActive(true);
vertexTraversed.add( outputGraph.get(vert.getNumIndex()).get(k));
}
}
}
}
}
}
}
}