diff --git a/README.md b/README.md new file mode 100755 index 0000000..2e65efe --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +a \ No newline at end of file diff --git a/documents/.gitkeep b/documents/.gitkeep new file mode 100755 index 0000000..e69de29 diff --git a/softgroup/basis/common-datamapper/pom.xml b/softgroup/basis/common-datamapper/pom.xml new file mode 100755 index 0000000..7ae0189 --- /dev/null +++ b/softgroup/basis/common-datamapper/pom.xml @@ -0,0 +1,35 @@ + + + 4.0.0 + + com.softgroup + basis + + 0.0.1 + + + common-datamapper + jar + + 1.8 + 1.8 + + + + + + com.softgroup + common-exceptions + + + + com.fasterxml.jackson.core + jackson-databind + 2.7.4 + jar + + + + \ No newline at end of file diff --git a/softgroup/basis/common-datamapper/src/main/java/com/softgroup/common/datamapper/DataMapper.java b/softgroup/basis/common-datamapper/src/main/java/com/softgroup/common/datamapper/DataMapper.java new file mode 100755 index 0000000..547b309 --- /dev/null +++ b/softgroup/basis/common-datamapper/src/main/java/com/softgroup/common/datamapper/DataMapper.java @@ -0,0 +1,33 @@ +package com.softgroup.common.datamapper; + + +import com.fasterxml.jackson.core.type.TypeReference; + +import java.io.InputStream; +import java.util.HashMap; +import java.util.Map; + +/** + * @author vlischyshyn + */ +public interface DataMapper { + + Map convertToMap(Object value); + + T convert(Map map, Class dataType); + + // T convert(HashMap map, Class dataType); + + T mapData(String data, Class dataType); + + T mapData(String data, TypeReference dataType); + + T mapData(byte[] message, Class dataType); + + T readValue(InputStream src, Class valueType); + + String dataToString(T data); + + String objectToString(Object data); + +} diff --git a/softgroup/basis/common-datamapper/src/main/java/com/softgroup/common/datamapper/JacksonDataMapper.java b/softgroup/basis/common-datamapper/src/main/java/com/softgroup/common/datamapper/JacksonDataMapper.java new file mode 100755 index 0000000..fcbedce --- /dev/null +++ b/softgroup/basis/common-datamapper/src/main/java/com/softgroup/common/datamapper/JacksonDataMapper.java @@ -0,0 +1,118 @@ +package com.softgroup.common.datamapper; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.PropertyAccessor; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.PropertyNamingStrategy; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.softgroup.common.exceptions.MapperException; + +import java.io.InputStream; +import java.util.Map; + +/** + * @author Arthas + */ +public class JacksonDataMapper implements DataMapper { + private static final String CPJ = "Can't parse json"; + + private final ObjectMapper mapper; + + public JacksonDataMapper() { + mapper = new ObjectMapper(); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); + mapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY); + mapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE); + mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); + } + + public ObjectMapper getMapper() { + return mapper; + } + + @Override + public Map convertToMap(final Object value) { + try { + return (Map) mapper.convertValue(value, Map.class); + } catch (Exception ex) { + throw new MapperException("Can't convert to map ", ex); + } + } + +// @Override +// public convert(map, dataType) { +// try { +// return mapper.convertValue(map, dataType); +// } catch (Exception ex) { +// throw new MapperException("Can't convert map ", ex); +// } +// } + + @Override + public T convert(Map map, Class dataType) { + try { + return mapper.convertValue(map, dataType); + } catch (Exception ex) { + throw new MapperException("Can't convert map ", ex); + } + } + + @Override + public T mapData(String data, Class dataType) { + try { + return mapper.readValue(data, dataType); + } catch (Exception ex) { + throw new MapperException(CPJ, ex); + } + } + + @Override + public T mapData(String data, TypeReference dataType) { + try { + return mapper.readValue(data, dataType); + } catch (Exception ex) { + throw new MapperException(CPJ, ex); + } + } + + @Override + public T mapData(byte[] message, Class dataType) { + try { + return mapper.readValue(message, dataType); + } catch (Exception ex) { + throw new MapperException(CPJ, ex); + } + } + + @Override + public T readValue(InputStream src, Class valueType) { + try { + return mapper.readValue(src, valueType); + } catch (Exception ex) { + throw new MapperException("Can't read from stream ", ex); + } + } + + @Override + public String dataToString(T data) { + try { + return new String(mapper.writeValueAsBytes(data), "UTF-8"); + } catch (Exception ex) { + throw new MapperException("Can't convert object to json string", ex); + } + } + + @Override + public String objectToString(Object data) { + try { + return mapper.writeValueAsString(data); + } catch (Exception e) { + throw new MapperException("Can`t create string", e); + } + } + +} \ No newline at end of file diff --git a/softgroup/basis/common-datamapper/src/main/java/com/softgroup/common/datamapper/configuration/DataMapperAppCfg.java b/softgroup/basis/common-datamapper/src/main/java/com/softgroup/common/datamapper/configuration/DataMapperAppCfg.java new file mode 100755 index 0000000..8db784b --- /dev/null +++ b/softgroup/basis/common-datamapper/src/main/java/com/softgroup/common/datamapper/configuration/DataMapperAppCfg.java @@ -0,0 +1,18 @@ +package com.softgroup.common.datamapper.configuration; + +import com.softgroup.common.datamapper.DataMapper; +import com.softgroup.common.datamapper.JacksonDataMapper; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @author DoctoRJurius + */ +@Configuration +public class DataMapperAppCfg { + @Bean + public DataMapper dataMapper() { + return new JacksonDataMapper(); + } + +} diff --git a/softgroup/basis/common-datamapper/src/test/java/com/softgroup/common/datamapper/DataMapperAppCfgIT.java b/softgroup/basis/common-datamapper/src/test/java/com/softgroup/common/datamapper/DataMapperAppCfgIT.java new file mode 100755 index 0000000..0882b5f --- /dev/null +++ b/softgroup/basis/common-datamapper/src/test/java/com/softgroup/common/datamapper/DataMapperAppCfgIT.java @@ -0,0 +1,30 @@ +package com.softgroup.common.datamapper; + +import com.softgroup.common.datamapper.configuration.DataMapperAppCfg; +import org.hamcrest.CoreMatchers; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThat; + +/** + * @author odin + * @since 15.02.17. + */ +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = {DataMapperAppCfg.class}) +public class DataMapperAppCfgIT { + + @Autowired + DataMapper dataMapper; + + @Test + public void test(){ + assertThat(dataMapper, CoreMatchers.notNullValue()); + assertEquals(JacksonDataMapper.class, dataMapper.getClass()); + } +} diff --git a/softgroup/basis/common-datamapper/src/test/java/com/softgroup/common/datamapper/MapperTest.java b/softgroup/basis/common-datamapper/src/test/java/com/softgroup/common/datamapper/MapperTest.java new file mode 100755 index 0000000..f026c16 --- /dev/null +++ b/softgroup/basis/common-datamapper/src/test/java/com/softgroup/common/datamapper/MapperTest.java @@ -0,0 +1,139 @@ +package com.softgroup.common.datamapper; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.softgroup.common.datamapper.support.ModelA; +import com.softgroup.common.datamapper.support.ModelB; +import com.softgroup.common.datamapper.support.ModelWithEnum; +import com.softgroup.common.exceptions.MapperException; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static org.hamcrest.core.Is.is; +import static org.hamcrest.core.IsInstanceOf.instanceOf; +import static org.hamcrest.core.IsNull.notNullValue; +import static org.hamcrest.core.IsNull.nullValue; +import static org.junit.Assert.*; + +/** + * @author odin + * @since 15.02.17. + */ +public class MapperTest { + + @Test + public void testNullArgs() { + final JacksonDataMapper mapper = new JacksonDataMapper(); + + assertThat(mapper.dataToString(null), is("null")); + assertThat(mapper.objectToString(null), is("null")); + assertThat(mapper.convert(null, ModelA.class), nullValue()); + + } + + @Test + public void testMap() { + final JacksonDataMapper mapper = new JacksonDataMapper(); + + String str = "{\"name\":\"hello\"}"; + ModelA ma = mapper.mapData(str, ModelA.class); + assertThat(ma.getName(), is("hello")); + assertThat(mapper.dataToString(ma), is(str)); + + Map map = new HashMap<>(); + map.put("name", "hello world"); + + ma = mapper.convert(map, ModelA.class); + assertThat(ma.getName(), is("hello world")); + + ma = mapper.mapData(str, new TypeReference() {}); + assertThat(ma.getName(), is("hello")); + assertThat(mapper.dataToString(ma), is(str)); + + str = "{\"id\":\"1q2w3e\",\"list\":[{\"name\":\"asd\"},{\"name\":\"zxc\"}]}"; + ModelB mb = mapper.mapData(str, ModelB.class); + assertThat(mb.getId(), is("1q2w3e")); + assertThat(mb.getList(), notNullValue()); + assertThat(mb.getList().size(), is(2)); + assertThat(mb.getList().get(0), is(instanceOf(Map.class))); + ma = mapper.convert((Map) mb.getList().get(0), ModelA.class); + assertThat(ma.getName(), is("asd")); + + Object oMap = mapper.convertToMap(mb); + assertThat(oMap, notNullValue()); + assertThat(oMap , is(instanceOf(Map.class))); + map = (Map) oMap; + assertThat(map.get("id"), is("1q2w3e")); + + assertThat(mapper.convertToMap(null), nullValue()); + } + + @Test(expected = MapperException.class) + public void testConvertEx() { + new JacksonDataMapper().convert(new HashMap<>(), (Class)null); + } + + @Test(expected = MapperException.class) + public void testMapDataStringEx() { + new JacksonDataMapper().mapData((String) null, ModelA.class); + } + + @Test(expected = MapperException.class) + public void testMapDataBytesEx() { + new JacksonDataMapper().mapData((byte[]) null, ModelA.class); + } + + @Test(expected = MapperException.class) + public void testMapDataTypeRefEx() { + new JacksonDataMapper().mapData(null, new TypeReference() {}); + } + + @Test(expected = MapperException.class) + public void testConvertToMapEx() { + List list = new ArrayList<>(); + list.add("q"); + list.add("w"); + new JacksonDataMapper().convertToMap(list); + } + + @Test + public void testWithEnum() { + final JacksonDataMapper mapper = new JacksonDataMapper(); + + String str = "{\"name\":\"hello\",\"type\":1}"; + ModelWithEnum me = mapper.mapData(str, ModelWithEnum.class); + assertThat(me.getName(), is("hello")); + assertThat(me.getType(), is(ModelWithEnum.ModelType.MODEL_X)); + assertThat(mapper.dataToString(me), is(str)); + + str = "{\"name\":\"hello\",\"type\":2}"; + me = mapper.mapData(str, ModelWithEnum.class); + assertThat(me.getName(), is("hello")); + assertThat(me.getType(), is(ModelWithEnum.ModelType.MODEL_Y)); + assertThat(mapper.dataToString(me), is(str)); + + } + + @Test(expected = MapperException.class) + public void testWithWrongEnumValue() { + final JacksonDataMapper mapper = new JacksonDataMapper(); + String str = "{\"name\":\"hello\",\"type\":\"model_z\"}"; + ModelWithEnum me = mapper.mapData(str, ModelWithEnum.class); + } + + @Test + public void testWithNoEnumValue() { + final JacksonDataMapper mapper = new JacksonDataMapper(); + String str = "{\"name\":\"hello\"}"; + ModelWithEnum me = mapper.mapData(str, ModelWithEnum.class); + assertThat(me.getName(), is("hello")); + assertThat(me.getType(), nullValue()); + assertThat(mapper.dataToString(me), is(str)); + + } + +} + diff --git a/softgroup/basis/common-datamapper/src/test/java/com/softgroup/common/datamapper/support/ModelA.java b/softgroup/basis/common-datamapper/src/test/java/com/softgroup/common/datamapper/support/ModelA.java new file mode 100755 index 0000000..4552178 --- /dev/null +++ b/softgroup/basis/common-datamapper/src/test/java/com/softgroup/common/datamapper/support/ModelA.java @@ -0,0 +1,18 @@ +package com.softgroup.common.datamapper.support; + +/** + * @author odin + * @since 15.02.17. + */ +public class ModelA { + private String name; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + +} diff --git a/softgroup/basis/common-datamapper/src/test/java/com/softgroup/common/datamapper/support/ModelB.java b/softgroup/basis/common-datamapper/src/test/java/com/softgroup/common/datamapper/support/ModelB.java new file mode 100755 index 0000000..a08a04d --- /dev/null +++ b/softgroup/basis/common-datamapper/src/test/java/com/softgroup/common/datamapper/support/ModelB.java @@ -0,0 +1,29 @@ +package com.softgroup.common.datamapper.support; + +import java.util.List; + +/** + * @author odin + * @since 15.02.17. + */ +public class ModelB { + private String id; + private List list; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + +} diff --git a/softgroup/basis/common-datamapper/src/test/java/com/softgroup/common/datamapper/support/ModelWithEnum.java b/softgroup/basis/common-datamapper/src/test/java/com/softgroup/common/datamapper/support/ModelWithEnum.java new file mode 100755 index 0000000..9fb6d76 --- /dev/null +++ b/softgroup/basis/common-datamapper/src/test/java/com/softgroup/common/datamapper/support/ModelWithEnum.java @@ -0,0 +1,61 @@ +package com.softgroup.common.datamapper.support; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; + +/** + * @author odin + * @since 15.02.17. + */ +public class ModelWithEnum { + + private String name; + + private ModelType type; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public ModelType getType() { + return type; + } + + public void setType(ModelType type) { + this.type = type; + } + + public enum ModelType{ + MODEL_X(1), + MODEL_Y(2); + + private final int code; + + + ModelType(int code) { + this.code = code; + } + + @JsonValue + public int getCode() { + return code; + } + + @JsonCreator + public static ModelType forValue(int code) { + for(ModelType v : values()){ + if( v.getCode() == code){ + return v; + } + } + return null; + } + + + } + +} diff --git a/softgroup/basis/common-exceptions/pom.xml b/softgroup/basis/common-exceptions/pom.xml new file mode 100755 index 0000000..3b60674 --- /dev/null +++ b/softgroup/basis/common-exceptions/pom.xml @@ -0,0 +1,24 @@ + + + 4.0.0 + + com.softgroup + basis + 0.0.1 + + + common-exceptions + jar + + + 1.8 + 1.8 + + + + + + + \ No newline at end of file diff --git a/softgroup/basis/common-exceptions/src/main/java/com/softgroup/common/exceptions/MapperException.java b/softgroup/basis/common-exceptions/src/main/java/com/softgroup/common/exceptions/MapperException.java new file mode 100755 index 0000000..2ab25d2 --- /dev/null +++ b/softgroup/basis/common-exceptions/src/main/java/com/softgroup/common/exceptions/MapperException.java @@ -0,0 +1,17 @@ +package com.softgroup.common.exceptions; + +/** + * @author odin + * @since 15.02.17. + */ +public class MapperException extends YouaException {//NOSONAR: this is exception class + private static final long serialVersionUID = 1400802494145013136L; + + public MapperException(String message, Throwable cause) { + super(message, cause); + } + + public MapperException(String message) { + super(message); + } +} diff --git a/softgroup/basis/common-exceptions/src/main/java/com/softgroup/common/exceptions/YouaException.java b/softgroup/basis/common-exceptions/src/main/java/com/softgroup/common/exceptions/YouaException.java new file mode 100755 index 0000000..d2bb625 --- /dev/null +++ b/softgroup/basis/common-exceptions/src/main/java/com/softgroup/common/exceptions/YouaException.java @@ -0,0 +1,38 @@ +package com.softgroup.common.exceptions; + +/** + * @author odin + * @since 15.02.17. + */ +public class YouaException extends RuntimeException { + + private static final long serialVersionUID = 5235385826696520626L; + + public YouaException() { + super(); + } + + public YouaException(String message) { + super(message); + } + + public YouaException(String format, Object... args) { + this(String.format(format, args)); + } + + public YouaException(String message, Throwable cause) { + super(message, cause); + } + + public YouaException(String format, Throwable cause, Object... args) { + this(String.format(format, args), cause); + } + + public YouaException(Throwable cause) { + super(cause); + } + + public YouaException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { + super(message, cause, enableSuppression, writableStackTrace); + } +} diff --git a/softgroup/basis/pom.xml b/softgroup/basis/pom.xml new file mode 100755 index 0000000..84e0736 --- /dev/null +++ b/softgroup/basis/pom.xml @@ -0,0 +1,25 @@ + + + 4.0.0 + + com.softgroup + softgroup + 0.0.1 + + basis + pom + + common-exceptions + common-datamapper + + + + + + org.springframework + spring-context + + + + \ No newline at end of file diff --git a/softgroup/frontend/pom.xml b/softgroup/frontend/pom.xml new file mode 100755 index 0000000..45a53fe --- /dev/null +++ b/softgroup/frontend/pom.xml @@ -0,0 +1,24 @@ + + + 4.0.0 + + com.softgroup + softgroup + 0.0.1 + + + frontend + pom + + + + + + + ${project.build.directory}/endorsed + UTF-8 + + + + \ No newline at end of file diff --git a/softgroup/pom.xml b/softgroup/pom.xml new file mode 100755 index 0000000..3718af7 --- /dev/null +++ b/softgroup/pom.xml @@ -0,0 +1,205 @@ + + + 4.0.0 + com.softgroup + softgroup + 0.0.1 + + pom + courses-server + + + frontend + services + basis + + + + UTF-8 + UTF-8 + 4.2.5.RELEASE + + + + + + + + com.softgroup + common-datamapper + ${project.version} + + + + com.softgroup + common-exceptions + ${project.version} + + + + + org.springframework + spring-core + ${spring.core.version} + + + + org.springframework + spring-context + ${spring.core.version} + + + + org.springframework + spring-test + ${spring.core.version} + + + + + javax.servlet + javax.servlet-api + 3.1.0 + + + + javax + javaee-web-api + provided + 7.0 + + + + com.google.guava + guava + 19.0 + + + + + + + + + + + + org.apache.commons + commons-lang3 + 3.4 + + + + commons-io + commons-io + 2.5 + + + + commons-codec + commons-codec + 1.10 + + + + + com.mattbertolini + liquibase-slf4j + 2.0.0 + + + + biz.paluch.logging + logstash-gelf + 1.10.0 + + + + + junit + junit + 4.12 + test + + + + junit-addons + junit-addons + 1.4 + test + + + + org.mockito + mockito-core + 2.0.54-beta + test + + + + org.powermock + powermock-core + 1.6.5 + + + + org.powermock + powermock-module-junit4-rule-agent + 1.6.5 + test + + + + org.powermock + powermock-module-junit4 + 1.6.5 + test + + + + + + + org.powermock + powermock-api-easymock + 1.6.5 + + + + org.easymock + easymock + 3.4 + test + + + + com.openpojo + openpojo + 0.8.4 + test + + + + org.ow2.asm + asm + 5.1 + test + + + + org.hamcrest + hamcrest-core + 1.3 + test + + + + org.springframework + spring-test + + + + \ No newline at end of file diff --git a/softgroup/services/pom.xml b/softgroup/services/pom.xml new file mode 100755 index 0000000..628c2e6 --- /dev/null +++ b/softgroup/services/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + com.softgroup + softgroup + 0.0.1 + + services + + pom + + + + + + + ${project.build.directory}/endorsed + UTF-8 + + + \ No newline at end of file