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 * EntityAttributeNumericValue.java
021 */
022
023package com.echothree.model.data.core.server.value;
024
025import com.echothree.model.data.core.common.pk.EntityAttributeNumericPK;
026
027import com.echothree.model.data.core.server.factory.EntityAttributeNumericFactory;
028
029import com.echothree.model.data.core.common.pk.EntityAttributePK;
030import com.echothree.model.data.uom.common.pk.UnitOfMeasureTypePK;
031
032import com.echothree.util.common.exception.PersistenceCloneException;
033import com.echothree.util.common.exception.PersistenceNotNullException;
034
035import com.echothree.util.server.persistence.BaseValue;
036
037import java.io.Serializable;
038
039import javax.annotation.Nonnull;
040import javax.annotation.Nullable;
041
042public class EntityAttributeNumericValue
043        extends BaseValue<EntityAttributeNumericPK>
044        implements Cloneable, Serializable {
045    
046    private EntityAttributePK entityAttributePK;
047    private boolean entityAttributePKHasBeenModified = false;
048    private UnitOfMeasureTypePK unitOfMeasureTypePK;
049    private boolean unitOfMeasureTypePKHasBeenModified = false;
050    private Long fromTime;
051    private boolean fromTimeHasBeenModified = false;
052    private Long thruTime;
053    private boolean thruTimeHasBeenModified = false;
054    
055    private transient Integer _hashCode = null;
056    private transient String _stringValue = null;
057    
058    private void constructFields(EntityAttributePK entityAttributePK, UnitOfMeasureTypePK unitOfMeasureTypePK, Long fromTime, Long thruTime)
059            throws PersistenceNotNullException {
060        checkForNull(entityAttributePK);
061        this.entityAttributePK = entityAttributePK;
062        this.unitOfMeasureTypePK = unitOfMeasureTypePK;
063        checkForNull(fromTime);
064        this.fromTime = fromTime;
065        checkForNull(thruTime);
066        this.thruTime = thruTime;
067    }
068    
069    /** Creates a new instance of EntityAttributeNumericValue */
070    public EntityAttributeNumericValue(EntityAttributeNumericPK entityAttributeNumericPK, EntityAttributePK entityAttributePK, UnitOfMeasureTypePK unitOfMeasureTypePK, Long fromTime, Long thruTime)
071            throws PersistenceNotNullException {
072        super(entityAttributeNumericPK);
073        constructFields(entityAttributePK, unitOfMeasureTypePK, fromTime, thruTime);
074    }
075    
076    /** Creates a new instance of EntityAttributeNumericValue */
077    public EntityAttributeNumericValue(EntityAttributePK entityAttributePK, UnitOfMeasureTypePK unitOfMeasureTypePK, Long fromTime, Long thruTime)
078            throws PersistenceNotNullException {
079        super();
080        constructFields(entityAttributePK, unitOfMeasureTypePK, fromTime, thruTime);
081    }
082    
083    @Override
084    @Nonnull
085    public EntityAttributeNumericFactory getBaseFactoryInstance() {
086        return EntityAttributeNumericFactory.getInstance();
087    }
088    
089    @Override
090    @Nonnull
091    public EntityAttributeNumericValue clone() {
092        Object result;
093        
094        try {
095            result = super.clone();
096        } catch (CloneNotSupportedException cnse) {
097            // This shouldn't happen, fail when it does.
098            throw new PersistenceCloneException(cnse);
099        }
100        
101        return (EntityAttributeNumericValue)result;
102    }
103    
104    @Override
105    @Nonnull
106    public EntityAttributeNumericPK getPrimaryKey() {
107        if(_primaryKey == null) {
108            _primaryKey = new EntityAttributeNumericPK(entityId);
109        }
110        
111        return _primaryKey;
112    }
113    
114    private void clearHashAndString() {
115        _hashCode = null;
116        _stringValue = null;
117    }
118    
119    @Override
120    public int hashCode() {
121        if(_hashCode == null) {
122            int hashCode = 17;
123            
124            hashCode = 37 * hashCode + ((entityId != null) ? entityId.hashCode() : 0);
125            
126            hashCode = 37 * hashCode + ((entityAttributePK != null) ? entityAttributePK.hashCode() : 0);
127            hashCode = 37 * hashCode + ((unitOfMeasureTypePK != null) ? unitOfMeasureTypePK.hashCode() : 0);
128            hashCode = 37 * hashCode + ((fromTime != null) ? fromTime.hashCode() : 0);
129            hashCode = 37 * hashCode + ((thruTime != null) ? thruTime.hashCode() : 0);
130            
131            _hashCode = hashCode;
132        }
133        
134        return _hashCode;
135    }
136    
137    @Override
138    @Nonnull
139    public String toString() {
140        if(_stringValue == null) {
141            _stringValue = "{" + 
142                    "entityId=" + getEntityId() +
143                    ", entityAttributePK=" + getEntityAttributePK() +
144                    ", unitOfMeasureTypePK=" + getUnitOfMeasureTypePK() +
145                    ", fromTime=" + getFromTime() +
146                    ", thruTime=" + getThruTime() +
147                    "}";
148        }
149        return _stringValue;
150    }
151    
152    @Override
153    public boolean equals(Object other) {
154        if(this == other)
155            return true;
156        
157        if(!hasIdentity())
158            return false;
159        
160        if(other instanceof  EntityAttributeNumericValue that) {
161            if(!that.hasIdentity())
162                return false;
163            
164            Long thisEntityId = getEntityId();
165            Long thatEntityId = that.getEntityId();
166            
167            boolean objectsEqual = thisEntityId.equals(thatEntityId);
168            if(objectsEqual)
169                objectsEqual = isIdentical(that);
170            
171            return objectsEqual;
172        } else {
173            return false;
174        }
175    }
176    
177    public boolean isIdentical(Object other) {
178        if(other instanceof EntityAttributeNumericValue that) {
179            boolean objectsEqual = true;
180            
181            
182            if(objectsEqual) {
183                EntityAttributePK thisEntityAttributePK = getEntityAttributePK();
184                EntityAttributePK thatEntityAttributePK = that.getEntityAttributePK();
185                
186                if(thisEntityAttributePK == null) {
187                    objectsEqual = objectsEqual && (thatEntityAttributePK == null);
188                } else {
189                    objectsEqual = objectsEqual && thisEntityAttributePK.equals(thatEntityAttributePK);
190                }
191            }
192            
193            if(objectsEqual) {
194                UnitOfMeasureTypePK thisUnitOfMeasureTypePK = getUnitOfMeasureTypePK();
195                UnitOfMeasureTypePK thatUnitOfMeasureTypePK = that.getUnitOfMeasureTypePK();
196                
197                if(thisUnitOfMeasureTypePK == null) {
198                    objectsEqual = objectsEqual && (thatUnitOfMeasureTypePK == null);
199                } else {
200                    objectsEqual = objectsEqual && thisUnitOfMeasureTypePK.equals(thatUnitOfMeasureTypePK);
201                }
202            }
203            
204            if(objectsEqual) {
205                Long thisFromTime = getFromTime();
206                Long thatFromTime = that.getFromTime();
207                
208                if(thisFromTime == null) {
209                    objectsEqual = objectsEqual && (thatFromTime == null);
210                } else {
211                    objectsEqual = objectsEqual && thisFromTime.equals(thatFromTime);
212                }
213            }
214            
215            if(objectsEqual) {
216                Long thisThruTime = getThruTime();
217                Long thatThruTime = that.getThruTime();
218                
219                if(thisThruTime == null) {
220                    objectsEqual = objectsEqual && (thatThruTime == null);
221                } else {
222                    objectsEqual = objectsEqual && thisThruTime.equals(thatThruTime);
223                }
224            }
225            
226            return objectsEqual;
227        } else {
228            return false;
229        }
230    }
231    
232    @Override
233    public boolean hasBeenModified() {
234        return entityAttributePKHasBeenModified || unitOfMeasureTypePKHasBeenModified || fromTimeHasBeenModified || thruTimeHasBeenModified;
235    }
236    
237    @Override
238    public void clearHasBeenModified() {
239        entityAttributePKHasBeenModified = false;
240        unitOfMeasureTypePKHasBeenModified = false;
241        fromTimeHasBeenModified = false;
242        thruTimeHasBeenModified = false;
243    }
244    
245    @Nonnull
246    public EntityAttributePK getEntityAttributePK() {
247        return entityAttributePK;
248    }
249    
250    public void setEntityAttributePK(@Nonnull EntityAttributePK entityAttributePK)
251            throws PersistenceNotNullException {
252        checkForNull(entityAttributePK);
253        
254        boolean update = true;
255        
256        if(this.entityAttributePK != null) {
257            if(this.entityAttributePK.equals(entityAttributePK)) {
258                update = false;
259            }
260        } else if(entityAttributePK == null) {
261            update = false;
262        }
263        
264        if(update) {
265            this.entityAttributePK = entityAttributePK;
266            entityAttributePKHasBeenModified = true;
267            clearHashAndString();
268        }
269    }
270    
271    public boolean getEntityAttributePKHasBeenModified() {
272        return entityAttributePKHasBeenModified;
273    }
274    
275    @Nullable
276    public UnitOfMeasureTypePK getUnitOfMeasureTypePK() {
277        return unitOfMeasureTypePK;
278    }
279    
280    public void setUnitOfMeasureTypePK(@Nullable UnitOfMeasureTypePK unitOfMeasureTypePK) {
281        boolean update = true;
282        
283        if(this.unitOfMeasureTypePK != null) {
284            if(this.unitOfMeasureTypePK.equals(unitOfMeasureTypePK)) {
285                update = false;
286            }
287        } else if(unitOfMeasureTypePK == null) {
288            update = false;
289        }
290        
291        if(update) {
292            this.unitOfMeasureTypePK = unitOfMeasureTypePK;
293            unitOfMeasureTypePKHasBeenModified = true;
294            clearHashAndString();
295        }
296    }
297    
298    public boolean getUnitOfMeasureTypePKHasBeenModified() {
299        return unitOfMeasureTypePKHasBeenModified;
300    }
301    
302    @Nonnull
303    public Long getFromTime() {
304        return fromTime;
305    }
306    
307    public void setFromTime(@Nonnull Long fromTime)
308            throws PersistenceNotNullException {
309        checkForNull(fromTime);
310        
311        boolean update = true;
312        
313        if(this.fromTime != null) {
314            if(this.fromTime.equals(fromTime)) {
315                update = false;
316            }
317        } else if(fromTime == null) {
318            update = false;
319        }
320        
321        if(update) {
322            this.fromTime = fromTime;
323            fromTimeHasBeenModified = true;
324            clearHashAndString();
325        }
326    }
327    
328    public boolean getFromTimeHasBeenModified() {
329        return fromTimeHasBeenModified;
330    }
331    
332    @Nonnull
333    public Long getThruTime() {
334        return thruTime;
335    }
336    
337    public void setThruTime(@Nonnull Long thruTime)
338            throws PersistenceNotNullException {
339        checkForNull(thruTime);
340        
341        boolean update = true;
342        
343        if(this.thruTime != null) {
344            if(this.thruTime.equals(thruTime)) {
345                update = false;
346            }
347        } else if(thruTime == null) {
348            update = false;
349        }
350        
351        if(update) {
352            this.thruTime = thruTime;
353            thruTimeHasBeenModified = true;
354            clearHashAndString();
355        }
356    }
357    
358    public boolean getThruTimeHasBeenModified() {
359        return thruTimeHasBeenModified;
360    }
361    
362}