Author: andreas
Date: Mon Aug 13 06:21:49 2007
New Revision: 565341
URL: http://svn.apache.org/viewvc?view=rev&rev=565341
Log:
Add method to resolve links without providing a start document
Modified:
lenya/trunk/src/modules-core/linking/java/src/org/apache/lenya/cms/linking/LinkResolver.java
lenya/trunk/src/modules-core/linking/java/src/org/apache/lenya/cms/linking/LinkResolverImpl.java
Modified: lenya/trunk/src/modules-core/linking/java/src/org/apache/lenya/cms/linking/LinkResolver.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/linking/java/src/org/apache/lenya/cms/linking/LinkResolver.java?view=diff&rev=565341&r1=565340&r2=565341
==============================================================================
--- lenya/trunk/src/modules-core/linking/java/src/org/apache/lenya/cms/linking/LinkResolver.java (original)
+++ lenya/trunk/src/modules-core/linking/java/src/org/apache/lenya/cms/linking/LinkResolver.java Mon Aug 13 06:21:49 2007
@@ -20,6 +20,7 @@
import java.net.MalformedURLException;
import org.apache.lenya.cms.publication.Document;
+import org.apache.lenya.cms.publication.DocumentFactory;
/**
* <p>
@@ -88,5 +89,14 @@
* @throws MalformedURLException if the URI is invalid.
*/
LinkTarget resolve(Document currentDocument, String linkUri) throws MalformedURLException;
+
+ /**
+ * Resolve a link. The link URI has to contain the UUID, language, area and publication ID.
+ * @param factory The document factory to use.
+ * @param linkUri The link URI.
+ * @return A link target.
+ * @throws MalformedURLException if the URI is invalid.
+ */
+ LinkTarget resolve(DocumentFactory factory, String linkUri) throws MalformedURLException;
}
Modified: lenya/trunk/src/modules-core/linking/java/src/org/apache/lenya/cms/linking/LinkResolverImpl.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/linking/java/src/org/apache/lenya/cms/linking/LinkResolverImpl.java?view=diff&rev=565341&r1=565340&r2=565341
==============================================================================
--- lenya/trunk/src/modules-core/linking/java/src/org/apache/lenya/cms/linking/LinkResolverImpl.java (original)
+++ lenya/trunk/src/modules-core/linking/java/src/org/apache/lenya/cms/linking/LinkResolverImpl.java Mon Aug 13 06:21:49 2007
@@ -25,8 +25,10 @@
import org.apache.avalon.framework.logger.AbstractLogEnabled;
import org.apache.lenya.cms.publication.Area;
import org.apache.lenya.cms.publication.Document;
+import org.apache.lenya.cms.publication.DocumentFactory;
import org.apache.lenya.cms.publication.Publication;
import org.apache.lenya.cms.publication.PublicationException;
+import org.apache.lenya.util.Assert;
/**
* Link resolver implementation.
@@ -42,12 +44,75 @@
Link link = new Link(linkUri);
- String uuid = getValue(link.getUuid(), currentDoc.getUUID());
String language = getValue(link.getLanguage(), currentDoc.getLanguage());
String revisionString = getValue(link.getRevision(), null);
String area = getValue(link.getArea(), currentDoc.getArea());
String pubId = getValue(link.getPubId(), currentDoc.getPublication().getId());
+
+ String uuid = getValue(link.getUuid(), currentDoc.getUUID());
+ if (uuid.length() == 0) {
+ uuid = currentDoc.getUUID();
+ }
+
+ Link newLink = new Link();
+ newLink.setPubId(pubId);
+ newLink.setArea(area);
+ newLink.setUuid(uuid);
+ newLink.setLanguage(language);
+ if (revisionString != null) {
+ newLink.setRevision(revisionString);
+ }
+
+ return resolve(currentDoc.getFactory(), newLink.getUri());
+
+ }
+
+ protected String getValue(String value, String defaultValue) {
+ if (value == null) {
+ return defaultValue;
+ } else {
+ return value;
+ }
+ }
+
+ private int fallbackMode = MODE_DEFAULT_LANGUAGE;
+
+ public int getFallbackMode() {
+ return this.fallbackMode;
+ }
+
+ public void setFallbackMode(int mode) {
+ this.fallbackMode = mode;
+ }
+
+ protected static final String ELEMENT_FALLBACK = "fallback";
+
+ public void configure(Configuration config) throws ConfigurationException {
+ Configuration fallbackConfig = config.getChild(ELEMENT_FALLBACK, false);
+ if (fallbackConfig != null) {
+ boolean fallback = config.getValueAsBoolean();
+ if (fallback) {
+ setFallbackMode(MODE_DEFAULT_LANGUAGE);
+ } else {
+ setFallbackMode(MODE_FAIL);
+ }
+ }
+ }
+ public LinkTarget resolve(DocumentFactory factory, String linkUri) throws MalformedURLException {
+
+ Link link = new Link(linkUri);
+ String language = link.getLanguage();
+ Assert.notNull("language", language);
+ String uuid = link.getUuid();
+ Assert.notNull("uuid", uuid);
+ String area = link.getArea();
+ Assert.notNull("area", area);
+ String pubId = link.getPubId();
+ Assert.notNull("publication ID", pubId);
+
+ String revisionString = getValue(link.getRevision(), null);
+
int revision;
if (revisionString == null) {
revision = -1;
@@ -55,12 +120,8 @@
revision = Integer.valueOf(revisionString).intValue();
}
- if (uuid.length() == 0) {
- uuid = currentDoc.getUUID();
- }
-
try {
- Publication pub = currentDoc.getFactory().getPublication(pubId);
+ Publication pub = factory.getPublication(pubId);
Area areaObj = pub.getArea(area);
Document doc;
if (areaObj.contains(uuid, language)) {
@@ -90,38 +151,6 @@
}
} catch (PublicationException e) {
throw new RuntimeException(e);
- }
- }
-
- protected String getValue(String value, String defaultValue) {
- if (value == null) {
- return defaultValue;
- } else {
- return value;
- }
- }
-
- private int fallbackMode = MODE_DEFAULT_LANGUAGE;
-
- public int getFallbackMode() {
- return this.fallbackMode;
- }
-
- public void setFallbackMode(int mode) {
- this.fallbackMode = mode;
- }
-
- protected static final String ELEMENT_FALLBACK = "fallback";
-
- public void configure(Configuration config) throws ConfigurationException {
- Configuration fallbackConfig = config.getChild(ELEMENT_FALLBACK, false);
- if (fallbackConfig != null) {
- boolean fallback = config.getValueAsBoolean();
- if (fallback) {
- setFallbackMode(MODE_DEFAULT_LANGUAGE);
- } else {
- setFallbackMode(MODE_FAIL);
- }
}
}
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.