/*******************************************************************************
* Copyright (c) 2011, 2015 Willink Transformations and others.
* 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:
* E.D.Willink - Initial API and implementation
*******************************************************************************/
package org.eclipse.ocl.pivot.internal.library.ecore;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.emf.ecore.EEnum;
import org.eclipse.emf.ecore.EEnumLiteral;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.ocl.pivot.Enumeration;
import org.eclipse.ocl.pivot.EnumerationLiteral;
import org.eclipse.ocl.pivot.TemplateParameter;
import org.eclipse.ocl.pivot.ids.EnumerationId;
public class EcoreReflectiveEnumeration extends EcoreReflectiveType implements Enumeration
{
private /*@LazyNonNull*/ List<EnumerationLiteral> literals = null;
private /*@LazyNonNull*/ Map<String, EnumerationLiteral> name2literal = null;
public EcoreReflectiveEnumeration(@NonNull EcoreReflectivePackage evaluationPackage, int flags, @NonNull EEnum eEnum, @NonNull TemplateParameter @NonNull ... typeParameters) {
super(evaluationPackage, flags, eEnum, typeParameters);
}
@Override
public @Nullable EnumerationLiteral getEnumerationLiteral(@NonNull String name) {
Map<String, EnumerationLiteral> name2literal2 = name2literal;
if (name2literal2 == null) {
name2literal = name2literal2 = new HashMap<String, EnumerationLiteral>();
for (EnumerationLiteral enumerationLiteral : getOwnedLiterals()) {
name2literal2.put(enumerationLiteral.getName(), enumerationLiteral);
}
}
return name2literal2.get(name);
}
@Override
public @NonNull EnumerationId getEnumerationId() {
return (EnumerationId) getTypeId();
}
@Override
public @NonNull List<EnumerationLiteral> getOwnedLiterals() {
List<EnumerationLiteral> literals2 = literals;
if (literals2 == null) {
literals = literals2 = new ArrayList<EnumerationLiteral>();
for (EEnumLiteral eEnumLiteral : ((EEnum) eClassifier).getELiterals()) {
literals2.add(new EcoreExecutorEnumerationLiteral(eEnumLiteral, this, eEnumLiteral.getValue()));
}
}
return literals2;
}
}