package art.servers.transactionsserver.model.objects;
|
|
import art.library.interop.InteropParameters;
|
import art.library.interop.InteropResponse;
|
import art.library.interop.serialization.SerializationException;
|
import art.library.model.transactions.scheduler.ScheduledTask;
|
import art.library.model.transactions.scheduler.ScheduledTaskProcedureInterval;
|
import art.library.persistence.Persistence;
|
import static art.servers.controller.ListenerImplementation.getTimestamp;
|
import art.servers.transactionsserver.Shared;
|
import java.lang.reflect.Field;
|
import java.util.ArrayList;
|
import java.util.Arrays;
|
import java.util.HashSet;
|
import java.util.List;
|
import java.util.Set;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.logging.Level;
|
import java.util.logging.Logger;
|
import java.util.stream.Collectors;
|
|
public class ModelCrudObject
|
{
|
public ModelCrudObject()
|
{
|
}
|
|
/**
|
*
|
* @param parameters
|
* String language
|
* String classname
|
* @return
|
* @throws SerializationException
|
*/
|
@SuppressWarnings("unchecked")
|
public InteropResponse getObjectsFolders(InteropParameters parameters) throws SerializationException
|
{
|
String language = parameters.hasParameter("language") ? (String) parameters.getParameterValue("language") : art.servers.Shared.getLanguage();
|
Set<String> lfolder = new HashSet<>();
|
|
try
|
{
|
String classname = (parameters.hasParameter("classname") == true) ? (String) parameters.getParameterValue("classname") : null;
|
List<Object> lobject = Shared.controllerDatabase.getTimelessPersistance().get(0).getObject(classname);
|
|
lfolder = lobject.stream().map(o -> (String) getValue(o, "folder")).collect(Collectors.toSet());
|
|
return new InteropResponse(lfolder.toArray(new String[0]));
|
} catch (Exception exception)
|
{
|
throw new SerializationException(Shared.getMessage(language, exception.getMessage()), exception);
|
}
|
}
|
|
/**
|
*
|
* @param parameters
|
* String language
|
* String classname
|
* String folder
|
* String name
|
* Empty name_like/null
|
* @return
|
* @throws SerializationException
|
*/
|
@SuppressWarnings("unchecked")
|
public InteropResponse getObjects(InteropParameters parameters) throws SerializationException
|
{
|
String language = parameters.hasParameter("language") ? (String) parameters.getParameterValue("language") : art.servers.Shared.getLanguage();
|
List lobject = new ArrayList<>();
|
|
try
|
{
|
String classname = (parameters.hasParameter("classname") == true) ? (String) parameters.getParameterValue("classname") : null;
|
String folder = (parameters.hasParameter("folder") == true) ? ((String) parameters.getParameterValue("folder")).replace("'", "''") : null;
|
boolean FOLDER_LIKE = parameters.hasParameter("folder_like");
|
String name = (parameters.hasParameter("name") == true) ? ((String) parameters.getParameterValue("name")).replace("'", "''") : null;
|
boolean NAME_LIKE = parameters.hasParameter("name_like");
|
boolean SUMMARY = parameters.hasParameter("summary");
|
long from = parameters.hasParameter("from") ? getTimestamp(parameters.getParameterValue("from")) : 0L;
|
long to = parameters.hasParameter("to") ? getTimestamp(parameters.getParameterValue("to")) : System.currentTimeMillis();
|
|
String where = "true";
|
if (folder != null || name != null)
|
{
|
if ((folder != null) && (!folder.isEmpty()))
|
{
|
if (FOLDER_LIKE) where += " and (folder='" + folder + "' or folder like '" + folder + "/%')";
|
else where += " and folder='" + folder + "'";
|
}
|
if (name != null)
|
{
|
if (NAME_LIKE) where += " and name like '%" + name + "%'";
|
else where += " and name='" + name + "'";
|
}
|
|
if (SUMMARY) lobject = Shared.controllerDatabase.getTimelessPersistance().get(0).getObjectSummary(classname, where);
|
else lobject = Shared.controllerDatabase.getTimelessPersistance().get(0).getObject(classname, where);
|
} else
|
{
|
if (SUMMARY) lobject = Shared.controllerDatabase.getTimelessPersistance().get(0).getObjectSummary(classname);
|
else lobject = Shared.controllerDatabase.getTimelessPersistance().get(0).getObject(classname);
|
}
|
|
return new InteropResponse(lobject.toArray(new Object[0]));
|
} catch (Exception exception)
|
{
|
exception.printStackTrace();
|
throw new SerializationException(Shared.getMessage(language, exception.getMessage()), exception);
|
}
|
}
|
|
/**
|
*
|
* @param parameters
|
* String language
|
* String classname
|
* String folder
|
* String name
|
* Empty name_like/null
|
* @return
|
* @throws SerializationException
|
*/
|
@SuppressWarnings("unchecked")
|
public InteropResponse getScheduledTasks(InteropParameters parameters) throws SerializationException
|
{
|
String language = parameters.hasParameter("language") ? (String) parameters.getParameterValue("language") : art.servers.Shared.getLanguage();
|
List<Object> lobject = new ArrayList<Object>();
|
|
try
|
{
|
String folder = (parameters.hasParameter("folder") == true) ? (String) parameters.getParameterValue("folder") : null;
|
boolean FOLDER_LIKE = parameters.hasParameter("folder_like");
|
String name = (parameters.hasParameter("name") == true) ? (String)parameters.getParameterValue("name") : null;
|
boolean NAME_LIKE = parameters.hasParameter("name_like");
|
boolean SUMMARY = parameters.hasParameter("summary");
|
long from = parameters.hasParameter("from") ? getTimestamp(parameters.getParameterValue("from")) : 0L;
|
long to = parameters.hasParameter("to") ? getTimestamp(parameters.getParameterValue("to")) : System.currentTimeMillis();
|
|
String where = "true";
|
if (folder != null || name != null)
|
{
|
if ((folder != null) && (!folder.isEmpty()))
|
{
|
if (FOLDER_LIKE) where += " and (folder='" + folder + "' or folder like '" + folder + "/%')";
|
else where += " and folder='" + folder + "'";
|
}
|
if (name != null)
|
{
|
if (NAME_LIKE) where += " and name like '%" + name + "%'";
|
else where += " and name='" + name + "'";
|
}
|
|
if (SUMMARY) lobject = Shared.controllerDatabase.getTimelessPersistance().get(0).getObjectSummary(ScheduledTask.class.getName(), where);
|
else lobject = Shared.controllerDatabase.getTimelessPersistance().get(0).getObject(ScheduledTask.class.getName(), where);
|
} else
|
{
|
if (SUMMARY) lobject = Shared.controllerDatabase.getTimelessPersistance().get(0).getObjectSummary(ScheduledTask.class.getName());
|
else lobject = Shared.controllerDatabase.getTimelessPersistance().get(0).getObject(ScheduledTask.class.getName());
|
}
|
|
List<ScheduledTask> lresult = new ArrayList<ScheduledTask>();
|
|
for (Object object : lobject)
|
{
|
ScheduledTask task = (ScheduledTask)object;
|
if (task.scheduledTask.specificTimestamp > 0)
|
{
|
if ((from <= task.scheduledTask.specificTimestamp) && (task.scheduledTask.specificTimestamp <= to))
|
{
|
lresult.add(task);
|
}
|
}
|
else
|
{
|
if (task.scheduledTask != null)
|
{
|
if ((task.scheduledTask.weekly != null) && (task.scheduledTask.weekly.size() > 0))
|
{
|
for (ScheduledTaskProcedureInterval weekly : task.scheduledTask.weekly)
|
{
|
if (((from <= weekly.from) && (weekly.from <= to))
|
&&
|
((from <= weekly.to) && (weekly.to <= to)))
|
{
|
lresult.add(task);
|
break;
|
}
|
}
|
}
|
else
|
{
|
ScheduledTaskProcedureInterval interval = null;
|
if (task.scheduledTask.interval != null) interval = task.scheduledTask.interval;
|
if (task.scheduledTask.monthly != null) interval = task.scheduledTask.monthly;
|
|
if (interval != null)
|
{
|
if (((from <= interval.from) && (interval.from <= to))
|
&&
|
((from <= interval.to) && (interval.to <= to)))
|
{
|
lresult.add(task);
|
}
|
}
|
}
|
}
|
}
|
}
|
|
return new InteropResponse(lresult.toArray(new ScheduledTask[0]));
|
} catch (Exception exception)
|
{
|
throw new SerializationException(Shared.getMessage(language, exception.getMessage()), exception);
|
}
|
}
|
|
/**
|
*
|
* @param parameters
|
* String language
|
* BodyContent Object[].class
|
* @return
|
* @throws SerializationException
|
*/
|
public InteropResponse addObject(InteropParameters parameters) throws SerializationException
|
{
|
String language = parameters.hasParameter("language") ? (String) parameters.getParameterValue("language") : art.servers.Shared.getLanguage();
|
AtomicBoolean success = new AtomicBoolean(true);
|
|
try
|
{
|
String classname = (parameters.hasParameter("classname") == true) ? (String) parameters.getParameterValue("classname") : null;
|
if (classname.contains("[L"))
|
{
|
Object lobject[] = parameters.getBodyContentValue(classname);
|
Arrays.stream(lobject).forEach(o ->
|
{
|
try
|
{
|
addObject(language, o);
|
} catch (Exception ex)
|
{
|
success.set(false);
|
Logger.getLogger(ModelCrudObject.class.getName()).log(Level.SEVERE, null, ex);
|
}
|
});
|
} else
|
{
|
addObject(language, parameters.getBodyContentValue(classname));
|
}
|
}
|
catch (Exception exception)
|
{
|
throw new SerializationException(Shared.getMessage(language, exception.getMessage()), exception);
|
}
|
return new InteropResponse(new Boolean(success.get()));
|
}
|
|
public InteropResponse addHistoricalObject(InteropParameters parameters) throws SerializationException
|
{
|
String language = parameters.hasParameter("language") ? (String) parameters.getParameterValue("language") : art.servers.Shared.getLanguage();
|
AtomicBoolean success = new AtomicBoolean(true);
|
|
try
|
{
|
String classname = (parameters.hasParameter("classname") == true) ? (String) parameters.getParameterValue("classname") : null;
|
addHistoricalObject(language, parameters.getBodyContentValue(classname));
|
}
|
catch (Exception exception)
|
{
|
throw new SerializationException(Shared.getMessage(language, exception.getMessage()), exception);
|
}
|
return new InteropResponse(new Boolean(success.get()));
|
}
|
|
private void addObject(String language, Object o) throws Exception
|
{
|
try
|
{
|
if (getValue(o, "folder") == null)
|
{
|
setValue(o, "folder", "");
|
}
|
Shared.controllerDatabase.getTimelessPersistance().get(0).updateOrAddObject(o);
|
} catch (Exception exception)
|
{
|
throw new SerializationException(Shared.getMessage(language, exception.getMessage()), exception);
|
}
|
}
|
|
|
private void addHistoricalObject(String language, Object o) throws Exception
|
{
|
try
|
{
|
Shared.controllerDatabase.getHistoricalPersistance().get(0).updateOrAddObject(o);
|
}
|
catch (Exception exception)
|
{
|
throw new SerializationException(Shared.getMessage(language, exception.getMessage()), exception);
|
}
|
}
|
|
/**
|
*
|
* @param parameters
|
* String language
|
* BodyContent Object[].class
|
* @return
|
* @throws SerializationException
|
*/
|
public InteropResponse removeObject(InteropParameters parameters) throws SerializationException
|
{
|
String language = parameters.hasParameter("language") ? (String) parameters.getParameterValue("language") : art.servers.Shared.getLanguage();
|
AtomicBoolean success = new AtomicBoolean(true);
|
|
try
|
{
|
String classname = (parameters.hasParameter("classname") == true) ? (String) parameters.getParameterValue("classname") : null;
|
Object lobject[] = parameters.getBodyContentValue(classname);
|
|
Arrays.stream(lobject).forEach(o ->
|
{
|
try
|
{
|
if (getValue(o, "folder") == null) setValue(o, "folder", "");
|
Shared.controllerDatabase.getTimelessPersistance().get(0).deleteObject(o);
|
} catch (Exception ex)
|
{
|
success.set(false);
|
ex.printStackTrace();
|
}
|
});
|
} catch (Exception exception)
|
{
|
throw new SerializationException(art.servers.Shared.getMessage(language, exception.getMessage()), exception);
|
}
|
return new InteropResponse(new Boolean(success.get()));
|
}
|
|
|
|
|
|
/**
|
*
|
* @param parameters
|
* String language
|
* String classname
|
* String previousFolder
|
* String newFolder
|
* @return
|
* @throws SerializationException
|
*/
|
@SuppressWarnings("unchecked")
|
public InteropResponse renameObjectFolder(InteropParameters parameters) throws SerializationException
|
{
|
String language = parameters.hasParameter("language") ? (String) parameters.getParameterValue("language") : art.servers.Shared.getLanguage();
|
boolean success = true;
|
try
|
{
|
String classname = (parameters.hasParameter("classname") == true) ? (String) parameters.getParameterValue("classname") : null;
|
String previousFolder = ((parameters.hasParameter("previousFolder") == true) && !((String) parameters.getParameterValue("previousFolder")).isEmpty())
|
? (String) parameters.getParameterValue("previousFolder") : "";
|
String newFolder = ((parameters.hasParameter("newFolder") == true) && !((String) parameters.getParameterValue("newFolder")).isEmpty())
|
? (String) parameters.getParameterValue("newFolder") : "";
|
|
String where = "(folder = '" + previousFolder + "' or folder like '" + previousFolder + "/%')";
|
List<Object> lobject = (List<Object>) (List<?>) Shared.controllerDatabase.getTimelessPersistance().get(0).getObject(classname, where);
|
|
for (Object object : lobject)
|
{
|
try
|
{
|
Shared.controllerDatabase.getTimelessPersistance().get(0).deleteObject(object);
|
setValue(object, "folder", newFolder);
|
Shared.controllerDatabase.getTimelessPersistance().get(0).addObject_asynchronous(object);
|
} catch (Exception e)
|
{
|
success = false;
|
}
|
}
|
return new InteropResponse(success);
|
} catch (Exception exception)
|
{
|
throw new SerializationException(Shared.getMessage(language, exception.getMessage()), exception);
|
}
|
}
|
|
private void setValue(Object object, String field, String value)
|
{
|
try
|
{
|
Field folderField = object.getClass().getDeclaredField(field);
|
folderField.set(object, value);
|
} catch (Exception e)
|
{
|
e.printStackTrace();
|
}
|
}
|
|
private Object getValue(Object object, String field)
|
{
|
try
|
{
|
Field folderField = object.getClass().getDeclaredField(field);
|
return folderField.get(object);
|
} catch (Exception e)
|
{
|
e.printStackTrace();
|
}
|
return new Object();
|
}
|
}
|