001: /*******************************************************************************
002: * Copyright (c) 2000, 2006 IBM Corporation and others.
003: * All rights reserved. This program and the accompanying materials
004: * are made available under the terms of the Eclipse Public License v1.0
005: * which accompanies this distribution, and is available at
006: * http://www.eclipse.org/legal/epl-v10.html
007: *
008: * Contributors:
009: * IBM Corporation - initial API and implementation
010: *******************************************************************************/package org.eclipse.jdt.internal.corext.refactoring.typeconstraints;
011:
012: import java.util.Arrays;
013: import java.util.Collection;
014: import java.util.HashSet;
015:
016: import org.eclipse.core.runtime.Assert;
017:
018: public final class ConstraintOperator {
019:
020: private final String fOperatorString;
021: private final int fOperatorCode;
022:
023: private static final int CODE_SUBTYPE = 0;
024: private static final int CODE_EQUALS = 1;
025: private static final int CODE_DEFINES = 2;
026: private static final int CODE_STRICT_SUBTYPE = 3;
027:
028: private static final String STRING_SUBTYPE = "<=";//$NON-NLS-1$
029: private static final String STRING_EQUALS = "==";//$NON-NLS-1$
030: private static final String STRING_DEFINES = "=^=";//$NON-NLS-1$
031: private static final String STRING_STRICT_SUBTYPE = "<";//$NON-NLS-1$
032: private static final Collection fgOperatorStrings = new HashSet(
033: Arrays.asList(new String[] { STRING_SUBTYPE, STRING_EQUALS,
034: STRING_DEFINES, STRING_STRICT_SUBTYPE }));
035:
036: private static final ConstraintOperator fgSubtype = new ConstraintOperator(
037: STRING_SUBTYPE, CODE_SUBTYPE);
038: private static final ConstraintOperator fgEquals = new ConstraintOperator(
039: STRING_EQUALS, CODE_EQUALS);
040: private static final ConstraintOperator fgDefines = new ConstraintOperator(
041: STRING_DEFINES, CODE_DEFINES);
042: private static final ConstraintOperator fgStrictSubtype = new ConstraintOperator(
043: STRING_STRICT_SUBTYPE, CODE_STRICT_SUBTYPE);
044:
045: public static ConstraintOperator createSubTypeOperator() {
046: return fgSubtype;
047: }
048:
049: public static ConstraintOperator createEqualsOperator() {
050: return fgEquals;
051: }
052:
053: public static ConstraintOperator createDefinesOperator() {
054: return fgDefines;
055: }
056:
057: public static ConstraintOperator createStrictSubtypeOperator() {
058: return fgStrictSubtype;
059: }
060:
061: private ConstraintOperator(String string, int code) {
062: Assert.isTrue(fgOperatorStrings.contains(string));
063: Assert.isTrue(code == CODE_DEFINES || code == CODE_EQUALS
064: || code == CODE_STRICT_SUBTYPE || code == CODE_SUBTYPE);
065: fOperatorString = string;
066: fOperatorCode = code;
067: }
068:
069: public String getOperatorString() {
070: return fOperatorString;
071: }
072:
073: /* (non-Javadoc)
074: * @see java.lang.Object#toString()
075: */
076: public String toString() {
077: return getOperatorString();
078: }
079:
080: /* (non-Javadoc)
081: * @see java.lang.Object#equals(java.lang.Object)
082: */
083: public boolean equals(Object obj) {
084: if (!(obj instanceof ConstraintOperator))
085: return false;
086: ConstraintOperator other = (ConstraintOperator) obj;
087: return fOperatorCode == other.fOperatorCode;
088: }
089:
090: /* (non-Javadoc)
091: * @see java.lang.Object#hashCode()
092: */
093: public int hashCode() {
094: return fOperatorString.hashCode();
095: }
096:
097: public final boolean isSubtypeOperator() {
098: return fOperatorCode == CODE_SUBTYPE;
099: }
100:
101: public final boolean isStrictSubtypeOperator() {
102: return fOperatorCode == CODE_STRICT_SUBTYPE;
103: }
104:
105: public final boolean isEqualsOperator() {
106: return fOperatorCode == CODE_EQUALS;
107: }
108:
109: public final boolean isDefinesOperator() {
110: return fOperatorCode == CODE_DEFINES;
111: }
112: }
|