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: Requirements.java,v 1.3 2004/02/02 03:51:07 tanderson Exp $
44 */
45 package org.exolab.jmscts.requirements;
46
47 import java.util.HashMap;
48
49 import org.exolab.castor.xml.ValidationException;
50
51
52 /***
53 * This class implements a cache of {@link Requirement} and {@link Reference}
54 * instances.
55 *
56 * @version $Revision: 1.3 $ $Date: 2004/02/02 03:51:07 $
57 * @author <a href="mailto:tma@netspace.net.au">Tim Anderson</a>
58 * @see Requirements
59 */
60 public class Requirements {
61
62 /***
63 * The requirements, mapped on requirement id
64 */
65 private HashMap _requirements = new HashMap();
66
67 /***
68 * The references, mapped on reference id
69 */
70 private HashMap _references = new HashMap();
71
72 /***
73 * An seed used to assigned identifiers to references that aren't supplied
74 * with one
75 */
76 private int _anonymousReference = 0;
77
78 /***
79 * Get a requirement by its identifier
80 *
81 * @param requirementId the requirement identifier
82 * @return the requirement, or null if it doesn't exist
83 */
84 public Requirement getRequirement(String requirementId) {
85 return (Requirement) _requirements.get(requirementId);
86 }
87
88 /***
89 * Returns the requirements as a map, with each requirement keyed on its
90 * requirement id
91 *
92 * @return the requirements
93 */
94 public HashMap getRequirements() {
95 return _requirements;
96 }
97
98 /***
99 * Get a reference by its identifier
100 *
101 * @param referenceId the reference identifier
102 * @return the reference, or null if it doesn't exist
103 */
104 public Reference getReference(String referenceId) {
105 return (Reference) _references.get(referenceId);
106 }
107
108 /***
109 * Add a requirement
110 *
111 * @param requirement the requirement
112 * @throws IllegalArgumentException if requirement is null
113 * @throws ValidationException if the requirement is a duplicate of
114 * another, contains a duplicate reference, or contains an unknown
115 * reference id
116 */
117 public void addRequirement(Requirement requirement)
118 throws ValidationException {
119
120 if (requirement == null) {
121 throw new IllegalArgumentException("Argument requirement is null");
122 }
123
124 if (_requirements.containsKey(requirement.getRequirementId())) {
125 throw new ValidationException("Duplicate requirement: "
126 + requirement.getRequirementId());
127 }
128
129 RequirementChoice[] choices = requirement.getRequirementChoice();
130 for (int i = 0; i < choices.length; ++i) {
131 RequirementChoiceItem item = choices[i].getRequirementChoiceItem();
132 if (item.getReference() != null) {
133 addReference(item.getReference());
134 } else if (!_references.containsKey(item.getReferenceId())) {
135 throw new ValidationException(
136 "Requirement " + requirement.getRequirementId()
137 + " has an unknown reference: " + item.getReferenceId());
138 }
139 }
140 _requirements.put(requirement.getRequirementId(), requirement);
141 }
142
143 /***
144 * Add a reference
145 *
146 * @param reference the reference
147 * @throws IllegalArgumentException if reference is null
148 * @throws ValidationException if the reference is a duplicate of
149 * another
150 */
151 public void addReference(Reference reference) throws ValidationException {
152 if (reference == null) {
153 throw new IllegalArgumentException("Argument reference is null");
154 }
155
156 String referenceId = reference.getReferenceId();
157 if (referenceId == null) {
158 referenceId = "anonymous" + ++_anonymousReference;
159 } else if (_references.containsKey(referenceId)) {
160 throw new ValidationException("Duplicate reference: "
161 + reference.getReferenceId());
162 }
163 _references.put(referenceId, reference);
164 }
165
166 }
This page was automatically generated by Maven