]> git.ktnx.net Git - mobile-ledger.git/blobdiff - app/src/main/java/net/ktnx/mobileledger/model/TemplateDetailsItem.java
Room-based profile management
[mobile-ledger.git] / app / src / main / java / net / ktnx / mobileledger / model / TemplateDetailsItem.java
index f158f413196dace141b2f9f6cdb6f1e9cb1d92fe..67d6a4f374b5b05bcd9d01116e94bbe9e5afbf8a 100644 (file)
@@ -47,7 +47,7 @@ import java.util.regex.PatternSyntaxException;
 abstract public class TemplateDetailsItem {
     private final Type type;
     protected Long id;
-    protected Long position;
+    protected long position;
 
     protected TemplateDetailsItem(Type type) {
         this.type = type;
@@ -98,6 +98,8 @@ abstract public class TemplateDetailsItem {
             else
                 header.setDateYearMatchGroup(ph.getDateYearMatchGroup());
 
+            header.setFallback(ph.isFallback());
+
             return header;
         }
         else if (p instanceof TemplateAccount) {
@@ -117,9 +119,7 @@ abstract public class TemplateDetailsItem {
                 acc.setAccountCommentMatchGroup(pa.getAccountCommentMatchGroup());
 
             if (pa.getCurrencyMatchGroup() == null) {
-                final Integer currencyId = pa.getCurrency();
-                if (currencyId != null && currencyId > 0)
-                    acc.setCurrency(Currency.loadById(currencyId));
+                acc.setCurrency(pa.getCurrencyObject());
             }
             else
                 acc.setCurrencyMatchGroup(pa.getCurrencyMatchGroup());
@@ -174,7 +174,7 @@ abstract public class TemplateDetailsItem {
     public long getPosition() {
         return position;
     }
-    public void setPosition(Long position) {
+    public void setPosition(long position) {
         this.position = position;
     }
     abstract public String getProblem(@NonNull Resources r, int patternGroupCount);
@@ -278,6 +278,12 @@ abstract public class TemplateDetailsItem {
                 return "grp:" + matchGroup;
             return "<null>";
         }
+        public boolean isEmpty() {
+            if (literalValue)
+                return value == null || Misc.emptyIsNull(value.toString()) == null;
+
+            return matchGroup > 0;
+        }
     }
 
     public static class TYPE {
@@ -292,7 +298,8 @@ abstract public class TemplateDetailsItem {
                 PossiblyMatchedValue.withLiteralString("");
         private final PossiblyMatchedValue<Float> amount =
                 PossiblyMatchedValue.withLiteralFloat(null);
-        private final PossiblyMatchedValue<Currency> currency = new PossiblyMatchedValue<>();
+        private final PossiblyMatchedValue<net.ktnx.mobileledger.db.Currency> currency =
+                new PossiblyMatchedValue<>();
         private boolean negateAmount;
         public AccountRow() {
             super(Type.ACCOUNT_ITEM);
@@ -331,10 +338,10 @@ abstract public class TemplateDetailsItem {
         public void setCurrencyMatchGroup(int group) {
             currency.setMatchGroup(group);
         }
-        public Currency getCurrency() {
+        public net.ktnx.mobileledger.db.Currency getCurrency() {
             return currency.getValue();
         }
-        public void setCurrency(Currency currency) {
+        public void setCurrency(net.ktnx.mobileledger.db.Currency currency) {
             this.currency.setValue(currency);
         }
         public int getAccountNameMatchGroup() {
@@ -421,6 +428,9 @@ abstract public class TemplateDetailsItem {
 
             return result;
         }
+        public boolean isEmpty() {
+            return accountName.isEmpty() && accountComment.isEmpty() && amount.isEmpty();
+        }
     }
 
     public static class Header extends TemplateDetailsItem {
@@ -437,6 +447,7 @@ abstract public class TemplateDetailsItem {
         private PossiblyMatchedValue<Integer> dateMonth = PossiblyMatchedValue.withLiteralInt(null);
         private PossiblyMatchedValue<Integer> dateDay = PossiblyMatchedValue.withLiteralInt(null);
         private SpannableString testMatch;
+        private boolean isFallback;
         private Header() {
             super(Type.HEADER);
         }
@@ -454,12 +465,20 @@ abstract public class TemplateDetailsItem {
             dateYear = new PossiblyMatchedValue<>(origin.dateYear);
             dateMonth = new PossiblyMatchedValue<>(origin.dateMonth);
             dateDay = new PossiblyMatchedValue<>(origin.dateDay);
+
+            isFallback = origin.isFallback;
         }
         private static StyleSpan capturedSpan() { return new StyleSpan(Typeface.BOLD); }
         private static UnderlineSpan matchedSpan() { return new UnderlineSpan(); }
         private static ForegroundColorSpan notMatchedSpan() {
             return new ForegroundColorSpan(Color.GRAY);
         }
+        public boolean isFallback() {
+            return isFallback;
+        }
+        public void setFallback(boolean fallback) {
+            this.isFallback = fallback;
+        }
         public String getName() {
             return name;
         }
@@ -480,8 +499,9 @@ abstract public class TemplateDetailsItem {
                 compiledPattern = null;
 
                 testMatch = new SpannableString(testText);
-                testMatch.setSpan(notMatchedSpan(), 0, testText.length() - 1,
-                        Spanned.SPAN_INCLUSIVE_INCLUSIVE);
+                if (!testText.isEmpty())
+                    testMatch.setSpan(notMatchedSpan(), 0, testText.length() - 1,
+                            Spanned.SPAN_INCLUSIVE_INCLUSIVE);
             }
         }
         @NonNull
@@ -594,7 +614,7 @@ abstract public class TemplateDetailsItem {
             return Misc.equalStrings(name, o.name) && Misc.equalStrings(pattern, o.pattern) &&
                    Misc.equalStrings(testText, o.testText) &&
                    Misc.equalStrings(patternError, o.patternError) &&
-                   Objects.equals(testMatch, o.testMatch);
+                   Objects.equals(testMatch, o.testMatch) && isFallback == o.isFallback;
         }
         public String getMatchGroupText(int group) {
             if (compiledPattern != null && testText != null) {
@@ -664,6 +684,8 @@ abstract public class TemplateDetailsItem {
             else
                 result.setDateDayMatchGroup(dateDay.getMatchGroup());
 
+            result.setFallback(isFallback);
+
             return result;
         }
         public SpannableString getTestMatch() {