1 /**
2 * Copyright (C) 2014-2015 Philip Helger (www.helger.com)
3 * philip[at]helger[dot]com
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17 package com.helger.schematron.pure.model;
18
19 import java.io.Serializable;
20
21 import javax.annotation.Nonnull;
22 import javax.annotation.Nullable;
23 import javax.annotation.concurrent.NotThreadSafe;
24
25 import com.helger.commons.lang.ICloneable;
26 import com.helger.commons.microdom.IMicroElement;
27 import com.helger.commons.string.ToStringGenerator;
28 import com.helger.schematron.CSchematronXML;
29
30 /**
31 * A single "linkable" group
32 *
33 * @author Philip Helger
34 */
35 @NotThreadSafe
36 public class PSLinkableGroup implements ICloneable <PSLinkableGroup>, Serializable
37 {
38 private String m_sRole;
39 private String m_sSubject;
40
41 public PSLinkableGroup ()
42 {}
43
44 public void setRole (@Nullable final String sRole)
45 {
46 m_sRole = sRole;
47 }
48
49 /**
50 * A name describing the function of the assertion or context node in the
51 * pattern. If the assertion has a subject attribute, then the role labels the
52 * arc between the context node and any nodes which match the path expression
53 * given by the subject attribute.<br>
54 * An implementation is not required to make use of this attribute.
55 *
56 * @return The role value
57 */
58 @Nullable
59 public String getRole ()
60 {
61 return m_sRole;
62 }
63
64 public void setSubject (@Nullable final String sSubject)
65 {
66 m_sSubject = sSubject;
67 }
68
69 /**
70 * A path allowing more precise specification of nodes. The path expression is
71 * evaluated in the context of the context node of the current rule. If no
72 * subject attribute is specified, the current subject node may be used.<br>
73 * NOTE: The subject attribute is required because the rule context may have
74 * been selected for reasons of convenience or performance, in association
75 * with the particular assertion tests. In such cases, the rule context may
76 * not be useful to identify the subject, and the nodes located by the subject
77 * attribute may be more useful. Similarly, it may not be possible to
78 * determine from an assertion test which nodes the assertion test has tested.
79 * In such a case, the nodes located by the subject attribute may be more
80 * useful.<br>
81 * An implementation is not required to make use of this element.
82 *
83 * @return The subject value
84 */
85 @Nullable
86 public String getSubject ()
87 {
88 return m_sSubject;
89 }
90
91 public static boolean isLinkableAttribute (@Nullable final String sAttrName)
92 {
93 return CSchematronXML.ATTR_ROLE.equals (sAttrName) || CSchematronXML.ATTR_SUBJECT.equals (sAttrName);
94 }
95
96 public void fillMicroElement (@Nonnull final IMicroElement aElement)
97 {
98 aElement.setAttribute (CSchematronXML.ATTR_ROLE, m_sRole);
99 aElement.setAttribute (CSchematronXML.ATTR_SUBJECT, m_sSubject);
100 }
101
102 @Nonnull
103 public PSLinkableGroup getClone ()
104 {
105 final PSLinkableGroup ret = new PSLinkableGroup ();
106 ret.setRole (m_sRole);
107 ret.setSubject (m_sSubject);
108 return ret;
109 }
110
111 @Override
112 public String toString ()
113 {
114 return new ToStringGenerator (this).appendIfNotNull ("role", m_sRole)
115 .appendIfNotNull ("subject", m_sSubject)
116 .toString ();
117 }
118 }