DocumentsDB.java
package sk.iway.iwcm.components.gdpr.model;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Query;
import javax.servlet.http.HttpServletRequest;
import org.eclipse.persistence.jpa.JpaEntityManager;
import sk.iway.iwcm.Constants;
import sk.iway.iwcm.Tools;
import sk.iway.iwcm.common.CloudToolsForCore;
import sk.iway.iwcm.database.JpaDB;
import sk.iway.iwcm.doc.GroupDetails;
import sk.iway.iwcm.doc.GroupsDB;
import sk.iway.iwcm.system.jpa.JpaTools;
public class DocumentsDB extends JpaDB<DocumentsBean> implements GdprDB
{
private final Class<DocumentsBean> clazz;
private final List<String> properties;
private static DocumentsDB instance = new DocumentsDB();
public DocumentsDB()
{
super(DocumentsBean.class);
clazz = DocumentsBean.class;
properties = new ArrayList<>();
properties.add("title");
properties.add("data");
properties.add("dataAsc");
}
public static DocumentsDB getInstance()
{
return instance;
}
@SuppressWarnings("unused")
public List<GdprResult> search(List<GdprRegExpBean> regexps, HttpServletRequest request) {
JpaEntityManager jpaEntityManager = JpaTools.getEclipseLinkEntityManager(dbName);
StringBuilder sb = new StringBuilder();
sb.append("SELECT o FROM " + clazz.getSimpleName() + " o WHERE ");
List<String> or = new ArrayList<>();
for (String property : properties) {
if (Constants.DB_TYPE == Constants.DB_MSSQL || Constants.DB_TYPE == Constants.DB_PGSQL)
or.add("o." + property + " LIKE :regexp{index}");
// else if (Constants.DB_TYPE == Constants.DB_ORACLE)
// or.add("o." + property + " LIKE :regexp{index}");
else
or.add("o." + property + " REGEXP :regexp{index}");
}
int i = 0;
List<String> or2 = new ArrayList<>();
for (GdprRegExpBean regexp : regexps) {
String str = Tools.join(or, " OR ");
or2.add(Tools.replace(str, "{index}", "" + (++i)));
}
sb.append(Tools.join(or2, " OR "));
Query query = jpaEntityManager.createQuery(sb.toString());
i = 0;
for (GdprRegExpBean regexp : regexps) {
query.setParameter("regexp" + (++i), regexp.getRegexpValue());
}
List<DocumentsBean> rows = new ArrayList<>();
try
{
rows = JpaDB.getResultList(query);
}
catch (Exception ex)
{
sk.iway.iwcm.Logger.error(ex);
}
List<GdprResult> results = new ArrayList<>();
String domain = CloudToolsForCore.getDomainName();
for (DocumentsBean row : rows) {
GroupDetails gd = GroupsDB.getInstance().getGroup(row.getGroupId());
if(gd == null || Tools.isEmpty(gd.getDomainName()) || gd.getDomainName().equalsIgnoreCase(domain))//if(gd != null && gd.getDomainName().equalsIgnoreCase(domain))
results.add(new GdprResult(row, regexps, request));
}
return results;
}
}