package jeffaschenk.commons.frameworks.cnxidx.resiliency.ldap; import java.io.Serializable; import java.util.Iterator; import java.util.Map; import java.util.Set; import java.util.TreeMap; /** * Provides a Change Log Status for the entire Log file. * This Object is used by the IRRChangeLogRestoreServiceReaderThread for tracking * changes against ChangeResponseIdentifier. * * @author jeff.schenk * @since 2005.11.10 */ public class ChangeLogStatus implements Serializable { // ***************************************** // Fields Established by Primary Coordinator private Object originator = null; private String logfilename = null; // ***************************************** // Fields Updated By Primary Coordinator. // This Map will Contain the Following: protected Map<Integer,ChangeLogStatusElement> changelog_elements = new TreeMap<>(); /** * Constructor specifying All Necessary Fields. */ public ChangeLogStatus(Object originator, String logfilename) { // ******************************** // Save our Originator Object. this.originator = originator; // ******************************** // Save the logfile Name. this.logfilename = logfilename; } // End of Constructor. /** * Get Log File Name. */ public String getLogFileName() { return this.logfilename; } // End of getLogFileName. /** * Get Originator. */ public Object getOriginator() { return this.originator; } // End of getOriginator. /** * toString. */ public String toString() { StringBuffer sb = new StringBuffer(); sb.append("Change Log Status:[ logfilename:[" + this.logfilename + "]"); sb.append(", Originator:[" + this.originator + "]"); // ************************************* // Now Loop to Show all Change Elements sb.append(", Change Elements:["); Set set = this.changelog_elements.keySet(); Iterator itr = set.iterator(); while (itr.hasNext()) { Integer chgnum = (Integer) itr.next(); sb.append(" Change Number in Log:[" + chgnum.toString() + "] Responses:["); sb.append((changelog_elements.get(chgnum)).toString()); sb.append("] "); } // End of For Loop. sb.append("]"); return sb.toString(); } // End of toString Method. /** * toStateFileString, provides helper method to output * current Object State into a State File. */ public String toStateFileString() { StringBuffer sb = new StringBuffer(); sb.append("# Change Log Status:[ logfilename:[" + this.logfilename + "]\n"); sb.append("# Originator:[" + this.originator + "]\n"); // ************************************* // Now Loop to Show all Change Elements sb.append("# Change Elements:\n"); Set set = this.changelog_elements.keySet(); Iterator itr = set.iterator(); while (itr.hasNext()) { Integer chgnum = (Integer) itr.next(); sb.append("# Change Number in Log:[" + chgnum.toString() + "]\n"); sb.append("# Responses:\n"); sb.append((changelog_elements.get(chgnum)).toStateFileString(false)); sb.append("# \n"); } // End of For Loop. sb.append("# \n"); sb.append("# \n"); return sb.toString(); } // End of toStateString Method. /** * Determine State of a specific Change Log Element for this Change Log Object. * * @param change_identifier Specific Change Number within Log to be checked. * @return boolean Indicator if Element Change is successful or not. */ public boolean determineState(ChangeIdentifier change_identifier) { // ******************************** // Initialize if (change_identifier == null) { return false; } // ************************************ // Obtain the Change Log Element. ChangeLogStatusElement clse = changelog_elements.get( new Integer(change_identifier.getChangeNumberWithinLog())); // **************************************** // If we did not get a Change Log Element // Returned, we may have an issue. // TODO FIX if (clse == null) { return false; } // ************************************ // Now Allow the Change Element // to determine the state. return clse.determineElementState(); } // End of Public Method to Determine State of this Change Log Object. /** * Helper Method to formulate the proper Change Log Status Idenitifier Key. * * @param originator * @param logfilename * @return String -- Formulated Key */ public static String formulateKey(Object originator, String logfilename) { return originator.toString() + ":" + logfilename; } // End of formulateKey. } ///:~ End of ChangeIdentifier Class.