You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@olingo.apache.org by "Frederic Souchu (JIRA)" <ji...@apache.org> on 2015/04/21 18:46:58 UTC

[jira] [Commented] (OLINGO-633) enums with isFlags()=false are incorrectly serialized

    [ https://issues.apache.org/jira/browse/OLINGO-633?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14505247#comment-14505247 ] 

Frederic Souchu commented on OLINGO-633:
----------------------------------------

Good to go - unit tests are much more comprehensive than my version!

Minor comment, the constructEnumValue method could 'reuse' the memberValue local variable:
{code}
for (final EdmMember member : getMembers()) {
	/* moved outside if blocks */
	final long memberValue = Long.parseLong(member.getValue());
	if (isFlags()) {
		if ((memberValue & remaining) == memberValue) {
			if (result.length() > 0) {
				result.append(',');
			}
 		result.append(member.getName());
		remaining ^= memberValue;
		}
	} else {
		if (value == memberValue) {
			return member.getName();
		}
	}
}
{code}

> enums with isFlags()=false are incorrectly serialized
> -----------------------------------------------------
>
>                 Key: OLINGO-633
>                 URL: https://issues.apache.org/jira/browse/OLINGO-633
>             Project: Olingo
>          Issue Type: Bug
>          Components: odata4-server
>    Affects Versions: (Java) V4 4.0.0-beta-02
>            Reporter: Frederic Souchu
>            Assignee: Michael Bolz
>
> This type:
> {code}
> return new EnumType()
>               .setName("CarType")
>               .setFlags(false)
>               .setUnderlyingType(EdmPrimitiveTypeKind.Int32.getFullQualifiedName())
>               .setMembers(
>                      Arrays.asList(
> new EnumMember()
>                      .setName("NotProvided")
>                      .setValue("0"), 
> new EnumMember()
> .setName("SuperCar")
> .setValue("1"),
> new EnumMember()
> .setName("MonsterCar")
> .setValue("2"),
> new EnumMember()
> .setName("SpaceCar")
> .setValue("3"), 
> new EnumMember()
> .setName("SlowCar")
> .setValue("4")));
> {code}
> With values set as:
> {code}
> entitySet.getEntities().add(new Entity()
> .addProperty(createPrimitive("Id", 1))
> …
> .addProperty(new PropertyImpl(CarsEdmProvider.ETN_CARTYPE.getFullQualifiedNameAsString(), "Type", ValueType.ENUM, rnd.nextInt(5))));
> {code}
> Will produce the following incorrect output (using the Cars sample):
> {code}
> {
> Id: 1
> Model: "F1 W03"
> ModelYear: "2012"
> Price: 189189.43
> Currency: "EUR"
> Type: "NotProvided,SlowCar" // it should be a single value… 
> }
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)