Coverage Summary for Class: BaseType (org.kitodo.data.elasticsearch.index.type)
Class |
Class, %
|
Method, %
|
Line, %
|
BaseType |
100%
(1/1)
|
100%
(11/11)
|
92,3%
(60/65)
|
/*
* (c) Kitodo. Key to digital objects e. V. <contact@kitodo.org>
*
* This file is part of the Kitodo project.
*
* It is licensed under GNU General Public License version 3 or later.
*
* For the full copyright and license information, please read the
* GPL3-License.txt file that was distributed with this source code.
*/
package org.kitodo.data.elasticsearch.index.type;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import org.kitodo.data.database.beans.BaseBean;
import org.kitodo.data.database.beans.BaseIndexedBean;
import org.kitodo.data.database.beans.BaseTemplateBean;
import org.kitodo.data.database.beans.Batch;
import org.kitodo.data.database.beans.Client;
import org.kitodo.data.database.beans.Comment;
import org.kitodo.data.database.beans.Filter;
import org.kitodo.data.database.beans.Project;
import org.kitodo.data.database.beans.Role;
import org.kitodo.data.database.beans.Ruleset;
import org.kitodo.data.database.beans.Task;
import org.kitodo.data.database.beans.User;
import org.kitodo.data.database.beans.Workflow;
import org.kitodo.data.elasticsearch.api.TypeInterface;
import org.kitodo.data.elasticsearch.index.type.enums.BatchTypeField;
import org.kitodo.data.elasticsearch.index.type.enums.CommentTypeField;
import org.kitodo.data.elasticsearch.index.type.enums.FilterTypeField;
import org.kitodo.data.elasticsearch.index.type.enums.ProcessTypeField;
import org.kitodo.data.elasticsearch.index.type.enums.ProjectTypeField;
import org.kitodo.data.elasticsearch.index.type.enums.RoleTypeField;
import org.kitodo.data.elasticsearch.index.type.enums.TaskTypeField;
import org.kitodo.data.elasticsearch.index.type.enums.UserTypeField;
/**
* Abstract class for Type class.
*/
public abstract class BaseType<T extends BaseIndexedBean> implements TypeInterface<T> {
@Override
public Map<String, Object> createDocument(T baseIndexedBean) {
return getJsonObject(baseIndexedBean);
}
@Override
public Map<Integer, Map<String, Object>> createDocuments(List<T> baseIndexedBeans) {
Map<Integer, Map<String, Object>> documents = new HashMap<>();
for (T bean : baseIndexedBeans) {
documents.put(bean.getId(), createDocument(bean));
}
return documents;
}
abstract Map<String, Object> getJsonObject(T baseIndexedBean);
/**
* Method for adding relationship between bean objects.
*
* @param objects
* list
* @param addAdditionalProperties
* true or false, if true also additional information are included,
* type of information depends on the bean which is added as related
* object
* @return JSONArray
*/
<F extends BaseBean> List addObjectRelation(List<F> objects, boolean addAdditionalProperties) {
List<Map<String, Object>> jsonObjects = new ArrayList<>();
for (F property : objects) {
Map<String, Object> jsonObject = new HashMap<>();
jsonObject.put(BatchTypeField.ID.getKey(), property.getId());
if (addAdditionalProperties) {
getAdditionalProperties(jsonObject, property);
}
jsonObjects.add(jsonObject);
}
return jsonObjects;
}
/**
* Method for adding relationship between bean objects.
*
* @param objects
* list
* @return JSONArray
*/
<F extends BaseBean> List addObjectRelation(List<F> objects) {
return addObjectRelation(objects, false);
}
private void getAdditionalProperties(Map<String, Object> jsonObject, BaseBean property) {
if (property instanceof Batch) {
Batch batch = (Batch) property;
jsonObject.put(BatchTypeField.TITLE.getKey(), preventNull(batch.getTitle()));
} else if (property instanceof BaseTemplateBean) {
jsonObject.put(ProcessTypeField.TITLE.getKey(), preventNull(((BaseTemplateBean) property).getTitle()));
} else if (property instanceof Comment) {
jsonObject.put(CommentTypeField.MESSAGE.getKey(), preventNull(((Comment) property).getMessage()));
} else if (property instanceof Project) {
Project project = (Project) property;
jsonObject.put(ProjectTypeField.TITLE.getKey(), preventNull(project.getTitle()));
jsonObject.put(ProjectTypeField.ACTIVE.getKey(), project.isActive());
if (Objects.nonNull(project.getClient())) {
jsonObject.put(ProjectTypeField.CLIENT_ID.getKey(), project.getClient().getId());
}
} else if (property instanceof User) {
User user = (User) property;
jsonObject.put(UserTypeField.LOGIN.getKey(), preventNull(user.getLogin()));
jsonObject.put(UserTypeField.NAME.getKey(), preventNull(user.getName()));
jsonObject.put(UserTypeField.SURNAME.getKey(), preventNull(user.getSurname()));
} else if (property instanceof Role) {
jsonObject.put(RoleTypeField.TITLE.getKey(), preventNull(((Role) property).getTitle()));
} else if (property instanceof Task) {
jsonObject.put(TaskTypeField.TITLE.getKey(), preventNull(((Task) property).getTitle()));
} else if (property instanceof Filter) {
jsonObject.put(FilterTypeField.VALUE.getKey(), preventNull(((Filter) property).getValue()));
}
}
/**
* Method used for formatting Date as JsonValue. It will help to change fast a
* way of Date formatting or expected String format.
*
* @param date
* as Date
* @return formatted date as JsonValue - String or NULL
*/
String getFormattedDate(Date date) {
if (Objects.nonNull(date)) {
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return dateFormat.format(date);
}
return "";
}
int preventNull(Integer value) {
if (Objects.isNull(value)) {
return 0;
}
return value;
}
String preventNull(String value) {
if (Objects.isNull(value)) {
return "";
}
return value;
}
int getId(BaseBean baseBean) {
if (Objects.nonNull(baseBean)) {
return baseBean.getId();
}
return 0;
}
String getTitle(BaseBean baseBean) {
if (baseBean instanceof BaseTemplateBean) {
return preventNull(((BaseTemplateBean) baseBean).getTitle());
} else if (baseBean instanceof Project) {
return preventNull(((Project) baseBean).getTitle());
} else if (baseBean instanceof Workflow) {
return preventNull(((Workflow) baseBean).getTitle());
} else if (baseBean instanceof Client) {
return preventNull(((Client) baseBean).getName());
} else if (baseBean instanceof Ruleset) {
return preventNull(((Ruleset) baseBean).getTitle());
}
return "";
}
}