/**
 * Copyright (c) 2010 Mia-Software.
 *    All rights reserved. This program and the accompanying materials
 *    are made available under the terms of the Eclipse Public License v1.0
 *    which accompanies this distribution, and is available at
 *    http://www.eclipse.org/legal/epl-v10.html
 *    
 *    Contributors:
 *    
 *    	   Nicolas Guyomar (Mia-Software) - initial API and implementation
 */
package org.eclipse.modisco.jee.ejbjar.EjbJar30;


/**
 * <!-- begin-user-doc -->
 * A representation of the model object '<em><b>Multiplicity Type</b></em>'.
 * <!-- end-user-doc -->
 *
 * <!-- begin-model-doc -->
 * 
 * 
 * 	The multiplicityType describes the multiplicity of the
 * 	role that participates in a relation.
 * 
 * 	The value must be one of the two following:
 * 
 * 	    One
 * 	    Many
 * 
 *       
 * <!-- end-model-doc -->
 *
 *
 * @see org.eclipse.modisco.jee.ejbjar.EjbJar30.EjbJar30Package#getMultiplicityType()
 * @model extendedMetaData="name='multiplicityType' kind='simple'"
 * @generated
 */
public interface MultiplicityType extends org.eclipse.modisco.jee.ejbjar.EjbJar30.String {
} // MultiplicityType
