001: package org.andromda.translation.ocl.syntax;
002:
003: import org.andromda.core.translation.TranslationUtils;
004:
005: /**
006: * Contains the patterns matching reserved features of the OCL language.
007: *
008: * @author Chad Brandon
009: */
010: public class OCLFeatures {
011: /**
012: * Matches on the <code>allInstances</code> feature.
013: */
014: private static final String ALL_INSTANCES = "(\\s*\\w*\\s*(\\w+|::)*)?\\s*allInstances\\s*\\(\\s*\\)";
015:
016: /**
017: * Matches on the <code>oclIsKindOf</code> feature.
018: */
019: private static final String OCL_IS_KIND_OF = "oclIsKindOf\\s*\\(\\s*"
020: + OCLPatterns.SCOPE_PATH + "\\s*\\)\\s*";
021:
022: /**
023: * Matches on the <code>oclIsTypeOf</code> feature.
024: */
025: private static final String OCL_IS_TYPE_OF = "oclIsTypeOf\\s*\\(\\s*"
026: + OCLPatterns.SCOPE_PATH + "\\s*\\)\\s*";
027:
028: /**
029: * Matches on the <code>concat</code> feature.
030: */
031: private static final String CONCAT = "concat\\s*\\(\\s*"
032: + OCLPatterns.NAVIGATIONAL_PATH + "\\s*\\)\\s*";
033:
034: /**
035: * Matches on any of the features.
036: */
037: private static final String ALL_PATTERNS = ALL_INSTANCES + "|"
038: + OCL_IS_KIND_OF + "|" + OCL_IS_TYPE_OF + "|" + CONCAT;
039:
040: /**
041: * Indicates if the expression is an <em>allInstances</em>. OCL feature.
042: *
043: * @param expression the expression to evaluate.
044: * @return true/false
045: */
046: public static boolean isAllInstances(Object expression) {
047: return TranslationUtils.deleteWhitespace(expression).matches(
048: OCLFeatures.ALL_INSTANCES);
049: }
050:
051: /**
052: * Indicates if the expression is an <em>concat</em>. OCL feature.
053: *
054: * @param expression the expression to evaluate.
055: * @return true/false
056: */
057: public static boolean isConcat(Object expression) {
058: return TranslationUtils.deleteWhitespace(expression).matches(
059: OCLFeatures.CONCAT);
060: }
061:
062: /**
063: * Indicates if the expression is an <em>oclIsTypeOf</em>. OCL feature.
064: *
065: * @param expression the expression to evaluate.
066: * @return true/false
067: */
068: public static boolean isOclIsTypeOf(Object expression) {
069: return TranslationUtils.deleteWhitespace(expression).matches(
070: OCLFeatures.OCL_IS_TYPE_OF);
071: }
072:
073: /**
074: * Indicates if the expression is an <em>oclIsKindOf</em>. OCL feature.
075: *
076: * @param expression the expression to evaluate.
077: * @return true/false
078: */
079: public static boolean isOclIsKindOf(Object expression) {
080: return TranslationUtils.deleteWhitespace(expression).matches(
081: OCLFeatures.OCL_IS_KIND_OF);
082: }
083:
084: /**
085: * Indicates if this <code>expression</code> is an OCL feature (that is it
086: * matches one of the features defined within this class).
087: *
088: * @param expression the expression to match.
089: * @return true/false
090: */
091: public static boolean isOclFeature(Object expression) {
092: return TranslationUtils.deleteWhitespace(expression).matches(
093: ALL_PATTERNS);
094: }
095:
096: /**
097: * Represents the <em>self</em> keyword in OCL.
098: */
099: private static final String SELF = "self";
100:
101: /**
102: * Indicates if this <code>expression</code> is an instance of the
103: * <em>self</em> key word.
104: *
105: * @param expression the expression to check.
106: * @return true/false
107: */
108: public static boolean isSelf(Object expression) {
109: return TranslationUtils.deleteWhitespace(expression).matches(
110: SELF);
111: }
112: }
|