View Javadoc
1 /*** 2 * Redistribution and use of this software and associated documentation 3 * ("Software"), with or without modification, are permitted provided 4 * that the following conditions are met: 5 * 6 * 1. Redistributions of source code must retain copyright 7 * statements and notices. Redistributions must also contain a 8 * copy of this document. 9 * 10 * 2. Redistributions in binary form must reproduce the 11 * above copyright notice, this list of conditions and the 12 * following disclaimer in the documentation and/or other 13 * materials provided with the distribution. 14 * 15 * 3. The name "Exolab" must not be used to endorse or promote 16 * products derived from this Software without prior written 17 * permission of Exoffice Technologies. For written permission, 18 * please contact tma@netspace.net.au. 19 * 20 * 4. Products derived from this Software may not be called "Exolab" 21 * nor may "Exolab" appear in their names without prior written 22 * permission of Exoffice Technologies. Exolab is a registered 23 * trademark of Exoffice Technologies. 24 * 25 * 5. Due credit should be given to the Exolab Project 26 * (http://www.exolab.org/). 27 * 28 * THIS SOFTWARE IS PROVIDED BY EXOFFICE TECHNOLOGIES AND CONTRIBUTORS 29 * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT 30 * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 31 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 32 * EXOFFICE TECHNOLOGIES OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 33 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 34 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 35 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 36 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 37 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 38 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 39 * OF THE POSSIBILITY OF SUCH DAMAGE. 40 * 41 * Copyright 2001-2004 (C) Exoffice Technologies Inc. All Rights Reserved. 42 * 43 * $Id: RequirementsLoader.java,v 1.2 2004/02/02 03:51:07 tanderson Exp $ 44 */ 45 package org.exolab.jmscts.requirements; 46 47 import java.io.FileNotFoundException; 48 import java.io.InputStream; 49 import java.io.InputStreamReader; 50 51 import org.exolab.castor.xml.MarshalException; 52 import org.exolab.castor.xml.ValidationException; 53 54 55 /*** 56 * Helper class used to load requirements documents 57 * 58 * @version $Revision: 1.2 $ $Date: 2004/02/02 03:51:07 $ 59 * @author <a href="mailto:tma@netspace.net.au">Tim Anderson</a> 60 * @see Requirements 61 */ 62 public final class RequirementsLoader { 63 64 /*** 65 * The root requirements resource path 66 */ 67 private static final String PATH = "/org/exolab/jmscts/requirements/"; 68 69 /*** 70 * The root requirements document 71 */ 72 private static final String FILE = PATH + "requirements.xml"; 73 74 75 /*** 76 * Prevent construction of utility class 77 */ 78 private RequirementsLoader() { 79 } 80 81 /*** 82 * Load the requirements from a requirements document 83 * 84 * @return the requirements 85 * @throws FileNotFoundException if the requirements document cannot be 86 * found 87 * @throws MarshalException if the requirements document cannot be read 88 * @throws ValidationException if the requirements document doesn't 89 * comply with the XML Schema definition 90 */ 91 public static Requirements load() 92 throws FileNotFoundException, MarshalException, ValidationException { 93 Requirements result = new Requirements(); 94 95 add(result, getResourceAsStream(FILE)); 96 return result; 97 } 98 99 /*** 100 * Unmarshall a requirements document, adding it to the requirements 101 * 102 * @param result the requirements 103 * @param stream the stream to the requirements document 104 * @throws FileNotFoundException if an included requirements document 105 * cannot be found 106 * @throws MarshalException if the requirements document cannot be read 107 * @throws ValidationException if the requirements document doesn't 108 * comply with the XML Schema definition 109 */ 110 private static void add(Requirements result, InputStreamReader stream) 111 throws FileNotFoundException, MarshalException, ValidationException { 112 113 Document source = Document.unmarshal(stream); 114 115 Include[] includes = source.getInclude(); 116 if (includes != null) { 117 for (int i = 0; i < includes.length; ++i) { 118 Include include = includes[i]; 119 120 String path = PATH + include.getPath(); 121 add(result, getResourceAsStream(path)); 122 } 123 } 124 125 Reference[] references = source.getReference(); 126 if (references != null) { 127 for (int i = 0; i < references.length; ++i) { 128 result.addReference(references[i]); 129 } 130 } 131 132 Requirement[] requirements = source.getRequirement(); 133 if (requirements != null) { 134 for (int i = 0; i < requirements.length; ++i) { 135 result.addRequirement(requirements[i]); 136 } 137 } 138 } 139 140 /*** 141 * Helper to return a stream to a resource 142 * 143 * @param path the resource path 144 * @return a stream to the resource 145 * @throws FileNotFoundException if the resource can't be found 146 */ 147 private static InputStreamReader getResourceAsStream(String path) 148 throws FileNotFoundException { 149 InputStream stream = 150 RequirementsLoader.class.getResourceAsStream(path); 151 if (stream == null) { 152 throw new FileNotFoundException("Cannot locate resource: " + path); 153 } 154 return new InputStreamReader(stream); 155 } 156 157 }

This page was automatically generated by Maven