note
description: "[
Runs xebra_deployer.
]"
legal: "See notice at end of class."
status: "Community Preview 1.0"
date: "$Date$"
revision: "$Revision$"
class
XD_APPLICATION
inherit
ARGUMENTS
XU_SHARED_OUTPUTTER
ERROR_SHARED_MULTI_ERROR_MANAGER
create
make
feature {NONE} -- Initialization
make
-- Run the application.
local
l_arg_parser: XD_ARGUMENT_PARSER
do
log.set_name ("DEPLOYER")
log.set_debug_level (1)
create install_dir.make
create l_arg_parser.make
l_arg_parser.execute (agent run (l_arg_parser))
ensure
install_dir_attached: install_dir /= Void
end
feature -- Paths
install_dir: FILE_NAME
-- Read from argument
dir_apache_conf: FILE_NAME
-- The path to config files of apache
do
Result := dir_apache.twin
Result.extend ("conf")
ensure
result_attached: Result /= Void
end
dir_apache: FILE_NAME
-- The path to apache
do
Result := install_dir.twin
Result.extend ("apache")
ensure
result_attached: Result /= Void
end
-- dir_www: FILE_NAME
-- -- The path to the www folder
-- do
-- Result := install_dir.twin
-- Result.extend ("www")
-- ensure
-- result_attached: Result /= Void
-- end
dir_library: FILE_NAME
-- The path to the framework library folder
do
Result := install_dir.twin
Result.extend ("library")
ensure
result_attached: Result /= Void
end
feature -- Constants
File_httpd_conf: STRING = "httpd.conf"
-- The http.conf file (in xebra/apache/conf)
Key_xebra_install: STRING = "XEBRA_INSTALL"
-- A key inside httpd.conf that will be replaced
Key_library_root: STRING = "$XEBRA_LIBRARY"
-- A key inside various files that will be replaced
Key_eiffel_src: STRING = "$EIFFEL_SRC"
-- A key inside ecf files that will be replaced
feature -- Basic Operations
run (a_arg_parser: XD_ARGUMENT_PARSER)
-- Runs the replacing tasks
require
a_arg_parser_attached_and_successfull: a_arg_parser /= Void and then a_arg_parser.is_successful
local
l_error_printer: XU_ERROR_PRINTER
l_util: XU_FILE_UTILITIES
do
create l_util
create install_dir.make_from_string (a_arg_parser.install_dir)
if l_util.is_dir (install_dir) then
log.dprint ("Starting...",1)
process_httpd
process_ecfs
else
error_manager.add_error (create {XERROR_DIR_NOT_FOUND}.make (install_dir), False)
end
if not error_manager.is_successful then
create l_error_printer
error_manager.trace_errors (l_error_printer)
end
log.dprint ("Done. Bye.",1)
end
feature -- Replacement Tasks
process_ecfs
-- Replaces in all ecf files all occurrences of
-- Key_eiffel_src with Key_library_root
local
l_util: XU_FILE_UTILITIES
l_files: LIST [FILE_NAME]
l_incl: LINKED_LIST [STRING]
l_excl: LINKED_LIST [STRING]
do
create l_incl.make
l_incl.force ("*.ecf")
create l_excl.make
l_excl.force (".svn")
create l_util
log.dprint ("Scanning for ecf files in " + dir_library, 1)
l_files := l_util.scan_for_files (install_dir, -1, l_incl, l_excl)
from
l_files.start
until
l_files.after
loop
log.dprint ("Replacing in " + l_files.item_for_iteration,1)
l_util.replace_in_file (l_files.item_for_iteration, Key_eiffel_src, Key_library_root)
l_files.forth
end
end
process_httpd
-- Replaces in httpd.conf all occurrences of
-- Key_xebra_install with install_dirs
local
l_util: XU_FILE_UTILITIES
l_files: LIST [FILE_NAME]
l_incl: LINKED_LIST [STRING]
do
create l_incl.make
l_incl.force (File_httpd_conf)
create l_util
log.dprint ("Scanning for '" + File_httpd_conf + "' in " + dir_apache_conf, 1)
l_files := l_util.scan_for_files (dir_apache_conf, 1, l_incl, create {LINKED_LIST [STRING]}.make)
from
l_files.start
until
l_files.after
loop
log.dprint ("Replacing in " + l_files.item_for_iteration,1)
l_util.replace_in_file (l_files.item_for_iteration, Key_xebra_install, install_dir)
l_files.forth
end
end
invariant
install_dir_attached: install_dir /= Void
note
copyright: "Copyright (c) 1984-2009, 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
5949 Hollister Ave., Goleta, CA 93117 USA
Telephone 805-685-1006, Fax 805-685-6869
Website http://www.eiffel.com
Customer support http://support.eiffel.com
]"
end