001: package de.webman.config.eventhandler;
002:
003: import java.util.*;
004: import java.sql.*;
005:
006: import com.teamkonzept.web.*;
007: import com.teamkonzept.lib.*;
008: import com.teamkonzept.db.*;
009: import com.teamkonzept.webman.*;
010: import com.teamkonzept.webman.mainint.*;
011: import com.teamkonzept.webman.mainint.db.queries.*;
012: import com.teamkonzept.webman.mainint.events.*;
013:
014: /**
015: Legt eines neues Property für die aktuelle Propertygruppe an und ruft anschliessend den COPropGroupEditHandler auf,
016: wenn Anlegen erfolgreich war, sonst ce_error.tmpl
017: * @author $Author: doehling $
018: * @version $Revision: 1.10 $
019: */
020: public class COPropUpdateHandler extends DefaultEventHandler implements
021: ParameterTypes, DatabaseDefaults, FrameConstants {
022: /** */
023: private COPropUpdateHandler() {
024: }
025:
026: private static COPropUpdateHandler instance = new COPropUpdateHandler();
027:
028: public static COPropUpdateHandler getInstance() {
029: return instance;
030: }
031:
032: public void handleEvent(TKEvent evt) throws TKException {
033: try {
034: WebManEvent.checkEvent(evt.getRemoteUser(), evt.getName(),
035: ContextConstants.CUSTOMIZE_PROPERTIES); // check if event is allowed
036: String propId = evt.getParameter(PARAMETER, "PROP_ID");
037: String propName = evt.getParameter(PARAMETER, "PROP_NAME");
038: String propValue = evt
039: .getParameter(PARAMETER, "PROP_VALUE");
040: String propGroupId = evt.getParameter(PARAMETER,
041: "PROPGROUP_ID");
042: String propGroupName = evt.getParameter(PARAMETER,
043: "PROPGROUP_NAME");
044: boolean newProp = false;
045: boolean noDuplicateExists = true;
046: boolean nameGiven = true;
047: TKQuery q = null;
048: ResultSet rs = null;
049:
050: // check, ob es sich um ein neuanzulegendes property handelt
051: propId = (propId != null ? propId : "-1");
052: if (propId.equals("-1")) {
053: newProp = true;
054: }
055:
056: // check, ob ueberhaupt ein name eingegeben wurde
057: if (propName == null || propName.equals("")) {
058: nameGiven = false;
059: }
060:
061: /************************************************************************
062: z.z. wird kein property angelegt, wenn keine propGroupId mitgegeben wird
063: oder bei einem neuen property keine id zurueckkommt. es gibt auch keine fehlermeldung.
064: dieses sollte eigentlich nie auftreten.
065: ************************************************************************/
066: propGroupId = (propGroupId != null ? propGroupId : "-1");
067:
068: // nein - ueberpruefung, ob ein gleichnamiges property bereits existiert
069: if (nameGiven) {
070: // find the properties of this group
071: q = TKDBManager
072: .newQuery(TKDBPropGroupGetGroupProps.class);
073: q.setQueryParams("PROPGROUP_ID", new Integer(
074: propGroupId));
075: q.execute();
076: rs = q.fetchResultSet();
077:
078: // check, ob ein anderes gleichnamiges property in dieser gruppe bereits existiert
079: if (rs != null) {
080: while (rs != null && rs.next()) {
081: if (propName.equals(rs.getString("PROP_NAME"))
082: && !propId.equals(rs
083: .getString("PROP_ID"))) {
084: noDuplicateExists = false;
085: break;
086: }
087: }
088: }
089: }
090:
091: // 2x nein - property wird angelegt/geändert
092: if (noDuplicateExists && nameGiven) {
093: // neues property anlegen
094: if (newProp) {
095: q = TKDBManager.newQuery(TKDBPropNew.class);
096: q.setQueryParams("PROP_NAME", propName);
097: q.setQueryParams("PROP_VALUE", propValue);
098: q.execute();
099: rs = q.fetchResultSet();
100: if (rs != null && rs.next()) {
101: propId = rs.getString("PROP_ID");
102: }
103: propId = (propId != null ? propId : "-1");
104:
105: // set the group membership
106: if (!propGroupId.equals("-1")
107: && !propId.equals("-1")) {
108: q = TKDBManager
109: .newQuery(TKDBPropGroupAddMember.class);
110: q
111: .setQueryParams("PROP_ID", new Integer(
112: propId));
113: q.setQueryParams("PROP_GROUP_ID", new Integer(
114: propGroupId));
115: q.execute();
116: }
117: }
118:
119: // property wird nur geändert
120: else {
121: q = TKDBManager.newQuery(TKDBPropUpdate.class);
122: q.setQueryParams("PROP_ID", new Integer(propId));
123: q.setQueryParams("PROP_NAME", propName);
124: q.setQueryParams("PROP_VALUE", propValue);
125: q.execute();
126: }
127:
128: // Notify listeners.
129: ConfigurationManager.getInstance().notifyListeners(
130: propGroupName);
131: }
132:
133: // finish
134: if (noDuplicateExists && nameGiven) {
135: evt.getParams().put(PARAMETER, "PROPGROUP_ID",
136: propGroupId);
137: evt.getParams().put(PARAMETER, "PROPGROUP_NAME",
138: propGroupName);
139: evt.getParams().put(PARAMETER, "LIST_PROPS", "1");
140: COPropGroupEditHandler.getInstance().handleEvent(evt);
141: }
142: // ups, etwas ging schief
143: else {
144: TKHTMLTemplate t = evt
145: .getPrepHTMLTemplate("co_error.tmpl");
146:
147: // EDIT=1 : bestehende gruppe wurde editiert
148: if (!newProp) {
149: t.set("EDIT", "1");
150: }
151:
152: // NONAME=1 : es wurde keine neuer name angegeben
153: if (!nameGiven) {
154: t.set("NONAME", "1");
155: }
156:
157: evt.finishTemplate(t);
158: }
159:
160: } catch (Throwable ex) {
161: throw WebmanExceptionHandler.getException(ex);
162:
163: }
164: }
165:
166: public boolean isHandler(TKEvent evt) {
167: return evt.getName().equalsIgnoreCase("CO_PROP_UPDATE");
168: }
169:
170: }
|