KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > eclipse > emf > importer > rose > builder > RoseWalker


1 /**
2  * <copyright>
3  *
4  * Copyright (c) 2002-2004 IBM Corporation and others.
5  * All rights reserved. This program and the accompanying materials
6  * are made available under the terms of the Eclipse Public License v1.0
7  * which accompanies this distribution, and is available at
8  * http://www.eclipse.org/legal/epl-v10.html
9  *
10  * Contributors:
11  * IBM - Initial API and implementation
12  *
13  * </copyright>
14  *
15  * $Id: RoseWalker.java,v 1.2 2005/06/08 06:20:36 nickb Exp $
16  */

17 package org.eclipse.emf.importer.rose.builder;
18
19 import java.util.List JavaDoc;
20
21 import org.eclipse.emf.importer.rose.parser.RoseNode;
22
23
24 /**
25  * Traverses the Rose file a second time to create mapping object.
26  */

27 public class RoseWalker
28 {
29   private RoseNode roseNode;
30   private RoseVisitor visitor;
31
32   public RoseWalker(RoseNode roseNode)
33   {
34     this.roseNode = roseNode;
35   }
36
37   public void traverse(RoseVisitor visitor)
38   {
39     this.visitor = visitor;
40     traverseObject(roseNode);
41   }
42
43   private void traverseObject(RoseNode roseNode)
44   {
45     visitor.visitObject(roseNode);
46     traverse(roseNode);
47   }
48
49   private void traverseList(RoseNode roseNode)
50   {
51     visitor.visitList(roseNode);
52     traverse(roseNode);
53   }
54
55   private void traverse(RoseNode roseNode)
56   {
57     List JavaDoc nodes = roseNode.getNodes();
58     for (int i = 0; i < nodes.size(); i++)
59     {
60       RoseNode node = (RoseNode)nodes.get(i);
61       if (node.getRoseNodeType() == RoseNode.OBJECT)
62       {
63         traverseObject(node);
64       }
65       else if (node.getRoseNodeType() == RoseNode.LIST)
66       {
67         traverseList(node);
68       }
69     }
70   }
71 }
72
Popular Tags