remove java
This commit is contained in:
		
							parent
							
								
									9c25fdd816
								
							
						
					
					
						commit
						2224ed3aa5
					
				| @ -1,2 +0,0 @@ | |||||||
| </body> |  | ||||||
| </html> |  | ||||||
| @ -1,8 +0,0 @@ | |||||||
|   |  | ||||||
| <html> |  | ||||||
| <head> |  | ||||||
| <title>Security Enhanced Linux Reference Policy</title> |  | ||||||
| <style type="text/css" media="all">@import "style.css";</style> |  | ||||||
| </head> |  | ||||||
| <body> |  | ||||||
| <div id="Header">Security Enhanced Linux Reference Policy</div> |  | ||||||
| @ -1,17 +0,0 @@ | |||||||
| <!ELEMENT policy (module+)> |  | ||||||
| <!ELEMENT module (summary,interface+)> |  | ||||||
| <!ATTLIST module  |  | ||||||
|       name CDATA #REQUIRED |  | ||||||
|       layer CDATA #REQUIRED> |  | ||||||
| <!ELEMENT summary (#PCDATA)> |  | ||||||
| <!ELEMENT interface (description,parameter+,infoflow)> |  | ||||||
| <!ATTLIST interface name CDATA #REQUIRED> |  | ||||||
| <!ELEMENT description (#PCDATA)> |  | ||||||
| <!ELEMENT parameter (#PCDATA)> |  | ||||||
| <!ATTLIST parameter  |  | ||||||
|       name CDATA #REQUIRED |  | ||||||
|       optional (true|false) "false"> |  | ||||||
| <!ELEMENT infoflow EMPTY> |  | ||||||
| <!ATTLIST infoflow  |  | ||||||
|       type CDATA #REQUIRED |  | ||||||
|       weight CDATA #IMPLIED> |  | ||||||
| @ -1,247 +0,0 @@ | |||||||
| /* Copyright (C) 2005 Tresys Technology, LLC |  | ||||||
|  * License: refer to COPYING file for license information. |  | ||||||
|  * Authors: Spencer Shimko <sshimko@tresys.com> |  | ||||||
|  *  |  | ||||||
|  * Converter.java: The reference policy documentation converter		 |  | ||||||
|  * Version: @version@  |  | ||||||
|  */ |  | ||||||
| import policy.*; |  | ||||||
| 
 |  | ||||||
| import java.io.BufferedReader; |  | ||||||
| import java.io.File; |  | ||||||
| import java.io.FileOutputStream; |  | ||||||
| import java.io.FileReader; |  | ||||||
| import java.io.IOException; |  | ||||||
| import java.io.PrintStream; |  | ||||||
| 
 |  | ||||||
| import java.util.Map; |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * The reference policy documentation generator and xml analyzer class. |  | ||||||
|  * It pulls in XML describing reference policy, transmogrifies it, |  | ||||||
|  * and spits it back out in some other arbitrary format. |  | ||||||
|  */ |  | ||||||
| public class Converter{ |  | ||||||
| 	private Policy policy; |  | ||||||
| 	private static final String HTMLEXT = ".html"; |  | ||||||
| 	private static final String indexContent =  |  | ||||||
| 		"<div id=\"Content\"><h2>Welcome to the reference policy API!</h2><p/>" + |  | ||||||
| 		"Please choose from the navigation options to the left.</div>"; |  | ||||||
| 
 |  | ||||||
| 	private StringBuffer headerOutput = new StringBuffer(); |  | ||||||
| 	private StringBuffer footerOutput = new StringBuffer(); |  | ||||||
| 	private File outDir; |  | ||||||
| 	 |  | ||||||
| 	public Converter(Policy pol, File headerFile, File footerFile) throws IOException{ |  | ||||||
| 		policy = pol; |  | ||||||
| 
 |  | ||||||
| 		/* |  | ||||||
| 		 * Setup header and footer.  |  | ||||||
| 		 */ |  | ||||||
| 		FileReader headIn = new FileReader(headerFile); |  | ||||||
| 
 |  | ||||||
| 		BufferedReader br = new BufferedReader(headIn); |  | ||||||
| 	    String line = null; //not declared within while loop |  | ||||||
| 	    while (( line = br.readLine()) != null){ |  | ||||||
| 	        headerOutput.append(line); |  | ||||||
| 	        headerOutput.append(System.getProperty("line.separator")); |  | ||||||
| 	    } |  | ||||||
| 		 |  | ||||||
| 		FileReader footerIn = new FileReader(footerFile); |  | ||||||
| 				 |  | ||||||
| 		br = new BufferedReader(footerIn); |  | ||||||
| 	    line = null; //not declared within while loop |  | ||||||
| 	    while (( line = br.readLine()) != null){ |  | ||||||
| 	        footerOutput.append(line); |  | ||||||
| 	        footerOutput.append(System.getProperty("line.separator")); |  | ||||||
| 	    } |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	public void Convert(File _outDir) throws IOException{ |  | ||||||
| 		outDir = _outDir; |  | ||||||
| 
 |  | ||||||
| 		// write the index document |  | ||||||
| 		FileWrite("index" + HTMLEXT, headerOutput.toString()  |  | ||||||
| 				+ Menu().toString() + indexContent + footerOutput.toString()); |  | ||||||
| 		 |  | ||||||
| 		// walk the policy and write pages for each module |  | ||||||
| 		for(Map.Entry<String,Layer> lay:policy.Children.entrySet()){ |  | ||||||
| 			Layer layer = lay.getValue(); |  | ||||||
| 			// the base output contains the menu and layer content header |  | ||||||
| 			StringBuffer baseOutput = new StringBuffer(); |  | ||||||
| 			// the layer output will be filled with modules and summarys for content |  | ||||||
| 			StringBuffer layerOutput = new StringBuffer(); |  | ||||||
| 			 |  | ||||||
| 			// create the navigation menu |  | ||||||
| 			baseOutput.append(Menu(layer.Name)); |  | ||||||
| 
 |  | ||||||
| 			baseOutput.append("<div id=\"Content\">\n"); |  | ||||||
| 			baseOutput.append("\t<h1>Layer: " + layer.Name + "</h1><p/>\n"); |  | ||||||
| 		 |  | ||||||
| 			layerOutput.append("<table border=\"1\" cellspacing=\"0\" cellpadding=\"3\" width=\"75%\">\n"); |  | ||||||
| 			layerOutput.append("<tr><th class=\"title\">Module Name</th>" +  |  | ||||||
| 					"<th class=\"title\">Summary</th></tr>"); |  | ||||||
| 			 |  | ||||||
| 			for(Map.Entry<String,Module> mod:layer.Children.entrySet()){ |  | ||||||
| 				// module output will be filled with in-depth module info. |  | ||||||
| 				StringBuffer moduleOutput = new StringBuffer(); |  | ||||||
| 				Module module = mod.getValue(); |  | ||||||
| 				 |  | ||||||
| 				// get the content for the module's document |  | ||||||
| 				moduleOutput.append(moduleContent(mod.getValue()).toString() + "</div>"); |  | ||||||
| 				 |  | ||||||
| 				// get the summary and name for the layer's document |  | ||||||
| 
 |  | ||||||
| 				layerOutput.append("<tr><td><a href=\"" + layer.Name + "_" + module.Name + HTMLEXT  |  | ||||||
| 						+ "\">" + module.Name + "</a></td>" + |  | ||||||
| 						"\n<td>" + module.PCDATA + "</td></tr>\n"); |  | ||||||
| 				 |  | ||||||
| 				// write module document |  | ||||||
| 				FileWrite(layer.Name + "_" + module.Name + HTMLEXT,  |  | ||||||
| 					headerOutput.toString() + "\n" + baseOutput.toString() + moduleOutput.toString() + footerOutput.toString()); |  | ||||||
| 			} |  | ||||||
| 			// write layer document |  | ||||||
| 			FileWrite(layer.Name + HTMLEXT,  |  | ||||||
| 				headerOutput.toString() + "\n" + baseOutput.toString()  |  | ||||||
| 				+ layerOutput.toString() + "</div>" + footerOutput.toString()); |  | ||||||
| 
 |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	private StringBuffer Menu(String key){ |  | ||||||
| 		StringBuffer out = new StringBuffer(); |  | ||||||
| 		out.append("<div id=\"Menu\">\n"); |  | ||||||
| 		for(Map.Entry<String,Layer> layer:policy.Children.entrySet()){ |  | ||||||
| 			String layerName = layer.getKey(); |  | ||||||
| 			 |  | ||||||
| 			 |  | ||||||
| 			// show the modules for the current key |  | ||||||
| 			if (layerName.equals(key)){ |  | ||||||
| 				out.append("\t<a href=\"" + layerName  |  | ||||||
| 						+ HTMLEXT + "\">" + layerName + "</a><br />\n"); |  | ||||||
| 				out.append("\t<div id=\"subitem\">\n"); |  | ||||||
| 				for(Map.Entry<String,Module> module:layer.getValue().Children.entrySet()){ |  | ||||||
| 					String moduleName = module.getKey(); |  | ||||||
| 					out.append("\t\t- <a href=\"" + layerName + "_" + moduleName + HTMLEXT  |  | ||||||
| 							+ "\">" + moduleName + "</a><br />\n"); |  | ||||||
| 				} |  | ||||||
| 				out.append("\t</div>\n"); |  | ||||||
| 			} else { |  | ||||||
| 				out.append("\t<a href=\"" + layerName + |  | ||||||
| 						HTMLEXT + "\">+ " + layerName + "</a><br />\n"); |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 		out.append("</div>"); |  | ||||||
| 		return out; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	private StringBuffer Menu(){ |  | ||||||
| 		StringBuffer out = new StringBuffer(); |  | ||||||
| 		out.append("<div id=\"Menu\">\n"); |  | ||||||
| 		for(Map.Entry<String,Layer> layer:policy.Children.entrySet()){ |  | ||||||
| 			String layerName = layer.getKey(); |  | ||||||
| 			 |  | ||||||
| 			 |  | ||||||
| 			out.append("\t<a href=\"" + layerName + HTMLEXT + "\">" + layerName + "</a><br />\n"); |  | ||||||
| 			out.append("\t<div id=\"subitem\">\n"); |  | ||||||
| 			for(Map.Entry<String,Module> module:layer.getValue().Children.entrySet()){ |  | ||||||
| 				String moduleName = module.getKey(); |  | ||||||
| 				out.append("\t\t- <a href=\"" + layerName + "_" + moduleName + HTMLEXT  |  | ||||||
| 						+ "\">" + moduleName + "</a><br />\n"); |  | ||||||
| 			} |  | ||||||
| 			out.append("\t</div>\n"); |  | ||||||
| 		} |  | ||||||
| 		out.append("</div>"); |  | ||||||
| 		return out; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	private StringBuffer moduleContent(Module module){ |  | ||||||
| 		StringBuffer out = new StringBuffer(); |  | ||||||
| 
 |  | ||||||
| 		out.append("\t<h2>Module: "+ module.Name + "<br />\n"); |  | ||||||
| 		out.append("\tSummary: " + module.PCDATA + "</h2>\n"); |  | ||||||
| 		for (Map.Entry<String,Interface> inter:module.Children.entrySet()){ |  | ||||||
| 			Interface iface = inter.getValue(); |  | ||||||
| 			// main table header |  | ||||||
| 			out.append("<table border=\"1\" cellspacing=\"0\" cellpadding=\"3\" width=\"75%\">\n"); |  | ||||||
| 			out.append("<tr><th class=\"title\" colspan=\"3\">Interface</th></tr>\n"); |  | ||||||
| 			 |  | ||||||
| 			// only show weight when type isnt none |  | ||||||
| 			if (iface.Type != InterfaceType.None){ |  | ||||||
| 				out.append("<tr><td>Name</td><td colspan=\"2\">" + iface.Name + "</td></tr>\n" + |  | ||||||
| 						"<tr><td>Flow Type</td><td colspan=\"2\">" + iface.Type.toString() + "</td></tr>\n"); |  | ||||||
| 				out.append("\t<td>Flow Weight</td><td colspan=\"2\">" + iface.Weight + "</td></tr>\n"); |  | ||||||
| 			} else { |  | ||||||
| 				out.append("<tr><td>Name</td><td colspan=\"2\">" + iface.Name + "</td></tr>\n"); |  | ||||||
| 				out.append("<tr><td>Flow Type</td><td colspan=\"2\">" + iface.Type.toString() + "</td></tr>\n"); |  | ||||||
| 				 |  | ||||||
| 			} |  | ||||||
| 			out.append("<tr><td>Description</td><td colspan=\"2\">" + iface.PCDATA + "</td></tr>\n"); |  | ||||||
| 			 |  | ||||||
| 			out.append("<table border=\"1\" cellspacing=\"0\" cellpadding=\"3\" width=\"75%\">\n"  |  | ||||||
| 					+ "<tr><th class=\"title\">Parameter</th><th class=\"title\">Description</th>"  |  | ||||||
| 					+ "<th class=\"title\">Optional</th></tr>"); |  | ||||||
| 			for (Map.Entry<String,Parameter> param:iface.Children.entrySet()){ |  | ||||||
| 				Parameter parameter = param.getValue(); |  | ||||||
| 				out.append("\t<tr><td> " + parameter.Name + "</td>\n"); |  | ||||||
| 				out.append("\t<td>" + parameter.PCDATA + "</td>\n"); |  | ||||||
| 				String opt = parameter.GetAttribute("optional"); |  | ||||||
| 				if (opt != null && opt.equalsIgnoreCase("true")){ |  | ||||||
| 					out.append("\t<td><center>Yes</center></td></tr>\n"); |  | ||||||
| 				} else { |  | ||||||
| 					out.append("\t<td><center>No</center></td></tr>\n"); |  | ||||||
| 				} |  | ||||||
| 			} |  | ||||||
| 			out.append("\n</table></table><br/><br/>\n"); |  | ||||||
| 		} |  | ||||||
| 		return out; |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	/** |  | ||||||
| 	 * Write to sub directory. |  | ||||||
| 	 * @param path |  | ||||||
| 	 * @param outFilename |  | ||||||
| 	 * @param content |  | ||||||
| 	 * @return |  | ||||||
| 	 */ |  | ||||||
| 	private void FileWrite (String path, String outFilename, String content){ |  | ||||||
| 		try { |  | ||||||
| 			// create parent if necessary |  | ||||||
| 			File outParent = new File(outDir, path ); |  | ||||||
| 			File outFile = new File(outParent, outFilename ); |  | ||||||
| 			if (outParent.exists() && !outParent.isDirectory()){ |  | ||||||
| 				throw new IOException("Output directory not really a directory"); |  | ||||||
| 			} else if (!outParent.exists()){ |  | ||||||
| 				outParent.mkdirs(); |  | ||||||
| 			}  |  | ||||||
| 			PrintStream stream = new PrintStream(new FileOutputStream(outFile)); |  | ||||||
| 			stream.println(content); |  | ||||||
| 			stream.flush(); |  | ||||||
| 			stream.close(); |  | ||||||
| 		} catch (Exception e){ |  | ||||||
| 			System.err.println (e.getMessage()); |  | ||||||
| 			System.exit(1); |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	/** |  | ||||||
| 	 * Write to output directory directly. |  | ||||||
| 	 *  |  | ||||||
| 	 * @param path |  | ||||||
| 	 * @param outFilename |  | ||||||
| 	 * @param content |  | ||||||
| 	 * @return |  | ||||||
| 	 */ |  | ||||||
| 	private void FileWrite (String outFilename, String content){ |  | ||||||
| 		try { |  | ||||||
| 			File out = new File(outDir, outFilename ); |  | ||||||
| 			PrintStream stream = new PrintStream(new FileOutputStream(out)); |  | ||||||
| 			stream.println(content); |  | ||||||
| 			stream.flush(); |  | ||||||
| 			stream.close(); |  | ||||||
| 		} catch (Exception e){ |  | ||||||
| 			System.err.println (e.getMessage()); |  | ||||||
| 			System.exit(1); |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| @ -1,565 +0,0 @@ | |||||||
| /* Copyright (C) 2005 Tresys Technology, LLC |  | ||||||
|  * License: refer to COPYING file for license information. |  | ||||||
|  * Authors: Spencer Shimko <sshimko@tresys.com> |  | ||||||
|  *  |  | ||||||
|  * Docgen.java: The reference policy xml analyzer and documentation generator		 |  | ||||||
|  */ |  | ||||||
| import policy.*; |  | ||||||
| 
 |  | ||||||
| import java.io.*; |  | ||||||
| import java.util.*; |  | ||||||
| 
 |  | ||||||
| import javax.xml.parsers.DocumentBuilder;  |  | ||||||
| import javax.xml.parsers.DocumentBuilderFactory;   |  | ||||||
| import javax.xml.parsers.ParserConfigurationException; |  | ||||||
| 
 |  | ||||||
| import javax.xml.validation.SchemaFactory; |  | ||||||
| import javax.xml.validation.Schema; |  | ||||||
| 
 |  | ||||||
| import javax.xml.XMLConstants; |  | ||||||
| 
 |  | ||||||
| import org.xml.sax.*; |  | ||||||
| import org.w3c.dom.*; |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * The reference policy documentation generator and xml analyzer class. |  | ||||||
|  * It pulls in XML describing reference policy, transmogrifies it, |  | ||||||
|  * and spits it back out in some other arbitrary format. |  | ||||||
|  */ |  | ||||||
| public class Docgen{ |  | ||||||
| 	// store the PIs here |  | ||||||
| 	private static Vector procInstr = new Vector(); |  | ||||||
| 	private static boolean verbose = false; |  | ||||||
| 	// the policy structure built after xml is parsed |  | ||||||
| 	private Policy policy = null; |  | ||||||
| 	// the xml document |  | ||||||
| 	private Document dom = null; |  | ||||||
| 	 |  | ||||||
| 	// the files/directories passed in from the command line |  | ||||||
| 	private static File xmlFile; |  | ||||||
| 	private static File headerFile; |  | ||||||
| 	private static File footerFile; |  | ||||||
| 	private static File outputDir; |  | ||||||
| 		 |  | ||||||
| 	private static void printUsage(){ |  | ||||||
| 		System.out.println("Reference Policy Documentation Compiler usage:"); |  | ||||||
| 		System.out.println("\tjava -cp ./src Docgen [-h] [-v] -xf xmlFileIn -hf headerFile -ff footerFile -od outDirectory"); |  | ||||||
| 		System.out.println("-h display this message and exit"); |  | ||||||
| 		System.out.println("-xf XML file to parse"); |  | ||||||
| 		System.out.println("-hf header file for HTML output"); |  | ||||||
| 		System.out.println("-ff footer file for HTML output"); |  | ||||||
| 		System.out.println("-od output directory"); |  | ||||||
| 		System.exit(1); |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	/** |  | ||||||
| 	 * Docgen constructor |  | ||||||
| 	 *  |  | ||||||
| 	 * @param output	Filename to setup for output |  | ||||||
| 	 */ |  | ||||||
| 	public Docgen(String output)  |  | ||||||
| 	throws FileNotFoundException { |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	/** |  | ||||||
| 	 * The main() driver for the policy documentation generator. |  | ||||||
| 	 * @param argv	Arguments, takes 1 filename parameter |  | ||||||
| 	 */ |  | ||||||
| 	public static void main(String argv[]) { |  | ||||||
| 		if (argv.length == 0){ |  | ||||||
| 			printUsage(); |  | ||||||
| 			System.exit(1); |  | ||||||
| 		} |  | ||||||
| 		// hacked up version of getopt() |  | ||||||
| 		for (int x=0; x < argv.length; x++){ |  | ||||||
| 			if (argv[x].equals("-xf")){ |  | ||||||
| 				x++; |  | ||||||
| 				if (x<argv.length){ |  | ||||||
| 					xmlFile = new File(argv[x]); |  | ||||||
| 					if (!xmlFile.isFile()){ |  | ||||||
| 						printUsage(); |  | ||||||
| 						System.err.println("XML file is not really a file!"); |  | ||||||
| 						System.exit(1); |  | ||||||
| 					} |  | ||||||
| 				} else { |  | ||||||
| 					printUsage(); |  | ||||||
| 					System.exit(1); |  | ||||||
| 				} |  | ||||||
| 			} else if (argv[x].equals("-hf")){ |  | ||||||
| 				x++; |  | ||||||
| 				if (x<argv.length){ |  | ||||||
| 					headerFile = new File(argv[x]); |  | ||||||
| 					if (!headerFile.isFile()){ |  | ||||||
| 						printUsage(); |  | ||||||
| 						System.err.println("Header file is not really a file!"); |  | ||||||
| 						System.exit(1); |  | ||||||
| 					} |  | ||||||
| 				} else { |  | ||||||
| 					printUsage(); |  | ||||||
| 					System.exit(1); |  | ||||||
| 				} |  | ||||||
| 			} else if (argv[x].equals("-ff")){ |  | ||||||
| 				x++; |  | ||||||
| 				if (x<argv.length){ |  | ||||||
| 					footerFile = new File(argv[x]); |  | ||||||
| 					if (!footerFile.isFile()){ |  | ||||||
| 						printUsage(); |  | ||||||
| 						System.err.println("Footer file is not really a file!"); |  | ||||||
| 						System.exit(1); |  | ||||||
| 					} |  | ||||||
| 				} else { |  | ||||||
| 					printUsage(); |  | ||||||
| 					System.exit(1); |  | ||||||
| 				} |  | ||||||
| 			} else if (argv[x].equals("-od")){ |  | ||||||
| 				x++; |  | ||||||
| 				if (x<argv.length){ |  | ||||||
| 					outputDir = new File(argv[x]); |  | ||||||
| 					if (!outputDir.isDirectory()){ |  | ||||||
| 						printUsage(); |  | ||||||
| 						System.err.println("Output directory is not really a directory!"); |  | ||||||
| 						System.exit(1); |  | ||||||
| 					} |  | ||||||
| 				} else { |  | ||||||
| 					printUsage(); |  | ||||||
| 					System.exit(1); |  | ||||||
| 				} |  | ||||||
| 			} else if (argv[x].equals("-h")){ |  | ||||||
| 				printUsage(); |  | ||||||
| 				System.exit(1); |  | ||||||
| 			} else if (argv[x].equals("-v")){ |  | ||||||
| 				verbose = true; |  | ||||||
| 			} else { |  | ||||||
| 				printUsage(); |  | ||||||
| 				System.out.println("Error unknown argument: " + argv[x]); |  | ||||||
| 				System.exit(1); |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 		 |  | ||||||
| 		try { |  | ||||||
| 			// create document factory  |  | ||||||
| 			DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); |  | ||||||
| 			SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); |  | ||||||
| 			Schema schema = schemaFactory.newSchema(); |  | ||||||
| 			 |  | ||||||
| 			factory.setValidating(true);    |  | ||||||
| 			factory.setNamespaceAware(true); |  | ||||||
| 
 |  | ||||||
| 			// in order for this setting to hold factory must be validating |  | ||||||
| 			factory.setIgnoringElementContentWhitespace(true); |  | ||||||
| 
 |  | ||||||
| 			// get builder from factory |  | ||||||
| 			DocumentBuilder builder = factory.newDocumentBuilder(); |  | ||||||
| 				 |  | ||||||
| 			// create an anonymous error handler for parsing errors |  | ||||||
| 			builder.setErrorHandler( |  | ||||||
| 					new org.xml.sax.ErrorHandler() { |  | ||||||
| 						// fatal errors |  | ||||||
| 						public void fatalError(SAXParseException exception) |  | ||||||
| 						throws SAXException { |  | ||||||
| 							throw exception; |  | ||||||
| 						} |  | ||||||
| 						 |  | ||||||
| 						// parse exceptions will be fatal |  | ||||||
| 						public void error(SAXParseException parseErr) |  | ||||||
| 						throws SAXParseException |  | ||||||
| 						{ |  | ||||||
| 							// Error generated by the parser |  | ||||||
| 							System.err.println("\nPARSE ERROR: line " + parseErr.getLineNumber()  |  | ||||||
| 									+  ", URI " + parseErr.getSystemId()); |  | ||||||
| 							System.err.println("PARSE ERROR: " + parseErr.getMessage() ); |  | ||||||
| 							 |  | ||||||
| 							// check the wrapped exception |  | ||||||
| 							Exception  x = parseErr; |  | ||||||
| 							if (parseErr.getException() != null) |  | ||||||
| 								x = parseErr.getException(); |  | ||||||
| 							x.printStackTrace();					} |  | ||||||
| 						 |  | ||||||
| 						// dump warnings too |  | ||||||
| 						public void warning(SAXParseException err) |  | ||||||
| 						throws SAXParseException |  | ||||||
| 						{ |  | ||||||
| 							System.err.println("\nPARSE WARNING: line " + err.getLineNumber() |  | ||||||
| 									+ ", URI " + err.getSystemId()); |  | ||||||
| 							System.err.println("PARSE WARNING:   " + err.getMessage()); |  | ||||||
| 						} |  | ||||||
| 					} |  | ||||||
| 			); |  | ||||||
| 			 |  | ||||||
| 			Docgen redoc = new Docgen(argv[1]); |  | ||||||
| 
 |  | ||||||
| 			redoc.dom = builder.parse(xmlFile); |  | ||||||
| 			 |  | ||||||
| 			// do our own transformations |  | ||||||
| 			redoc.processDocumentNode(); |  | ||||||
| 			 |  | ||||||
| 			// build our own converter then convert |  | ||||||
| 			Converter converter = new Converter(redoc.policy, headerFile, footerFile); |  | ||||||
| 			converter.Convert(outputDir); |  | ||||||
| 		// TODO: figure out which of these is taken care of by the anonymous error handler above |  | ||||||
| 		} catch (SAXException saxErr) { |  | ||||||
| 			// sax error |  | ||||||
| 			Exception  x = saxErr; |  | ||||||
| 			if (saxErr.getException() != null) |  | ||||||
| 				x = saxErr.getException(); |  | ||||||
| 			x.printStackTrace(); |  | ||||||
| 		} catch (ParserConfigurationException parseConfigErr) { |  | ||||||
| 			// Sometimes we can't build the parser with the specified options |  | ||||||
| 			parseConfigErr.printStackTrace(); |  | ||||||
| 		} catch (IOException ioe) { |  | ||||||
| 			// I/O error |  | ||||||
| 			ioe.printStackTrace(); |  | ||||||
| 		} catch (Exception err) { |  | ||||||
| 			err.printStackTrace(); |  | ||||||
| 		} |  | ||||||
| 		 |  | ||||||
| 
 |  | ||||||
| 	} // main |  | ||||||
| 
 |  | ||||||
| 	public static void Debug(String msg){ |  | ||||||
| 		if (verbose) |  | ||||||
| 			System.out.println(msg); |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	void processDocumentNode() throws SAXException{ |  | ||||||
| 		Element docNode = dom.getDocumentElement(); |  | ||||||
| 		 |  | ||||||
| 		if (docNode != null && docNode.getNodeName().equals("policy")){ |  | ||||||
| 			policy = new Policy("policy"); |  | ||||||
| 			 |  | ||||||
| 			NodeList children = docNode.getChildNodes(); |  | ||||||
| 			int len = children.getLength(); |  | ||||||
| 		 |  | ||||||
| 			for (int index = 0; index < len; index++){ |  | ||||||
| 				processNode(children.item(index), policy); |  | ||||||
| 			} |  | ||||||
| 		} else { |  | ||||||
| 			System.err.println("Failed to find document/policy node!"); |  | ||||||
| 			System.exit(1); |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	/** |  | ||||||
| 	 * Process children of the policy node (aka modules). |  | ||||||
| 	 *  |  | ||||||
| 	 * @param node		A child node of the policy. |  | ||||||
| 	 * @param parent	The parent PolicyElement. |  | ||||||
| 	 */ |  | ||||||
| 	void processNode(Node node, Policy parent) throws SAXException{ |  | ||||||
| 		Layer layer = null; |  | ||||||
| 		Module module = null; |  | ||||||
| 		 |  | ||||||
| 		// save us from null pointer de-referencing |  | ||||||
| 		if (node == null){ |  | ||||||
| 			System.err.println( |  | ||||||
| 			"Nothing to do, node is null"); |  | ||||||
| 			return; |  | ||||||
| 		} |  | ||||||
| 		 |  | ||||||
| 		// snag the name |  | ||||||
| 		String nodeName = node.getNodeName(); |  | ||||||
| 		 |  | ||||||
| 		// validity check and pull layer attribute |  | ||||||
| 		if (node.getNodeType() == Node.ELEMENT_NODE && nodeName.equals("module")){ |  | ||||||
| 			// display the name which might be generic |  | ||||||
| 			Docgen.Debug("Encountered node: " + nodeName); |  | ||||||
| 			NamedNodeMap attrList =	node.getAttributes(); |  | ||||||
| 			 |  | ||||||
| 			// the required attributes |  | ||||||
| 			int attrLen = 0; |  | ||||||
| 			if(attrList != null){ |  | ||||||
| 				attrLen = attrList.getLength(); |  | ||||||
| 			} else{ |  | ||||||
| 				fatalNodeError("Missing attributes in module. \""   |  | ||||||
| 						+ "\".  \"layer\" and \"name\" are required attributes."); |  | ||||||
| 			} |  | ||||||
| 
 |  | ||||||
| 			Node moduleNode = attrList.getNamedItem("name"); |  | ||||||
| 			Node layerNode = attrList.getNamedItem("layer"); |  | ||||||
| 			 |  | ||||||
| 			if (moduleNode == null || layerNode == null) |  | ||||||
| 				fatalNodeError("Missing attributes in module element.  \"layer\" and \"name\" are required attributes."); |  | ||||||
| 
 |  | ||||||
| 			String moduleName = moduleNode.getNodeValue(); |  | ||||||
| 			String layerName = layerNode.getNodeValue(); |  | ||||||
| 		 |  | ||||||
| 			// check to see if this is a new layer or a pre-existing layer |  | ||||||
| 			layer = parent.Children.get(layerName); |  | ||||||
| 			if (layer == null){ |  | ||||||
| 					Docgen.Debug("Adding new layer: " + layerName); |  | ||||||
| 					layer = new Layer(layerName, parent);	 |  | ||||||
| 			} else { |  | ||||||
| 				Docgen.Debug("Lookup succeeded for: " + layerName); |  | ||||||
| 			} |  | ||||||
| 			 |  | ||||||
| 			if (layer.Children.containsKey(moduleName)){ |  | ||||||
| 				Docgen.Debug("Reusing previously defined module: " + moduleName); |  | ||||||
| 				module = layer.Children.get(moduleName); |  | ||||||
| 			} else { |  | ||||||
| 				Docgen.Debug("Creating module: " + moduleName); |  | ||||||
| 				module = new Module(moduleName, layer); |  | ||||||
| 			} |  | ||||||
| 			 |  | ||||||
| 			// take care of the attributes |  | ||||||
| 			for(int i = 0; i < attrLen; i++){ |  | ||||||
| 				Node attrNode = attrList.item(i); |  | ||||||
| 				String attrName = attrNode.getNodeName(); |  | ||||||
| 				String attrValue = attrNode.getNodeValue(); |  | ||||||
| 				if (!attrName.equals("layer") && !attrName.equals("name")){ |  | ||||||
| 					Docgen.Debug("\tAdding attribute: " + attrNode.getNodeName() |  | ||||||
| 							+ "=" + attrValue); |  | ||||||
| 					module.AddAttribute(attrName,attrValue); |  | ||||||
| 				} |  | ||||||
| 			} |  | ||||||
| 		} else if (!isEmptyTextNode(node)){ |  | ||||||
| 			fatalNodeError("Unexpected child \"" + nodeName  |  | ||||||
| 					+"\" node of parent \"" + parent.Name + "\"."); |  | ||||||
| 		} |  | ||||||
| 		 |  | ||||||
| 		// recurse over children if both module and layer defined |  | ||||||
| 		if (module != null && layer != null){ |  | ||||||
| 			// the containsKey check verified no duplicate module |  | ||||||
| 			layer.Children.put(module.Name, module); |  | ||||||
| 			parent.Children.put(layer.Name, layer); |  | ||||||
| 
 |  | ||||||
| 			NodeList children = node.getChildNodes(); |  | ||||||
| 			if (children != null){ |  | ||||||
| 				int len = children.getLength(); |  | ||||||
| 				for (int index = 0; index < len; index++){ |  | ||||||
| 					processNode(children.item(index), module); |  | ||||||
| 				} |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	/** |  | ||||||
| 	 * Process children of the module node (aka interfaces). |  | ||||||
| 	 *  |  | ||||||
| 	 * @param node		A child node of the policy. |  | ||||||
| 	 * @param parent	The parent PolicyElement. |  | ||||||
| 	 */ |  | ||||||
| 	void processNode(Node node, Module parent) throws SAXException{ |  | ||||||
| 		Interface iface = null; |  | ||||||
| 		 |  | ||||||
| 		// save us from null pointer de-referencing |  | ||||||
| 		if (node == null){ |  | ||||||
| 			System.err.println( |  | ||||||
| 			"Nothing to do, node is null"); |  | ||||||
| 			return; |  | ||||||
| 		} |  | ||||||
| 		 |  | ||||||
| 		// snag the name |  | ||||||
| 		String nodeName = node.getNodeName(); |  | ||||||
| 		 |  | ||||||
| 		// if summary node |  | ||||||
| 		if (node.getNodeType() == Node.ELEMENT_NODE && nodeName.equals("summary")){ |  | ||||||
| 			// unfortunately we still need to snag the PCDATA child node for the actual text |  | ||||||
| 			Docgen.Debug("Encountered node: " + nodeName); |  | ||||||
| 			NodeList children = node.getChildNodes(); |  | ||||||
| 			if (children != null && children.getLength() == 1){ |  | ||||||
| 				if (children.item(0).getNodeType() == Node.TEXT_NODE){ |  | ||||||
| 					parent.PCDATA = children.item(0).getNodeValue(); |  | ||||||
| 					return; |  | ||||||
| 				}  |  | ||||||
| 			} |  | ||||||
| 			fatalNodeError("Unexpected child \"" + nodeName  |  | ||||||
| 					+"\" node of parent \"" + parent.Name + "\"."); |  | ||||||
| 		// if interface node |  | ||||||
| 		} else if (node.getNodeType() == Node.ELEMENT_NODE && nodeName.equals("interface")){ |  | ||||||
| 			NamedNodeMap attrList =	node.getAttributes(); |  | ||||||
| 			// the required attributes |  | ||||||
| 			int attrLen = 0; |  | ||||||
| 			if(attrList != null){ |  | ||||||
| 				attrLen = attrList.getLength(); |  | ||||||
| 			} else{ |  | ||||||
| 				fatalNodeError("Missing attribute in interface.  "  |  | ||||||
| 						+ "\"name\" is a required attribute."); |  | ||||||
| 			} |  | ||||||
| 
 |  | ||||||
| 			Node nameNode = attrList.getNamedItem("name"); |  | ||||||
| 						 |  | ||||||
| 			if (nameNode == null ) |  | ||||||
| 				fatalNodeError("Missing attribute in interface.  "  |  | ||||||
| 						+ "\"name\" is a required attribute."); |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 			String iName = nameNode.getNodeValue(); |  | ||||||
| 		 |  | ||||||
| 			Docgen.Debug("Creating interface: " + iName); |  | ||||||
| 			iface = new Interface(iName, parent); |  | ||||||
| 			 |  | ||||||
| 			// take care of the attributes |  | ||||||
| 			for(int i = 0; i < attrLen; i++){ |  | ||||||
| 				Node attrNode = attrList.item(i); |  | ||||||
| 				String attrName = attrNode.getNodeName(); |  | ||||||
| 				String attrValue = attrNode.getNodeValue(); |  | ||||||
| 				if (!attrName.equals("name")){ |  | ||||||
| 					Docgen.Debug("\tAdding attribute: " + attrNode.getNodeName() |  | ||||||
| 							+ "=" + attrValue); |  | ||||||
| 					iface.AddAttribute(attrName,attrValue); |  | ||||||
| 				} |  | ||||||
| 			} |  | ||||||
| 		} else if (!isEmptyTextNode(node)){ |  | ||||||
| 			fatalNodeError("Unexpected child \"" + nodeName  |  | ||||||
| 					+"\" node of parent \"" + parent.Name + "\"."); |  | ||||||
| 		} |  | ||||||
| 		 |  | ||||||
| 		// recurse over children if both module and layer defined |  | ||||||
| 		if (iface != null && parent != null){ |  | ||||||
| 			// FIXME: containsKey() check for duplicate |  | ||||||
| 			parent.Children.put(iface.Name, iface); |  | ||||||
| 
 |  | ||||||
| 			NodeList children = node.getChildNodes(); |  | ||||||
| 			if (children != null){ |  | ||||||
| 				int len = children.getLength(); |  | ||||||
| 				for (int index = 0; index < len; index++){ |  | ||||||
| 					processNode(children.item(index), iface); |  | ||||||
| 				} |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	/** |  | ||||||
| 	 * Process children of the interface node (aka parameters, desc., infoflow). |  | ||||||
| 	 *  |  | ||||||
| 	 * @param node		A child node of the policy. |  | ||||||
| 	 * @param parent	The parent PolicyElement. |  | ||||||
| 	 */ |  | ||||||
| 	void processNode(Node node, Interface parent) throws SAXException{ |  | ||||||
| 		Parameter param = null; |  | ||||||
| 		 |  | ||||||
| 		// save us from null pointer de-referencing |  | ||||||
| 		if (node == null){ |  | ||||||
| 			System.err.println( |  | ||||||
| 			"Nothing to do, node is null"); |  | ||||||
| 			return; |  | ||||||
| 		} |  | ||||||
| 		 |  | ||||||
| 		// snag the name |  | ||||||
| 		String nodeName = node.getNodeName(); |  | ||||||
| 		 |  | ||||||
| 		// if description node |  | ||||||
| 		if (node.getNodeType() == Node.ELEMENT_NODE && nodeName.equals("description")){ |  | ||||||
| 			// unfortunately we still need to snag the PCDATA child node for the actual text |  | ||||||
| 			NodeList children = node.getChildNodes(); |  | ||||||
| 			if (children != null && children.getLength() == 1){ |  | ||||||
| 				if (children.item(0).getNodeType() == Node.TEXT_NODE){ |  | ||||||
| 					parent.PCDATA = children.item(0).getNodeValue(); |  | ||||||
| 					return; |  | ||||||
| 				}  |  | ||||||
| 			} |  | ||||||
| 			fatalNodeError("Unexpected child \"" + nodeName  |  | ||||||
| 					+"\" node of parent \"" + parent.Name + "\"."); |  | ||||||
| 		// if infoflow node |  | ||||||
| 		} else if (node.getNodeType() == Node.ELEMENT_NODE && nodeName.equals("infoflow")){ |  | ||||||
| 			NamedNodeMap attrList =	node.getAttributes(); |  | ||||||
| 			// the required attributes |  | ||||||
| 			int attrLen = 0; |  | ||||||
| 			if(attrList != null){ |  | ||||||
| 				attrLen = attrList.getLength(); |  | ||||||
| 			} else{ |  | ||||||
| 				fatalNodeError("Missing attribute in infoflow."  |  | ||||||
| 						+ "  \"type\" and \"weight\" are required attributes."); |  | ||||||
| 			} |  | ||||||
| 
 |  | ||||||
| 			Node typeNode = attrList.getNamedItem("type"); |  | ||||||
| 			Node weightNode = attrList.getNamedItem("weight"); |  | ||||||
| 				 |  | ||||||
| 			String type = typeNode.getNodeValue(); |  | ||||||
| 			if (typeNode == null ||  |  | ||||||
| 					(!type.equals("none") && weightNode == null)) |  | ||||||
| 				fatalNodeError("Missing attribute in infoflow."  |  | ||||||
| 						+ "  \"type\" and \"weight\" are required attributes (unless type is none)."); |  | ||||||
| 
 |  | ||||||
| 			if (type.equals("read")){ |  | ||||||
| 				parent.Type = InterfaceType.Read; |  | ||||||
| 				parent.Weight = Integer.parseInt(weightNode.getNodeValue()); |  | ||||||
| 			}else if (type.equals("write")){ |  | ||||||
| 				parent.Type = InterfaceType.Write; |  | ||||||
| 				parent.Weight = Integer.parseInt(weightNode.getNodeValue()); |  | ||||||
| 			}else if (type.equals("both")){ |  | ||||||
| 				parent.Type = InterfaceType.Both; |  | ||||||
| 				parent.Weight = Integer.parseInt(weightNode.getNodeValue()); |  | ||||||
| 			}else if (type.equals("none")){ |  | ||||||
| 				parent.Type = InterfaceType.None; |  | ||||||
| 				parent.Weight = -1; |  | ||||||
| 			} else { |  | ||||||
| 				System.err.println("Infoflow type must be read, write, both, or none!");  |  | ||||||
| 			} |  | ||||||
| 			 |  | ||||||
| 		} else if (node.getNodeType() == Node.ELEMENT_NODE && nodeName.equals("parameter")){ |  | ||||||
| 			NamedNodeMap attrList =	node.getAttributes(); |  | ||||||
| 			// the required attributes |  | ||||||
| 			int attrLen = 0; |  | ||||||
| 			if(attrList != null){ |  | ||||||
| 				attrLen = attrList.getLength(); |  | ||||||
| 			} else{ |  | ||||||
| 				fatalNodeError("Missing attribute in parameter \""  |  | ||||||
| 						+ "\".  \"name\" is a required attribute."); |  | ||||||
| 			} |  | ||||||
| 
 |  | ||||||
| 			Node nameNode = attrList.getNamedItem("name"); |  | ||||||
| 						 |  | ||||||
| 			if (nameNode == null ) |  | ||||||
| 				fatalNodeError("Missing attribute in parameter \""  |  | ||||||
| 						+ "\".  \"name\" is a required attribute."); |  | ||||||
| 
 |  | ||||||
| 			String paramName = nameNode.getNodeValue(); |  | ||||||
| 		 |  | ||||||
| 			Docgen.Debug("Creating parameter: " + paramName); |  | ||||||
| 			param = new Parameter(paramName, parent); |  | ||||||
| 
 |  | ||||||
| 			// unfortunately we still need to snag the PCDATA child node for the actual text |  | ||||||
| 			NodeList children = node.getChildNodes(); |  | ||||||
| 			if (children != null && children.getLength() == 1){ |  | ||||||
| 				if (children.item(0).getNodeType() == Node.TEXT_NODE){ |  | ||||||
| 					param.PCDATA = children.item(0).getNodeValue(); |  | ||||||
| 				}  |  | ||||||
| 			} else { |  | ||||||
| 				fatalNodeError("Unexpected child \""  |  | ||||||
| 						+"\" node of parameter."); |  | ||||||
| 			} |  | ||||||
| 				 |  | ||||||
| 			// take care of the attributes |  | ||||||
| 			for(int i = 0; i < attrLen; i++){ |  | ||||||
| 				Node attrNode = attrList.item(i); |  | ||||||
| 				String attrName = attrNode.getNodeName(); |  | ||||||
| 				String attrValue = attrNode.getNodeValue(); |  | ||||||
| 				if (!attrName.equals("name")){ |  | ||||||
| 					Docgen.Debug("\tAdding attribute: " + attrNode.getNodeName() |  | ||||||
| 							+ "=" + attrValue); |  | ||||||
| 					param.AddAttribute(attrName,attrValue); |  | ||||||
| 				} |  | ||||||
| 			} |  | ||||||
| 		} else if (!isEmptyTextNode(node)){ |  | ||||||
| 			fatalNodeError("Unexpected child \"" + nodeName  |  | ||||||
| 					+"\" node of parent \"" + parent.Name + "\"."); |  | ||||||
| 		} |  | ||||||
| 		 |  | ||||||
| 		// recurse over children if both parent and param defined |  | ||||||
| 		if (param != null && parent != null){ |  | ||||||
| 			// the containsKey check verified no duplicate module |  | ||||||
| 			// FIXME: containsKey() check for duplicate |  | ||||||
| 			parent.Children.put(param.Name, param); |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	public boolean isEmptyTextNode(Node node){ |  | ||||||
| 		/* |  | ||||||
| 		 * FIXME: remove once properly validating |  | ||||||
| 		 * Since we aren't validating yet we needed our |  | ||||||
| 		 * own pointless whitespace remover. |  | ||||||
| 		 */ |  | ||||||
| 
 |  | ||||||
| 		if (node.getNodeType() == Node.TEXT_NODE && |  | ||||||
| 				node.getNodeValue().trim().length() == 0) |  | ||||||
| 				return true; |  | ||||||
| 		return false; |  | ||||||
| 	}	 |  | ||||||
| 	 |  | ||||||
| 	public void fatalNodeError(String msg)  |  | ||||||
| 	throws SAXException { |  | ||||||
| 		// FIXME: figure out how to throw SAXParseException w/ location |  | ||||||
| 		throw new SAXException(msg); |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| @ -1,37 +0,0 @@ | |||||||
| /* Copyright (C) 2005 Tresys Technology, LLC |  | ||||||
|  * License: refer to COPYING file for license information. |  | ||||||
|  * Authors: Spencer Shimko <sshimko@tresys.com> |  | ||||||
|  *  |  | ||||||
|  * Interface.java: The reference policy interfaces |  | ||||||
|  * Version: @version@  |  | ||||||
|  */ |  | ||||||
| package policy; |  | ||||||
| 
 |  | ||||||
| import java.util.Map; |  | ||||||
| import java.util.TreeMap; |  | ||||||
|   |  | ||||||
| /** |  | ||||||
|  * Each reference policy interface is represented by this class. |  | ||||||
|  *  |  | ||||||
|  * @see Layer |  | ||||||
|  * @see Module |  | ||||||
|  * @see Parameter |  | ||||||
|  */ |  | ||||||
| public class Interface extends PolicyElement { |  | ||||||
| 	/** the children of this element */ |  | ||||||
| 	public final Map<String,Parameter> Children; |  | ||||||
| 
 |  | ||||||
| 	public InterfaceType Type; |  | ||||||
| 	public int Weight; |  | ||||||
| 	 |  | ||||||
| 	/** |  | ||||||
| 	 * Default constructor assigns name to module. |  | ||||||
| 	 *  |  | ||||||
| 	 * @param _name		The name of the module. |  | ||||||
| 	 * @param _Parent 	The reference to the parent element. |  | ||||||
| 	 */ |  | ||||||
| 	public Interface(String _name, Module _Parent){ |  | ||||||
| 		super(_name, _Parent); |  | ||||||
| 		Children = new TreeMap<String,Parameter>(); |  | ||||||
| 	}	 |  | ||||||
| } |  | ||||||
| @ -1,12 +0,0 @@ | |||||||
| /* Copyright (C) 2005 Tresys Technology, LLC |  | ||||||
|  * License: refer to COPYING file for license information. |  | ||||||
|  * Authors: Spencer Shimko <sshimko@tresys.com> |  | ||||||
|  *  |  | ||||||
|  * Interface.java: The reference policy interface types |  | ||||||
|  * Version: @version@  |  | ||||||
|  */ |  | ||||||
| package policy; |  | ||||||
| 
 |  | ||||||
| public enum InterfaceType { |  | ||||||
| 	Read, Write, Both, None; |  | ||||||
| } |  | ||||||
| @ -1,34 +0,0 @@ | |||||||
| /* Copyright (C) 2005 Tresys Technology, LLC |  | ||||||
|  * License: refer to COPYING file for license information. |  | ||||||
|  * Authors: Spencer Shimko <sshimko@tresys.com> |  | ||||||
|  *  |  | ||||||
|  * Layer.java: The reference policy layers		 |  | ||||||
|  * Version: @version@  |  | ||||||
|  */ |  | ||||||
| package policy; |  | ||||||
| 
 |  | ||||||
| import java.util.Map; |  | ||||||
| import java.util.TreeMap; |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Each reference policy layer is represented by this class. |  | ||||||
|  *  |  | ||||||
|  * @see Module |  | ||||||
|  * @see Interface |  | ||||||
|  * @see Parameter |  | ||||||
|  */ |  | ||||||
| public class Layer extends PolicyElement { |  | ||||||
| 	/** the children of this element */ |  | ||||||
| 	public final Map<String,Module> Children; |  | ||||||
| 	 |  | ||||||
| 	/** |  | ||||||
| 	 * Default constructor assigns name to layer. |  | ||||||
| 	 *  |  | ||||||
| 	 * @param _name		The name of the layer. |  | ||||||
| 	 * @param _Parent 	The reference to the parent element. |  | ||||||
| 	 */ |  | ||||||
| 	public Layer(String _name, Policy _Parent){ |  | ||||||
| 		super(_name, _Parent); |  | ||||||
| 		Children = new TreeMap<String, Module>(); |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| @ -1,34 +0,0 @@ | |||||||
| /* Copyright (C) 2005 Tresys Technology, LLC |  | ||||||
|  * License: refer to COPYING file for license information. |  | ||||||
|  * Authors: Spencer Shimko <sshimko@tresys.com> |  | ||||||
|  *  |  | ||||||
|  * Module.java: The reference policy module		 |  | ||||||
|  * Version: @version@  |  | ||||||
|  */ |  | ||||||
| package policy; |  | ||||||
| 
 |  | ||||||
| import java.util.Map; |  | ||||||
| import java.util.TreeMap; |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Each reference policy layer is represented by this class. |  | ||||||
|  *  |  | ||||||
|  * @see Layer |  | ||||||
|  * @see Interface |  | ||||||
|  * @see Parameter |  | ||||||
|  */ |  | ||||||
| public class Module extends PolicyElement { |  | ||||||
| 	/** the children of this element */ |  | ||||||
| 	public final Map<String,Interface> Children; |  | ||||||
| 		 |  | ||||||
| 	/** |  | ||||||
| 	 * Default constructor assigns name to module. |  | ||||||
| 	 *  |  | ||||||
| 	 * @param _name		The name of the module. |  | ||||||
| 	 * @param _Parent 	The reference to the parent element. |  | ||||||
| 	 */ |  | ||||||
| 	public Module(String _name, Layer _Parent){ |  | ||||||
| 		super(_name, _Parent); |  | ||||||
| 		Children = new TreeMap<String,Interface>(); |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| @ -1,28 +0,0 @@ | |||||||
| /* Copyright (C) 2005 Tresys Technology, LLC |  | ||||||
|  * License: refer to COPYING file for license information. |  | ||||||
|  * Authors: Spencer Shimko <sshimko@tresys.com> |  | ||||||
|  *  |  | ||||||
|  * Parameter.java: The reference policy interface parameters |  | ||||||
|  * Version: @version@  |  | ||||||
|  */ |  | ||||||
| package policy; |  | ||||||
|   |  | ||||||
| /** |  | ||||||
|  * Each reference policy layer is represented by this class. |  | ||||||
|  *  |  | ||||||
|  * @see Layer |  | ||||||
|  * @see Module |  | ||||||
|  * @see Interface |  | ||||||
|  */ |  | ||||||
| public class Parameter extends PolicyElement{ |  | ||||||
| 	 |  | ||||||
| 	/** |  | ||||||
| 	 * Default constructor assigns name to parameter. |  | ||||||
| 	 *  |  | ||||||
| 	 * @param _name		The name of the parameter. |  | ||||||
| 	 * @param _Parent 	The reference to the parent element. |  | ||||||
| 	 */ |  | ||||||
| 	public Parameter(String _name, Interface _Parent){ |  | ||||||
| 		super(_name, _Parent); |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| @ -1,35 +0,0 @@ | |||||||
| /* Copyright (C) 2005 Tresys Technology, LLC |  | ||||||
|  * License: refer to COPYING file for license information. |  | ||||||
|  * Authors: Spencer Shimko <sshimko@tresys.com> |  | ||||||
|  *  |  | ||||||
|  * Policy.java: The reference policy api		 |  | ||||||
|  * Version: @version@  |  | ||||||
|  */ |  | ||||||
| package policy; |  | ||||||
| 
 |  | ||||||
| import java.util.Map; |  | ||||||
| import java.util.TreeMap; |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Each reference policy layer is represented by this class. |  | ||||||
|  *  |  | ||||||
|  * @see Module |  | ||||||
|  * @see Interface |  | ||||||
|  * @see Parameter |  | ||||||
|  */ |  | ||||||
| public class Policy extends PolicyElement { |  | ||||||
| 	/** the children of this element */ |  | ||||||
| 	public final Map<String,Layer> Children; |  | ||||||
| 	 |  | ||||||
| 	/** |  | ||||||
| 	 * Default constructor assigns name to layer. |  | ||||||
| 	 *  |  | ||||||
| 	 * @param _name		The name of the layer. |  | ||||||
| 	 * @param _Parent 	The reference to the parent element. |  | ||||||
| 	 */ |  | ||||||
| 	public Policy(String _name){ |  | ||||||
| 		// the policy is the root element so parent==null |  | ||||||
| 		super(_name, null); |  | ||||||
| 		Children = new TreeMap<String,Layer>(); |  | ||||||
| 	}	 |  | ||||||
| } |  | ||||||
| @ -1,114 +0,0 @@ | |||||||
| /* Copyright (C) 2005 Tresys Technology, LLC |  | ||||||
|  * License: refer to COPYING file for license information. |  | ||||||
|  * Authors: Spencer Shimko <sshimko@tresys.com> |  | ||||||
|  *  |  | ||||||
|  * PolicyElement.java: The reference policy base class		 |  | ||||||
|  * Version: @version@  |  | ||||||
|  */ |  | ||||||
| package policy; |  | ||||||
| 
 |  | ||||||
| import java.util.Map; |  | ||||||
| import java.util.TreeMap; |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Reference policy elements have certain similarties which |  | ||||||
|  * should be inherited from a base class.  This includes a name |  | ||||||
|  * attribute that will be used for hashing, sorting, and converting |  | ||||||
|  * to a string.   |  | ||||||
|  *  |  | ||||||
|  * @see Layer |  | ||||||
|  * @see Module |  | ||||||
|  * @see Interface |  | ||||||
|  * @see Parameter |  | ||||||
|  */ |  | ||||||
| public abstract class PolicyElement { |  | ||||||
| 	/** the string identifying the element */ |  | ||||||
| 	public final String Name; |  | ||||||
| 	/** the parent component */ |  | ||||||
| 	public final PolicyElement Parent; |  | ||||||
| 
 |  | ||||||
| 	/** the attributes of this element */ |  | ||||||
| 	private final Map<String,String> attributes; |  | ||||||
| 	 |  | ||||||
| 	public String PCDATA; |  | ||||||
| 
 |  | ||||||
| 	/** |  | ||||||
| 	 * Default constructor assigns name. |  | ||||||
| 	 *  |  | ||||||
| 	 * @param _name		The name of the element. |  | ||||||
| 	 * @param _Parent 	The reference to the parent element. |  | ||||||
| 	 */ |  | ||||||
| 	public PolicyElement(String _name, PolicyElement _Parent){ |  | ||||||
| 		Name = _name; |  | ||||||
| 		Parent = _Parent; |  | ||||||
| 		attributes = new TreeMap<String,String>(); |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	/** |  | ||||||
| 	 * Add attribute to policy element. |  | ||||||
| 	 *  |  | ||||||
| 	 * @param aName		String to identify attribute |  | ||||||
| 	 * @param aString 	Value of attribute identified by string aName |  | ||||||
| 	 * @return 			<code>true</code> when attribute added to element, |  | ||||||
| 	 * 					<code>false</code> when attribute already defined for element  |  | ||||||
| 	 */ |  | ||||||
| 	public boolean AddAttribute(String aName, String aString){ |  | ||||||
| 		if (attributes.containsKey(aName)){ |  | ||||||
| 			return false; |  | ||||||
| 		} |  | ||||||
| 		attributes.put(aName,aString); |  | ||||||
| 		return true; |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	/** |  | ||||||
| 	 * Get attribute from policy element. |  | ||||||
| 	 *  |  | ||||||
| 	 * @param aName		String to identify attribute |  | ||||||
| 	 * @return 			String value associated with named attribute |  | ||||||
| 	 * 					or <code>null</code> if no attribute defined |  | ||||||
| 	 * 					for aName.  |  | ||||||
| 	 */ |  | ||||||
| 	public String GetAttribute(String aName){ |  | ||||||
| 		return attributes.get(aName); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	/** |  | ||||||
| 	 * Overridden equals method |  | ||||||
| 	 *  |  | ||||||
| 	 * @param obj	Object for comparison |  | ||||||
| 	 */ |  | ||||||
| 	@Override public boolean equals(Object obj){ |  | ||||||
| 		return obj.toString().equals(this.Name); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	/** |  | ||||||
| 	 * Return a hashcode for the element. Currently implemented as a  |  | ||||||
| 	 * call to the String hashCode() method. |  | ||||||
| 	 *  |  | ||||||
| 	 * @return integer hashCode of this instance assuring two objects that |  | ||||||
| 	 * 		   are == will return same hashcode. |  | ||||||
| 	 */ |  | ||||||
| 	@Override public int hashCode() { |  | ||||||
| 		return this.toString().hashCode(); |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	/** |  | ||||||
| 	 * Overridden toString() method. |  | ||||||
| 	 *  |  | ||||||
| 	 * @return String representation of instance (it's name). |  | ||||||
| 	 */ |  | ||||||
| 	@Override public String toString(){ |  | ||||||
| 			return Name; |  | ||||||
| 	}		 |  | ||||||
| 	 |  | ||||||
| 	/** |  | ||||||
| 	 * Since Component might be used as a key in some type of sort Compare |  | ||||||
| 	 * is implemented. |  | ||||||
| 	 *  |  | ||||||
| 	 * @return	0 if this==that, <0 if this<that, >0 if this>that |  | ||||||
| 	 * @see String.compareTo |  | ||||||
| 	 */ |  | ||||||
| 	public int compareTo(Layer that){ |  | ||||||
| 		return Name.compareTo(that.Name); |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| @ -1,152 +0,0 @@ | |||||||
| body { |  | ||||||
| 	margin:0px; |  | ||||||
| 	padding:0px; |  | ||||||
| 	font-family:verdana, arial, helvetica, sans-serif; |  | ||||||
| 	color:#333; |  | ||||||
| 	background-color:white; |  | ||||||
| 	} |  | ||||||
| h1 { |  | ||||||
| 	margin:0px 0px 15px 0px; |  | ||||||
| 	padding:0px; |  | ||||||
| 	font-size:28px; |  | ||||||
| 	line-height:28px; |  | ||||||
| 	font-weight:900; |  | ||||||
| 	color:#ccc; |  | ||||||
| 	} |  | ||||||
| h2 { |  | ||||||
| 	font-size:100%; |  | ||||||
| 	} |  | ||||||
| h3 { |  | ||||||
| 	font-size:75%; |  | ||||||
| 	} |  | ||||||
| h4 { |  | ||||||
| 	font-size:67%; |  | ||||||
| 	} |  | ||||||
| li { |  | ||||||
| 	font:11px/20px verdana, arial, helvetica, sans-serif; |  | ||||||
| 	margin:0px 0px 0px 0px; |  | ||||||
| 	padding:0px; |  | ||||||
| 	} |  | ||||||
| p { |  | ||||||
| 	/* normal */ |  | ||||||
| 	font:11px/20px verdana, arial, helvetica, sans-serif; |  | ||||||
| 	margin:0px 0px 16px 0px; |  | ||||||
| 	padding:0px; |  | ||||||
| 	} |  | ||||||
|          |  | ||||||
| tt { |  | ||||||
| 	/* inline code */ |  | ||||||
| 	font-family: monospace; |  | ||||||
| 	} |  | ||||||
|          |  | ||||||
| table { |  | ||||||
|         background-color:#eee; |  | ||||||
|         border:1px dashed #999; |  | ||||||
|         /*background-color: white;*/ |  | ||||||
|         color: black; |  | ||||||
|         text-align: left; |  | ||||||
| 	font:11px/20px verdana, arial, helvetica, sans-serif; |  | ||||||
|         margin-left: 10%; |  | ||||||
|         margin-right: 10%; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| th { |  | ||||||
|         background-color: #ccccff; |  | ||||||
|         text-align: center; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| td.header { |  | ||||||
|         font-weight: bold; |  | ||||||
| } |  | ||||||
|          |  | ||||||
| #Content>p {margin:0px;} |  | ||||||
| #Content>p+p {text-indent:30px;} |  | ||||||
| a { |  | ||||||
| 	color:#09c; |  | ||||||
| 	font-size:11px; |  | ||||||
| 	text-decoration:none; |  | ||||||
| 	font-weight:600; |  | ||||||
| 	font-family:verdana, arial, helvetica, sans-serif; |  | ||||||
| 	} |  | ||||||
| a:link {color:#09c;} |  | ||||||
| a:visited {color:#07a;} |  | ||||||
| a:hover {background-color:#eee;} |  | ||||||
| 
 |  | ||||||
| #Codeblock { |  | ||||||
| 	margin:5px 50px 5px 50px; |  | ||||||
| 	padding:5px 0px 5px 15px; |  | ||||||
| 	border-style:solid; |  | ||||||
| 	border-color:black; |  | ||||||
| 	border-width:1px 1px 1px 1px; |  | ||||||
| 	background-color:#f8f8f8; |  | ||||||
| 	font-size:11px; |  | ||||||
| 	font-weight:600; |  | ||||||
| 	text-decoration:none; |  | ||||||
| 	font-family:courier; |  | ||||||
| } |  | ||||||
| pre { |  | ||||||
| 	font-size:11px; |  | ||||||
| 	font-weight:600; |  | ||||||
| 	text-decoration:none; |  | ||||||
| 	font-family:courier; |  | ||||||
| } |  | ||||||
| pre.codeblock { |  | ||||||
|         /* code block (bordered, slight gray background) */ |  | ||||||
| 	border-style:solid; |  | ||||||
| 	border-color:black; |  | ||||||
| 	border-width:1px 1px 1px 1px; |  | ||||||
| 	background-color:#f8f8f8; |  | ||||||
|         margin-left: 10%; |  | ||||||
|         margin-right: 10%; |  | ||||||
| } |  | ||||||
| dl { |  | ||||||
| 	/* definition text block */ |  | ||||||
| 	font:11px/20px verdana, arial, helvetica, sans-serif; |  | ||||||
| 	margin:0px 0px 16px 0px; |  | ||||||
| 	padding:0px; |  | ||||||
| 	} |  | ||||||
| dt { |  | ||||||
| 	/* definition term */ |  | ||||||
|         font-weight: bold; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| #Header { |  | ||||||
| 	margin:50px 0px 10px 0px; |  | ||||||
| 	padding:17px 0px 0px 20px; |  | ||||||
| 	/* For IE5/Win's benefit height = [correct height] + [top padding] + [top and bottom border widths] */ |  | ||||||
| 	height:33px; /* 14px + 17px + 2px = 33px */ |  | ||||||
| 	border-style:solid; |  | ||||||
| 	border-color:black; |  | ||||||
| 	border-width:1px 0px; /* top and bottom borders: 1px; left and right borders: 0px */ |  | ||||||
| 	line-height:11px; |  | ||||||
| 	font-size:110%; |  | ||||||
| 	background-color:#eee; |  | ||||||
| 	voice-family: "\"}\""; |  | ||||||
| 	voice-family:inherit; |  | ||||||
| 	height:14px; /* the correct height */ |  | ||||||
| 	} |  | ||||||
| body>#Header {height:14px;} |  | ||||||
| #Content { |  | ||||||
| 	margin:0px 50px 50px 200px; |  | ||||||
| 	padding:10px; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| #Menu { |  | ||||||
| 	position:absolute; |  | ||||||
| 	top:100px; |  | ||||||
| 	left:20px; |  | ||||||
| 	width:162px; |  | ||||||
| 	padding:10px; |  | ||||||
| 	background-color:#eee; |  | ||||||
| 	border:1px dashed #999; |  | ||||||
| 	line-height:17px; |  | ||||||
| 	text-align:left;	 |  | ||||||
| 	voice-family: "\"}\""; |  | ||||||
| 	voice-family:inherit; |  | ||||||
| 	width:160px; |  | ||||||
| 	} |  | ||||||
| #Menu subitem { |  | ||||||
| 	font-size: 5px; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| body>#Menu {width:160px;} |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user