libreccm-legacy/ccm-core/src/com/redhat/persistence/ObjectData.java

153 lines
4.1 KiB
Java
Executable File

/*
* Copyright (C) 2003-2004 Red Hat Inc. All Rights Reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
* as published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
package com.redhat.persistence;
import com.redhat.persistence.metadata.Property;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Iterator;
import org.apache.log4j.Logger;
/**
* ObjectData
*
* @author <a href="mailto:rhs@mit.edu">rhs@mit.edu</a>
* @version $Id: ObjectData.java 287 2005-02-22 00:29:02Z sskracic $
**/
class ObjectData {
private static final Logger LOG = Logger.getLogger(ObjectData.class);
private final Session m_ssn;
private Object m_object;
static class State {
private String m_name;
private State(String name) { m_name = name; }
public String toString() { return m_name; }
};
public static final State INFANTILE = new State("infantile");
public static final State NUBILE = new State("nubile");
public static final State AGILE = new State("agile");
public static final State SENILE = new State("senile");
public static final State DEAD = new State("dead");
private boolean m_startedNew = false;
private State m_state;
private HashMap m_pdata = new HashMap();
public ObjectData(Session ssn, Object object, State state) {
m_ssn = ssn;
m_object = object;
setState(state);
m_ssn.addObjectData(this);
}
public Session getSession() {
return m_ssn;
}
public Object getObject() {
return m_object;
}
void setObject(Object object) {
m_object = object;
}
public void addPropertyData(Property p, PropertyData pd) {
m_pdata.put(p, pd);
}
public PropertyData getPropertyData(Property prop) {
return (PropertyData) m_pdata.get(prop);
}
public boolean hasPropertyData(Property prop) {
return m_pdata.containsKey(prop);
}
public boolean isNew() { return m_startedNew; }
public boolean isDeleted() { return isDead() || isSenile(); }
public boolean isModified() { return !isNubile(); }
public boolean isInfantile() { return m_state.equals(INFANTILE); }
public boolean isNubile() { return m_state.equals(NUBILE); }
public boolean isAgile() { return m_state.equals(AGILE); }
public boolean isSenile() { return m_state.equals(SENILE); }
public boolean isDead() { return m_state.equals(DEAD); }
public boolean isFlushed() {
if (getSession().getEventStream().getLastEvent(getObject()) != null) {
return false;
}
for (Iterator it = m_pdata.values().iterator(); it.hasNext(); ) {
PropertyData pdata = (PropertyData) it.next();
if (!pdata.isFlushed()) { return false; }
}
return true;
}
void setState(State state) {
if (state.equals(INFANTILE)) {
m_startedNew = true;
}
m_state = state;
}
public State getState() { return m_state; }
void dump() {
PrintWriter pw = new PrintWriter(System.out);
dump(pw);
pw.flush();
}
void dump(PrintWriter out) {
out.println(" object = " + getObject());
for (Iterator it = m_pdata.values().iterator(); it.hasNext(); ) {
PropertyData pdata = (PropertyData) it.next();
pdata.dump(out);
}
Event ev = getSession().getEventStream().getLastEvent(getObject());
if (ev != null) {
out.println(" Current Object Event:");
ev.dump(out);
}
}
}