/*************************************************** * * cismet GmbH, Saarbruecken, Germany * * ... and it just works. * ****************************************************/ package de.cismet.cids.trigger.builtin; import Sirius.server.localserver.attribute.ClassAttribute; import Sirius.server.newuser.User; import Sirius.server.sql.DBConnection; import org.openide.util.lookup.ServiceProvider; import java.sql.SQLException; import de.cismet.cids.dynamics.CidsBean; import de.cismet.cids.trigger.AbstractDBAwareCidsTrigger; import de.cismet.cids.trigger.CidsTrigger; import de.cismet.cids.trigger.CidsTriggerKey; /** * DOCUMENT ME! * * @author thorsten * @version $Revision$, $Date$ */ @ServiceProvider(service = CidsTrigger.class) public class UpdateToStringCacheTrigger extends AbstractDBAwareCidsTrigger { //~ Static fields/initializers --------------------------------------------- private static final transient org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger( UpdateToStringCacheTrigger.class); //~ Methods ---------------------------------------------------------------- @Override public void afterDelete(final CidsBean cidsBean, final User user) { if (isCacheEnabled(cidsBean)) { de.cismet.tools.CismetThreadPool.execute(new javax.swing.SwingWorker<Integer, Void>() { @Override protected Integer doInBackground() throws Exception { return getDbServer().getActiveDBConnection() .submitInternalUpdate( DBConnection.DESC_DELETE_STRINGREPCACHEENTRY, cidsBean.getMetaObject().getClassID(), cidsBean.getMetaObject().getID()); } @Override protected void done() { try { final Integer result = get(); } catch (Exception e) { log.error("Exception in Background Thread: afterDelete", e); } } }); } } @Override public void afterInsert(final CidsBean cidsBean, final User user) { if (isCacheEnabled(cidsBean)) { de.cismet.tools.CismetThreadPool.execute(new javax.swing.SwingWorker<Integer, Void>() { @Override protected Integer doInBackground() throws Exception { final String name = cidsBean.toString(); if ((name != null) && !name.equals("")) { return getDbServer().getActiveDBConnection() .submitInternalUpdate( DBConnection.DESC_INSERT_STRINGREPCACHEENTRY, cidsBean.getMetaObject().getClassID(), cidsBean.getMetaObject().getID(), name); } else { return 0; } } @Override protected void done() { try { final Integer result = get(); } catch (Exception e) { log.error("Exception in Background Thread: afterInsert", e); } } }); final String sql = "insert into cs_stringrepcache (class_id,object_id,stringrep) values(" + cidsBean.getMetaObject().getClassID() + "," + cidsBean .getMetaObject().getID() + ",'" + cidsBean.toString() + "');"; } } @Override public void afterUpdate(final CidsBean cidsBean, final User user) { if (isCacheEnabled(cidsBean)) { de.cismet.tools.CismetThreadPool.execute(new javax.swing.SwingWorker<Integer, Void>() { @Override protected Integer doInBackground() throws Exception { try { final String name = cidsBean.toString(); if ((name == null) || name.equals("")) { getDbServer().getActiveDBConnection() .submitInternalUpdate( DBConnection.DESC_DELETE_STRINGREPCACHEENTRY, cidsBean.getMetaObject().getClassID(), cidsBean.getMetaObject().getID()); return 0; } else { return getDbServer().getActiveDBConnection() .submitInternalUpdate( DBConnection.DESC_UPDATE_STRINGREPCACHEENTRY, name, cidsBean.getMetaObject().getClassID(), cidsBean.getMetaObject().getID()); } } catch (SQLException e) { getDbServer().getActiveDBConnection() .submitInternalUpdate( DBConnection.DESC_DELETE_STRINGREPCACHEENTRY, cidsBean.getMetaObject().getClassID(), cidsBean.getMetaObject().getID()); return getDbServer().getActiveDBConnection() .submitInternalUpdate( DBConnection.DESC_INSERT_STRINGREPCACHEENTRY, cidsBean.getMetaObject().getClassID(), cidsBean.getMetaObject().getID(), cidsBean.toString()); } } @Override protected void done() { try { final Integer result = get(); } catch (Exception e) { log.error("Exception in Background Thread: afterUpdate", e); } } }); } } @Override public void beforeDelete(final CidsBean cidsBean, final User user) { } @Override public void beforeInsert(final CidsBean cidsBean, final User user) { } @Override public void beforeUpdate(final CidsBean cidsBean, final User user) { } @Override public CidsTriggerKey getTriggerKey() { return CidsTriggerKey.FORALL; } /** * DOCUMENT ME! * * @param o DOCUMENT ME! * * @return DOCUMENT ME! */ @Override public int compareTo(final CidsTrigger o) { return 0; } /** * DOCUMENT ME! * * @param cidsBean DOCUMENT ME! * * @return DOCUMENT ME! */ private static boolean isCacheEnabled(final CidsBean cidsBean) { return (cidsBean.getMetaObject().getMetaClass().getClassAttribute(ClassAttribute.TO_STRING_CACHE_ENABLED) != null); } @Override public void afterCommittedInsert(final CidsBean cidsBean, final User user) { } @Override public void afterCommittedUpdate(final CidsBean cidsBean, final User user) { } @Override public void afterCommittedDelete(final CidsBean cidsBean, final User user) { } }