001: package de.webman.content.eventhandler;
002:
003: import com.teamkonzept.web.*;
004: import com.teamkonzept.webman.*;
005: import com.teamkonzept.webman.db.TKWebmanDBManager;
006: import com.teamkonzept.webman.mainint.*;
007: import com.teamkonzept.webman.mainint.db.*;
008: import com.teamkonzept.webman.mainint.db.queries.*;
009: import com.teamkonzept.webman.mainint.db.queries.content.*;
010: import com.teamkonzept.webman.mainint.events.*;
011: import com.teamkonzept.lib.*;
012: import com.teamkonzept.field.*;
013: import com.teamkonzept.field.db.*;
014: import com.teamkonzept.db.*;
015: import com.teamkonzept.publishing.markups.*;
016:
017: import java.sql.*;
018: import java.io.*;
019:
020: /**
021: * Verschieben von Knoten im Contenttree
022: * danach: Anzeigen der Maske zum Neuordnen des Contenttree
023: * @author $Author: alex $
024: * @version $Revision: 1.3 $
025: */
026: public class CEArrangeMoveHandler extends DefaultEventHandler implements
027: ParameterTypes, FrameConstants, DatabaseDefaults {
028: // private static final String BEFORE = "1";
029: // private static final String AFTER = "-1";
030: private static final String INSIDE = "0";
031:
032: private CEArrangeMoveHandler() {
033: }
034:
035: private static CEArrangeMoveHandler instance = new CEArrangeMoveHandler();
036:
037: public static CEArrangeMoveHandler getInstance() {
038: return instance;
039: }
040:
041: public void handleEvent(TKEvent evt) throws TKException {
042: try {
043: CEUtils.checkEvent(evt);
044: String mode = evt.getParameter(PARAMETER, "MOVE_MODE");
045: String src = evt.getParameter(PARAMETER, "SRC_NODE");
046: String dst = evt.getParameter(PARAMETER, "DST_NODE");
047:
048: /** erstmal prüfen, ob die Verschiebungen konsistent sind
049: d.h. Forms kompatibel
050: Wenn der modus innerhalb ist, ist der Vater markiert !!!
051: Bedeutung der Modi :
052: 1 = davor
053: -1 = danach
054: 0 = mittenrein
055: */
056: if ((mode != null) && (src != null) && (dst != null)) {
057: TKQuery q;
058: // src und dest muessen verglichen werden !!!
059: // SRC Query
060: q = TKDBManager.newQuery(SelectContentTree.class);
061: q.setQueryParams("ID", new Integer(src));
062: q.execute();
063: ResultSet rs = q.fetchResultSet();
064: rs.next();
065: String srcType = rs.getString("CONTENT_NODE_TYPE");
066: String srcForm = rs.getString("CONTENT_FORM");
067:
068: // DEST Query !!!
069: q = TKDBManager
070: .newQuery(TKDBContentTreeGetParentInfo.class);
071: // sonst ...
072: q.setQueryParams("CONTENT_NODE_ID", new Integer(dst));
073: q.execute();
074: rs = q.fetchResultSet();
075: rs.next();
076: // erst kommt Papa dann der eigentliche Knoten
077: // falls Papa ein GroupNode, sollten die Forms übereinstimmen !!
078: String destParentTyp = rs
079: .getString("CONTENT_NODE_TYPE");
080: String destParentForm = rs.getString("CONTENT_FORM");
081: rs.next();
082: // erst kommt Papa dann der eigentliche Knoten
083: // falls Papa ein GroupNode, sollten die Forms übereinstimmen !!
084: String destTyp = rs.getString("CONTENT_NODE_TYPE");
085: String destForm = rs.getString("CONTENT_FORM");
086:
087: if (destTyp.equals(DIRECTORY_NODE)) {
088: // Dest ist Directory -> alles egal
089: } else if (destTyp.equals(SINGLE)) {
090: // Dest ist Content -> Parent Verzeichis ? egal, Parent Group ? Form checken
091: if (destParentTyp.equals(GROUP)
092: && !destParentForm.equals(srcForm))
093: throw new TKUserException(
094: "Typen stimmen nicht ueberein",
095: NO_MATCHING_TYPES, USER_SEVERITY,
096: false, null);
097: // sonst egal
098: } else {
099: // Dest ist Group ? innerhalb ? Form checken davor danach egal !
100: if (srcType.equals(DIRECTORY_NODE))
101: throw new TKUserException(
102: "Typen stimmen nicht ueberein",
103: NO_MATCHING_TYPES, USER_SEVERITY,
104: false, null);
105:
106: if (mode.equals(INSIDE)) {
107: if (!destForm.equals(srcForm))
108: throw new TKUserException(
109: "Typen stimmen nicht ueberein",
110: NO_MATCHING_TYPES, USER_SEVERITY,
111: false, null);
112: } else {
113: // eigentlich auch egal !
114: }
115: }
116: // so geht das nicht
117: // dann verschieben
118: q = TKDBManager.newQuery(TKDBContentTreeMoveNode.class);
119: q.setQueryParams("SRC_NODE_ID", new Integer(src));
120: q.setQueryParams("DEST_NODE_ID", new Integer(dst));
121: q.setQueryParams("UPORDOWN", new Integer(mode));
122: q.execute();
123: }
124: CEArrangeShowHandler.getInstance().handleEvent(evt);
125: } catch (Throwable e) {
126: // TO DO : Analyze Exception !
127: throw WebmanExceptionHandler.getException(e);
128: }
129: }
130:
131: public boolean isHandler(TKEvent evt) {
132: return evt.getName().equalsIgnoreCase("CE_ARRANGE_MOVE");
133: }
134: }
|