package jeffaschenk.commons.frameworks.cnxidx.resiliency.ldap;
import org.jgroups.Address;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.Vector;
import java.util.LinkedList;
/**
* Provides a Change Identifier for every change issued.
* This Object is used by the IRRChangeLogRestoreServiceReaderThread for tracking
* changes against ChangeResponseIdentifier.
*
* @author jeff.schenk
* @since 2005.11.08
*/
public class ChangeIdentifier implements Serializable {
// *****************************************
// Static Globals.
public static final boolean CHANGE_NOT_BLOCKED = false;
public static final boolean CHANGE_BLOCKED = true;
// *****************************************
// Fields Established by Primary Coordinator
private String logfilename = null;
private int change_number_within_log = 0;
private Object originator = null;
private long timestamp_change_sent = 0;
private Vector<Address> members_at_time_of_change = new Vector<>();
private boolean blocked = CHANGE_NOT_BLOCKED;
/**
* Constructor specifying All Necessary Fields.
*/
public ChangeIdentifier(Object originator,
List<Address> current_members,
String logfilename,
int change_number_within_log) {
// ********************************
// Save the Timestamp.
this.timestamp_change_sent = System.currentTimeMillis();
// ********************************
// Save our Originator Object.
this.originator = originator;
// ********************************
// Save new List of Members.
members_at_time_of_change.removeAllElements();
for (int i = 0; i < current_members.size(); i++) {
members_at_time_of_change.addElement(current_members.get(i));
}
// ********************************
// Save the logfile Name.
this.logfilename = logfilename;
// ********************************
// Save the change within the log.
this.change_number_within_log = change_number_within_log;
} // End of Constructor.
/**
* Constructor specifying All Necessary Fields.
*/
public ChangeIdentifier(Object originator,
Vector<Address> current_members,
String logfilename,
int change_number_within_log,
boolean blocked) {
// ********************************
// Save the Timestamp.
this.timestamp_change_sent = System.currentTimeMillis();
// ********************************
// Save our Originator Object.
this.originator = originator;
// ********************************
// Save new List of Members.
members_at_time_of_change.removeAllElements();
for (int i = 0; i < current_members.size(); i++) {
members_at_time_of_change.addElement(current_members.get(i));
}
// ********************************
// Save the logfile Name.
this.logfilename = logfilename;
// ********************************
// Save the change within the log.
this.change_number_within_log = change_number_within_log;
// ********************************
// Save the Block Indicator.
this.blocked = blocked;
} // End of Constructor.
/**
* Get TimeStamp Change was Sent.
*/
public long getTimestampOfChangeSent() {
return this.timestamp_change_sent;
} // End of get timestamp_change_sent.
/**
* Get Members at Time Change was Sent.
*/
public Vector getMembersAtTimeOfChangeSent() {
return this.members_at_time_of_change;
} // End of getMembersAtTimeOfChangeSent.
/**
* Get Log File Name.
*/
public String getLogFileName() {
return this.logfilename;
} // End of getLogFileName.
/**
* Get Change Number within the Log.
*/
public int getChangeNumberWithinLog() {
return this.change_number_within_log;
} // End of getChangeNumberWithinLog.
/**
* Get Originator.
*/
public Object getOriginator() {
return this.originator;
} // End of getOriginator.
/**
* Is this Change Already Blocked?
*/
public boolean isBlocked() {
return this.blocked;
} // End of isBlocked.
/**
* toString.
*/
public String toString() {
StringBuffer sb = new StringBuffer();
sb.append("ID:[ logfilename:[" + this.logfilename + "]");
sb.append(", ChangeNumInLog:[" + this.change_number_within_log + "]");
sb.append(", Originator:[" + this.originator + "]");
sb.append(", TimeStamp Change Sent:[" + new Date(this.timestamp_change_sent).toString() + "]");
sb.append(", Members at Time of Change:[" + this.members_at_time_of_change + "]");
sb.append(", Blocked before Publish:[" + this.blocked + "]");
sb.append("]");
return sb.toString();
} // End of tostring Method.
} ///:~ End of ChangeIdentifier Class.