1 package org.codehaus.plexus.component.repository;
2
3 /*
4 * Copyright 2001-2006 Codehaus Foundation.
5 *
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 */
18
19 /**
20 * This represents a component this is required by another component.
21 *
22 * @author <a href="mmaczka@interia.pl">Michal Maczka</a>
23 */
24 public class ComponentRequirement {
25 private String role;
26
27 private String roleHint = "";
28
29 private String fieldName;
30
31 private String fieldMappingType;
32
33 private boolean optional;
34
35 /**
36 * Returns the field name that this component requirement will inject.
37 * @return the field name that this component requirement will inject
38 */
39 public String getFieldName() {
40 return fieldName;
41 }
42
43 /**
44 * Sets the name of the field that will be populated by the required
45 * component.
46 * @param fieldName the name of the field to be populated
47 */
48 public void setFieldName(String fieldName) {
49 this.fieldName = fieldName;
50 }
51
52 /**
53 * Returns the role of the required component.
54 * @return the role of the required component
55 */
56 public String getRole() {
57 return role;
58 }
59
60 /**
61 * Sets the role of the require component.
62 * @param role the required component's role
63 */
64 public void setRole(String role) {
65 this.role = role;
66 }
67
68 /**
69 * Returns the role-hint of the required component.
70 * @return the role-hint of the required component
71 */
72 public String getRoleHint() {
73 return roleHint;
74 }
75
76 /**
77 * Sets the role-hint of the require component.
78 * Passing null or an empty string will match any available implementation.
79 * @param roleHint the required component's role-hint
80 */
81 public void setRoleHint(String roleHint) {
82 this.roleHint = (roleHint != null) ? roleHint : "";
83 }
84
85 /**
86 * Returns the type of the field this component requirement will inject.
87 * @return the type of the field this component requirement will inject
88 */
89 public String getFieldMappingType() {
90 return fieldMappingType;
91 }
92
93 /**
94 * Sets the type of the field that will be populated by the required
95 * component.
96 * @param fieldType the type of the field to be populated
97 */
98 public void setFieldMappingType(String fieldType) {
99 this.fieldMappingType = fieldType;
100 }
101
102 /**
103 * Whether this component requirement is optional and needs not be satisfied
104 *
105 * @return {@code true} if the requested component may be missing, {@code false} if the component is mandatory.
106 * @since 1.3.0
107 */
108 public boolean isOptional() {
109 return optional;
110 }
111
112 /**
113 * Controls whether a failure to satisfy this requirement can be tolerated by host component or whether construction
114 * of the host component should also fail.
115 *
116 * @param optional {@code true} if the requested component may be missing, {@code false} if the component is
117 * mandatory.
118 * @since 1.3.0
119 */
120 public void setOptional(boolean optional) {
121 this.optional = optional;
122 }
123
124 public String toString() {
125 return "ComponentRequirement{" + "role='"
126 + getRole() + "'" + ", " + "roleHint='"
127 + getRoleHint() + "', " + "fieldName='"
128 + getFieldName() + "'" + "}";
129 }
130
131 /**
132 * Returns a human-friendly key, suitable for display.
133 * @return a human-friendly key
134 */
135 public String getHumanReadableKey() {
136 StringBuilder key = new StringBuilder();
137
138 key.append("role: '").append(getRole()).append("'");
139
140 if (getRoleHint() != null) {
141 key.append(", role-hint: '").append(getRoleHint()).append("'. ");
142 }
143
144 if (getFieldName() != null) {
145 key.append(", field name: '").append(getFieldName()).append("' ");
146 }
147
148 return key.toString();
149 }
150
151 public boolean equals(Object other) {
152 if (other instanceof ComponentRequirement) {
153 String myId = role + ":" + roleHint;
154
155 ComponentRequirement req = (ComponentRequirement) other;
156 String otherId = req.role + ":" + req.roleHint;
157
158 return myId.equals(otherId);
159 }
160
161 return false;
162 }
163
164 public int hashCode() {
165 return (role + ":" + roleHint).hashCode();
166 }
167 }