note
description: "Objects containing the information relative to a resource folder."
legal: "See notice at end of class."
status: "See notice at end of class."
author: "Christophe Bonnard"
class
RESOURCE_FOLDER_IMP
inherit
RESOURCE_FOLDER_I
WARNING_MESSAGES
export
{NONE} All
end
create
make, make_root, make_default, make_default_root
feature -- Initialization
make (doc: XML_ELEMENT; struct: like structure)
-- Initialization of Current, belonging to `struct',
-- according to `doc'.
do
make_default (doc, struct)
end
make_root (file_name: FILE_NAME; struct: RESOURCE_STRUCTURE)
-- Create Current (as a root folder of `struct')
-- taking data from `file_name'.
do
make_default_root (file_name, struct)
end
feature -- Update
update_root (file_name: FILE_NAME)
-- Update information with data from `file_name'.
local
file: RAW_FILE
s: STRING
parser: XML_TREE_PARSER
do
name := "root"
description := "root folder"
create parser.make
create file.make (file_name)
if file.exists then
file.open_read
file.read_stream (file.count)
s := file.last_string
parser.parse_string (s)
parser.set_end_of_file
file.close
if not parser.root_element.name.is_equal ("EIFFEL_DOCUMENT") then
io.put_string (w_Invalid_preference_file_root (file_name))
else
xml_data := parser.root_element
update_attributes (xml_data)
end
end
end
update_attributes (doc: XML_ELEMENT)
-- Update Current, according to `doc'.
local
res_xml: XML_RESOURCE
resource: RESOURCE
child: like Current
cursor, des_cursor: DS_BILINKED_LIST_CURSOR[XML_NODE]
node: XML_ELEMENT
txt: XML_TEXT
do
cursor := doc.new_cursor
from
cursor.start
until
cursor.after
loop
node ?= cursor.item
if node /= Void then
if node.name.is_equal ("HEAD") then
des_cursor := node.new_cursor
from
des_cursor.start
until
des_cursor.after
loop
txt ?= des_cursor.item
if txt /= Void then
create description.make_from_string (txt.string)
end
des_cursor.forth
end
elseif node.name.is_equal ("TEXT") then
create res_xml.make (node)
resource := res_xml.value
resource_list.start
resource_list.compare_objects
resource_list.search(resource)
if not resource_list.exhausted then
if
resource.description = Void and
resource_list.item.description /= Void
then
resource.set_description (resource_list.item.description)
end
resource.set_effect_is_delayed (resource_list.item.effect_is_delayed)
resource_list.remove
end
resource_list.extend (resource)
structure.replace_resource (resource)
elseif node.name.is_equal ("TOPIC") then
node.attributes.search("TOPIC_ID")
if node.attributes.found then
child := child_of_name(node.attributes.found_item.value)
else
child := Void
end
if child /= Void then
child.update_attributes (node)
end
end
end
cursor.forth
end
end
feature -- Saving
root_save (location: FILE_NAME)
-- Save folder in `location' as a root folder.
-- Used as a part of `save' from RESOURCE_STRUCTURE_I
local
file: RAW_FILE
s: STRING
l: LINKED_LIST [RESOURCE_FOLDER_IMP]
retried: BOOLEAN
do
if retried then
create file.make (location)
if file.exists then
io.error.put_string (w_Not_readable (location))
else
io.error.put_string (w_Not_creatable (location))
end
else
create file.make_open_write (location)
if file.exists then
s := "%N"
from
l := child_list
l.start
until
l.after
loop
s.append (l.item.xml_trace (""))
l.forth
end
from
resource_list.start
until
resource_list.after
loop
s.append (resource_list.item.xml_trace)
s.extend ('%N')
resource_list.forth
end
s.append ("%N")
file.put_string (s)
file.close
end
end
rescue
retried := True
retry
end
feature -- Output
xml_trace (identation: STRING): STRING
-- XML representation of Current and its content.
local
new_ident: STRING
do
Result := identation + "%N")
new_ident := "%T"
new_ident.append (identation)
if description /= Void then
Result.append (new_ident)
Result.append ("")
Result.append (description)
Result.append ("%N")
end
from
child_list.start
until
child_list.after
loop
Result.append (child_list.item.xml_trace (new_ident))
child_list.forth
end
from
resource_list.start
until
resource_list.after
loop
Result.append (new_ident)
Result.append (resource_list.item.xml_trace)
Result.extend ('%N')
resource_list.forth
end
Result.append (identation)
Result.append ("%N")
end
note
copyright: "Copyright (c) 1984-2006, Eiffel Software"
license: "GPL version 2 (see http://www.eiffel.com/licensing/gpl.txt)"
licensing_options: "http://www.eiffel.com/licensing"
copying: "[
This file is part of Eiffel Software's Eiffel Development Environment.
Eiffel Software's Eiffel Development Environment is free
software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published
by the Free Software Foundation, version 2 of the License
(available at the URL listed under "license" above).
Eiffel Software's Eiffel Development Environment is
distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty
of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
You should have received a copy of the GNU General Public
License along with Eiffel Software's Eiffel Development
Environment; if not, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
]"
source: "[
Eiffel Software
356 Storke Road, Goleta, CA 93117 USA
Telephone 805-685-1006, Fax 805-685-6869
Website http://www.eiffel.com
Customer support http://support.eiffel.com
]"
end -- class RESOURCE_FOLDER_IMP