Coverage Report - org.naftulin.configmgr.ConfigurationManagementEntryImpl
 
Classes in this File Line Coverage Branch Coverage Complexity
ConfigurationManagementEntryImpl
81%
42/52
67%
8/12
1.2
 
 1  
 package org.naftulin.configmgr;
 2  
 
 3  
 import java.util.Date;
 4  
 
 5  
 import org.apache.commons.lang.builder.ToStringBuilder;
 6  
 import org.apache.commons.lang.builder.EqualsBuilder;
 7  
 import org.apache.commons.lang.builder.HashCodeBuilder;
 8  
 import org.apache.commons.lang.exception.ExceptionUtils;
 9  
 import org.naftulin.configmgr.parsers.ConfigEntryParser;
 10  
 
 11  
 /**
 12  
  * Configuration management entry associates a key to a configuration, stored as a content.
 13  
  * In addition to key and content, it registers the file name from which a configuration was read,
 14  
  * whether the configuration is in an error state, and whether or not it was overwritten.
 15  
  * The entry is considered to be in error, if it cannot be parsed from the configuration file.
 16  
  * In such case, instead of the configuration, an exception would be stored in the configuration entry 
 17  
  * content. If the configuration in error is requested, the exception is returned.
 18  
  * The owervritten stands flag is to show whether a configuration was programmatically 
 19  
  * ovewrittend (by using {@link ConfigurationManagement#addConfigurationManagmentEntry(ConfigurationManagementEntry) 
 20  
  * add configuration method}. Otherwise it is false; it is also reset when reload is called
 21  
  * on {@link ConfigurationManagement ConfigurationManagement}. It could also be set by user.
 22  
  * 
 23  
  * @author Henry Naftulin
 24  
  * @since 1.0
 25  
  */
 26  
 public class ConfigurationManagementEntryImpl implements ConfigurationManagementEntry {
 27  
         private static final long serialVersionUID = 1L;
 28  
         private final String key;
 29  
         private final String fileName;
 30  
         private boolean overwritten;
 31  
         private final boolean error;
 32  
         private final Object content;
 33  
         private final Date createDate;
 34  
         private final transient ConfigEntryParser processor;
 35  
         private final ConfigurationType configurationType;
 36  
         private Date modifiedDate;
 37  
         
 38  
         /**
 39  
          * Creates a configuration management entry. Sets error only if the key or if processor is
 40  
          * not set or no file name is associated with the configuration entry.
 41  
          * @param key the key entry is stored under
 42  
          * @param fileName file that is associated with the entry. Usually file that the entry is read from.
 43  
          * @param content the content of the entry. For example properties object.
 44  
          * @param processor the processor that can process entry
 45  
          */
 46  
         public ConfigurationManagementEntryImpl(final String key, final String fileName, 
 47  
                         final Object content, final ConfigEntryParser processor, 
 48  
                         final ConfigurationType configurationType) {
 49  480
                 super();
 50  480
                 this.key = key;
 51  480
                 this.fileName = fileName;
 52  480
                 this.content = content;
 53  480
                 this.processor = processor;
 54  480
                 this.configurationType = configurationType;
 55  480
                 long miliseconds = System.currentTimeMillis();
 56  480
                 createDate = new Date(miliseconds);
 57  480
                 modifiedDate = new Date(miliseconds);
 58  480
                 error = (key == null) || (processor == null) || (fileName == null) || (content instanceof Throwable);
 59  480
         }
 60  
 
 61  
         /**
 62  
          * Returns key for the entry
 63  
          * @return the key for the entry
 64  
          */
 65  
         public String getKey() {
 66  965
                 return key;
 67  
         }
 68  
 
 69  
         /**
 70  
          * Returns file name associated with the entry
 71  
          * @return the file name associated with the entry
 72  
          */
 73  
         public String getFileName() {
 74  55
                 return fileName;
 75  
         }
 76  
 
 77  
         /**
 78  
          * Sets overwritten flag. Method should be called by configuration manager only
 79  
          * to say that an entry overwrote another entry in the configuration.
 80  
          * @param overwritten
 81  
          */
 82  
         public void setOverwritten(final boolean overwritten) {
 83  375
                 this.overwritten = overwritten;
 84  375
         }
 85  
         
 86  
         /**
 87  
          * Returns true if this entry overwrote another entry with the same key.
 88  
          * @return true if this entry overwrote another entry with the same key.
 89  
          */
 90  
         public boolean isOverwritten() {
 91  10
                 return overwritten;
 92  
         }
 93  
 
 94  
         /**
 95  
          * Returns true if the configuration does not have a key, or file name is not
 96  
          * associated with the entry or there is no processor associated with the entry.
 97  
          * @return true if the entry is in error condition
 98  
          */
 99  
         public boolean isError() {
 100  185
                 return this.error;
 101  
         }
 102  
 
 103  
         /**
 104  
          * Returns the content of the entry
 105  
          * @return the content
 106  
          */
 107  
         public Object getContent() {
 108  245
                 return this.content;
 109  
         }
 110  
 
 111  
         /**
 112  
          * Returns the create date for this entry
 113  
          * @return create date for the entry
 114  
          */
 115  
         public Date getCreateDate() {
 116  15
                 return (Date) createDate.clone();
 117  
         }
 118  
 
 119  
         /**
 120  
          * Returns the processor for this entry
 121  
          * @return the processor for this entry
 122  
          */
 123  
         public ConfigEntryParser getProcessor() {
 124  0
                 return this.processor;
 125  
         }
 126  
 
 127  
         /**
 128  
          * Returns the string representation of this entry.
 129  
          * @return the string representation of this entry.
 130  
          */
 131  
         public String toString() {
 132  930
                 final ToStringBuilder sb = new ToStringBuilder(this)
 133  465
                                         .append("processor", this.processor)
 134  465
                                         .append("key", this.key)
 135  465
                                         .append("overwritten", this.overwritten)
 136  465
                                         .append("fileName", this.fileName);
 137  465
                 if (content instanceof Throwable) {
 138  0
                         Throwable t = (Throwable) content;
 139  0
                         sb.append("content", t.getMessage() + ExceptionUtils.getFullStackTrace(t));
 140  
                 } else {
 141  465
                         sb.append("content", this.content);
 142  
                 }
 143  465
                 sb.append("error", this.error)
 144  465
                         .append("createDate", this.createDate)
 145  465
                         .append("mofifiedDate", this.modifiedDate)
 146  465
                         .append("cofiguration Type", this.configurationType);
 147  465
                 return sb.toString();
 148  
         }
 149  
 
 150  
         /**
 151  
          * Returns true if the object equals to this record.
 152  
          * @return true if the object equals to this record.
 153  
          */
 154  
         public boolean equals(Object object) {
 155  5
                 if (!(object instanceof ConfigurationManagementEntryImpl)) {
 156  0
                         return false;
 157  
                 }
 158  5
                 final ConfigurationManagementEntryImpl rhs = (ConfigurationManagementEntryImpl) object;
 159  15
                 return new EqualsBuilder().appendSuper(super.equals(object)).append(
 160  15
                                 this.key, rhs.key).append(this.fileName, rhs.fileName).append(
 161  15
                                 this.overwritten, rhs.overwritten).append(this.content,
 162  15
                                 rhs.content).append(this.createDate, rhs.createDate).append(
 163  10
                                 this.processor, rhs.processor).append(this.error, rhs.error)
 164  5
                                 .isEquals();
 165  
         }
 166  
 
 167  
         /**
 168  
          * Returns hashcode of this record.
 169  
          * @return hashcode of this record.
 170  
          */
 171  
         public int hashCode() {
 172  0
                 return new HashCodeBuilder(273882901, 72714823).appendSuper(
 173  0
                                 super.hashCode()).append(this.key).append(this.fileName)
 174  0
                                 .append(this.overwritten).append(this.content).append(
 175  0
                                                 this.createDate).append(this.processor).append(
 176  0
                                                 this.error).toHashCode();
 177  
         }
 178  
 
 179  
         /**
 180  
          * Returns the date and time when this entry was modified.
 181  
          * @return the date and time when this entry was modified.
 182  
          */
 183  
         public Date getModifiedDate() {
 184  15
                 return (Date) modifiedDate.clone();
 185  
         }
 186  
 
 187  
         /**
 188  
          * Returns the configuration type of this entry.
 189  
          * @return the configuration type of this entry.
 190  
          */
 191  
         public ConfigurationType getConfigurationType() {
 192  0
                 return this.configurationType;
 193  
         }
 194  
 
 195  
         public void setModifiedDate(final Date modifiedDate) {
 196  5
                 this.modifiedDate = (Date) modifiedDate.clone();
 197  
                 
 198  5
         }
 199  
         
 200  
 }