001: // This file is part of KeY - Integrated Deductive Software Design
002: // Copyright (C) 2001-2007 Universitaet Karlsruhe, Germany
003: // Universitaet Koblenz-Landau, Germany
004: // Chalmers University of Technology, Sweden
005: //
006: // The KeY system is protected by the GNU General Public License.
007: // See LICENSE.TXT for details.
008: //This file is part of KeY - Integrated Deductive Software Design
009: //Copyright (C) 2001-2005 Universitaet Karlsruhe, Germany
010: // Universitaet Koblenz-Landau, Germany
011: // Chalmers University of Technology, Sweden
012: //
013: //The KeY system is protected by the GNU General Public License.
014: //See LICENSE.TXT for details.
015: //
016: //
017:
018: package de.uka.ilkd.key.parser.ocl;
019:
020: import de.uka.ilkd.key.java.abstraction.KeYJavaType;
021: import de.uka.ilkd.key.logic.Term;
022: import de.uka.ilkd.key.logic.sort.Sort;
023: import de.uka.ilkd.key.util.Debug;
024:
025: /**
026: * A Term, a KeYJavaType, or an OCLCollection.
027: */
028: class OCLEntity {
029: private final Term term;
030: private final KeYJavaType type;
031: private final OCLCollection collection;
032:
033: public OCLEntity(Term term) {
034: Debug.assertTrue(term != null);
035: this .term = term;
036: this .type = null;
037: this .collection = null;
038: }
039:
040: public OCLEntity(KeYJavaType type) {
041: Debug.assertTrue(type != null);
042: this .term = null;
043: this .type = type;
044: this .collection = null;
045: }
046:
047: public OCLEntity(OCLCollection collection) {
048: Debug.assertTrue(collection != null);
049: this .term = null;
050: this .type = null;
051: this .collection = collection;
052: }
053:
054: public boolean isTerm() {
055: return term != null;
056: }
057:
058: public boolean isType() {
059: return type != null;
060: }
061:
062: public boolean isCollection() {
063: return collection != null;
064: }
065:
066: /**
067: * returns a collection containing only the element which is represented
068: * by the Term of this entity
069: * @throws OCLTranslationError
070: */
071: public OCLEntity asCollection() throws OCLTranslationError {
072: return this .term != null ? new OCLEntity(new OCLCollection(
073: this .term)) : null;
074: }
075:
076: public Term getTerm() {
077: return term;
078: }
079:
080: public KeYJavaType getType() {
081: return type;
082: }
083:
084: public OCLCollection getCollection() {
085: return collection;
086: }
087:
088: /**
089: * For types and terms, this method returns the corresponding sort.
090: * For collections it returns the sort of the elements, the collection
091: * contains.
092: *
093: * @return non-collection-sort of this entity
094: */
095: public Sort getSort() {
096: Sort result;
097:
098: if (isType()) {
099: result = type.getSort();
100: } else if (isTerm()) {
101: result = term.sort();
102: } else {
103: result = collection.getElementSort();
104: }
105:
106: return result;
107: }
108:
109: public String toString() {
110: if (isTerm()) {
111: return term.toString();
112: } else if (isType()) {
113: return type.toString();
114: } else {
115: return collection.toString();
116: }
117: }
118:
119: }
|