win95-initial-port-20010430
[openafs.git] / src / WINNT / afssvrmgr / set_col.cpp
1 /*
2  * Copyright 2000, International Business Machines Corporation and others.
3  * All Rights Reserved.
4  * 
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
8  */
9
10 extern "C" {
11 #include <afs/param.h>
12 #include <afs/stds.h>
13 }
14
15 #include "svrmgr.h"
16 #include "set_col.h"
17
18
19 /*
20  * FILESET-VIEW COLUMNS _______________________________________________________
21  *
22  */
23
24 void Filesets_SetDefaultView (LPVIEWINFO lpvi)
25 {
26    lpvi->lvsView = FLS_VIEW_LIST;
27    lpvi->nColsAvail = nFILESETCOLUMNS;
28
29    for (size_t iCol = 0; iCol < nFILESETCOLUMNS; ++iCol)
30       {
31       lpvi->cxColumns[ iCol ]  = FILESETCOLUMNS[ iCol ].cxWidth;
32       lpvi->idsColumns[ iCol ] = FILESETCOLUMNS[ iCol ].idsColumn;
33       }
34
35    lpvi->iSort = setcolNAME;
36
37    lpvi->nColsShown = 7;
38    lpvi->aColumns[0] = (int)setcolNAME;
39    lpvi->aColumns[1] = (int)setcolAGGREGATE;
40    lpvi->aColumns[2] = (int)setcolTYPE;
41    lpvi->aColumns[3] = (int)setcolQUOTA_USED;
42    lpvi->aColumns[4] = (int)setcolQUOTA_TOTAL;
43    lpvi->aColumns[5] = (int)setcolQUOTA_USED_PER;
44    lpvi->aColumns[6] = (int)setcolSTATUS;
45 }
46
47
48 size_t Filesets_GetAlertCount (LPFILESET lpFileset)
49 {
50    return Alert_GetCount (lpFileset->GetIdentifier());
51 }
52
53
54 LPTSTR Filesets_GetColumnText (LPIDENT lpi, FILESETCOLUMN setcol, BOOL fShowServerName)
55 {
56    static TCHAR aszBuffer[ nFILESETCOLUMNS ][ cchRESOURCE ];
57    static size_t iBufferNext = 0;
58    LPTSTR pszBuffer = aszBuffer[ iBufferNext++ ];
59    if (iBufferNext == nFILESETCOLUMNS)
60       iBufferNext = 0;
61    *pszBuffer = TEXT('\0');
62
63    LPFILESETSTATUS lpfs = NULL;
64    LPIDENT lpiRW = NULL;
65    LPFILESET_PREF lpfp;
66    if ((lpfp = (LPFILESET_PREF)lpi->GetUserParam()) != NULL)
67       {
68       lpfs = &lpfp->fsLast;
69       lpiRW = lpfp->lpiRW;
70       }
71
72    switch (setcol)
73       {
74       case setcolNAME:
75          lpi->GetFilesetName (pszBuffer);
76          break;
77
78       case setcolAGGREGATE:
79          if (!fShowServerName)
80             lpi->GetAggregateName (pszBuffer);
81          else
82             {
83             TCHAR szNameSvr[ cchNAME ];
84             TCHAR szNameAgg[ cchNAME ];
85             lpi->GetServerName (szNameSvr);
86             lpi->GetAggregateName (szNameAgg);
87             LPTSTR pszName = FormatString (IDS_SERVER_AGGREGATE, TEXT("%s%s"), szNameSvr, szNameAgg);
88             lstrcpy (pszBuffer, pszName);
89             FreeString (pszName);
90             }
91          break;
92
93       case setcolTYPE:
94          if (lpfs)
95             {
96             switch (lpfs->Type)
97                {
98                case ftREADWRITE:
99                   GetString (pszBuffer, IDS_FILESETTYPE_RW);
100                   break;
101
102                case ftCLONE:
103                   GetString (pszBuffer, IDS_FILESETTYPE_CLONE);
104                   break;
105
106                case ftREPLICA:
107                   if (lpiRW == NULL)
108                      GetString (pszBuffer, IDS_FILESETTYPE_RO);
109                   else if (lpiRW->GetServer() != lpi->GetServer())
110                      GetString (pszBuffer, IDS_FILESETTYPE_RO);
111                   else
112                      GetString (pszBuffer, IDS_FILESETTYPE_RO_STAGE);
113                   break;
114                }
115             }
116          break;
117
118       case setcolDATE_CREATE:
119          if (lpfs)
120             {
121             if (!FormatTime (pszBuffer, TEXT("%s"), &lpfs->timeCreation))
122                pszBuffer[0] = TEXT('\0');
123             }
124          break;
125
126       case setcolDATE_UPDATE:
127          if (lpfs)
128             {
129             if (!FormatTime (pszBuffer, TEXT("%s"), &lpfs->timeLastUpdate))
130                pszBuffer[0] = TEXT('\0');
131             }
132          break;
133
134       case setcolDATE_ACCESS:
135          if (lpfs)
136             {
137             if (!FormatTime (pszBuffer, TEXT("%s"), &lpfs->timeLastAccess))
138                pszBuffer[0] = TEXT('\0');
139             }
140          break;
141
142       case setcolDATE_BACKUP:
143          if (lpfs)
144             {
145             if (!FormatTime (pszBuffer, TEXT("%s"), &lpfs->timeLastBackup))
146                pszBuffer[0] = TEXT('\0');
147             }
148          break;
149
150       case setcolQUOTA_USED:
151          if (lpfs)
152             {
153             LPTSTR psz = FormatString (TEXT("%1"), TEXT("%.1B"), 1024.0 * lpfs->ckUsed);
154             lstrcpy (pszBuffer, psz);
155             FreeString (psz);
156             }
157          break;
158
159       case setcolQUOTA_USED_PER:
160          if (lpfs && lpfs->Type == ftREADWRITE)
161             {
162             DWORD dwPer = 100;
163             if (lpfs->ckQuota != 0)
164                dwPer = (DWORD)( 100.0 * lpfs->ckUsed / lpfs->ckQuota );
165
166             dwPer = max( 0, dwPer );
167             LPTSTR psz = FormatString (IDS_PERCENTAGE, TEXT("%lu"), dwPer);
168             lstrcpy (pszBuffer, psz);
169             FreeString (psz);
170             }
171          break;
172
173       case setcolQUOTA_FREE:
174          if (lpfs && lpfs->Type == ftREADWRITE)
175             {
176             LPTSTR psz = FormatString (TEXT("%1"), TEXT("%.1B"), 1024.0 * (lpfs->ckQuota - lpfs->ckUsed));
177             lstrcpy (pszBuffer, psz);
178             FreeString (psz);
179             }
180          break;
181
182       case setcolQUOTA_TOTAL:
183          if (lpfs && lpfs->Type == ftREADWRITE)
184             {
185             LPTSTR psz = FormatString (TEXT("%1"), TEXT("%.1B"), 1024.0 * lpfs->ckQuota);
186             lstrcpy (pszBuffer, psz);
187             FreeString (psz);
188             }
189          break;
190
191       case setcolSTATUS:
192          LPTSTR pszDesc;
193          if ((pszDesc = Alert_GetQuickDescription (lpi)) != NULL)
194             {
195             lstrcpy (pszBuffer,pszDesc);
196             FreeString (pszDesc);
197             }
198          else if (!lpfs)
199             {
200             GetString (pszBuffer, IDS_STATUS_NOALERTS);
201             }
202          else
203             {
204             if (lpfs->State & fsBUSY)
205                GetString (pszBuffer, IDS_SETSTATUS_BUSY);
206             else if (lpfs->State & fsSALVAGE)
207                GetString (pszBuffer, IDS_SETSTATUS_SALVAGE);
208             else if (lpfs->State & fsMOVED)
209                GetString (pszBuffer, IDS_SETSTATUS_MOVED);
210             else if (lpfs->State & fsLOCKED)
211                GetString (pszBuffer, IDS_SETSTATUS_LOCKED);
212             else if (lpfs->State & fsNO_VOL)
213                GetString (pszBuffer, IDS_SETSTATUS_NO_VOL);
214             else
215                GetString (pszBuffer, IDS_STATUS_NOALERTS);
216             }
217          break;
218
219       case setcolID:
220          if (lpfs)
221             {
222             LPTSTR psz = FormatString (TEXT("%1"), TEXT("%ld"), lpfs->id);
223             lstrcpy (pszBuffer, psz);
224             FreeString (psz);
225             }
226          break;
227
228       case setcolFILES:
229          if (lpfs)
230             {
231             LPTSTR psz = FormatString (TEXT("%1"), TEXT("%ld"), lpfs->nFiles);
232             lstrcpy (pszBuffer, psz);
233             FreeString (psz);
234             }
235          break;
236       }
237
238    return pszBuffer;
239 }
240
241
242 /*
243  * REPLICA-VIEW COLUMNS _______________________________________________________
244  *
245  */
246
247 void Replicas_SetDefaultView (LPVIEWINFO lpvi)
248 {
249    lpvi->lvsView = FLS_VIEW_LIST;
250    lpvi->nColsAvail = nREPLICACOLUMNS;
251
252    for (size_t iCol = 0; iCol < nREPLICACOLUMNS; ++iCol)
253       {
254       lpvi->cxColumns[ iCol ]  = REPLICACOLUMNS[ iCol ].cxWidth;
255       lpvi->idsColumns[ iCol ] = REPLICACOLUMNS[ iCol ].idsColumn;
256       }
257
258    lpvi->nColsShown = 3;
259    lpvi->aColumns[0] = (int)repcolSERVER;
260    lpvi->aColumns[1] = (int)repcolAGGREGATE;
261    lpvi->aColumns[2] = (int)repcolDATE_UPDATE;
262 }
263
264
265 LPTSTR Replicas_GetColumnText (LPIDENT lpi, REPLICACOLUMN repcol)
266 {
267    static TCHAR aszBuffer[ nREPLICACOLUMNS ][ cchRESOURCE ];
268    static size_t iBufferNext = 0;
269    LPTSTR pszBuffer = aszBuffer[ iBufferNext++ ];
270    if (iBufferNext == nREPLICACOLUMNS)
271       iBufferNext = 0;
272
273    LPFILESETSTATUS lpfs = NULL;
274    LPFILESET_PREF lpfp;
275    if ((lpfp = (LPFILESET_PREF)lpi->GetUserParam()) != NULL)
276       {
277       lpfs = &lpfp->fsLast;
278       }
279
280    switch (repcol)
281       {
282       case repcolSERVER:
283          lpi->GetServerName (pszBuffer);
284          break;
285
286       case repcolAGGREGATE:
287          lpi->GetAggregateName (pszBuffer);
288          break;
289
290       case repcolDATE_UPDATE:
291          if (!lpfs)
292             *pszBuffer = TEXT('\0');
293          else if (!FormatTime (pszBuffer, TEXT("%s"), &lpfs->timeLastUpdate))
294             *pszBuffer = TEXT('\0');
295          break;
296
297       default:
298          pszBuffer = NULL;
299          break;
300       }
301
302    return pszBuffer;
303 }
304