2 * Copyright 2000, International Business Machines Corporation and others.
5 * This software has been released under the terms of the IBM Public
6 * License. For details, see the LICENSE file in the top-level source
7 * directory or online at http://www.openafs.org/dl/license10.html
11 #include <afs/param.h>
16 #include "set_clone.h"
17 #include "propcache.h"
21 * DEFINITIONS ________________________________________________________________
27 * PROTOTYPES _________________________________________________________________
31 BOOL CALLBACK Filesets_Clone_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp);
32 void Filesets_Clone_OnInitDialog (HWND hDlg, LPSET_CLONESYS_PARAMS pcsp);
34 BOOL CALLBACK Filesets_Clonesys_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp);
35 void Filesets_Clonesys_OnInitDialog (HWND hDlg, LPSET_CLONESYS_PARAMS pcsp);
36 void Filesets_Clonesys_OnOK (HWND hDlg, LPSET_CLONESYS_PARAMS pcsp);
37 void Filesets_Clonesys_OnSelect (HWND hDlg, LPSET_CLONESYS_PARAMS pcsp);
38 void Filesets_Clonesys_OnSelectServer (HWND hDlg, LPSET_CLONESYS_PARAMS pcsp);
39 void Filesets_Clonesys_OnEndTask_EnumServers (HWND hDlg, LPSET_CLONESYS_PARAMS pcsp);
40 void Filesets_Clonesys_OnEndTask_EnumAggregs (HWND hDlg, LPSET_CLONESYS_PARAMS pcsp);
44 * ROUTINES ___________________________________________________________________
48 void Filesets_Clone (LPIDENT lpi)
50 LPSET_CLONESYS_PARAMS pcsp = New (SET_CLONESYS_PARAMS);
51 memset (pcsp, 0x00, sizeof(SET_CLONESYS_PARAMS));
52 pcsp->lpi = (lpi == NULL) ? g.lpiCell : lpi;
55 if (pcsp->lpi && pcsp->lpi->fIsFileset())
56 rc = ModalDialogParam (IDD_SET_CLONE, NULL, (DLGPROC)Filesets_Clone_DlgProc, (LPARAM)pcsp);
58 rc = ModalDialogParam (IDD_SET_CLONESYS, NULL, (DLGPROC)Filesets_Clonesys_DlgProc, (LPARAM)pcsp);
60 if ((rc != IDOK) || (!pcsp->lpi))
64 else if (pcsp->lpi->fIsFileset()) // clone one fileset?
66 StartTask (taskSET_CLONE, NULL, pcsp->lpi);
69 else // or clone lots of filesets?
71 StartTask (taskSET_CLONESYS, NULL, pcsp);
72 // don't delete pcsp--it'll be freed by the StartTask handler
78 BOOL CALLBACK Filesets_Clone_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
80 if (AfsAppLib_HandleHelp (IDD_SET_CLONE, hDlg, msg, wp, lp))
83 if (msg == WM_INITDIALOG)
84 SetWindowLong (hDlg, DWL_USER, lp);
86 LPSET_CLONESYS_PARAMS pcsp = (LPSET_CLONESYS_PARAMS)GetWindowLong (hDlg, DWL_USER);
93 PropCache_Add (pcSET_CLONE, NULL, hDlg);
94 Filesets_Clone_OnInitDialog (hDlg, pcsp);
102 EndDialog (hDlg, LOWORD(wp));
108 PropCache_Delete (pcSET_CLONE, NULL);
117 void Filesets_Clone_OnInitDialog (HWND hDlg, LPSET_CLONESYS_PARAMS pcsp)
119 TCHAR szServer[ cchNAME ];
120 TCHAR szAggregate[ cchNAME ];
121 TCHAR szFileset[ cchNAME ];
122 pcsp->lpi->GetServerName (szServer);
123 pcsp->lpi->GetAggregateName (szAggregate);
124 pcsp->lpi->GetFilesetName (szFileset);
126 TCHAR szText[ cchRESOURCE ];
127 GetDlgItemText (hDlg, IDC_CLONE_DESC, szText, cchRESOURCE);
129 LPTSTR pszText = FormatString (szText, TEXT("%s%s%s"), szServer, szAggregate, szFileset);
130 SetDlgItemText (hDlg, IDC_CLONE_DESC, pszText);
131 FreeString (pszText);
135 BOOL CALLBACK Filesets_Clonesys_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
137 if (AfsAppLib_HandleHelp (IDD_SET_CLONESYS, hDlg, msg, wp, lp))
140 if (msg == WM_INITDIALOG)
141 SetWindowLong (hDlg, DWL_USER, lp);
143 LPSET_CLONESYS_PARAMS pcsp = (LPSET_CLONESYS_PARAMS)GetWindowLong (hDlg, DWL_USER);
150 PropCache_Add (pcSET_CLONE, NULL, hDlg);
151 Filesets_Clonesys_OnInitDialog (hDlg, pcsp);
156 if ((ptp = (LPTASKPACKET)lp) != NULL)
158 if (ptp->idTask == taskSVR_ENUM_TO_COMBOBOX)
160 Filesets_Clonesys_OnEndTask_EnumServers (hDlg, pcsp);
162 else if (ptp->idTask == taskAGG_ENUM_TO_COMBOBOX)
164 Filesets_Clonesys_OnEndTask_EnumAggregs (hDlg, pcsp);
166 FreeTaskPacket (ptp);
174 Filesets_Clonesys_OnOK (hDlg, pcsp);
175 EndDialog (hDlg, IDOK);
179 EndDialog (hDlg, IDCANCEL);
184 case IDC_CLONE_SVR_LIMIT:
185 case IDC_CLONE_AGG_LIMIT:
186 case IDC_CLONE_PREFIX_LIMIT:
187 Filesets_Clonesys_OnSelect (hDlg, pcsp);
191 if (HIWORD(wp) == CBN_SELCHANGE)
193 Filesets_Clonesys_OnSelectServer (hDlg, pcsp);
200 PropCache_Delete (pcSET_CLONE, NULL);
209 void Filesets_Clonesys_OnInitDialog (HWND hDlg, LPSET_CLONESYS_PARAMS pcsp)
211 CheckDlgButton (hDlg, IDC_CLONE_ALL, pcsp->lpi->fIsCell());
212 CheckDlgButton (hDlg, IDC_CLONE_SOME, !pcsp->lpi->fIsCell());
213 CheckDlgButton (hDlg, IDC_CLONE_SVR_LIMIT, !pcsp->lpi->fIsCell());
214 CheckDlgButton (hDlg, IDC_CLONE_AGG_LIMIT, pcsp->lpi->fIsAggregate());
216 pcsp->fEnumedServers = FALSE;
217 pcsp->fEnumedAggregs = FALSE;
218 Filesets_Clonesys_OnSelect (hDlg, pcsp);
220 LPSVR_ENUM_TO_COMBOBOX_PACKET lpp = New (SVR_ENUM_TO_COMBOBOX_PACKET);
221 lpp->hCombo = GetDlgItem (hDlg, IDC_CLONE_SVR);
222 lpp->lpiSelect = (pcsp->lpi && !pcsp->lpi->fIsCell()) ? pcsp->lpi->GetServer() : NULL;
223 StartTask (taskSVR_ENUM_TO_COMBOBOX, hDlg, lpp);
227 void Filesets_Clonesys_OnOK (HWND hDlg, LPSET_CLONESYS_PARAMS pcsp)
229 if (IsDlgButtonChecked (hDlg, IDC_CLONE_ALL))
231 pcsp->lpi = g.lpiCell;
232 pcsp->fUsePrefix = FALSE;
233 pcsp->szPrefix[0] = TEXT('\0');
235 else // (IsDlgButtonChecked (hDlg, IDC_CLONE_SOME))
237 if (IsDlgButtonChecked (hDlg, IDC_CLONE_AGG_LIMIT))
238 pcsp->lpi = (LPIDENT)CB_GetSelectedData (GetDlgItem (hDlg, IDC_CLONE_AGG));
239 else if (IsDlgButtonChecked (hDlg, IDC_CLONE_SVR_LIMIT))
240 pcsp->lpi = (LPIDENT)CB_GetSelectedData (GetDlgItem (hDlg, IDC_CLONE_SVR));
242 pcsp->lpi = g.lpiCell;
244 pcsp->fUsePrefix = IsDlgButtonChecked (hDlg, IDC_CLONE_PREFIX_LIMIT);
245 GetDlgItemText (hDlg, IDC_CLONE_PREFIX, pcsp->szPrefix, MAX_PATH);
247 if (pcsp->fUsePrefix && (pcsp->szPrefix[0] == TEXT('!')))
249 TCHAR szPrefixNoBang[ cchRESOURCE ];
250 lstrcpy (szPrefixNoBang, &pcsp->szPrefix[1]);
251 lstrcpy (pcsp->szPrefix, szPrefixNoBang);
252 pcsp->fExcludePrefix = TRUE;
258 void Filesets_Clonesys_OnSelect (HWND hDlg, LPSET_CLONESYS_PARAMS pcsp)
260 BOOL fCloneAll = (IsDlgButtonChecked (hDlg, IDC_CLONE_ALL)) ? TRUE : FALSE;
262 EnableWindow (GetDlgItem (hDlg, IDC_CLONE_SVR_LIMIT), !fCloneAll);
263 EnableWindow (GetDlgItem (hDlg, IDC_CLONE_AGG_LIMIT), !fCloneAll);
264 EnableWindow (GetDlgItem (hDlg, IDC_CLONE_PREFIX_LIMIT), !fCloneAll);
268 CheckDlgButton (hDlg, IDC_CLONE_SVR_LIMIT, FALSE);
269 CheckDlgButton (hDlg, IDC_CLONE_AGG_LIMIT, FALSE);
270 CheckDlgButton (hDlg, IDC_CLONE_PREFIX_LIMIT, FALSE);
275 fEnable = IsDlgButtonChecked (hDlg, IDC_CLONE_SVR_LIMIT) && pcsp->fEnumedServers;
276 EnableWindow (GetDlgItem (hDlg, IDC_CLONE_SVR), fEnable);
278 fEnable = IsDlgButtonChecked (hDlg, IDC_CLONE_SVR_LIMIT);
279 EnableWindow (GetDlgItem (hDlg, IDC_CLONE_AGG_LIMIT), fEnable);
281 CheckDlgButton (hDlg, IDC_CLONE_AGG_LIMIT, FALSE);
283 fEnable &= IsDlgButtonChecked (hDlg, IDC_CLONE_AGG_LIMIT) && pcsp->fEnumedAggregs;
284 EnableWindow (GetDlgItem (hDlg, IDC_CLONE_AGG), fEnable);
286 fEnable = IsDlgButtonChecked (hDlg, IDC_CLONE_PREFIX_LIMIT);
287 EnableWindow (GetDlgItem (hDlg, IDC_CLONE_PREFIX), fEnable);
290 if (IsDlgButtonChecked (hDlg, IDC_CLONE_SVR_LIMIT) && !pcsp->fEnumedServers)
292 if (IsDlgButtonChecked (hDlg, IDC_CLONE_AGG_LIMIT) && !pcsp->fEnumedAggregs)
294 EnableWindow (GetDlgItem (hDlg, IDOK), fEnable);
298 void Filesets_Clonesys_OnSelectServer (HWND hDlg, LPSET_CLONESYS_PARAMS pcsp)
300 pcsp->fEnumedAggregs = FALSE;
301 Filesets_Clonesys_OnSelect (hDlg, pcsp);
303 LPAGG_ENUM_TO_COMBOBOX_PACKET lpp = New (AGG_ENUM_TO_COMBOBOX_PACKET);
304 lpp->hCombo = GetDlgItem (hDlg, IDC_CLONE_AGG);
305 lpp->lpiServer = (LPIDENT)CB_GetSelectedData (GetDlgItem (hDlg, IDC_CLONE_SVR));
306 lpp->lpiSelect = (pcsp->lpi->fIsAggregate() && (pcsp->lpi->GetServer() == lpp->lpiServer)) ? pcsp->lpi : NULL;
307 StartTask (taskAGG_ENUM_TO_COMBOBOX, hDlg, lpp);
311 void Filesets_Clonesys_OnEndTask_EnumServers (HWND hDlg, LPSET_CLONESYS_PARAMS pcsp)
313 pcsp->fEnumedServers = TRUE;
314 Filesets_Clonesys_OnSelectServer (hDlg, pcsp);
318 void Filesets_Clonesys_OnEndTask_EnumAggregs (HWND hDlg, LPSET_CLONESYS_PARAMS pcsp)
320 pcsp->fEnumedAggregs = TRUE;
321 Filesets_Clonesys_OnSelect (hDlg, pcsp);