/******************************************************************************* * Copyright 2013 SAP AG * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ******************************************************************************/ package com.sap.core.odata.api.edm; import com.sap.core.odata.api.rt.RuntimeDelegate; /** * @com.sap.core.odata.DoNotImplement * EdmSimpleTypeKind holds all EdmSimpleTypes defined as primitive type in the Entity Data Model (EDM). * @author SAP AG */ public enum EdmSimpleTypeKind { Binary, Boolean, Byte, DateTime, DateTimeOffset, Decimal, Double, Guid, Int16, Int32, Int64, SByte, Single, String, Time, Null; /** * Returns the {@link FullQualifiedName} for this SimpleTypeKind. * @return {@link FullQualifiedName} */ public FullQualifiedName getFullQualifiedName() { return new FullQualifiedName(EdmSimpleType.EDM_NAMESPACE, toString()); } /** * Returns an instance for this {@link EdmSimpleTypeKind} in the form of {@link EdmSimpleType}. * @return {@link EdmSimpleType} instance */ public EdmSimpleType getEdmSimpleTypeInstance() { return SimpleTypeFacadeHolder.instance.getEdmSimpleTypeInstance(this); } /** * <p>Parses a URI literal and determines its EDM simple type on the way.</p> * <p>If the literal is <code>null</code> or consists of the literal string * "null", the EDM simple type <code>Null</code> is returned.</p> * <p>The URI literal syntax of EDM simple types allows two ways of determining * the type: * <ul> * <li>The literal has an explicit type indicator (prefix or suffix).</li> * <li>The value is of a type compatible to all other possible types, e.g., "256" * could be of type <code>Int16</code> or <code>Int32</code> but all possible * values of <code>Int16</code> are also legal values of <code>Int32</code> * so callers could promote it to <code>Int32</code> in all cases where they * deem it necessary.<br/> * For a given literal, always the narrowest possible type is chosen.</li> * </ul></p> * <p>There are two cases where it is not possible to choose unambiguously * a compatible type: * <ul> * <li><code>0</code> or <code>1</code> could be a number but also a boolean value; * therefore, the internal (system) type <code>Bit</code> is used for these values.</li> * <li>Integer values between <code>0</code> and <code>127</code> (inclusive) could * be of type <code>SByte</code> or <code>Byte</code> both of which are not compatible * to the other; therefore, the internal (system) type <code>Uint7</code> is used * for these values.</li> * </ul></p> * @param uriLiteral the literal * @return an instance of {@link EdmLiteral}, containing the literal * in default String representation and the EDM simple type * @throws EdmLiteralException if the literal is malformed */ public static EdmLiteral parseUriLiteral(final String uriLiteral) throws EdmLiteralException { return SimpleTypeFacadeHolder.instance.parseUriLiteral(uriLiteral); } /** * Cached access to {@link EdmSimpleTypeFacade} which is used i.a. for {@link EdmSimpleType} instance creation * or parsing of {@link EdmLiteral}s. */ private static class SimpleTypeFacadeHolder { static final EdmSimpleTypeFacade instance = RuntimeDelegate.getSimpleTypeFacade(); } }