sub
constructor{
my
$self
=
shift
;
my
%parms
=
@_
;
throw Oak::Filer::Component::Error::XMLInexistent
unless
-f
$parms
{FILENAME};
$self
->set(
'FILENAME'
=>
$parms
{FILENAME});
return
$self
->SUPER::constructor(
%parms
);
}
sub
load {
my
$self
=
shift
;
my
$what
=
shift
;
my
(
$xml
,
$xml_hash
);
try
{
$xml
= new XML::Parser(
Style
=>
'Oak::Filer::Component::XMLHandlers'
);
$xml_hash
=
$xml
->parsefile(
$self
->get(
'FILENAME'
));
} except {
throw Oak::Filer::Component::Error::ErrorReadingXML;
};
throw Oak::Filer::Component::Error::ErrorReadingXML
unless
ref
$xml_hash
eq
"HASH"
;
$self
->{__MINE__} =
$xml_hash
->{mine};
$self
->{__OWNED__} =
$xml_hash
->{owned};
return
$self
->{__MINE__}
if
$what
eq
'mine'
;
return
$self
->{__OWNED__}
if
$what
eq
'owned'
;
}
sub
store {
my
$self
=
shift
;
$self
->load;
my
%parms
=
@_
;
$self
->{__MINE__} =
$parms
{mine}
if
ref
$parms
{mine} eq
"HASH"
;
$self
->{__OWNED__} =
$parms
{owned}
if
ref
$parms
{owned} eq
"HASH"
;
my
(
$output
,
$writer
);
$output
= new IO::File(
">"
.
$self
->get(
'FILENAME'
)) || throw Oak::Filer::Component::Error::ErrorWritingXML;
$writer
= new XML::Writer(
OUTPUT
=>
$output
) || throw Oak::Filer::Component::Error::ErrorWritingXML;
$writer
->startTag(
'main'
);
for
(
keys
%{
$self
->{__MINE__}}) {
$writer
->startTag(
'prop'
,
'name'
=>
$_
,
'value'
=>
$self
->{__MINE__}{
$_
});
$writer
->endTag(
'prop'
);
}
for
my
$element
(
keys
%{
$self
->{__OWNED__}}) {
$writer
->startTag(
'owned'
,
'name'
=>
$element
);
for
(
keys
%{
$self
->{__OWNED__}{
$element
}}) {
$writer
->startTag(
'prop'
,
'name'
=>
$_
,
'value'
=>
$self
->{__OWNED__}{
$element
}{
$_
});
$writer
->endTag(
'prop'
);
}
$writer
->endTag(
'owned'
);
}
$writer
->endTag(
'main'
);
$writer
->end();
$output
->
close
();
return
1;
}
$Oak::Filer::Component::XMLHandlers::OWNEDNAME
=
''
;
%Oak::Filer::Component::XMLHandlers::OWNED
= ();
%Oak::Filer::Component::XMLHandlers::MINE
= ();
sub
Start {
my
$p
=
shift
;
my
$elem
=
shift
;
my
%vars
=
@_
;
if
(
$elem
eq
"prop"
) {
if
(
$Oak::Filer::Component::XMLHandlers::OWNEDNAME
) {
$Oak::Filer::Component::XMLHandlers::OWNED
{
$Oak::Filer::Component::XMLHandlers::OWNEDNAME
}{
$vars
{name}} =
$vars
{value};
}
else
{
$Oak::Filer::Component::XMLHandlers::MINE
{
$vars
{name}} =
$vars
{value}
}
}
elsif
(
$elem
eq
"owned"
) {
$Oak::Filer::Component::XMLHandlers::OWNEDNAME
=
$vars
{name};
$Oak::Filer::Component::XMLHandlers::OWNED
{
$vars
{name}}{name} =
$vars
{name};
}
}
sub
End {
my
$p
=
shift
;
my
$elem
=
shift
;
if
(
$elem
eq
"owned"
) {
$Oak::Filer::Component::XMLHandlers::OWNEDNAME
=
''
}
}
sub
Final {
return
{
mine
=> \
%Oak::Filer::Component::XMLHandlers::MINE
,
owned
=> \
%Oak::Filer::Component::XMLHandlers::OWNED
};
}
sub
stringify {
return
"Missing XML File"
;
}
sub
stringify {
return
"There was something wrong when trying to read the XML file"
;
}
sub
stringify {
return
"There was something wrong when trying to write the XML file"
;
}
1;