xref: /trunk/main/dbaccess/source/ui/inc/TableController.hxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 #ifndef DBUI_TABLECONTROLLER_HXX
28 #define DBUI_TABLECONTROLLER_HXX
29 
30 #include "singledoccontroller.hxx"
31 #include "moduledbu.hxx"
32 #include <com/sun/star/sdbc/XConnection.hpp>
33 #include <com/sun/star/beans/XPropertySet.hpp>
34 #include <com/sun/star/io/XObjectOutputStream.hpp>
35 #include <com/sun/star/io/XObjectInputStream.hpp>
36 #include "TypeInfo.hxx"
37 #include <com/sun/star/sdbcx/XColumnsSupplier.hpp>
38 #include <com/sun/star/sdbcx/XKeysSupplier.hpp>
39 #include <com/sun/star/container/XNameAccess.hpp>
40 
41 class FixedText;
42 namespace dbaui
43 {
44     class OTableRow;
45     class OFieldDescription;
46     typedef OSingleDocumentController   OTableController_BASE;
47     class OTableController : public OTableController_BASE
48     {
49     private:
50         OModuleClient                                   m_aModuleClient;
51         ::std::vector< ::boost::shared_ptr<OTableRow> > m_vRowList;
52         OTypeInfoMap                                    m_aTypeInfo;
53         ::std::vector<OTypeInfoMap::iterator>           m_aTypeInfoIndex;
54 
55         ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >       m_xTable;
56 
57         ::rtl::OUString m_sCatalogName;         // catalog for update data
58         ::rtl::OUString m_sSchemaName;          // schema for update data
59         ::rtl::OUString m_sName;                // table for update data
60         ::rtl::OUString m_sAutoIncrementValue;  // the autoincrement value set in the datasource
61         String          m_sTypeNames;           // these type names are the ones out of the resource file
62         TOTypeInfoSP    m_pTypeInfo;            // fall back when type is unkown because database driver has a failure
63 
64         sal_Bool        m_bAllowAutoIncrementValue; // no : 1 NO BIT , is true when the datasource has a AutoIncrementValue property in their info property
65         sal_Bool        m_bNew      : 1;        // is true when we create a new table
66 
67 
68         void reSyncRows();
69         void assignTable();                 // set the table if a name is given
70         void loadData();
71         sal_Bool checkColumns(sal_Bool _bNew) throw(::com::sun::star::sdbc::SQLException);      // check if we have double column names
72         String createUniqueName(const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess>& _rxTables,const String& _rDefault);
73         void appendColumns(::com::sun::star::uno::Reference< ::com::sun::star::sdbcx::XColumnsSupplier>& _rxColSup,sal_Bool _bNew,sal_Bool _bKeyColumns = sal_False);
74         void appendPrimaryKey(::com::sun::star::uno::Reference< ::com::sun::star::sdbcx::XKeysSupplier>& _rxSup,sal_Bool _bNew);
75         void alterColumns();
76         void dropPrimaryKey();
77         ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess> getKeyColumns() const;
78         ::rtl::OUString createUniqueName(const ::rtl::OUString& _rName);
79 
80         void reload();
81 
82         // all the features which should be handled by this class
83         virtual void            describeSupportedFeatures();
84         // state of a feature. 'feature' may be the handle of a ::com::sun::star::util::URL somebody requested a dispatch interface for OR a toolbar slot.
85         virtual FeatureState    GetState(sal_uInt16 nId) const;
86         // execute a feature
87         virtual void            Execute(sal_uInt16 nId, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue>& aArgs);
88 
89         virtual void losingConnection( );
90 
91         virtual ::rtl::OUString getPrivateTitle( ) const;
92 
93         void        doEditIndexes();
94         sal_Bool    doSaveDoc(sal_Bool _bSaveAs);
95 
96         virtual ~OTableController();
97     public:
98         OTableController(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rM);
99 
100         ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >       getTable() { return m_xTable;}
101 
102         sal_Bool isAddAllowed()     const;
103         sal_Bool isDropAllowed()    const;
104         sal_Bool isAlterAllowed()   const;
105         bool     isAutoIncrementPrimaryKey() const;
106 
107         inline sal_Bool                 isAutoIncrementValueEnabled()   const { return m_bAllowAutoIncrementValue; }
108         inline const ::rtl::OUString&   getAutoIncrementValue()         const { return m_sAutoIncrementValue; }
109 
110         virtual void impl_onModifyChanged();
111 
112         inline ::std::vector< ::boost::shared_ptr<OTableRow> >* getRows() { return &m_vRowList; }
113 
114         /// returns the postion of the the first empty row
115         sal_Int32                           getFirstEmptyRowPosition();
116 
117         inline const OTypeInfoMap*          getTypeInfo() const { return &m_aTypeInfo; }
118 
119         inline TOTypeInfoSP                 getTypeInfo(sal_Int32 _nPos) const { return m_aTypeInfoIndex[_nPos]->second; }
120         TOTypeInfoSP                        getTypeInfoByType(sal_Int32 _nDataType) const;
121 
122         inline TOTypeInfoSP                 getTypeInfoFallBack() const { return m_pTypeInfo; }
123 
124         virtual sal_Bool                    Construct(Window* pParent);
125         // XEventListener
126         virtual void SAL_CALL               disposing( const ::com::sun::star::lang::EventObject& Source ) throw(::com::sun::star::uno::RuntimeException);
127 
128         // ::com::sun::star::frame::XController
129         virtual sal_Bool SAL_CALL           suspend(sal_Bool bSuspend) throw( ::com::sun::star::uno::RuntimeException );
130 
131         // ::com::sun::star::lang::XComponent
132         virtual void        SAL_CALL disposing();
133 
134         // XServiceInfo
135         virtual ::rtl::OUString SAL_CALL getImplementationName() throw(::com::sun::star::uno::RuntimeException);
136         virtual ::com::sun::star::uno::Sequence< ::rtl::OUString> SAL_CALL getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException);
137         // need by registration
138         static ::rtl::OUString getImplementationName_Static() throw( ::com::sun::star::uno::RuntimeException );
139         static ::com::sun::star::uno::Sequence< ::rtl::OUString > getSupportedServiceNames_Static(void) throw( ::com::sun::star::uno::RuntimeException );
140         static ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >
141                 SAL_CALL Create(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >&);
142 
143         //
144         virtual void Load(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectInputStream>& _rxIn);
145         virtual void Save(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectOutputStream>& _rxOut);
146 
147     protected:
148         void startTableListening();
149         void stopTableListening();
150         virtual void impl_initialize();
151     };
152 }
153 #endif // DBUI_TABLECONTROLLER_HXX
154 
155 
156