package tundra.list;
// -----( IS Java Code Template v1.2
// -----( CREATED: 2017-05-07 17:50:20 EST
// -----( ON-HOST: 192.168.66.129
import com.wm.data.*;
import com.wm.util.Values;
import com.wm.app.b2b.server.Service;
import com.wm.app.b2b.server.ServiceException;
// --- <<IS-START-IMPORTS>> ---
import java.io.IOException;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;
import permafrost.tundra.data.IDataHelper;
import permafrost.tundra.io.DirectoryHelper;
import permafrost.tundra.io.FileHelper;
import permafrost.tundra.io.filter.AndFilenameFilter;
import permafrost.tundra.io.filter.ConditionalFilenameFilter;
import permafrost.tundra.io.filter.ExclusionFilenameFilter;
import permafrost.tundra.io.filter.FilenameFilterType;
import permafrost.tundra.io.filter.InclusionFilenameFilter;
import permafrost.tundra.lang.BooleanHelper;
import permafrost.tundra.lang.ExceptionHelper;
import permafrost.tundra.math.BigIntegerHelper;
import permafrost.tundra.math.LongHelper;
import permafrost.tundra.time.DurationHelper;
// --- <<IS-END-IMPORTS>> ---
public final class directory
{
// ---( internal utility methods )---
final static directory _instance = new directory();
static directory _newInstance() { return new directory(); }
static directory _cast(Object o) { return (directory)o; }
// ---( server methods )---
public static final void compact (IData pipeline)
throws ServiceException
{
// --- <<IS-START(compact)>> ---
// @subtype unknown
// @sigtype java 3.5
// [i] field:1:required $directories
// [i] field:0:optional $delete? {"false","true"}
// [i] field:0:optional $raise? {"false","true"}
IDataCursor cursor = pipeline.getCursor();
try {
String[] directories = IDataHelper.get(cursor, "$directories", String[].class);
boolean deleteSelf = IDataHelper.getOrDefault(cursor, "$delete?", Boolean.class, false);
boolean raise = IDataHelper.getOrDefault(cursor, "$raise?", Boolean.class, false);
List<Throwable> exceptions = new ArrayList<Throwable>();
for (String directory : directories) {
try {
DirectoryHelper.compact(FileHelper.construct(directory), deleteSelf);
} catch(IOException ex) {
exceptions.add(ex);
}
}
if (raise && exceptions.size() > 0) ExceptionHelper.raise(exceptions);
} finally {
cursor.destroy();
}
// --- <<IS-END>> ---
}
public static final void purge (IData pipeline)
throws ServiceException
{
// --- <<IS-START(purge)>> ---
// @subtype unknown
// @sigtype java 3.5
// [i] record:1:optional $directories
// [i] - field:0:required directory
// [i] - field:0:required duration
// [i] - field:0:optional duration.pattern {"xml","milliseconds","seconds","minutes","hours","days","weeks","months","years"}
// [i] - field:1:optional filter.inclusions
// [i] - field:1:optional filter.exclusions
// [i] - field:0:optional filter.type {"regular expression","wildcard","literal"}
// [i] - field:0:optional recurse? {"false","true"}
// [o] field:1:optional $counts
IDataCursor cursor = pipeline.getCursor();
try {
IData[] directories = IDataHelper.get(cursor, "$directories", IData[].class);
List<Throwable> exceptions = new ArrayList<Throwable>();
if (directories != null) {
List<String> counts = new ArrayList<String>(directories.length);
for (IData document : directories) {
if (document != null) {
IDataCursor dc = document.getCursor();
try {
String directory = IDataHelper.get(dc, "directory", String.class);
String duration = IDataHelper.get(dc, "duration", String.class);
String pattern = IDataHelper.get(dc, "duration.pattern", String.class);
String[] inclusions = IDataHelper.get(dc, "filter.inclusions", String[].class);
String[] exclusions = IDataHelper.get(dc, "filter.exclusions", String[].class);
FilenameFilterType type = IDataHelper.get(dc, "filter.type", FilenameFilterType.class);
boolean recurse = IDataHelper.getOrDefault(dc, "recurse?", Boolean.class, false);
ConditionalFilenameFilter filter = null;
if (inclusions != null || exclusions != null) {
filter = new AndFilenameFilter();
if (inclusions != null) {
filter.add(new InclusionFilenameFilter(type, inclusions));
}
if (exclusions != null) {
filter.add(new ExclusionFilenameFilter(type, exclusions));
}
}
counts.add(LongHelper.emit(DirectoryHelper.purge(directory, DurationHelper.parse(duration, pattern), filter, recurse)));
} catch(IOException ex) {
exceptions.add(ex);
} finally {
dc.destroy();
}
}
}
IDataHelper.put(cursor, "$counts", counts.toArray(new String[counts.size()]));
}
if (exceptions.size() > 0) ExceptionHelper.raise(exceptions);
} finally {
cursor.destroy();
}
// --- <<IS-END>> ---
}
public static final void remove (IData pipeline)
throws ServiceException
{
// --- <<IS-START(remove)>> ---
// @subtype unknown
// @sigtype java 3.5
// [i] field:1:required $directories
// [i] field:0:optional $recurse? {"false","true"}
IDataCursor cursor = pipeline.getCursor();
try {
String[] directories = IDataHelper.get(cursor, "$directories", String[].class);
boolean recurse = IDataHelper.getOrDefault(cursor, "$recurse?", Boolean.class, false);
List<Throwable> exceptions = new ArrayList<Throwable>();
for (String directory : directories) {
try {
DirectoryHelper.remove(directory, recurse);
} catch(IOException ex) {
exceptions.add(ex);
}
}
if (exceptions.size() > 0) ExceptionHelper.raise(exceptions);
} finally {
cursor.destroy();
}
// --- <<IS-END>> ---
}
public static final void squeeze (IData pipeline)
throws ServiceException
{
// --- <<IS-START(squeeze)>> ---
// @subtype unknown
// @sigtype java 3.5
// [i] record:1:optional $directories
// [i] - field:0:required directory
// [i] - field:0:required size.required
// [i] - field:1:optional filter.inclusions
// [i] - field:1:optional filter.exclusions
// [i] - field:0:optional filter.type {"regular expression","wildcard","literal"}
// [i] - field:0:optional recurse? {"false","true"}
// [o] field:1:optional $sizes.squeezed
IDataCursor cursor = pipeline.getCursor();
try {
IData[] directories = IDataHelper.get(cursor, "$directories", IData[].class);
List<Throwable> exceptions = new ArrayList<Throwable>();
if (directories != null) {
List<String> sizes = new ArrayList<String>(directories.length);
for (IData document : directories) {
if (document != null) {
IDataCursor dc = document.getCursor();
try {
String directory = IDataHelper.get(dc, "directory", String.class);
BigInteger size = IDataHelper.get(cursor, "size.required", BigInteger.class);
String[] inclusions = IDataHelper.get(dc, "filter.inclusions", String[].class);
String[] exclusions = IDataHelper.get(dc, "filter.exclusions", String[].class);
FilenameFilterType type = IDataHelper.get(dc, "filter.type", FilenameFilterType.class);
boolean recurse = IDataHelper.getOrDefault(dc, "recurse?", Boolean.class, false);
ConditionalFilenameFilter filter = null;
if (inclusions != null || exclusions != null) {
filter = new AndFilenameFilter();
if (inclusions != null) {
filter.add(new InclusionFilenameFilter(type, inclusions));
}
if (exclusions != null) {
filter.add(new ExclusionFilenameFilter(type, exclusions));
}
}
sizes.add(BigIntegerHelper.emit(DirectoryHelper.squeeze(directory, size, filter, recurse)));
} catch(IOException ex) {
exceptions.add(ex);
} finally {
dc.destroy();
}
}
}
IDataHelper.put(cursor, "$sizes.squeezed", sizes.toArray(new String[sizes.size()]));
}
if (exceptions.size() > 0) ExceptionHelper.raise(exceptions);
} finally {
cursor.destroy();
}
// --- <<IS-END>> ---
}
}