001: package de.webman.content.eventhandler;
002:
003: import com.teamkonzept.web.*;
004: import com.teamkonzept.webman.*;
005: import com.teamkonzept.webman.mainint.*;
006: import de.webman.content.workflow.db.queries.DeleteContent;
007: import de.webman.content.workflow.*;
008: import de.webman.content.Content;
009: import com.teamkonzept.webman.mainint.events.*;
010: import com.teamkonzept.lib.*;
011: import com.teamkonzept.field.*;
012: import com.teamkonzept.field.db.*;
013: import com.teamkonzept.db.*;
014:
015: import java.sql.*;
016: import java.util.*;
017:
018: /**
019: * Handler, der Contentversionen kompaktiert
020: * Das bedeutet, alte Versionen werden gelöscht, die Versionsgeschichte jedoch bleibt erhalten !
021: *
022: * @author $Author: alex $
023: * @version $Revision: 1.6 $
024: */
025: public class CECompactHandler extends DefaultEventHandler implements
026: DatabaseDefaults, ParameterTypes, FrameConstants {
027: private CECompactHandler() {
028: }
029:
030: private static CECompactHandler instance = new CECompactHandler();
031:
032: public static CECompactHandler getInstance() {
033: return instance;
034: }
035:
036: /**
037: @param instHash alle Daten einer Content Instanz
038: @return Hashtable of non-important contentIDs !
039: */
040: private static Integer getLowestInterestingContent(Content content)
041: {
042: TKHashtable interesting = content.getInterestingVersions();
043: Enumeration enum = interesting.keys();
044: // kleinste interessante Content ID feststellen
045: int contentID = Integer.MAX_VALUE;
046: while (enum.hasMoreElements())
047: {
048: Object key = enum.nextElement();
049: ContentVersion version = (ContentVersion)interesting.get(key);
050: Integer tempContentID = version.getContentId();
051: // System.out.println("Got interesting : " + version.getContentId());
052: if (tempContentID.intValue() < contentID)
053: contentID = tempContentID.intValue();
054: }
055: if (contentID == Integer.MAX_VALUE)
056: {
057: return null;
058: }
059: return new Integer(contentID);
060: }
061:
062: /**
063: alle Contents mit der entsprechenden Instanz ID und kleinerer ContentID
064: werden geloescht
065: */
066: private static void deleteContents(Integer lowestContent,
067: Integer instanceId) throws SQLException {
068: TKQuery q = TKDBManager.newQuery(DeleteContent.class);
069: q.setQueryParams("CONTENT_ID", lowestContent);
070: q.setQueryParams("INSTANCE_ID", instanceId);
071: q.execute();
072: }
073:
074: /**
075: boolean subtree ??
076: Auswahl der zu kompaktierenden Bereiche
077: Auswahl der Kriterien, nach denen kompaktiert wird
078: */
079: public void handleEvent(TKEvent evt) throws TKException {
080: try {
081: CEUtils.checkEvent(evt);
082:
083: ContentContext ceContext = new ContentContext(evt
084: .getParameter(PARAMETER, "NAVIGATION_CONTEXT"));
085:
086: // statische Daten der Versionsverwaltung abrufen
087: VersionStatics.setup();
088:
089: // SUBTREE muss noch ermittelt werden !!!!!! Parameter des Events !!
090: boolean subtree = evt
091: .getParameter(PARAMETER, "EVT_SUBTREE") != null;
092: TKVector allInstances = VersionCache.getVersionInfo(
093: ceContext, subtree);
094: for (int i = 0; i < allInstances.size(); i++) {
095: Content content = (Content) allInstances.elementAt(i);
096: Integer nonInterest = getLowestInterestingContent(content);
097: if (nonInterest != null) {
098: deleteContents(nonInterest, content.getInstanceId());
099: }
100: }
101: evt.getParams().put(PARAMETER, "RECALCULATE", "a");
102: // Neuaufbau der Seite
103: CEBrowseHandler.getInstance().handleEvent(evt);
104: } catch (Throwable e) {
105: // TO DO : Analyze Exception !
106: throw WebmanExceptionHandler.getException(e);
107: }
108: }
109:
110: public boolean isHandler(TKEvent evt) {
111: return evt.getName().equalsIgnoreCase("CE_COMPACT");
112: }
113: }
|