testnescobjecttreebuilder.java

来自「plugin for eclipse」· Java 代码 · 共 130 行

JAVA
130
字号
package isis.anp.test;

import isis.anp.common.ParserConfiguration;
import isis.anp.common.ParserMessage;
import isis.anp.config.ParserConfigurationFactory;
import isis.anp.config.PlatformProfile;
import isis.anp.config.SensorBoardProfile;
import isis.anp.nesc.common.NesCObjectTreeBuilderContext;
import isis.anp.nesc.ot.NesCFile;
import isis.anp.nesc.ot.Outline;
import isis.commons.fs.SearchPath;

import java.io.File;
import java.util.Iterator;
import java.util.List;


public class TestNesCObjectTreeBuilder {

	public static void main(String[] args) {
		new TestNesCObjectTreeBuilder().test();
	}

	public void test() {
		File tmpDir = null;
		String tmpDirPath = "nescparser_tmp";
		try {

			// Create temp dir
			tmpDir = new File(tmpDirPath);
			tmpDir.mkdir();

			String tosDir = "c:/tinyos-1.x/tos";
			String appDir = tosDir + "/../apps/Blink";
			String programName = "Blink.nc";

			// Build the user include directories (app dir, lib dirs, etc)
			SearchPath userSearchPathList = new SearchPath();
			userSearchPathList.add(appDir);
			userSearchPathList.add(tosDir + "/lib/Counters");
			userSearchPathList.add(tosDir + "/lib/Deluge");
			userSearchPathList.add(tosDir + "/lib/Deluge/TOSBoot/include");

			// Load platform specific defaults.
			PlatformProfile platformProfile = PlatformProfile.load("mica2");
			SensorBoardProfile sensorBoardProfile = SensorBoardProfile
					.load("none");

			// Create parser configration.
			ParserConfiguration parserConfig = ParserConfigurationFactory
					.create(tosDir, tmpDirPath, platformProfile,
							sensorBoardProfile, userSearchPathList, null);

			NesCObjectTreeBuilderContext builderCtx = new NesCObjectTreeBuilderContext(parserConfig);

			// Parse and build the object tree of the program.
			ParserMessage container = new ParserMessage(ParserMessage.INFO, "OT: Component file: "+programName, null, null);
			builderCtx.pushMessages(container);
			try {
				NesCFile nesCFile = builderCtx.getObjectTree(programName);
			} catch(ParserMessage m) {
				builderCtx.addMsg(m);
			}

			// Pring errors.
			System.out
					.println("Errors: ----------------------------------------------------------------");
			System.out.println(builderCtx.getMessages().toString());

			// Pring errors.
			System.out
					.println("Flat Errors: -----------------------------------------------------------");
			

			List l = builderCtx.getMessages().getFlatMessageList(ParserMessage.ERROR.getLevel() | ParserMessage.WARNING.getLevel() | ParserMessage.INTERNAL_ERROR.getLevel());
			Iterator i = l.iterator();
			while (i.hasNext()) {
				Exception e = (Exception) i.next();
				if(e!=null) {
				System.out.println(e.getMessage());
				} else {
					System.out.println("null");
				}
			}
			
			// Print the object tree.
			System.out
					.println("Object tree: -----------------------------------------------------------");

			Iterator it = builderCtx.getObjectTrees().iterator();
			while (it.hasNext()) {
				NesCFile ncf = (NesCFile) it.next();
				Outline o = new Outline();
				ncf.outline(o);
				System.out.println(o.toString());
			}

		} catch (Exception e) {
			System.err.println("exception: " + e);
			e.printStackTrace();
		} finally {
			// call GC to make sure all files get closed
			System.gc();
			// delete the temp dir
			deleteDir(tmpDir);
		}
	}

	/**
	 * Recursively deletes a directory.
	 * 
	 * @param dir
	 * @return success
	 */
	public static boolean deleteDir(File dir) {
		if (dir.isDirectory()) {
			String[] children = dir.list();
			for (int i = 0; i < children.length; i++) {
				boolean success = deleteDir(new File(dir, children[i]));
				if (!success) {
					return false;
				}
			}
		}

		// The directory is now empty so delete it
		return dir.delete();
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?