001// --------------------------------------------------------------------------------
002// Copyright 2002-2026 Echo Three, LLC
003//
004// Licensed under the Apache License, Version 2.0 (the "License");
005// you may not use this file except in compliance with the License.
006// You may obtain a copy of the License at
007//
008//     http://www.apache.org/licenses/LICENSE-2.0
009//
010// Unless required by applicable law or agreed to in writing, software
011// distributed under the License is distributed on an "AS IS" BASIS,
012// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013// See the License for the specific language governing permissions and
014// limitations under the License.
015// --------------------------------------------------------------------------------
016// Generated File -- DO NOT EDIT BY HAND
017// --------------------------------------------------------------------------------
018
019/**
020 * TaxDetailValue.java
021 */
022
023package com.echothree.model.data.tax.server.value;
024
025import com.echothree.model.data.tax.common.pk.TaxDetailPK;
026
027import com.echothree.model.data.tax.server.factory.TaxDetailFactory;
028
029import com.echothree.model.data.tax.common.pk.TaxPK;
030import com.echothree.model.data.contact.common.pk.ContactMechanismPurposePK;
031import com.echothree.model.data.accounting.common.pk.GlAccountPK;
032
033import com.echothree.util.common.exception.PersistenceCloneException;
034import com.echothree.util.common.exception.PersistenceNotNullException;
035
036import com.echothree.util.server.persistence.BaseValue;
037
038import java.io.Serializable;
039
040import javax.annotation.Nonnull;
041import javax.annotation.Nullable;
042
043public class TaxDetailValue
044        extends BaseValue<TaxDetailPK>
045        implements Cloneable, Serializable {
046    
047    private TaxPK taxPK;
048    private boolean taxPKHasBeenModified = false;
049    private String taxName;
050    private boolean taxNameHasBeenModified = false;
051    private ContactMechanismPurposePK contactMechanismPurposePK;
052    private boolean contactMechanismPurposePKHasBeenModified = false;
053    private GlAccountPK glAccountPK;
054    private boolean glAccountPKHasBeenModified = false;
055    private Boolean includeShippingCharge;
056    private boolean includeShippingChargeHasBeenModified = false;
057    private Boolean includeProcessingCharge;
058    private boolean includeProcessingChargeHasBeenModified = false;
059    private Boolean includeInsuranceCharge;
060    private boolean includeInsuranceChargeHasBeenModified = false;
061    private Integer percent;
062    private boolean percentHasBeenModified = false;
063    private Boolean isDefault;
064    private boolean isDefaultHasBeenModified = false;
065    private Integer sortOrder;
066    private boolean sortOrderHasBeenModified = false;
067    private Long fromTime;
068    private boolean fromTimeHasBeenModified = false;
069    private Long thruTime;
070    private boolean thruTimeHasBeenModified = false;
071    
072    private transient Integer _hashCode = null;
073    private transient String _stringValue = null;
074    
075    private void constructFields(TaxPK taxPK, String taxName, ContactMechanismPurposePK contactMechanismPurposePK, GlAccountPK glAccountPK, Boolean includeShippingCharge, Boolean includeProcessingCharge, Boolean includeInsuranceCharge, Integer percent, Boolean isDefault, Integer sortOrder, Long fromTime, Long thruTime)
076            throws PersistenceNotNullException {
077        checkForNull(taxPK);
078        this.taxPK = taxPK;
079        checkForNull(taxName);
080        this.taxName = taxName;
081        checkForNull(contactMechanismPurposePK);
082        this.contactMechanismPurposePK = contactMechanismPurposePK;
083        checkForNull(glAccountPK);
084        this.glAccountPK = glAccountPK;
085        checkForNull(includeShippingCharge);
086        this.includeShippingCharge = includeShippingCharge;
087        checkForNull(includeProcessingCharge);
088        this.includeProcessingCharge = includeProcessingCharge;
089        checkForNull(includeInsuranceCharge);
090        this.includeInsuranceCharge = includeInsuranceCharge;
091        checkForNull(percent);
092        this.percent = percent;
093        checkForNull(isDefault);
094        this.isDefault = isDefault;
095        checkForNull(sortOrder);
096        this.sortOrder = sortOrder;
097        checkForNull(fromTime);
098        this.fromTime = fromTime;
099        checkForNull(thruTime);
100        this.thruTime = thruTime;
101    }
102    
103    /** Creates a new instance of TaxDetailValue */
104    public TaxDetailValue(TaxDetailPK taxDetailPK, TaxPK taxPK, String taxName, ContactMechanismPurposePK contactMechanismPurposePK, GlAccountPK glAccountPK, Boolean includeShippingCharge, Boolean includeProcessingCharge, Boolean includeInsuranceCharge, Integer percent, Boolean isDefault, Integer sortOrder, Long fromTime, Long thruTime)
105            throws PersistenceNotNullException {
106        super(taxDetailPK);
107        constructFields(taxPK, taxName, contactMechanismPurposePK, glAccountPK, includeShippingCharge, includeProcessingCharge, includeInsuranceCharge, percent, isDefault, sortOrder, fromTime, thruTime);
108    }
109    
110    /** Creates a new instance of TaxDetailValue */
111    public TaxDetailValue(TaxPK taxPK, String taxName, ContactMechanismPurposePK contactMechanismPurposePK, GlAccountPK glAccountPK, Boolean includeShippingCharge, Boolean includeProcessingCharge, Boolean includeInsuranceCharge, Integer percent, Boolean isDefault, Integer sortOrder, Long fromTime, Long thruTime)
112            throws PersistenceNotNullException {
113        super();
114        constructFields(taxPK, taxName, contactMechanismPurposePK, glAccountPK, includeShippingCharge, includeProcessingCharge, includeInsuranceCharge, percent, isDefault, sortOrder, fromTime, thruTime);
115    }
116    
117    @Override
118    @Nonnull
119    public TaxDetailFactory getBaseFactoryInstance() {
120        return TaxDetailFactory.getInstance();
121    }
122    
123    @Override
124    @Nonnull
125    public TaxDetailValue clone() {
126        Object result;
127        
128        try {
129            result = super.clone();
130        } catch (CloneNotSupportedException cnse) {
131            // This shouldn't happen, fail when it does.
132            throw new PersistenceCloneException(cnse);
133        }
134        
135        return (TaxDetailValue)result;
136    }
137    
138    @Override
139    @Nonnull
140    public TaxDetailPK getPrimaryKey() {
141        if(_primaryKey == null) {
142            _primaryKey = new TaxDetailPK(entityId);
143        }
144        
145        return _primaryKey;
146    }
147    
148    private void clearHashAndString() {
149        _hashCode = null;
150        _stringValue = null;
151    }
152    
153    @Override
154    public int hashCode() {
155        if(_hashCode == null) {
156            int hashCode = 17;
157            
158            hashCode = 37 * hashCode + ((entityId != null) ? entityId.hashCode() : 0);
159            
160            hashCode = 37 * hashCode + ((taxPK != null) ? taxPK.hashCode() : 0);
161            hashCode = 37 * hashCode + ((taxName != null) ? taxName.hashCode() : 0);
162            hashCode = 37 * hashCode + ((contactMechanismPurposePK != null) ? contactMechanismPurposePK.hashCode() : 0);
163            hashCode = 37 * hashCode + ((glAccountPK != null) ? glAccountPK.hashCode() : 0);
164            hashCode = 37 * hashCode + ((includeShippingCharge != null) ? includeShippingCharge.hashCode() : 0);
165            hashCode = 37 * hashCode + ((includeProcessingCharge != null) ? includeProcessingCharge.hashCode() : 0);
166            hashCode = 37 * hashCode + ((includeInsuranceCharge != null) ? includeInsuranceCharge.hashCode() : 0);
167            hashCode = 37 * hashCode + ((percent != null) ? percent.hashCode() : 0);
168            hashCode = 37 * hashCode + ((isDefault != null) ? isDefault.hashCode() : 0);
169            hashCode = 37 * hashCode + ((sortOrder != null) ? sortOrder.hashCode() : 0);
170            hashCode = 37 * hashCode + ((fromTime != null) ? fromTime.hashCode() : 0);
171            hashCode = 37 * hashCode + ((thruTime != null) ? thruTime.hashCode() : 0);
172            
173            _hashCode = hashCode;
174        }
175        
176        return _hashCode;
177    }
178    
179    @Override
180    @Nonnull
181    public String toString() {
182        if(_stringValue == null) {
183            _stringValue = "{" + 
184                    "entityId=" + getEntityId() +
185                    ", taxPK=" + getTaxPK() +
186                    ", taxName=" + getTaxName() +
187                    ", contactMechanismPurposePK=" + getContactMechanismPurposePK() +
188                    ", glAccountPK=" + getGlAccountPK() +
189                    ", includeShippingCharge=" + getIncludeShippingCharge() +
190                    ", includeProcessingCharge=" + getIncludeProcessingCharge() +
191                    ", includeInsuranceCharge=" + getIncludeInsuranceCharge() +
192                    ", percent=" + getPercent() +
193                    ", isDefault=" + getIsDefault() +
194                    ", sortOrder=" + getSortOrder() +
195                    ", fromTime=" + getFromTime() +
196                    ", thruTime=" + getThruTime() +
197                    "}";
198        }
199        return _stringValue;
200    }
201    
202    @Override
203    public boolean equals(Object other) {
204        if(this == other)
205            return true;
206        
207        if(!hasIdentity())
208            return false;
209        
210        if(other instanceof  TaxDetailValue that) {
211            if(!that.hasIdentity())
212                return false;
213            
214            Long thisEntityId = getEntityId();
215            Long thatEntityId = that.getEntityId();
216            
217            boolean objectsEqual = thisEntityId.equals(thatEntityId);
218            if(objectsEqual)
219                objectsEqual = isIdentical(that);
220            
221            return objectsEqual;
222        } else {
223            return false;
224        }
225    }
226    
227    public boolean isIdentical(Object other) {
228        if(other instanceof TaxDetailValue that) {
229            boolean objectsEqual = true;
230            
231            
232            if(objectsEqual) {
233                TaxPK thisTaxPK = getTaxPK();
234                TaxPK thatTaxPK = that.getTaxPK();
235                
236                if(thisTaxPK == null) {
237                    objectsEqual = objectsEqual && (thatTaxPK == null);
238                } else {
239                    objectsEqual = objectsEqual && thisTaxPK.equals(thatTaxPK);
240                }
241            }
242            
243            if(objectsEqual) {
244                String thisTaxName = getTaxName();
245                String thatTaxName = that.getTaxName();
246                
247                if(thisTaxName == null) {
248                    objectsEqual = objectsEqual && (thatTaxName == null);
249                } else {
250                    objectsEqual = objectsEqual && thisTaxName.equals(thatTaxName);
251                }
252            }
253            
254            if(objectsEqual) {
255                ContactMechanismPurposePK thisContactMechanismPurposePK = getContactMechanismPurposePK();
256                ContactMechanismPurposePK thatContactMechanismPurposePK = that.getContactMechanismPurposePK();
257                
258                if(thisContactMechanismPurposePK == null) {
259                    objectsEqual = objectsEqual && (thatContactMechanismPurposePK == null);
260                } else {
261                    objectsEqual = objectsEqual && thisContactMechanismPurposePK.equals(thatContactMechanismPurposePK);
262                }
263            }
264            
265            if(objectsEqual) {
266                GlAccountPK thisGlAccountPK = getGlAccountPK();
267                GlAccountPK thatGlAccountPK = that.getGlAccountPK();
268                
269                if(thisGlAccountPK == null) {
270                    objectsEqual = objectsEqual && (thatGlAccountPK == null);
271                } else {
272                    objectsEqual = objectsEqual && thisGlAccountPK.equals(thatGlAccountPK);
273                }
274            }
275            
276            if(objectsEqual) {
277                Boolean thisIncludeShippingCharge = getIncludeShippingCharge();
278                Boolean thatIncludeShippingCharge = that.getIncludeShippingCharge();
279                
280                if(thisIncludeShippingCharge == null) {
281                    objectsEqual = objectsEqual && (thatIncludeShippingCharge == null);
282                } else {
283                    objectsEqual = objectsEqual && thisIncludeShippingCharge.equals(thatIncludeShippingCharge);
284                }
285            }
286            
287            if(objectsEqual) {
288                Boolean thisIncludeProcessingCharge = getIncludeProcessingCharge();
289                Boolean thatIncludeProcessingCharge = that.getIncludeProcessingCharge();
290                
291                if(thisIncludeProcessingCharge == null) {
292                    objectsEqual = objectsEqual && (thatIncludeProcessingCharge == null);
293                } else {
294                    objectsEqual = objectsEqual && thisIncludeProcessingCharge.equals(thatIncludeProcessingCharge);
295                }
296            }
297            
298            if(objectsEqual) {
299                Boolean thisIncludeInsuranceCharge = getIncludeInsuranceCharge();
300                Boolean thatIncludeInsuranceCharge = that.getIncludeInsuranceCharge();
301                
302                if(thisIncludeInsuranceCharge == null) {
303                    objectsEqual = objectsEqual && (thatIncludeInsuranceCharge == null);
304                } else {
305                    objectsEqual = objectsEqual && thisIncludeInsuranceCharge.equals(thatIncludeInsuranceCharge);
306                }
307            }
308            
309            if(objectsEqual) {
310                Integer thisPercent = getPercent();
311                Integer thatPercent = that.getPercent();
312                
313                if(thisPercent == null) {
314                    objectsEqual = objectsEqual && (thatPercent == null);
315                } else {
316                    objectsEqual = objectsEqual && thisPercent.equals(thatPercent);
317                }
318            }
319            
320            if(objectsEqual) {
321                Boolean thisIsDefault = getIsDefault();
322                Boolean thatIsDefault = that.getIsDefault();
323                
324                if(thisIsDefault == null) {
325                    objectsEqual = objectsEqual && (thatIsDefault == null);
326                } else {
327                    objectsEqual = objectsEqual && thisIsDefault.equals(thatIsDefault);
328                }
329            }
330            
331            if(objectsEqual) {
332                Integer thisSortOrder = getSortOrder();
333                Integer thatSortOrder = that.getSortOrder();
334                
335                if(thisSortOrder == null) {
336                    objectsEqual = objectsEqual && (thatSortOrder == null);
337                } else {
338                    objectsEqual = objectsEqual && thisSortOrder.equals(thatSortOrder);
339                }
340            }
341            
342            if(objectsEqual) {
343                Long thisFromTime = getFromTime();
344                Long thatFromTime = that.getFromTime();
345                
346                if(thisFromTime == null) {
347                    objectsEqual = objectsEqual && (thatFromTime == null);
348                } else {
349                    objectsEqual = objectsEqual && thisFromTime.equals(thatFromTime);
350                }
351            }
352            
353            if(objectsEqual) {
354                Long thisThruTime = getThruTime();
355                Long thatThruTime = that.getThruTime();
356                
357                if(thisThruTime == null) {
358                    objectsEqual = objectsEqual && (thatThruTime == null);
359                } else {
360                    objectsEqual = objectsEqual && thisThruTime.equals(thatThruTime);
361                }
362            }
363            
364            return objectsEqual;
365        } else {
366            return false;
367        }
368    }
369    
370    @Override
371    public boolean hasBeenModified() {
372        return taxPKHasBeenModified || taxNameHasBeenModified || contactMechanismPurposePKHasBeenModified || glAccountPKHasBeenModified || includeShippingChargeHasBeenModified || includeProcessingChargeHasBeenModified || includeInsuranceChargeHasBeenModified || percentHasBeenModified || isDefaultHasBeenModified || sortOrderHasBeenModified || fromTimeHasBeenModified || thruTimeHasBeenModified;
373    }
374    
375    @Override
376    public void clearHasBeenModified() {
377        taxPKHasBeenModified = false;
378        taxNameHasBeenModified = false;
379        contactMechanismPurposePKHasBeenModified = false;
380        glAccountPKHasBeenModified = false;
381        includeShippingChargeHasBeenModified = false;
382        includeProcessingChargeHasBeenModified = false;
383        includeInsuranceChargeHasBeenModified = false;
384        percentHasBeenModified = false;
385        isDefaultHasBeenModified = false;
386        sortOrderHasBeenModified = false;
387        fromTimeHasBeenModified = false;
388        thruTimeHasBeenModified = false;
389    }
390    
391    @Nonnull
392    public TaxPK getTaxPK() {
393        return taxPK;
394    }
395    
396    public void setTaxPK(@Nonnull TaxPK taxPK)
397            throws PersistenceNotNullException {
398        checkForNull(taxPK);
399        
400        boolean update = true;
401        
402        if(this.taxPK != null) {
403            if(this.taxPK.equals(taxPK)) {
404                update = false;
405            }
406        } else if(taxPK == null) {
407            update = false;
408        }
409        
410        if(update) {
411            this.taxPK = taxPK;
412            taxPKHasBeenModified = true;
413            clearHashAndString();
414        }
415    }
416    
417    public boolean getTaxPKHasBeenModified() {
418        return taxPKHasBeenModified;
419    }
420    
421    @Nonnull
422    public String getTaxName() {
423        return taxName;
424    }
425    
426    public void setTaxName(@Nonnull String taxName)
427            throws PersistenceNotNullException {
428        checkForNull(taxName);
429        
430        boolean update = true;
431        
432        if(this.taxName != null) {
433            if(this.taxName.equals(taxName)) {
434                update = false;
435            }
436        } else if(taxName == null) {
437            update = false;
438        }
439        
440        if(update) {
441            this.taxName = taxName;
442            taxNameHasBeenModified = true;
443            clearHashAndString();
444        }
445    }
446    
447    public boolean getTaxNameHasBeenModified() {
448        return taxNameHasBeenModified;
449    }
450    
451    @Nonnull
452    public ContactMechanismPurposePK getContactMechanismPurposePK() {
453        return contactMechanismPurposePK;
454    }
455    
456    public void setContactMechanismPurposePK(@Nonnull ContactMechanismPurposePK contactMechanismPurposePK)
457            throws PersistenceNotNullException {
458        checkForNull(contactMechanismPurposePK);
459        
460        boolean update = true;
461        
462        if(this.contactMechanismPurposePK != null) {
463            if(this.contactMechanismPurposePK.equals(contactMechanismPurposePK)) {
464                update = false;
465            }
466        } else if(contactMechanismPurposePK == null) {
467            update = false;
468        }
469        
470        if(update) {
471            this.contactMechanismPurposePK = contactMechanismPurposePK;
472            contactMechanismPurposePKHasBeenModified = true;
473            clearHashAndString();
474        }
475    }
476    
477    public boolean getContactMechanismPurposePKHasBeenModified() {
478        return contactMechanismPurposePKHasBeenModified;
479    }
480    
481    @Nonnull
482    public GlAccountPK getGlAccountPK() {
483        return glAccountPK;
484    }
485    
486    public void setGlAccountPK(@Nonnull GlAccountPK glAccountPK)
487            throws PersistenceNotNullException {
488        checkForNull(glAccountPK);
489        
490        boolean update = true;
491        
492        if(this.glAccountPK != null) {
493            if(this.glAccountPK.equals(glAccountPK)) {
494                update = false;
495            }
496        } else if(glAccountPK == null) {
497            update = false;
498        }
499        
500        if(update) {
501            this.glAccountPK = glAccountPK;
502            glAccountPKHasBeenModified = true;
503            clearHashAndString();
504        }
505    }
506    
507    public boolean getGlAccountPKHasBeenModified() {
508        return glAccountPKHasBeenModified;
509    }
510    
511    @Nonnull
512    public Boolean getIncludeShippingCharge() {
513        return includeShippingCharge;
514    }
515    
516    public void setIncludeShippingCharge(@Nonnull Boolean includeShippingCharge)
517            throws PersistenceNotNullException {
518        checkForNull(includeShippingCharge);
519        
520        boolean update = true;
521        
522        if(this.includeShippingCharge != null) {
523            if(this.includeShippingCharge.equals(includeShippingCharge)) {
524                update = false;
525            }
526        } else if(includeShippingCharge == null) {
527            update = false;
528        }
529        
530        if(update) {
531            this.includeShippingCharge = includeShippingCharge;
532            includeShippingChargeHasBeenModified = true;
533            clearHashAndString();
534        }
535    }
536    
537    public boolean getIncludeShippingChargeHasBeenModified() {
538        return includeShippingChargeHasBeenModified;
539    }
540    
541    @Nonnull
542    public Boolean getIncludeProcessingCharge() {
543        return includeProcessingCharge;
544    }
545    
546    public void setIncludeProcessingCharge(@Nonnull Boolean includeProcessingCharge)
547            throws PersistenceNotNullException {
548        checkForNull(includeProcessingCharge);
549        
550        boolean update = true;
551        
552        if(this.includeProcessingCharge != null) {
553            if(this.includeProcessingCharge.equals(includeProcessingCharge)) {
554                update = false;
555            }
556        } else if(includeProcessingCharge == null) {
557            update = false;
558        }
559        
560        if(update) {
561            this.includeProcessingCharge = includeProcessingCharge;
562            includeProcessingChargeHasBeenModified = true;
563            clearHashAndString();
564        }
565    }
566    
567    public boolean getIncludeProcessingChargeHasBeenModified() {
568        return includeProcessingChargeHasBeenModified;
569    }
570    
571    @Nonnull
572    public Boolean getIncludeInsuranceCharge() {
573        return includeInsuranceCharge;
574    }
575    
576    public void setIncludeInsuranceCharge(@Nonnull Boolean includeInsuranceCharge)
577            throws PersistenceNotNullException {
578        checkForNull(includeInsuranceCharge);
579        
580        boolean update = true;
581        
582        if(this.includeInsuranceCharge != null) {
583            if(this.includeInsuranceCharge.equals(includeInsuranceCharge)) {
584                update = false;
585            }
586        } else if(includeInsuranceCharge == null) {
587            update = false;
588        }
589        
590        if(update) {
591            this.includeInsuranceCharge = includeInsuranceCharge;
592            includeInsuranceChargeHasBeenModified = true;
593            clearHashAndString();
594        }
595    }
596    
597    public boolean getIncludeInsuranceChargeHasBeenModified() {
598        return includeInsuranceChargeHasBeenModified;
599    }
600    
601    @Nonnull
602    public Integer getPercent() {
603        return percent;
604    }
605    
606    public void setPercent(@Nonnull Integer percent)
607            throws PersistenceNotNullException {
608        checkForNull(percent);
609        
610        boolean update = true;
611        
612        if(this.percent != null) {
613            if(this.percent.equals(percent)) {
614                update = false;
615            }
616        } else if(percent == null) {
617            update = false;
618        }
619        
620        if(update) {
621            this.percent = percent;
622            percentHasBeenModified = true;
623            clearHashAndString();
624        }
625    }
626    
627    public boolean getPercentHasBeenModified() {
628        return percentHasBeenModified;
629    }
630    
631    @Nonnull
632    public Boolean getIsDefault() {
633        return isDefault;
634    }
635    
636    public void setIsDefault(@Nonnull Boolean isDefault)
637            throws PersistenceNotNullException {
638        checkForNull(isDefault);
639        
640        boolean update = true;
641        
642        if(this.isDefault != null) {
643            if(this.isDefault.equals(isDefault)) {
644                update = false;
645            }
646        } else if(isDefault == null) {
647            update = false;
648        }
649        
650        if(update) {
651            this.isDefault = isDefault;
652            isDefaultHasBeenModified = true;
653            clearHashAndString();
654        }
655    }
656    
657    public boolean getIsDefaultHasBeenModified() {
658        return isDefaultHasBeenModified;
659    }
660    
661    @Nonnull
662    public Integer getSortOrder() {
663        return sortOrder;
664    }
665    
666    public void setSortOrder(@Nonnull Integer sortOrder)
667            throws PersistenceNotNullException {
668        checkForNull(sortOrder);
669        
670        boolean update = true;
671        
672        if(this.sortOrder != null) {
673            if(this.sortOrder.equals(sortOrder)) {
674                update = false;
675            }
676        } else if(sortOrder == null) {
677            update = false;
678        }
679        
680        if(update) {
681            this.sortOrder = sortOrder;
682            sortOrderHasBeenModified = true;
683            clearHashAndString();
684        }
685    }
686    
687    public boolean getSortOrderHasBeenModified() {
688        return sortOrderHasBeenModified;
689    }
690    
691    @Nonnull
692    public Long getFromTime() {
693        return fromTime;
694    }
695    
696    public void setFromTime(@Nonnull Long fromTime)
697            throws PersistenceNotNullException {
698        checkForNull(fromTime);
699        
700        boolean update = true;
701        
702        if(this.fromTime != null) {
703            if(this.fromTime.equals(fromTime)) {
704                update = false;
705            }
706        } else if(fromTime == null) {
707            update = false;
708        }
709        
710        if(update) {
711            this.fromTime = fromTime;
712            fromTimeHasBeenModified = true;
713            clearHashAndString();
714        }
715    }
716    
717    public boolean getFromTimeHasBeenModified() {
718        return fromTimeHasBeenModified;
719    }
720    
721    @Nonnull
722    public Long getThruTime() {
723        return thruTime;
724    }
725    
726    public void setThruTime(@Nonnull Long thruTime)
727            throws PersistenceNotNullException {
728        checkForNull(thruTime);
729        
730        boolean update = true;
731        
732        if(this.thruTime != null) {
733            if(this.thruTime.equals(thruTime)) {
734                update = false;
735            }
736        } else if(thruTime == null) {
737            update = false;
738        }
739        
740        if(update) {
741            this.thruTime = thruTime;
742            thruTimeHasBeenModified = true;
743            clearHashAndString();
744        }
745    }
746    
747    public boolean getThruTimeHasBeenModified() {
748        return thruTimeHasBeenModified;
749    }
750    
751}