populate proxy
git-svn-id: https://svn.apache.org/repos/asf/lenya/trunk@1038622 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/org.apache.lenya.core.proxy/pom.xml b/org.apache.lenya.core.proxy/pom.xml
index 08b3980..57c8210 100644
--- a/org.apache.lenya.core.proxy/pom.xml
+++ b/org.apache.lenya.core.proxy/pom.xml
@@ -16,7 +16,10 @@
<description>Implements proxy capabilities in Lenya</description>
<dependencies>
-
+ <dependency>
+ <groupId>org.apache.lenya</groupId>
+ <artifactId>lenya-core-document-api</artifactId>
+ </dependency>
<!-- TODO : see if all theses dependencies are required -->
<dependency>
<groupId>org.apache.cocoon</groupId>
diff --git a/org.apache.lenya.core.proxy/src/main/java/org/apache/lenya/cms/linking/GlobalProxies.java b/org.apache.lenya.core.proxy/src/main/java/org/apache/lenya/cms/linking/GlobalProxies.java
new file mode 100644
index 0000000..743fcf4
--- /dev/null
+++ b/org.apache.lenya.core.proxy/src/main/java/org/apache/lenya/cms/linking/GlobalProxies.java
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.lenya.cms.linking;
+
+import org.apache.lenya.cms.publication.Proxy;
+
+/**
+ * Service to manage the web-application-wide proxy settings.
+ */
+public interface GlobalProxies {
+
+ /**
+ * The service role.
+ */
+ String ROLE = GlobalProxies.class.getName();
+
+ /**
+ * @param ssl If SSL is used.
+ * @return A proxy.
+ */
+ Proxy getProxy(boolean ssl);
+
+}
diff --git a/org.apache.lenya.core.proxy/src/main/java/org/apache/lenya/cms/linking/impl/GlobalProxiesImpl.java b/org.apache.lenya.core.proxy/src/main/java/org/apache/lenya/cms/linking/impl/GlobalProxiesImpl.java
new file mode 100644
index 0000000..30cf4fb
--- /dev/null
+++ b/org.apache.lenya.core.proxy/src/main/java/org/apache/lenya/cms/linking/impl/GlobalProxiesImpl.java
@@ -0,0 +1,76 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.lenya.cms.linking.impl;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.cocoon.processing.ProcessInfoProvider;
+import org.apache.cocoon.spring.configurator.WebAppContextUtils;
+import org.apache.cocoon.util.AbstractLogEnabled;
+import org.apache.lenya.cms.linking.GlobalProxies;
+import org.apache.lenya.cms.publication.Proxy;
+import org.apache.lenya.cms.publication.ProxyImpl;
+
+/**
+ * GlobalProxy service implementation.
+ * The class is implemented as a singleton.
+ */
+public class GlobalProxiesImpl extends AbstractLogEnabled implements GlobalProxies {
+
+ private Map ssl2proxy = new HashMap();
+
+ public Proxy getProxy(boolean ssl) {
+ Object key = Boolean.valueOf(ssl);
+ Proxy proxy = (Proxy) this.ssl2proxy.get(key);
+ if (proxy == null) {
+ proxy = initializeProxy(key);
+ }
+ return proxy;
+ }
+
+ protected synchronized Proxy initializeProxy(Object key) {
+ ProcessInfoProvider process = (ProcessInfoProvider) WebAppContextUtils
+ .getCurrentWebApplicationContext().getBean(ProcessInfoProvider.ROLE);
+ Proxy proxy = new ProxyImpl();
+ proxy.setUrl(process.getRequest().getContextPath());
+ this.ssl2proxy.put(key, proxy);
+ return proxy;
+ }
+
+ public void setNonSslProxyUrl(String url) {
+ Proxy proxy = new ProxyImpl();
+ proxy.setUrl(url);
+ setProxy(false, proxy);
+ }
+
+ public void setSslProxyUrl(String url) {
+ Proxy proxy = new ProxyImpl();
+ proxy.setUrl(url);
+ setProxy(true, proxy);
+ }
+
+ /**
+ * @param ssl If the proxy is responsible for SSL requests.
+ * @param proxy A proxy.
+ */
+ public void setProxy(boolean ssl, Proxy proxy) {
+ this.ssl2proxy.put(Boolean.valueOf(ssl), proxy);
+ }
+
+}
diff --git a/org.apache.lenya.core.proxy/src/main/java/org/apache/lenya/cms/publication/Proxy.java b/org.apache.lenya.core.proxy/src/main/java/org/apache/lenya/cms/publication/Proxy.java
new file mode 100644
index 0000000..719a13a
--- /dev/null
+++ b/org.apache.lenya.core.proxy/src/main/java/org/apache/lenya/cms/publication/Proxy.java
@@ -0,0 +1,35 @@
+package org.apache.lenya.cms.publication;
+
+public interface Proxy {
+
+ /**
+ * @param area The area.
+ * @return The proxy URL if no proxy is declared in {@link PublicationConfiguration#CONFIGURATION_FILE}.
+ */
+ public String getDefaultUrl();
+
+ /**
+ * Returns the absolute URL of a particular document.
+ * @param document The document.
+ * @return A string.
+ */
+ public String getURL(Document document);
+
+ /**
+ * Returns the proxy URL.
+ * @return A string.
+ */
+ public String getUrl();
+
+ /**
+ * Sets the proxy URL.
+ * @param _url The url to set.
+ */
+ public void setUrl(String _url);
+
+ /**
+ * @see java.lang.Object#toString()
+ */
+ public String toString();
+
+}
\ No newline at end of file
diff --git a/org.apache.lenya.core.proxy/src/main/java/org/apache/lenya/cms/publication/ProxyImpl.java b/org.apache.lenya.core.proxy/src/main/java/org/apache/lenya/cms/publication/ProxyImpl.java
new file mode 100644
index 0000000..fbdba30
--- /dev/null
+++ b/org.apache.lenya.core.proxy/src/main/java/org/apache/lenya/cms/publication/ProxyImpl.java
@@ -0,0 +1,106 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.lenya.cms.publication;
+
+import org.apache.commons.lang.Validate;
+
+/**
+ * <p>
+ * An object of this class represents a proxy configuration.
+ * </p>
+ * <p>
+ * Configuration example (<code>$PUB_HOME/config/publication.xml</code>):
+ * </p>
+ * <pre>
+ * <proxies>
+ * <proxy area="live" ssl="true" url="https://www.host.com/ssl/default"/>
+ * <proxy area="live" ssl="false" url="http://www.host.com/default"/>
+ * <proxy area="authoring" ssl="true" url="https://www.host.com/lenya/default/authoring"/>
+ * <proxy area="authoring" ssl="false" url="http://www.host.com/lenya/default/authoring"/>
+ * <proxies;>
+ * </pre>
+ *
+ */
+public class ProxyImpl implements Proxy {
+
+ private String defaultUrl;
+ private String url;
+
+ /**
+ * @param defaultUrl The default proxy URL.
+ */
+ public ProxyImpl(String defaultUrl) {
+ Validate.notNull(defaultUrl);
+ this.defaultUrl = defaultUrl;
+ }
+
+ /**
+ */
+ public ProxyImpl() {
+ }
+
+ /**
+ * @param area The area.
+ * @return The proxy URL if no proxy is declared in {@link PublicationConfiguration#CONFIGURATION_FILE}.
+ */
+ public String getDefaultUrl() {
+ return this.defaultUrl;
+ }
+
+ /**
+ * Returns the absolute URL of a particular document.
+ * @param document The document.
+ * @return A string.
+ */
+ public String getURL(Document document) {
+ return getUrl() + document.getCanonicalDocumentURL();
+ }
+
+ /**
+ * Returns the proxy URL.
+ * @return A string.
+ */
+ public String getUrl() {
+ if (this.url != null) {
+ return this.url;
+ }
+ else if (this.defaultUrl != null) {
+ return this.defaultUrl;
+ }
+ else {
+ throw new IllegalStateException("This proxy has no URL.");
+ }
+ }
+
+ /**
+ * Sets the proxy URL.
+ * @param _url The url to set.
+ */
+ public void setUrl(String _url) {
+ Validate.notNull(_url);
+ this.url = _url;
+ }
+
+ /**
+ * @see java.lang.Object#toString()
+ */
+ public String toString() {
+ return "Proxy URL=[" + getUrl() + "]";
+ }
+
+}
\ No newline at end of file