This is an automated email from the ASF dual-hosted git repository. ilgrosso pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/syncope.git
The following commit(s) were added to refs/heads/master by this push: new 9df3940 Enhancing AttrSchemaType type resolution 9df3940 is described below commit 9df3940e47ca3ec84f97549d20ea1e818995bbcc Author: Francesco Chicchiriccò <ilgro...@apache.org> AuthorDate: Sat Feb 27 16:25:01 2021 +0100 Enhancing AttrSchemaType type resolution --- .../syncope/common/lib/types/AttrSchemaType.java | 14 +++-- .../common/lib/types/AttrSchemaTypeTest.java | 69 ++++++++++++++++++++++ 2 files changed, 77 insertions(+), 6 deletions(-) diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/types/AttrSchemaType.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/types/AttrSchemaType.java index 51acaed..86fd8a8 100644 --- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/types/AttrSchemaType.java +++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/types/AttrSchemaType.java @@ -20,6 +20,7 @@ package org.apache.syncope.common.lib.types; import java.util.Date; import java.util.stream.Stream; +import org.apache.commons.lang3.ClassUtils; public enum AttrSchemaType { @@ -29,8 +30,8 @@ public enum AttrSchemaType { Boolean(Boolean.class), Date(Date.class), Enum(Enum.class), - Encrypted(byte[].class), - Binary(byte[].class); + Binary(byte[].class), + Encrypted(byte[].class); private final Class<?> type; @@ -49,10 +50,11 @@ public enum AttrSchemaType { } public static AttrSchemaType getAttrSchemaTypeByClass(final Class<?> type) { - return type == boolean.class - ? AttrSchemaType.Boolean - : Stream.of(AttrSchemaType.values()).filter(item -> type == item.getType()). - findFirst().orElse(AttrSchemaType.String); + return Stream.of(AttrSchemaType.values()). + filter(item -> type.isArray() + ? ClassUtils.isAssignable(type.getComponentType(), item.getType().getComponentType(), true) + : ClassUtils.isAssignable(type, item.getType(), true)). + findFirst().orElse(AttrSchemaType.String); } } diff --git a/common/idrepo/lib/src/test/java/org/apache/syncope/common/lib/types/AttrSchemaTypeTest.java b/common/idrepo/lib/src/test/java/org/apache/syncope/common/lib/types/AttrSchemaTypeTest.java new file mode 100644 index 0000000..eb447cf --- /dev/null +++ b/common/idrepo/lib/src/test/java/org/apache/syncope/common/lib/types/AttrSchemaTypeTest.java @@ -0,0 +1,69 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.syncope.common.lib.types; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.Date; +import org.apache.syncope.common.lib.to.UserTO; +import org.junit.jupiter.api.Test; + +public class AttrSchemaTypeTest { + + @Test + void checkLong() { + assertEquals(AttrSchemaType.Long, AttrSchemaType.getAttrSchemaTypeByClass(Long.class)); + assertEquals(AttrSchemaType.Long, AttrSchemaType.getAttrSchemaTypeByClass(long.class)); + } + + @Test + void checkDouble() { + assertEquals(AttrSchemaType.Double, AttrSchemaType.getAttrSchemaTypeByClass(Double.class)); + assertEquals(AttrSchemaType.Double, AttrSchemaType.getAttrSchemaTypeByClass(double.class)); + } + + @Test + void checkBoolean() { + assertEquals(AttrSchemaType.Boolean, AttrSchemaType.getAttrSchemaTypeByClass(Boolean.class)); + assertEquals(AttrSchemaType.Boolean, AttrSchemaType.getAttrSchemaTypeByClass(boolean.class)); + } + + @Test + void checkDate() { + assertEquals(AttrSchemaType.Date, AttrSchemaType.getAttrSchemaTypeByClass(Date.class)); + } + + @Test + void checkEnum() { + assertEquals(AttrSchemaType.Enum, AttrSchemaType.getAttrSchemaTypeByClass(Enum.class)); + assertEquals(AttrSchemaType.Enum, AttrSchemaType.getAttrSchemaTypeByClass(CipherAlgorithm.class)); + } + + @Test + void checkBinary() { + assertEquals(AttrSchemaType.Binary, AttrSchemaType.getAttrSchemaTypeByClass(Byte[].class)); + assertEquals(AttrSchemaType.Binary, AttrSchemaType.getAttrSchemaTypeByClass(byte[].class)); + } + + @Test + void checkString() { + assertEquals(AttrSchemaType.String, AttrSchemaType.getAttrSchemaTypeByClass(String.class)); + assertEquals(AttrSchemaType.String, AttrSchemaType.getAttrSchemaTypeByClass(UserTO.class)); + } +}