xref: /aoo41x/main/desktop/source/app/lockfile.hxx (revision cdf0e10c)
1*cdf0e10cSrcweir /*************************************************************************
2*cdf0e10cSrcweir  *
3*cdf0e10cSrcweir  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4*cdf0e10cSrcweir  *
5*cdf0e10cSrcweir  * Copyright 2000, 2010 Oracle and/or its affiliates.
6*cdf0e10cSrcweir  *
7*cdf0e10cSrcweir  * OpenOffice.org - a multi-platform office productivity suite
8*cdf0e10cSrcweir  *
9*cdf0e10cSrcweir  * This file is part of OpenOffice.org.
10*cdf0e10cSrcweir  *
11*cdf0e10cSrcweir  * OpenOffice.org is free software: you can redistribute it and/or modify
12*cdf0e10cSrcweir  * it under the terms of the GNU Lesser General Public License version 3
13*cdf0e10cSrcweir  * only, as published by the Free Software Foundation.
14*cdf0e10cSrcweir  *
15*cdf0e10cSrcweir  * OpenOffice.org is distributed in the hope that it will be useful,
16*cdf0e10cSrcweir  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17*cdf0e10cSrcweir  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*cdf0e10cSrcweir  * GNU Lesser General Public License version 3 for more details
19*cdf0e10cSrcweir  * (a copy is included in the LICENSE file that accompanied this code).
20*cdf0e10cSrcweir  *
21*cdf0e10cSrcweir  * You should have received a copy of the GNU Lesser General Public License
22*cdf0e10cSrcweir  * version 3 along with OpenOffice.org.  If not, see
23*cdf0e10cSrcweir  * <http://www.openoffice.org/license.html>
24*cdf0e10cSrcweir  * for a copy of the LGPLv3 License.
25*cdf0e10cSrcweir  *
26*cdf0e10cSrcweir  ************************************************************************/
27*cdf0e10cSrcweir 
28*cdf0e10cSrcweir /* Information:
29*cdf0e10cSrcweir  * This class implements a mechanism to lock a users installation directory,
30*cdf0e10cSrcweir  * which is necessesary because instances of staroffice could be running on
31*cdf0e10cSrcweir  * different hosts while using the same directory thus causing data
32*cdf0e10cSrcweir  * inconsistency.
33*cdf0e10cSrcweir  * When an existing lock is detected, the user will be asked whether he wants
34*cdf0e10cSrcweir  * to continue anyway, thus removing the lock and replacing it with a new one
35*cdf0e10cSrcweir  *
36*cdf0e10cSrcweir  * ideas:
37*cdf0e10cSrcweir  * - store information about user and host and time in the lockfile and display
38*cdf0e10cSrcweir  * these when asking whether to remove the lockfile.
39*cdf0e10cSrcweir  * - periodically check the lockfile and warn the user when it gets replaced
40*cdf0e10cSrcweir  *
41*cdf0e10cSrcweir  */
42*cdf0e10cSrcweir 
43*cdf0e10cSrcweir #include "sal/types.h"
44*cdf0e10cSrcweir #include "rtl/ustring.hxx"
45*cdf0e10cSrcweir 
46*cdf0e10cSrcweir class ByteString;
47*cdf0e10cSrcweir 
48*cdf0e10cSrcweir namespace desktop {
49*cdf0e10cSrcweir 
50*cdf0e10cSrcweir 	class Lockfile;
51*cdf0e10cSrcweir 	bool Lockfile_execWarning( Lockfile * that );
52*cdf0e10cSrcweir 
53*cdf0e10cSrcweir 	class Lockfile
54*cdf0e10cSrcweir 	{
55*cdf0e10cSrcweir 	public:
56*cdf0e10cSrcweir 
57*cdf0e10cSrcweir 		// contructs a new lockfile onject
58*cdf0e10cSrcweir 		Lockfile( bool bIPCserver = true );
59*cdf0e10cSrcweir 
60*cdf0e10cSrcweir         // separating GUI code:
61*cdf0e10cSrcweir         typedef bool (* fpExecWarning)( Lockfile * that );
62*cdf0e10cSrcweir 
63*cdf0e10cSrcweir 		// checks the lockfile, asks user when lockfile is
64*cdf0e10cSrcweir 		// found (iff gui) and returns false when we may not continue
65*cdf0e10cSrcweir 		sal_Bool check( fpExecWarning execWarning );
66*cdf0e10cSrcweir 
67*cdf0e10cSrcweir 		// removes the lockfile. should only be called in exceptional situations
68*cdf0e10cSrcweir 		void clean(void);
69*cdf0e10cSrcweir 
70*cdf0e10cSrcweir 		// removes the lockfile
71*cdf0e10cSrcweir 		~Lockfile(void);
72*cdf0e10cSrcweir 
73*cdf0e10cSrcweir 	private:
74*cdf0e10cSrcweir 		// data in lockfile
75*cdf0e10cSrcweir 		static const ByteString Group();
76*cdf0e10cSrcweir 		static const ByteString Userkey();
77*cdf0e10cSrcweir 		static const ByteString Hostkey();
78*cdf0e10cSrcweir 		static const ByteString Stampkey();
79*cdf0e10cSrcweir 		static const ByteString Timekey();
80*cdf0e10cSrcweir 		static const ByteString IPCkey();
81*cdf0e10cSrcweir 		// lockfilename
82*cdf0e10cSrcweir 		static const rtl::OUString Suffix();
83*cdf0e10cSrcweir 		bool m_bIPCserver;
84*cdf0e10cSrcweir 		// full qualified name (file://-url) of the lockfile
85*cdf0e10cSrcweir 		rtl::OUString m_aLockname;
86*cdf0e10cSrcweir 		// flag whether the d'tor should delete the lock
87*cdf0e10cSrcweir 		sal_Bool m_bRemove;
88*cdf0e10cSrcweir 		sal_Bool m_bIsLocked;
89*cdf0e10cSrcweir 		// ID
90*cdf0e10cSrcweir 		rtl::OUString m_aId;
91*cdf0e10cSrcweir 		rtl::OUString m_aDate;
92*cdf0e10cSrcweir 		// access to data in file
93*cdf0e10cSrcweir 		void syncToFile(void) const;
94*cdf0e10cSrcweir 		sal_Bool isStale(void) const;
95*cdf0e10cSrcweir         friend bool Lockfile_execWarning( Lockfile * that );
96*cdf0e10cSrcweir 
97*cdf0e10cSrcweir 	};
98*cdf0e10cSrcweir 
99*cdf0e10cSrcweir }
100