blob: 84b33844492606b2532f963dea39b56a53cf77da [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2012-2014 SAP SE.
* 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:
* SAP SE - initial API and implementation and/or initial documentation
*
*******************************************************************************/
package org.eclipse.ogee.imp.buildersV3;
import java.util.Map;
import org.eclipse.ogee.client.model.edmx.v3.Member;
import org.eclipse.ogee.imp.builders.BuilderException;
import org.eclipse.ogee.imp.util.builderV3.nls.messages.BuilderV3Messages;
import org.eclipse.ogee.model.odata.EDMTypes;
import org.eclipse.ogee.model.odata.EnumMember;
import org.eclipse.ogee.model.odata.EnumType;
import org.eclipse.ogee.model.odata.IntegerValue;
import org.eclipse.ogee.model.odata.OdataFactory;
import org.eclipse.ogee.model.odata.Schema;
import org.eclipse.osgi.util.NLS;
public class EnumTypeBuilderV3 {
public void build(
org.eclipse.ogee.client.model.edmx.v3.EnumType edmxEnumType,
Map<String, Map<Object, Object>> odataObjectsMap, Schema schema)
throws BuilderException {
// get enumType form the lockup table
Map<Object, Object> nsObject = odataObjectsMap.get(schema
.getNamespace());
EnumType enumType = (EnumType) nsObject.get(edmxEnumType);
if (enumType == null) {
String enumTypeName = edmxEnumType.getName();
if (enumTypeName == null) {
throw new BuilderException(BuilderV3Messages.EnumBuilderV3_0);
}
// create enumType
enumType = OdataFactory.eINSTANCE.createEnumType();
// save enumType
nsObject.put(edmxEnumType, enumType);
// set enumType name
enumType.setName(enumTypeName);
// set is Flags
enumType.setFlags(edmxEnumType.isFlags());
// set underlying type
String underlyingType = edmxEnumType.getUnderlyingType();
String eType = underlyingType.replace("Edm.", ""); //$NON-NLS-1$ //$NON-NLS-2$
EDMTypes edmType = EDMTypes.getByName(eType);
if (edmType == null) {
// EnumType UnderlyingType cannot be (invalid value)
throw new BuilderException(NLS.bind(
BuilderV3Messages.EnumBuilderV3_2, enumTypeName,
underlyingType));
}
enumType.setUnderlyingType(edmType);
// set members
Member[] members = edmxEnumType.getMembers();
for (Member currMember : members) {
String enumMemberName = currMember.getName();
if (enumMemberName == null) {
throw new BuilderException(
BuilderV3Messages.EnumBuilderV3_1);
}
EnumMember enumMember = OdataFactory.eINSTANCE
.createEnumMember();
enumMember.setName(enumMemberName);
Long longMemberValue = (Long) currMember.getValue();
if (longMemberValue != null) {
IntegerValue integerMemberValue = createMemberValue(
longMemberValue, edmType);
enumMember.setValue(integerMemberValue);
}
enumType.getMembers().add(enumMember);
}
// add the enum to the Schema
schema.getEnumTypes().add(enumType);
}
}
private IntegerValue createMemberValue(Long value, EDMTypes edmType) {
IntegerValue integerValue = null;
switch (edmType) {
case BYTE:
integerValue = OdataFactory.eINSTANCE.createByteValue();
integerValue.setValueObject((Byte) value.byteValue());
break;
case INT16:
integerValue = OdataFactory.eINSTANCE.createInt16Value();
integerValue.setValueObject((Short) value.shortValue());
break;
case INT32:
integerValue = OdataFactory.eINSTANCE.createInt32Value();
integerValue.setValueObject((Integer) value.intValue());
break;
case INT64:
integerValue = OdataFactory.eINSTANCE.createInt64Value();
integerValue.setValueObject((Long) value);
break;
case SBYTE:
integerValue = OdataFactory.eINSTANCE.createSByteValue();
integerValue.setValueObject((Byte) value.byteValue());
break;
default:
break;
}
return integerValue;
}
}