00001 #ifndef DMRAID_CO_H
00002 #define DMRAID_CO_H
00003
00004 #include <list>
00005
00006 #include "y2storage/DmPartCo.h"
00007 #include "y2storage/Dmraid.h"
00008
00009 namespace storage
00010 {
00011
00012 class Storage;
00013 class SystemCmd;
00014 class ProcPart;
00015 class Region;
00016
00017 class DmraidCo : public DmPartCo
00018 {
00019 friend class Storage;
00020
00021 public:
00022 DmraidCo( Storage * const s, const string& Name, ProcPart& ppart );
00023 DmraidCo( Storage * const s, const string& Name, unsigned num,
00024 unsigned long long Size, ProcPart& ppart );
00025 DmraidCo( const DmraidCo& rhs );
00026 virtual ~DmraidCo();
00027
00028 static storage::CType const staticType() { return storage::DMRAID; }
00029 friend std::ostream& operator<< (std::ostream&, const DmraidCo& );
00030 void getInfo( storage::DmraidCoInfo& info ) const;
00031
00032 bool equalContent( const DmraidCo& rhs ) const;
00033 string logDiff( const DmraidCo& d ) const;
00034 DmraidCo& operator= ( const DmraidCo& rhs );
00035
00036 protected:
00037
00038
00039
00040 typedef CastIterator<VIter, Dmraid *> DmraidInter;
00041 typedef CastIterator<CVIter, const Dmraid *> DmraidCInter;
00042 template< class Pred >
00043 struct DmraidPI { typedef ContainerIter<Pred, DmraidInter> type; };
00044 template< class Pred >
00045 struct DmraidCPI { typedef ContainerIter<Pred, DmraidCInter> type; };
00046 typedef CheckFnc<const Dmraid> CheckFncDmraid;
00047 typedef CheckerIterator< CheckFncDmraid, DmraidPI<CheckFncDmraid>::type,
00048 DmraidInter, Dmraid > DmraidPIterator;
00049 typedef CheckerIterator< CheckFncDmraid, DmraidCPI<CheckFncDmraid>::type,
00050 DmraidCInter, const Dmraid > DmraidCPIterator;
00051 typedef DerefIterator<DmraidPIterator,Dmraid> DmraidIter;
00052 typedef DerefIterator<DmraidCPIterator,const Dmraid> ConstDmraidIter;
00053 typedef IterPair<DmraidIter> DmraidPair;
00054 typedef IterPair<ConstDmraidIter> ConstDmraidPair;
00055
00056 DmraidPair dmraidPair( bool (* CheckDmraid)( const Dmraid& )=NULL)
00057 {
00058 return( DmraidPair( dmraidBegin( CheckDmraid ), dmraidEnd( CheckDmraid ) ));
00059 }
00060 DmraidIter dmraidBegin( bool (* CheckDmraid)( const Dmraid& )=NULL)
00061 {
00062 IterPair<DmraidInter> p( (DmraidInter(begin())), (DmraidInter(end())) );
00063 return( DmraidIter( DmraidPIterator( p, CheckDmraid )) );
00064 }
00065 DmraidIter dmraidEnd( bool (* CheckDmraid)( const Dmraid& )=NULL)
00066 {
00067 IterPair<DmraidInter> p( (DmraidInter(begin())), (DmraidInter(end())) );
00068 return( DmraidIter( DmraidPIterator( p, CheckDmraid, true )) );
00069 }
00070
00071 ConstDmraidPair dmraidPair( bool (* CheckDmraid)( const Dmraid& )=NULL) const
00072 {
00073 return( ConstDmraidPair( dmraidBegin( CheckDmraid ), dmraidEnd( CheckDmraid ) ));
00074 }
00075 ConstDmraidIter dmraidBegin( bool (* CheckDmraid)( const Dmraid& )=NULL) const
00076 {
00077 IterPair<DmraidCInter> p( (DmraidCInter(begin())), (DmraidCInter(end())) );
00078 return( ConstDmraidIter( DmraidCPIterator( p, CheckDmraid )) );
00079 }
00080 ConstDmraidIter dmraidEnd( bool (* CheckDmraid)( const Dmraid& )=NULL) const
00081 {
00082 IterPair<DmraidCInter> p( (DmraidCInter(begin())), (DmraidCInter(end())) );
00083 return( ConstDmraidIter( DmraidCPIterator( p, CheckDmraid, true )) );
00084 }
00085
00086 DmraidCo( Storage * const s, const string& File );
00087 virtual void print( std::ostream& s ) const { s << *this; }
00088 virtual Container* getCopy() const { return( new DmraidCo( *this ) ); }
00089 static void activate( bool val );
00090 void getRaidData( const string& name );
00091 void addRaid( const string& name );
00092 void addPv( Pv*& p );
00093 void newP( DmPart*& dm, unsigned num, Partition* p );
00094 string removeText( bool doing ) const;
00095 string setDiskLabelText( bool doing ) const;
00096
00097 static string undevName( const string& name );
00098
00099 static void getRaids( std::list<string>& l );
00100 static bool raidNotDeleted( const Dmraid&d ) { return( !d.deleted() ); }
00101
00102 int doRemove();
00103
00104 void logData( const string& Dir );
00105
00106 string raidtype;
00107 string controller;
00108
00109 static bool active;
00110 };
00111
00112 }
00113
00114 #endif