ForumDB.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.Tools;
import sk.iway.iwcm.common.CloudToolsForCore;
import sk.iway.iwcm.database.JpaDB;
import sk.iway.iwcm.system.jpa.JpaTools;
public class ForumDB extends JpaDB<ForumBean> implements GdprDB
{
private final Class<ForumBean> clazz;
private final List<String> properties;
private static ForumDB instance = new ForumDB();
public ForumDB()
{
super(ForumBean.class);
clazz = ForumBean.class;
properties = new ArrayList<>();
properties.add("subject");
properties.add("question");
}
public static ForumDB 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 ");
sb.append(" o.domainId = :domainId AND (");
List<String> or = new ArrayList<>();
for (String property : properties) {
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());
query.setParameter("domainId",CloudToolsForCore.getDomainId());
i = 0;
for (GdprRegExpBean regexp : regexps) {
query.setParameter("regexp" + (++i), regexp.getRegexpValue());
}
List<ForumBean> rows = new ArrayList<>();
try
{
rows = JpaDB.getResultList(query);
}
catch (Exception ex)
{
sk.iway.iwcm.Logger.error(ex);
}
List<GdprResult> results = new ArrayList<>();
for (ForumBean row : rows) {
results.add(new GdprResult(row, regexps, request));
}
return results;
}
}