Commit 7e8dce26 authored by Aleksandr Tumanov's avatar Aleksandr Tumanov

Merge branch 'Release_0.0.2' into 'minsky'

Release 0.0.2

See merge request !2
parents 8368a10b 7be2fb74
......@@ -25,4 +25,5 @@ $ ./gradlew war
- числовые поля
- дата/время
- справочники (выпадающий список, выбор вариантов, переключатель вариантов)
- ссылка на реестр
\ No newline at end of file
- ссылка на реестр
- объекты Synergy (пользователи, подразделения, должности)
\ No newline at end of file
......@@ -15,7 +15,7 @@ dependencies {
compile(group: 'org.slf4j', name: 'slf4j-api', version: '1.7.25', transitive: false)
compile 'org.apache.httpcomponents:httpclient:4.5.1'
compile 'org.apache.httpcomponents:httpclient:4.5.13'
providedCompile(group: 'org.jboss.resteasy', name: 'resteasy-jaxrs', version: '3.8.0.Final')
// https://mvnrepository.com/artifact/org.jboss.resteasy/resteasy-multipart-provider
providedCompile(group: 'org.jboss.resteasy', name: 'resteasy-multipart-provider', version: '3.8.0.Final')
......@@ -23,7 +23,7 @@ dependencies {
compile group: 'commons-io', name: 'commons-io', version: '2.6'
compile ('org.jboss.spec:jboss-javaee-7.0:1.1.1.Final')
// https://mvnrepository.com/artifact/org.apache.poi/poi
compile group: 'org.apache.poi', name: 'poi', version: '3.9'
compile group: 'org.apache.poi', name: 'poi', version: '5.2.0'
// https://mvnrepository.com/artifact/com.google.code.gson/gson
compile group: 'com.google.code.gson', name: 'gson', version: '2.7'
// https://mvnrepository.com/artifact/joda-time/joda-time
......@@ -31,7 +31,9 @@ dependencies {
// https://mvnrepository.com/artifact/org.json/json
compile group: 'org.json', name: 'json', version: '20180813'
compile group: 'org.apache.httpcomponents', name: 'httpcore', version: '4.4.12'
compile group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.5.10'
compile group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.5.13'
compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.9'
compileOnly 'org.projectlombok:lombok:1.18.22'
annotationProcessor 'org.projectlombok:lombok:1.18.22'
}
package kz.arta.ext.sap.entity;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@NoArgsConstructor
public class Department {
private String departmentID;
private String nameRu;
}
package kz.arta.ext.sap.entity;
public enum EntityType {
USERS("users"),
DEPARTMENTS("departments"),
POSITIONS("positions");
public final String value;
EntityType(String value) {
this.value = value;
}
}
package kz.arta.ext.sap.entity;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@NoArgsConstructor
public class Group {
private Integer groupID;
private String name;
}
package kz.arta.ext.sap.entity;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@NoArgsConstructor
public class Position {
private String positionID;
private String nameRu;
}
package kz.arta.ext.sap.entity;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@NoArgsConstructor
public class User {
private String userid;
private String firstname;
private String lastname;
private String patronymic;
/**
* Метод должен возвращать имя пользователя в формате Фамилия И.О.
* Method return the username in the format Lastname F.P.
*
* @return имя пользователя
*/
public String getPersonName() {
StringBuilder name = new StringBuilder();
if (lastname != null) {
name.append(lastname);
} else {
return "";
}
if (firstname != null && firstname.length() > 0) {
name.append(" ");
name.append(firstname.substring(0, 1));
name.append(".");
} else {
return lastname;
}
if (patronymic != null && patronymic.length() > 0) {
name.append(patronymic.substring(0, 1));
name.append(".");
} else {
return name.toString();
}
return name.toString();
}
}
package kz.arta.ext.sap.exception;
public abstract class ApiException extends RuntimeException{
public ApiException(String message) {
super(message);
}
}
package kz.arta.ext.sap.exception;
public class GroupNotFoundException extends ApiException{
public GroupNotFoundException(String id) {
super("группа с id = " + id + " не найдена");
}
}
package kz.arta.ext.sap.exception;
public class OwnerNotFoundException extends ApiException{
public OwnerNotFoundException(String id) {
super("id = " + id + " не найден");
}
}
package kz.arta.ext.sap.service;
public class ProxyEndpoints {
public static final String BASE_URL = "http://127.0.0.1:8080/Synergy/";
public static final String FILECABINET_USER_ENDPOINT = "rest/api/filecabinet/user/";
public static final String GET_DEPARTMENT_ENDPOINT = "rest/api/departments/get";
public static final String GET_POSITION_ENDPOINT = "rest/api/positions/get";
public static final String FIND_GROUP_ENDPOINT = "rest/api/groups/find";
}
......@@ -119,7 +119,7 @@ public class UnsecuredProxyService {
return Response.status(500).entity(e.getMessage()).build();
}
return Response.status(200).entity("{\"message\": \"Начат иморт записей реестра\"}").build();
return Response.status(200).entity("{\"message\": \"Начат импорт записей реестра\"}").build();
}
......
package kz.arta.ext.sap.service.proxy;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import kz.arta.ext.sap.entity.Department;
import kz.arta.ext.sap.entity.Group;
import kz.arta.ext.sap.entity.Position;
import kz.arta.ext.sap.entity.User;
import kz.arta.ext.sap.exception.GroupNotFoundException;
import kz.arta.ext.sap.exception.OwnerNotFoundException;
import kz.arta.ext.sap.service.ProxyEndpoints;
import kz.arta.ext.sap.util.HTTPRequestUtils;
import kz.arta.ext.sap.util.Json;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.HashMap;
@NoArgsConstructor
@AllArgsConstructor
public class ProxyService {
private static final Logger LOGGER = LoggerFactory.getLogger(ProxyService.class);
private String login;
private String password;
/**
* Получение данных о пользователе
* Get data about user
*
* @param userID
* @return {@link User}
* @throws Exception
*/
public User getFilecabinetUserByID(String userID) throws Exception {
LOGGER.info("sending a request to get user data");
User user;
String response = HTTPRequestUtils.sendGet(ProxyEndpoints.BASE_URL +
ProxyEndpoints.FILECABINET_USER_ENDPOINT + userID, login, password);
if (!response.equals("")) {
user = new User();
JsonElement parse = Json.serializer().parse(response);
user.setUserid(parse.getAsJsonObject().get("userid").getAsString());
user.setFirstname(parse.getAsJsonObject().get("firstname").getAsString());
user.setLastname(parse.getAsJsonObject().get("lastname").getAsString());
user.setPatronymic(parse.getAsJsonObject().get("patronymic").getAsString());
} else {
throw new OwnerNotFoundException(userID);
}
LOGGER.info("request complete");
return user;
}
/**
* Получение данных о департаменте
* Get data about department
*
* @param departmentID
* @return {@link Department}
* @throws Exception
*/
public Department getDepartmentByID(String departmentID) throws Exception {
LOGGER.info("sending a request to get department data");
Department department;
String response = HTTPRequestUtils.sendGet(ProxyEndpoints.BASE_URL +
ProxyEndpoints.GET_DEPARTMENT_ENDPOINT + "?departmentID=" + departmentID, login, password);
if (!response.equals("")) {
department = new Department();
JsonElement parse = Json.serializer().parse(response);
department.setDepartmentID(parse.getAsJsonObject().get("departmentID").getAsString());
department.setNameRu(parse.getAsJsonObject().get("nameRu").getAsString());
} else {
throw new OwnerNotFoundException(departmentID);
}
if (department.getDepartmentID().equals("null")) throw new OwnerNotFoundException(departmentID);
LOGGER.info("request complete");
return department;
}
/**
* Получение данных о должности
* Get data about position
*
* @param positionID
* @return
* @throws Exception
*/
public Position getPositionByID(String positionID) throws Exception {
LOGGER.info("sending a request to get position data");
Position position;
String response = HTTPRequestUtils.sendGet(ProxyEndpoints.BASE_URL +
ProxyEndpoints.GET_POSITION_ENDPOINT + "?positionID=" + positionID, login, password);
if (!response.equals("")) {
position = new Position();
JsonElement parse = Json.serializer().parse(response);
position.setPositionID(parse.getAsJsonObject().get("positionID").getAsString());
position.setNameRu(parse.getAsJsonObject().get("nameRu").getAsString());
} else {
throw new OwnerNotFoundException(positionID);
}
if (position.getPositionID().equals("null")) throw new OwnerNotFoundException(positionID);
LOGGER.info("request complete");
return position;
}
public HashMap<Integer, Group> getGroups() throws Exception {
LOGGER.info("sending a request to get position data");
HashMap<Integer, Group> map = new HashMap<>();
String response = HTTPRequestUtils.sendGet(ProxyEndpoints.BASE_URL +
ProxyEndpoints.FIND_GROUP_ENDPOINT, login, password);
if (!response.equals("")) {
JsonElement parse = Json.serializer().parse(response);
parse.getAsJsonObject().get("array").getAsJsonArray().forEach(item -> {
JsonObject jsonObject = item.getAsJsonObject();
Group group = new Group();
group.setGroupID(jsonObject.getAsJsonObject().get("groupID").getAsInt());
group.setName(jsonObject.getAsJsonObject().get("name").getAsString());
map.put(group.getGroupID(), group);
});
}
LOGGER.info("request complete");
return map;
}
}
package kz.arta.ext.sap.util;
import com.google.gson.JsonParser;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Json {
private static final Logger LOGGER = LoggerFactory.getLogger(Json.class);
// {{start:setup}}
private static final JsonParser DEFAULT_SERIALIZER;
static {
DEFAULT_SERIALIZER = new JsonParser();
}
// {{end:setup}}
public static JsonParser serializer() {
return DEFAULT_SERIALIZER;
}
}
......@@ -143,6 +143,7 @@
<li>дата/время</li>
<li>справочники (выпадающий список, выбор вариантов, переключатель вариантов)</li>
<li>ссылка на реестр</li>
<li>объекты Synergy (пользователи, подразделения, должности)</li>
</ul>
</p>
......@@ -159,6 +160,7 @@
7) Для корректного импорта справочников значение поля в файле должно точь-в-точь совпадать с его "наименованием" у справочника<br>
8) Для корректного импорта нескольких значений в компонент выбора вариантов (чекбокс) в файле их нужно прописать в одной ячейке через "; " (обязательно с пробелом)<br>
9) Желательно избегать содержания в файле спец. символов json: ", \, \b, \t и т.д.<br>
10) Для импорта объектов Synergy нужно указать key объекта. Если в одном поле несколько объектов - они должны быть разделены знаком ";" (точка с запятой)<br>
</p>
<h3>Использование:</h3>
<p>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment