/* * JBoss, Home of Professional Open Source. * * See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing. * * See the AUTHORS.txt file distributed with this work for a full listing of individual contributors. */ package org.teiid.core.designer.util; import java.io.Serializable; import java.util.ArrayList; import java.util.Collections; import java.util.List; /** * * * @since 8.0 */ public final class ModelType implements Serializable { /** * */ private static final long serialVersionUID = 6569679435239246363L; /** * */ public static final String copyright = "See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing."; //$NON-NLS-1$ // NO_UCD /** * Enumerator versions of the ModelType literals */ public static enum Type { /** * Enum version of {@link ModelType} literal */ PHYSICAL(true), /** * Enum version of {@link ModelType} literal */ VIRTUAL(true), /** * Enum version of {@link ModelType} literal */ TYPE(true), /** * Enum version of {@link ModelType} literal */ VDB_ARCHIVE(false), /** * Enum version of {@link ModelType} literal */ UNKNOWN(false), /** * Enum version of {@link ModelType} literal */ FUNCTION(false), /** * Enum version of {@link ModelType} literal */ CONFIGURATION(false), /** * Enum version of {@link ModelType} literal */ METAMODEL(true), /** * Enum version of {@link ModelType} literal */ EXTENSION(true), /** * Enum version of {@link ModelType} literal */ LOGICAL(true), /** * Enum version of {@link ModelType} literal */ MATERIALIZATION(false); private final boolean sheddable; private static List<String> nameCache; /** * private constructor */ private Type(boolean sheddable) { this.sheddable = sheddable; } /** * @return the sheddable */ public boolean isSheddable() { return this.sheddable; } /** * @return the name. */ public final String getName() { return name(); } /** * @return CamelCase version of name */ public final String getCamelCaseName() { return StringUtilities.toCamelCase(getName()); } /** * @return the value. */ public final int getValue() { return ordinal(); } /** * @return the literal. */ public final String getLiteral() { return name(); } /** * @return the literal. */ @Override public final String toString() { return name(); } /** * @return array of the type names */ public static List<String> getNames() { if (nameCache == null) { nameCache = new ArrayList<String>(); for (Type type : Type.values()) { nameCache.add(type.getName()); } } return Collections.unmodifiableList(nameCache); } /** * @param name * @return the type with the given name */ public static Type getType(String name) { name = name.toUpperCase(); if (! getNames().contains(name)) throw new IllegalArgumentException(name + " is an unknown model type"); //$NON-NLS-1$ return Type.valueOf(name); } /** * @param name * @return index of the given string once successfully parsed */ public static int parseString(String name) { Type type = getType(name); return type.getValue(); } /** * @param index * @return type for given index */ public static Type getType(int index) { Type[] enumValues = values(); if (index < 0 || index >= enumValues.length) throw new IllegalArgumentException(index + " denotes an unknown model type"); //$NON-NLS-1$ return enumValues[index]; } /** * @param index * @return literal for the given index */ public static String getString(int index) { Type type = getType(index); return type.getLiteral(); } } /** * The '<em><b>PHYSICAL</b></em>' literal value. */ public static final int PHYSICAL = Type.PHYSICAL.getValue(); /** * The '<em><b>VIRTUAL</b></em>' literal value. */ public static final int VIRTUAL = Type.VIRTUAL.getValue(); /** * The '<em><b>TYPE</b></em>' literal value. */ public static final int TYPE = Type.TYPE.getValue(); /** * The '<em><b>VDB ARCHIVE</b></em>' literal value. */ public static final int VDB_ARCHIVE = Type.VDB_ARCHIVE.getValue(); /** * The '<em><b>UNKNOWN</b></em>' literal value. */ public static final int UNKNOWN = Type.UNKNOWN.getValue(); /** * The '<em><b>FUNCTION</b></em>' literal value. */ public static final int FUNCTION = Type.FUNCTION.getValue(); /** * The '<em><b>CONFIGURATION</b></em>' literal value. */ public static final int CONFIGURATION = Type.CONFIGURATION.getValue(); /** * The '<em><b>METAMODEL</b></em>' literal value. */ public static final int METAMODEL = Type.METAMODEL.getValue(); /** * The '<em><b>EXTENSION</b></em>' literal value. */ public static final int EXTENSION = Type.EXTENSION.getValue(); /** * The '<em><b>LOGICAL</b></em>' literal value. */ public static final int LOGICAL = Type.LOGICAL.getValue(); /** * The '<em><b>MATERIALIZATION</b></em>' literal value. */ public static final int MATERIALIZATION = Type.MATERIALIZATION.getValue(); /** * @param itemType * @return whether given item type is shreddable */ public static boolean isShredable(final int itemType) { // NO_UCD Type[] enumValues = Type.values(); if (itemType < 0 || itemType >= enumValues.length) throw new IllegalArgumentException("Unknown model type"); //$NON-NLS-1$ return enumValues[itemType].isSheddable(); } }