001 // This file is part of AceWiki.
002 // Copyright 2008-2012, AceWiki developers.
003 //
004 // AceWiki is free software: you can redistribute it and/or modify it under the terms of the GNU
005 // Lesser General Public License as published by the Free Software Foundation, either version 3 of
006 // the License, or (at your option) any later version.
007 //
008 // AceWiki is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
009 // even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
010 // Lesser General Public License for more details.
011 //
012 // You should have received a copy of the GNU Lesser General Public License along with AceWiki. If
013 // not, see http://www.gnu.org/licenses/.
014
015 package ch.uzh.ifi.attempto.chartparser;
016
017 /**
018 * This class represents a reference to a string object that can unify with other string objects.
019 * Uninstantiated values are represented by the null value. Such uninstantiated string objects can
020 * unify with other string objects (instantiated or uninstantiated ones).
021 *
022 * @author Tobias Kuhn
023 */
024 public class StringRef {
025
026 private StringObject stringObject;
027
028 /**
029 * Creates a reference to a new string object with null as value.
030 */
031 public StringRef() {
032 this((String) null);
033 }
034
035 /**
036 * Creates a reference to a new string object with the given value.
037 *
038 * @param string The value of the new string object.
039 */
040 public StringRef(String string) {
041 stringObject = new StringObject(string);
042 stringObject.addReference(this);
043 }
044
045 /**
046 * Creates a new reference to an existing string object.
047 *
048 * @param stringObject The existing string object.
049 */
050 StringRef(StringObject stringObject) {
051 this.stringObject = stringObject;
052 stringObject.addReference(this);
053 }
054
055 void setStringObject(StringObject stringObject) {
056 this.stringObject = stringObject;
057 }
058
059 /**
060 * Unifies the string object of this reference with the string object of another reference.
061 * If unification is not possible, an exception is thrown.
062 *
063 * @param stringRef The reference to the string object to be unified with the string object of
064 * this object.
065 * @throws UnificationFailedException If unification fails.
066 */
067 public void unify(StringRef stringRef) throws UnificationFailedException {
068 stringObject.unify(stringRef.stringObject);
069 }
070
071 /**
072 * Returns the value of the string object of this reference.
073 *
074 * @return The value of the string object.
075 */
076 public String getString() {
077 return stringObject.getString();
078 }
079
080 /**
081 * Returns the identifier of the string object.
082 *
083 * @return The identifier.
084 */
085 public int getID() {
086 return stringObject.getID();
087 }
088
089 StringObject getStringObject() {
090 return stringObject;
091 }
092
093 }