VirtualBox

source: vbox/trunk/src/VBox/Main/include/SharedFolderImpl.h@ 14959

Last change on this file since 14959 was 14949, checked in by vboxsync, 16 years ago

Appended vim modeline to set tabstop and expand tabs (in the way
suggested by our coding guidelines).

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 4.3 KB
Line 
1/** @file
2 *
3 * VirtualBox COM class implementation
4 */
5
6/*
7 * Copyright (C) 2006-2007 Sun Microsystems, Inc.
8 *
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.virtualbox.org. This file is free software;
11 * you can redistribute it and/or modify it under the terms of the GNU
12 * General Public License (GPL) as published by the Free Software
13 * Foundation, in version 2 as it comes in the "COPYING" file of the
14 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16 *
17 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
18 * Clara, CA 95054 USA or visit http://www.sun.com if you need
19 * additional information or have any questions.
20 */
21
22#ifndef ____H_SHAREDFOLDERIMPL
23#define ____H_SHAREDFOLDERIMPL
24
25#include "VirtualBoxBase.h"
26#include "Collection.h"
27#include <VBox/shflsvc.h>
28
29class Machine;
30class Console;
31class VirtualBox;
32
33class ATL_NO_VTABLE SharedFolder :
34 public VirtualBoxBaseNEXT,
35 public VirtualBoxSupportErrorInfoImpl <SharedFolder, ISharedFolder>,
36 public VirtualBoxSupportTranslation <SharedFolder>,
37 public ISharedFolder
38{
39public:
40
41 struct Data
42 {
43 Data() {}
44
45 const Bstr mName;
46 const Bstr mHostPath;
47 BOOL mWritable;
48 };
49
50 VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT (SharedFolder)
51
52 DECLARE_NOT_AGGREGATABLE(SharedFolder)
53
54 DECLARE_PROTECT_FINAL_CONSTRUCT()
55
56 BEGIN_COM_MAP(SharedFolder)
57 COM_INTERFACE_ENTRY(ISupportErrorInfo)
58 COM_INTERFACE_ENTRY(ISharedFolder)
59 END_COM_MAP()
60
61 NS_DECL_ISUPPORTS
62
63 DECLARE_EMPTY_CTOR_DTOR (SharedFolder)
64
65 HRESULT FinalConstruct();
66 void FinalRelease();
67
68 // public initializer/uninitializer for internal purposes only
69 HRESULT init (Machine *aMachine, const BSTR aName, const BSTR aHostPath, BOOL aWritable);
70 HRESULT initCopy (Machine *aMachine, SharedFolder *aThat);
71 HRESULT init (Console *aConsole, const BSTR aName, const BSTR aHostPath, BOOL aWritable);
72 HRESULT init (VirtualBox *aVirtualBox, const BSTR aName, const BSTR aHostPath, BOOL aWritable);
73 void uninit();
74
75 // ISharedFolder properties
76 STDMETHOD(COMGETTER(Name)) (BSTR *aName);
77 STDMETHOD(COMGETTER(HostPath)) (BSTR *aHostPath);
78 STDMETHOD(COMGETTER(Accessible)) (BOOL *aAccessible);
79 STDMETHOD(COMGETTER(Writable)) (BOOL *aWritable);
80
81 // public methods for internal purposes only
82 // (ensure there is a caller and a read lock before calling them!)
83
84 // public methods that don't need a lock (because access constant data)
85 // (ensure there is a caller added before calling them!)
86
87 const Bstr &name() const { return mData.mName; }
88 const Bstr &hostPath() const { return mData.mHostPath; }
89 BOOL writable() const { return mData.mWritable; }
90
91 // for VirtualBoxSupportErrorInfoImpl
92 static const wchar_t *getComponentName() { return L"SharedFolder"; }
93
94protected:
95
96 HRESULT protectedInit (VirtualBoxBaseWithChildrenNEXT *aParent,
97 const BSTR aName, const BSTR aHostPath, BOOL aWritable);
98
99private:
100
101 VirtualBoxBaseWithChildrenNEXT *const mParent;
102
103 /* weak parents (only one of them is not null) */
104 const ComObjPtr <Machine, ComWeakRef> mMachine;
105 const ComObjPtr <Console, ComWeakRef> mConsole;
106 const ComObjPtr <VirtualBox, ComWeakRef> mVirtualBox;
107
108 Data mData;
109};
110
111COM_DECL_READONLY_ENUM_AND_COLLECTION_BEGIN (SharedFolder)
112
113 STDMETHOD(FindByName) (INPTR BSTR aName, ISharedFolder **aSharedFolder)
114 {
115 if (!aName)
116 return E_INVALIDARG;
117 if (!aSharedFolder)
118 return E_POINTER;
119
120 *aSharedFolder = NULL;
121 Vector::value_type found;
122 Vector::iterator it = vec.begin();
123 while (it != vec.end() && !found)
124 {
125 Bstr name;
126 (*it)->COMGETTER(Name) (name.asOutParam());
127 if (name == aName)
128 found = *it;
129 ++ it;
130 }
131
132 if (!found)
133 return setError (E_INVALIDARG, SharedFolderCollection::tr (
134 "Could not find the shared folder '%ls'"), aName);
135
136 return found.queryInterfaceTo (aSharedFolder);
137 }
138
139COM_DECL_READONLY_ENUM_AND_COLLECTION_END (SharedFolder)
140
141#endif // ____H_SHAREDFOLDERIMPL
142/* vi: set tabstop=4 shiftwidth=4 expandtab: */
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette