package com.general.dataBase.castor; import org.exolab.castor.jdo.TimeStampable; import org.exolab.castor.jdo.Database; import org.exolab.castor.jdo.PersistenceException; /** * User: gabollado * Date: 04-oct-2005 */ public abstract class AbsCastorDataBase implements TimeStampable { public static boolean DEBUG = false; public static final String ID = "id"; public static final int STATE_NEW = 1; public static final int STATE_MODIFY = 2; public static final int STATE_QUERY = 3; public static final int STATE_DELETE = 4; private int iState = STATE_QUERY; private long timestamp; private String dbName; private Integer id; public AbsCastorDataBase(String _dbName) { dbName = _dbName; } protected void setState(int _iState) { iState = _iState; } public int getState() { return iState; } public void setToDelete() { setState(STATE_DELETE); } public void setToUpdate() { if(iState == STATE_QUERY) setState(STATE_MODIFY); } public void update() throws PersistenceException { Database database = null; try { database = CastorHelper.getDatabase(dbName); database.begin(); update(database); database.commit(); } catch(PersistenceException e) { System.out.println(e.getMessage()); //e.printStackTrace(); throw e; } finally { try { if(database != null && !database.isClosed()) { if(database.isActive()) database.rollback(); database.close(); database = null; } } catch (PersistenceException e) { e.printStackTrace(); } } } public void update(Database _database) throws PersistenceException { if(getId() == null && iState != STATE_DELETE) iState = STATE_NEW; if(iState == STATE_NEW) { insertRecord(_database); //setState(STATE_MODIFY); } else if(iState == STATE_MODIFY) modifyRecord(_database); else if(iState == STATE_DELETE) deleteRecord(_database); iState = STATE_QUERY; } protected void insertRecord(Database _database) throws PersistenceException { _database.create(this); } protected void modifyRecord(Database _database) throws PersistenceException { _database.update(this); } protected void deleteRecord(Database _database) throws PersistenceException { if(getId() != null) { if(DEBUG) System.out.println("Borrando: " + this); _database.update(this); _database.remove(this); } } public static AbsCastorDataBase load(Class _class, Integer _id, Database _database) throws PersistenceException { AbsCastorDataBase baseObject = null; baseObject = (AbsCastorDataBase)_database.load(_class, _id); baseObject.setState(STATE_QUERY); return baseObject; } public static AbsCastorDataBase load(Class _class, Integer _id, String _dbName) throws PersistenceException { AbsCastorDataBase baseObject = null; Database database = null; try { database = CastorHelper.getDatabase(_dbName); database.begin(); baseObject = (AbsCastorDataBase)database.load(_class, _id, Database.ReadOnly); database.commit(); baseObject.setState(STATE_QUERY); } finally { try { if(database != null && !database.isClosed()) { if(database.isActive()) database.rollback(); database.close(); } } catch (PersistenceException e) { e.printStackTrace(); } } return baseObject; } public long jdoGetTimeStamp() { return timestamp; } public void jdoSetTimeStamp(long arg0) { this.timestamp = arg0; } public Integer getId() { return id; } public void setId(Integer _id) { id = _id; } public boolean canBeDeleted() throws PersistenceException { return false; } public boolean equals(Object _object) { AbsCastorDataBase baseObject = null; baseObject = (AbsCastorDataBase) _object; if(_object == null) return false; if(baseObject.getId() == null && this.getId() == null) return super.equals(_object); if(baseObject.getId() == null && this.getId() != null) return false; if(this.getId() == null && baseObject.getId() != null) return false; try { if(this.getId().compareTo(baseObject.getId()) == 0) return true; } catch(Exception e) { e.printStackTrace(); return false; } return false; } }