001 /* This file is part of the project "Hilbert II" - http://www.qedeq.org
002 *
003 * Copyright 2000-2011, Michael Meyling <mime@qedeq.org>.
004 *
005 * "Hilbert II" is free software; you can redistribute
006 * it and/or modify it under the terms of the GNU General Public
007 * License as published by the Free Software Foundation; either
008 * version 2 of the License, or (at your option) any later version.
009 *
010 * This program is distributed in the hope that it will be useful,
011 * but WITHOUT ANY WARRANTY; without even the implied warranty of
012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
013 * GNU General Public License for more details.
014 */
015
016 package org.qedeq.kernel.se.dto.module;
017
018 import org.qedeq.base.utility.EqualsUtility;
019 import org.qedeq.kernel.se.base.list.Element;
020 import org.qedeq.kernel.se.base.module.SubstFunc;
021
022
023 /**
024 * Usage of rule for substitute function variable.
025 *
026 * @author Michael Meyling
027 */
028 public class SubstFuncVo implements SubstFunc {
029
030 /** Reference to previously proven formula. */
031 private String reference;
032
033 /** Function variable that will be substituted. */
034 private Element functionVariable;
035
036 /** Replacement term. */
037 private Element substituteTerm;
038
039 /**
040 * Constructs an reason.
041 *
042 * @param reference Reference to a valid formula.
043 * @param functionVariable Function variable that will be substituted.
044 * @param substituteFormula Replacement term.
045 */
046
047 public SubstFuncVo(final String reference, final Element functionVariable,
048 final Element substituteFormula) {
049 this.reference = reference;
050 this.functionVariable = functionVariable;
051 this.substituteTerm = substituteFormula;
052 }
053
054 /**
055 * Default constructor.
056 */
057 public SubstFuncVo() {
058 // nothing to do
059 }
060
061 public String getReference() {
062 return reference;
063 }
064
065 /**
066 * Set formula reference.
067 *
068 * @param reference Reference to formula.
069 */
070 public void setReference(final String reference) {
071 this.reference = reference;
072 }
073
074 public String[] getReferences() {
075 if (reference == null || reference.length() == 0) {
076 return new String[] {};
077 } else {
078 return new String[] {reference };
079 }
080 }
081
082 public Element getFunctionVariable() {
083 return functionVariable;
084 }
085
086 /**
087 * Set function variable that will be substituted.
088 *
089 * @param functionVariable Function variable that will be replaced.
090 */
091 public void setFunctionVariable(final Element functionVariable) {
092 this.functionVariable = functionVariable;
093 }
094
095 public Element getSubstituteTerm() {
096 return substituteTerm;
097 }
098
099 /**
100 * Set substitution term.
101 *
102 * @param substituteTerm New term.
103 */
104 public void setSubstituteTerm(final Element substituteTerm) {
105 this.substituteTerm = substituteTerm;
106 }
107
108 public String getName() {
109 return "SubstFunc";
110 }
111
112 public boolean equals(final Object obj) {
113 if (!(obj instanceof SubstFuncVo)) {
114 return false;
115 }
116 final SubstFuncVo other = (SubstFuncVo) obj;
117 return EqualsUtility.equals(reference, other.reference)
118 && EqualsUtility.equals(functionVariable, other.functionVariable)
119 && EqualsUtility.equals(substituteTerm, other.substituteTerm);
120 }
121
122 public int hashCode() {
123 return (reference != null ? reference.hashCode() : 0)
124 ^ (functionVariable != null ? 2 ^ functionVariable.hashCode() : 0)
125 ^ (substituteTerm != null ? 3 ^ substituteTerm.hashCode() : 0);
126 }
127
128 public String toString() {
129 StringBuffer result = new StringBuffer();
130 result.append("SubstFree");
131 if (reference != null || functionVariable != null
132 || substituteTerm != null) {
133 result.append(" (");
134 boolean w = false;
135 if (reference != null) {
136 result.append(reference);
137 w = true;
138 }
139 if (functionVariable != null) {
140 if (w) {
141 result.append(", ");
142 }
143 result.append(functionVariable);
144 w = true;
145 }
146 if (substituteTerm != null) {
147 if (w) {
148 result.append(", ");
149 }
150 result.append("by ");
151 result.append(substituteTerm);
152 w = true;
153 }
154 result.append(")");
155 }
156 return result.toString();
157 }
158
159 }
|