// Path: src/main/java/org/psidnell/omnifocus/ConfigParams.java
// public class ConfigParams {
// 
//     private String dueSoon;
//     private String flattenedRootName;
//     private String expressionDateFormat;
//     private int icsAlarmMinutes;
//     private boolean icsAlarm;
//     private String icsStart;
//     private String icsEnd;
//     private boolean icsAllDay;
// 
//     public void setDueSoon(String dueSoon) {
//         this.dueSoon = dueSoon;
//     }
// 
//     public String getDueSoon() {
//         return dueSoon;
//     }
// 
//     public void setFlattenedRootName(String name) {
//         this.flattenedRootName = name;
//     }
// 
//     public String getFlattenedRootName() {
//         return flattenedRootName;
//     }
// 
//     public void setExpressionDateFormat(String format) {
//         this.expressionDateFormat = format;
//     }
// 
//     public String getExpressionDateFormat() {
//         return expressionDateFormat;
//     }
// 
//     public int getIcsAlarmMinutes() {
//         return icsAlarmMinutes;
//     }
// 
//     public void setIcsAlarmMinutes(int icsAlarmMinutes) {
//         this.icsAlarmMinutes = icsAlarmMinutes;
//     }
// 
//     public boolean getIcsAlarm() {
//         return icsAlarm;
//     }
// 
//     public void setIcsAlarm(boolean icsAlarm) {
//         this.icsAlarm = icsAlarm;
//     }
// 
//     public String getIcsStart() {
//         return icsStart;
//     }
// 
//     public void setIcsStart(String icsStart) {
//         this.icsStart = icsStart;
//     }
// 
//     public String getIcsEnd() {
//         return icsEnd;
//     }
// 
//     public void setIcsEnd(String icsEnd) {
//         this.icsEnd = icsEnd;
//     }
// 
//     public boolean getIcsAllDay() {
//         return icsAllDay;
//     }
// 
//     public void setIcsAllDay(boolean icsAllDay) {
//         this.icsAllDay = icsAllDay;
//     }
// 
// }
// 
// Path: src/main/java/org/psidnell/omnifocus/util/StringUtils.java
// public class StringUtils {
// 
//     public static String join(Collection<String> data, String delimiter) {
//         return join(data, new StringJoiner(delimiter));
//     }
// 
//     public static String join(Collection<String> data, String delimiter, String prefix, String suffix) {
//         return join(data, new StringJoiner(delimiter, prefix, suffix));
//     }
// 
//     public static String join(String data[], String delimiter) {
//         return join(Arrays.asList(data), new StringJoiner(delimiter));
//     }
// 
//     public static String join(String data[], String delimiter, String prefix, String suffix) {
//         return join(Arrays.asList(data), new StringJoiner(delimiter, prefix, suffix));
//     }
// 
//     public static String join(Collection<String> data, StringJoiner sj) {
//         data.stream().forEachOrdered((s) -> sj.add(s));
//         return sj.toString();
//     }
// 
//     public static String times(String str, int n) {
//         StringBuilder result = new StringBuilder();
//         for (int i = 0; i < n; i++) {
//             result.append(str);
//         }
//         return result.toString();
//     }
// }


import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.LinkedList;
import java.util.List;
import org.psidnell.omnifocus.ConfigParams;
import org.psidnell.omnifocus.expr.ExprAttribute;
import org.psidnell.omnifocus.sqlite.SQLiteProperty;
import org.psidnell.omnifocus.util.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.fasterxml.jackson.annotation.JsonIgnore;
    @ExprAttribute(help = "item is not flagged.")
    public boolean isUnflagged() {
        return !flagged;
    }

    @SQLiteProperty
    @ExprAttribute(help = "estimated minutes.")
    public Integer getEstimatedMinutes() {
        return estimatedMinutes;
    }

    public void setEstimatedMinutes(Integer estimatedMinutes) {
        this.estimatedMinutes = estimatedMinutes == null ? -1 : estimatedMinutes;
    }

    @Override
    @JsonIgnore
    public List<ContextHierarchyNode> getContextPath() {
        return getContextPath(context);
    }

    public String formatNote(int depth, String indent) {
        return formatNote(depth, indent, "");
    }

    public String formatNote(int depth, String indent, String lineSuffix) {
        String[] lines = note.replaceAll("\r", "").split("\n");
        String eol = lineSuffix + "\n";
        String indentChars = StringUtils.times(indent, depth);
        String delimiter = eol + indentChars;
// Path: src/main/java/org/psidnell/omnifocus/ConfigParams.java
// public class ConfigParams {
// 
//     private String dueSoon;
//     private String flattenedRootName;
//     private String expressionDateFormat;
//     private int icsAlarmMinutes;
//     private boolean icsAlarm;
//     private String icsStart;
//     private String icsEnd;
//     private boolean icsAllDay;
// 
//     public void setDueSoon(String dueSoon) {
//         this.dueSoon = dueSoon;
//     }
// 
//     public String getDueSoon() {
//         return dueSoon;
//     }
// 
//     public void setFlattenedRootName(String name) {
//         this.flattenedRootName = name;
//     }
// 
//     public String getFlattenedRootName() {
//         return flattenedRootName;
//     }
// 
//     public void setExpressionDateFormat(String format) {
//         this.expressionDateFormat = format;
//     }
// 
//     public String getExpressionDateFormat() {
//         return expressionDateFormat;
//     }
// 
//     public int getIcsAlarmMinutes() {
//         return icsAlarmMinutes;
//     }
// 
//     public void setIcsAlarmMinutes(int icsAlarmMinutes) {
//         this.icsAlarmMinutes = icsAlarmMinutes;
//     }
// 
//     public boolean getIcsAlarm() {
//         return icsAlarm;
//     }
// 
//     public void setIcsAlarm(boolean icsAlarm) {
//         this.icsAlarm = icsAlarm;
//     }
// 
//     public String getIcsStart() {
//         return icsStart;
//     }
// 
//     public void setIcsStart(String icsStart) {
//         this.icsStart = icsStart;
//     }
// 
//     public String getIcsEnd() {
//         return icsEnd;
//     }
// 
//     public void setIcsEnd(String icsEnd) {
//         this.icsEnd = icsEnd;
//     }
// 
//     public boolean getIcsAllDay() {
//         return icsAllDay;
//     }
// 
//     public void setIcsAllDay(boolean icsAllDay) {
//         this.icsAllDay = icsAllDay;
//     }
// 
// }
// 
// Path: src/main/java/org/psidnell/omnifocus/util/StringUtils.java
// public class StringUtils {
// 
//     public static String join(Collection<String> data, String delimiter) {
//         return join(data, new StringJoiner(delimiter));
//     }
// 
//     public static String join(Collection<String> data, String delimiter, String prefix, String suffix) {
//         return join(data, new StringJoiner(delimiter, prefix, suffix));
//     }
// 
//     public static String join(String data[], String delimiter) {
//         return join(Arrays.asList(data), new StringJoiner(delimiter));
//     }
// 
//     public static String join(String data[], String delimiter, String prefix, String suffix) {
//         return join(Arrays.asList(data), new StringJoiner(delimiter, prefix, suffix));
//     }
// 
//     public static String join(Collection<String> data, StringJoiner sj) {
//         data.stream().forEachOrdered((s) -> sj.add(s));
//         return sj.toString();
//     }
// 
//     public static String times(String str, int n) {
//         StringBuilder result = new StringBuilder();
//         for (int i = 0; i < n; i++) {
//             result.append(str);
//         }
//         return result.toString();
//     }
// }


// Path: src/main/java/org/psidnell/omnifocus/model/CommonProjectAndTaskAttributes.java
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.LinkedList;
import java.util.List;
import org.psidnell.omnifocus.ConfigParams;
import org.psidnell.omnifocus.expr.ExprAttribute;
import org.psidnell.omnifocus.sqlite.SQLiteProperty;
import org.psidnell.omnifocus.util.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.fasterxml.jackson.annotation.JsonIgnore;

    @ExprAttribute(help = "item is not flagged.")
    public boolean isUnflagged() {
        return !flagged;
    }

    @SQLiteProperty
    @ExprAttribute(help = "estimated minutes.")
    public Integer getEstimatedMinutes() {
        return estimatedMinutes;
    }

    public void setEstimatedMinutes(Integer estimatedMinutes) {
        this.estimatedMinutes = estimatedMinutes == null ? -1 : estimatedMinutes;
    }

    @Override
    @JsonIgnore
    public List<ContextHierarchyNode> getContextPath() {
        return getContextPath(context);
    }

    public String formatNote(int depth, String indent) {
        return formatNote(depth, indent, "");
    }

    public String formatNote(int depth, String indent, String lineSuffix) {
        String[] lines = note.replaceAll("\r", "").split("\n");
        String eol = lineSuffix + "\n";
        String indentChars = StringUtils.times(indent, depth);
        String delimiter = eol + indentChars;
        return StringUtils.join(lines, delimiter, indentChars, eol);