public static Object getMainFacetValue(XSDConstrainingFacet facet) {
    Object rv = null;
    int facetClassifierID = facet.eClass().getClassifierID();
    switch (facetClassifierID) {
      case XSDPackage.XSD_LENGTH_FACET:
        {
          XSDLengthFacet lf = (XSDLengthFacet) facet;
          rv = new Integer(lf.getValue());
        }
        break;
      case XSDPackage.XSD_MAX_LENGTH_FACET:
        {
          XSDMaxLengthFacet mf = (XSDMaxLengthFacet) facet;
          rv = new Integer(mf.getValue());
        }
        break;
      case XSDPackage.XSD_MIN_LENGTH_FACET:
        {
          XSDMinLengthFacet mf = (XSDMinLengthFacet) facet;
          rv = new Integer(mf.getValue());
        }
        break;
      case XSDPackage.XSD_PATTERN_FACET:
        {
          XSDPatternFacet pf = (XSDPatternFacet) facet;
          List value = pf.getValue();
          if (value.size() > 1) {
            // skip this, it is a multi-element
            rv = value;
          } else if (value.size() == 1) {
            // single entry, use it:
            rv = value.get(0);
          } else {
            // no elements; try the lex value:
            rv = pf.getLexicalValue();
          } // endif
        }
        break;
      case XSDPackage.XSD_ENUMERATION_FACET:
        {
          XSDEnumerationFacet ef = (XSDEnumerationFacet) facet;
          List value = ef.getValue();
          if (value.size() > 1) {
            // skip this, it is a multi-element
            rv = value;
          } else if (value.size() == 1) {
            // single entry, use it:
            rv = value.get(0);
          } else {
            // no elements; try the lex value:
            rv = ef.getLexicalValue();
          } // endif
        }
        break;
      case XSDPackage.XSD_WHITE_SPACE_FACET:
        {
          XSDWhiteSpaceFacet wf = (XSDWhiteSpaceFacet) facet;
          rv = wf.getValue().getName();
        }
        break;
      case XSDPackage.XSD_MIN_EXCLUSIVE_FACET:
      case XSDPackage.XSD_MIN_INCLUSIVE_FACET:
        {
          XSDMinFacet mf = (XSDMinFacet) facet;
          // defect 18279 - read as string, since the backing datatype can be in different value
          // spaces.
          int value;
          try {
            String lexicalValue = mf.getLexicalValue();
            if (lexicalValue != null) {
              value = Integer.parseInt(lexicalValue);
            } else {
              // it is null, use invalid number:
              value = -Integer.MAX_VALUE;
            } // endif
          } catch (NumberFormatException ex) {
            value = DEFAULT_MIN_BOUNDS;
          } // endtry
          rv = new InclusiveInteger(value, mf.isInclusive());
        }
        break;
      case XSDPackage.XSD_MAX_EXCLUSIVE_FACET:
      case XSDPackage.XSD_MAX_INCLUSIVE_FACET:
        {
          XSDMaxFacet mf = (XSDMaxFacet) facet;
          // defect 18279 - read as string, since the backing datatype can be in different value
          // spaces.
          int value;
          try {
            String lexicalValue = mf.getLexicalValue();
            if (lexicalValue != null) {
              value = Integer.parseInt(lexicalValue);
            } else {
              // it is null, use zero:
              value = -Integer.MAX_VALUE;
            } // endif
          } catch (NumberFormatException ex) {
            value = DEFAULT_MAX_BOUNDS;
          } // endtry
          rv = new InclusiveInteger(value, mf.isInclusive());
        }
        break;
      case XSDPackage.XSD_FRACTION_DIGITS_FACET:
        {
          XSDFractionDigitsFacet ff = (XSDFractionDigitsFacet) facet;
          rv = new Integer(ff.getValue());
        }
        break;
      case XSDPackage.XSD_TOTAL_DIGITS_FACET:
        {
          XSDTotalDigitsFacet tf = (XSDTotalDigitsFacet) facet;
          rv = new Integer(tf.getValue());
        }
        break;

      default:
        ModelerXsdUiConstants.Util.log(
            ModelerXsdUiConstants.Util.getString(ERROR_KEY_UNUSABLE_FACET, facet));
        break;
    } // endswitch

    return rv;
  }