View Javadoc

1   /* This file is part of the project "Hilbert II" - http://www.qedeq.org" target="alexandria_uri">http://www.qedeq.org
2    *
3    * Copyright 2000-2014,  Michael Meyling <mime@qedeq.org>.
4    *
5    * "Hilbert II" is free software; you can redistribute
6    * it and/or modify it under the terms of the GNU General Public
7    * License as published by the Free Software Foundation; either
8    * version 2 of the License, or (at your option) any later version.
9    *
10   * This program is distributed in the hope that it will be useful,
11   * but WITHOUT ANY WARRANTY; without even the implied warranty of
12   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13   * GNU General Public License for more details.
14   */
15  
16  package org.qedeq.kernel.se.dto.module;
17  
18  import org.apache.commons.lang.ArrayUtils;
19  import org.qedeq.base.utility.EqualsUtility;
20  import org.qedeq.kernel.se.base.list.Element;
21  import org.qedeq.kernel.se.base.module.Rename;
22  
23  
24  /**
25   * Usage of rule for rename bound subject variable.
26   *
27   * @author  Michael Meyling
28   */
29  public class RenameVo implements Rename {
30  
31      /** Reference to previously proven formula. */
32      private String reference;
33  
34      /** Bound subject variable that will be replaced. */
35      private Element originalSubjectVariable;
36  
37      /** Replacement subject variable. */
38      private Element replacementSubjectVariable;
39  
40      /** This bound occurrence should be replaced. If this value is 0, the replacement position
41       * is not specified. */
42      private int occurrence;
43  
44      /**
45       * Constructs an addition argument.
46       *
47       * @param   reference                   Reference to a valid formula.
48       * @param   originalSubjectVariable     Bound subject variable that will be replaced.
49       * @param   replacementSubjectVariable  Replacement subject variable.
50       * @param   occurrence                  This bound occurrence should be replaced. If this
51       *                                      value is 0, the replacement position
52       *                                      is not specified. */
53  
54      public RenameVo(final String reference, final Element originalSubjectVariable,
55              final Element replacementSubjectVariable, final int occurrence) {
56          this.reference = reference;
57          this.originalSubjectVariable = originalSubjectVariable;
58          this.replacementSubjectVariable = replacementSubjectVariable;
59          this.occurrence = occurrence;
60      }
61  
62      /**
63       * Default constructor.
64       */
65      public RenameVo() {
66          // nothing to do
67      }
68  
69      public Rename getRename() {
70          return this;
71      }
72  
73      public String getReference() {
74          return reference;
75      }
76  
77      /**
78       * Set formula reference.
79       *
80       * @param   reference   Reference to formula.
81       */
82      public void setReference(final String reference) {
83          this.reference = reference;
84      }
85  
86      public String[] getReferences() {
87          if (reference == null) {
88              return ArrayUtils.EMPTY_STRING_ARRAY;
89          }
90          return new String[] {reference };
91      }
92  
93      public int getOccurrence() {
94          return occurrence;
95      }
96  
97      /**
98       * Set occurrence of bound subject variable that should be renamed.
99       *
100      * @param   occurrence  This occurrence should be renamed.
101      */
102     public void setOccurrence(final int occurrence) {
103         this.occurrence = occurrence;
104     }
105 
106     public Element getOriginalSubjectVariable() {
107         return originalSubjectVariable;
108     }
109 
110     /**
111      * Set original subject variable, which will be replaced.
112      *
113      * @param   originalSubjectVariable     Subject variable.
114      */
115     public void setOriginalSubjectVariable(final Element originalSubjectVariable) {
116         this.originalSubjectVariable = originalSubjectVariable;
117     }
118 
119     public Element getReplacementSubjectVariable() {
120         return replacementSubjectVariable;
121     }
122 
123     /**
124      * Set new subject variable subject variable.
125      *
126      * @param   replacementSubjectVariable  New subject variable.
127      */
128     public void setReplacementSubjectVariable(final Element replacementSubjectVariable) {
129         this.replacementSubjectVariable = replacementSubjectVariable;
130     }
131 
132     public String getName() {
133         return "Rename";
134     }
135 
136     public boolean equals(final Object obj) {
137         if (!(obj instanceof RenameVo)) {
138             return false;
139         }
140         final RenameVo other = (RenameVo) obj;
141         return EqualsUtility.equals(reference, other.reference)
142             && EqualsUtility.equals(originalSubjectVariable, other.originalSubjectVariable)
143             && EqualsUtility.equals(replacementSubjectVariable, other.replacementSubjectVariable)
144             && (occurrence == other.occurrence);
145     }
146 
147     public int hashCode() {
148         return (reference != null ? reference.hashCode() : 0)
149             ^ (originalSubjectVariable != null ? 2 ^ originalSubjectVariable.hashCode() : 0)
150             ^ (replacementSubjectVariable != null ? 3 ^ replacementSubjectVariable.hashCode() : 0)
151             ^ (4 ^ occurrence);
152     }
153 
154     public String toString() {
155         StringBuffer result = new StringBuffer();
156         result.append(getName());
157         if (reference != null || originalSubjectVariable != null
158                 || replacementSubjectVariable != null
159                 || occurrence != 0) {
160             result.append(" (");
161             boolean w = false;
162             if (reference != null) {
163                 result.append(reference);
164                 w = true;
165             }
166             if (originalSubjectVariable != null) {
167                 if (w) {
168                     result.append(", ");
169                 }
170                 result.append(originalSubjectVariable);
171                 w = true;
172             }
173             if (replacementSubjectVariable != null) {
174                 if (w) {
175                     result.append(", ");
176                 }
177                 result.append("by ");
178                 result.append(replacementSubjectVariable);
179                 w = true;
180             }
181             if (occurrence != 0) {
182                 if (w) {
183                     result.append(", ");
184                 }
185                 result.append("occurrence: ");
186                 result.append(occurrence);
187                 w = true;
188             }
189             result.append(")");
190         }
191         return result.toString();
192     }
193 
194 }