Files
EWF/draft/application/cms/src/cms_configuration.e
2013-02-19 16:22:43 +01:00

297 lines
5.5 KiB
Plaintext

note
description: "Summary description for {CMS_CONFIGURATION}."
author: ""
date: "$Date$"
revision: "$Revision$"
class
CMS_CONFIGURATION
create
make,
make_from_file
feature {NONE} -- Initialization
make
do
create options.make (10)
analyze
end
make_from_file (a_filename: READABLE_STRING_32)
-- Initialize `Current'.
do
make
configuration_location := a_filename
import (a_filename)
resolve
analyze
end
resolve
-- Resolve options related to variable ${..}
do
across
options as c
loop
options.replace (resolved_string (c.item), c.key)
end
end
analyze
do
get_root_location
get_var_location
get_themes_location
get_files_location
end
feature -- Access
configuration_location: detachable READABLE_STRING_8
option (a_name: READABLE_STRING_GENERAL): detachable ANY
do
Result := options.item (a_name.as_string_8.as_lower)
end
options: HASH_TABLE [STRING, STRING]
feature -- Conversion
append_to_string (s: STRING)
do
s.append ("Options:%N")
across
options as c
loop
s.append (c.key)
s.append_character ('=')
s.append (c.key)
s.append_character ('%N')
end
s.append ("Specific:%N")
s.append ("root_location=" + root_location + "%N")
s.append ("var_location=" + var_location + "%N")
s.append ("files_location=" + files_location + "%N")
s.append ("themes_location=" + themes_location + "%N")
end
feature -- Element change
set_option (a_name: READABLE_STRING_GENERAL; a_value: STRING)
do
options.force (a_value, a_name.as_string_8)
end
feature -- Access
var_location: READABLE_STRING_8
root_location: READABLE_STRING_8
files_location: STRING
themes_location: STRING
theme_name (dft: detachable like theme_name): READABLE_STRING_8
do
if attached options.item ("theme") as s then
Result := s
elseif dft /= Void then
Result := dft
else
Result := "default"
end
end
site_name (dft: like site_name): READABLE_STRING_8
do
if attached options.item ("site.name") as s then
Result := s
else
Result := dft
end
end
site_url (dft: like site_url): READABLE_STRING_8
do
if attached options.item ("site.url") as s then
Result := s
else
Result := dft
end
if Result /= Void then
if Result.is_empty then
-- ok
elseif not Result.ends_with ("/") then
Result := Result + "/"
end
end
end
site_script_url (dft: like site_script_url): detachable READABLE_STRING_8
do
if attached options.item ("site.script_url") as s then
Result := s
else
Result := dft
end
if Result /= Void then
if Result.is_empty then
elseif not Result.ends_with ("/") then
Result := Result + "/"
end
end
end
site_email (dft: like site_email): READABLE_STRING_8
do
if attached options.item ("site.email") as s then
Result := s
else
Result := dft
end
end
feature -- Change
get_var_location
local
res: STRING_32
do
if attached options.item ("var-dir") as s then
res := s
else
res := execution_environment.current_working_directory
end
if res.ends_with ("/") then
res.remove_tail (1)
end
var_location := res
end
get_root_location
local
res: STRING_32
do
if attached options.item ("root-dir") as s then
res := s
else
res := execution_environment.current_working_directory
end
if res.ends_with ("/") then
res.remove_tail (1)
end
root_location := res
end
get_files_location
do
if attached options.item ("files-dir") as s then
files_location := s
else
files_location := "files"
end
end
get_themes_location
local
dn: DIRECTORY_NAME
do
if attached options.item ("themes-dir") as s then
themes_location := s
else
create dn.make_from_string (root_location)
dn.extend ("themes")
themes_location := dn.string
end
end
feature {NONE} -- Implementation
import (a_filename: READABLE_STRING_32)
-- Import ini file content
local
f: PLAIN_TEXT_FILE
l,v: STRING_8
p: INTEGER
do
--FIXME: handle unicode filename here.
create f.make (a_filename)
if f.exists and f.is_readable then
f.open_read
from
f.read_line
until
f.exhausted
loop
l := f.last_string
l.left_adjust
if not l.is_empty and then l[1] /= '#' then
p := l.index_of ('=', 1)
if p > 1 then
v := l.substring (p + 1, l.count)
l.keep_head (p - 1)
v.left_adjust
v.right_adjust
l.right_adjust
set_option (l.as_lower, v)
end
end
f.read_line
end
f.close
end
end
feature {NONE} -- Environment
Execution_environment: EXECUTION_ENVIRONMENT
once
create Result
end
resolved_string (s: READABLE_STRING_8): STRING
-- Resolved `s' using `options' or else environment variables.
local
i,n,b,e: INTEGER
k: detachable READABLE_STRING_8
do
from
i := 1
n := s.count
create Result.make (s.count)
until
i > n
loop
if i + 1 < n and then s[i] = '$' and then s[i+1] = '{' then
b := i + 2
e := s.index_of ('}', b) - 1
if e > 0 then
k := s.substring (b, e)
if attached option (k) as v then
Result.append (v.out)
i := e + 1
elseif attached execution_environment.get (k) as v then
Result.append (v)
i := e + 1
else
Result.extend (s[i])
end
else
Result.extend (s[i])
end
else
Result.extend (s[i])
end
i := i + 1
end
end
end