001: /*
002: * MeshCMS - A simple CMS based on SiteMesh
003: * Copyright (C) 2004-2007 Luciano Vernaschi
004: *
005: * This program is free software; you can redistribute it and/or
006: * modify it under the terms of the GNU General Public License
007: * as published by the Free Software Foundation; either version 2
008: * of the License, or (at your option) any later version.
009: *
010: * This program is distributed in the hope that it will be useful,
011: * but WITHOUT ANY WARRANTY; without even the implied warranty of
012: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
013: * GNU General Public License for more details.
014: *
015: * You should have received a copy of the GNU General Public License
016: * along with this program; if not, write to the Free Software
017: * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
018: *
019: * You can contact the author at http://www.cromoteca.com
020: * and at info@cromoteca.com
021: */
022:
023: package org.meshcms.core;
024:
025: import java.io.*;
026: import java.util.*;
027:
028: public class MultiSiteManager implements Serializable {
029: private transient MainWebSite mainWebSite;
030: private transient SortedMap domainsMap;
031: private transient int siteCount;
032:
033: private boolean manageTripleWs;
034: private boolean useDirsAsDomains;
035: private String mainWebSiteDomains;
036: private Properties domains;
037: private List jspBlocks;
038:
039: private MultiSiteManager() {
040: domains = new Properties();
041: jspBlocks = new ArrayList();
042: manageTripleWs = true;
043: useDirsAsDomains = true;
044: }
045:
046: public List getJSPBlocks() {
047: if (jspBlocks == null) {
048: jspBlocks = new ArrayList();
049: }
050:
051: return jspBlocks;
052: }
053:
054: public boolean isJSPBlocked(VirtualWebSite webSite) {
055: return jspBlocks != null
056: && jspBlocks.contains(webSite.getDirName());
057: }
058:
059: public boolean isManageTripleWs() {
060: return manageTripleWs;
061: }
062:
063: public void setManageTripleWs(boolean manageTripleWs) {
064: this .manageTripleWs = manageTripleWs;
065: }
066:
067: public boolean isUseDirsAsDomains() {
068: return useDirsAsDomains;
069: }
070:
071: public void setUseDirsAsDomains(boolean useDirsAsDomains) {
072: this .useDirsAsDomains = useDirsAsDomains;
073: }
074:
075: public void setDomains(String dir, String domainNames) {
076: if (domainNames != null) {
077: domains.setProperty(dir, domainNames);
078: }
079: }
080:
081: public String getDomains(String dir) {
082: return domains.getProperty(dir.toLowerCase());
083: }
084:
085: public int initDomainsMap() {
086: domainsMap = new TreeMap();
087: File[] dirs = mainWebSite.getFile(
088: mainWebSite.getVirtualSitesPath()).listFiles();
089: siteCount = 0;
090:
091: for (int i = 0; i < dirs.length; i++) {
092: if (dirs[i].isDirectory()) {
093: siteCount++;
094: String dirName = dirs[i].getName().toLowerCase();
095: VirtualWebSite webSite = mainWebSite
096: .getVirtualSite(dirName);
097: parseDomains(domainsMap, webSite, getDomains(dirName));
098:
099: if (useDirsAsDomains) {
100: parseDomains(domainsMap, webSite, dirName);
101: }
102: }
103: }
104:
105: if (!parseDomains(domainsMap, mainWebSite, mainWebSiteDomains)) {
106: /* no valid domains in mainWebSiteDomains, so set it to null for
107: getWebSite() to work correctly */
108: mainWebSiteDomains = null;
109: }
110:
111: return domainsMap.size();
112: }
113:
114: private boolean parseDomains(SortedMap map, WebSite webSite,
115: String domainNames) {
116: boolean result = false;
117:
118: if (domainNames != null) {
119: StringTokenizer st = new StringTokenizer(domainNames,
120: ";:, \t");
121:
122: while (st.hasMoreTokens()) {
123: String token = st.nextToken();
124: map.put(token, webSite);
125: result = true;
126:
127: if (manageTripleWs) {
128: map.put("www." + token, webSite);
129: }
130: }
131: }
132:
133: return result;
134: }
135:
136: public WebSite getWebSite(String domain) {
137: WebSite webSite = (WebSite) domainsMap
138: .get(domain.toLowerCase());
139:
140: if (webSite == null && mainWebSiteDomains == null) {
141: webSite = mainWebSite;
142: }
143:
144: return webSite;
145: }
146:
147: public int getSiteCount() {
148: return siteCount;
149: }
150:
151: public String getMainWebSiteDomains() {
152: return mainWebSiteDomains;
153: }
154:
155: public void setMainWebSiteDomains(String mainWebSiteDomains) {
156: this .mainWebSiteDomains = mainWebSiteDomains;
157: }
158:
159: public static MultiSiteManager load(MainWebSite mainWebSite) {
160: MultiSiteManager m = null;
161:
162: try {
163: m = (MultiSiteManager) mainWebSite.loadFromXML(mainWebSite
164: .getSitesFilePath());
165: m.setMainWebSite(mainWebSite);
166: } catch (Exception ex) {
167: }
168:
169: if (m == null) {
170: m = new MultiSiteManager();
171: m.setMainWebSite(mainWebSite);
172: }
173:
174: return m;
175: }
176:
177: public boolean store(MainWebSite mainWebSite) {
178: return mainWebSite.storeToXML(this , mainWebSite
179: .getSitesFilePath());
180: }
181:
182: public MainWebSite getMainWebSite() {
183: return mainWebSite;
184: }
185:
186: public void setMainWebSite(MainWebSite mainWebSite) {
187: this.mainWebSite = mainWebSite;
188: }
189: }
|