xlawrence 2005/06/28 11:54:25 CEST
Modified files:
core/src/java/org/jahia/data/fields JahiaBigTextField.java
Log:
some fixes and improvements regarding urlkeys
Revision Changes Path
1.15 +124 -29
jahia/core/src/java/org/jahia/data/fields/JahiaBigTextField.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/core/src/java/org/jahia/data/fields/JahiaBigTextField.java.diff?r1=1.14&r2=1.15&f=h
Index: JahiaBigTextField.java
===================================================================
RCS file:
/home/cvs/repository/jahia/core/src/java/org/jahia/data/fields/JahiaBigTextField.java,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- JahiaBigTextField.java 27 Jun 2005 15:55:29 -0000 1.14
+++ JahiaBigTextField.java 28 Jun 2005 09:54:25 -0000 1.15
@@ -29,6 +29,8 @@
import java.util.StringTokenizer;
import javax.servlet.http.HttpServletRequest;
+import org.jahia.services.pages.ContentPage;
+import org.jahia.services.pages.JahiaPage;
public class JahiaBigTextField extends JahiaField implements
JahiaAllowApplyChangeToAllLangField {
@@ -187,7 +189,7 @@
return true;
}
- final String[] values = cleanUpHardCodedLinks(getValue(),
jParams.getRequest(),
+ final String[] values = cleanUpHardCodedLinks(getValue(),
jParams.getRequest(),
jParams.getLocale().toString());
setRawValue(values[0]);
setValue(values[1]);
@@ -269,7 +271,7 @@
return "bigtext_on";
}
- public JahiaField cloneField(final int newctnid, final int newPageID,
+ public JahiaField cloneField(final int newctnid, final int newPageID,
final int clonedAclID, final boolean childrenCloned) throws
JahiaException {
final JahiaField clonedField = ServicesRegistry.getInstance().
getJahiaFieldService().
@@ -370,7 +372,7 @@
* @param content The content of the BigText
* @return a String with valid and usable URLs.
*/
- public static String rewriteURLs(final String content, final ParamBean
jParams) {
+ public static String rewriteURLs(String content, final ParamBean
jParams) {
logger.debug("rewriteURLs...");
if (content == null || content.length() == 0) {
@@ -379,14 +381,31 @@
if (content.indexOf(URL_MARKER) < 0) { // nothing to rewrite...
return content;
- }
+ }
final StringBuffer buff = new StringBuffer();
- buff.append(jParams.getRequest().getContextPath()).
- append(SERVLET_PATH);
+ final String path =
buff.append(jParams.getRequest().getContextPath()).
+ append(SERVLET_PATH).toString();
+ buff.delete(0, buff.length());
final String mode = jParams.getOperationMode();
+
+ final StringTokenizer tokenizer = new StringTokenizer(content, " ");
+ while (tokenizer.hasMoreTokens()) {
+ final String token = tokenizer.nextToken();
+
+ if (token.indexOf("/pid/") < 0) {
+ continue;
+ }
+
+ final String res;
+ if ((res = getURLwithURLKey(path, token, mode)) != null) {
+ content = StringUtils.replace(content, token, res);
+ }
+ }
+
+ buff.append(path);
if (! ParamBean.NORMAL.equals(mode)) {
buff.append("/op/").append(mode);
}
@@ -415,7 +434,7 @@
* @return an Array of String. Position[0] contains the RawValue and
position[1] the
* value that should be used when displaying the data
*/
- public String[] cleanUpHardCodedLinks( final String content, final
HttpServletRequest req,
+ public String[] cleanUpHardCodedLinks( final String content, final
HttpServletRequest req,
final String code) {
logger.debug("cleanUpHardCodedLinks...");
internalLinks.clear();
@@ -452,12 +471,12 @@
token = StringUtils.replaceOnce(rawToken, "/op/compare",
"");
} else {
- token = StringUtils.replaceOnce(rawToken, "/op/preview",
"");
+ token = StringUtils.replaceOnce(rawToken, "/op/preview",
"");
}
} else {
token = rawToken;
- }
+ }
if (token.toLowerCase().startsWith("href") ) {
@@ -485,7 +504,8 @@
// Check if the URL is a Jahia URL...
int pid = -1;
- if ( !(link.indexOf("pid") > -1 || hasOnlyDigits(link) ||
+ String urlKey = null;
+ if ( !(link.indexOf("pid") > -1 || hasOnlyDigits(link) ||
(pid = getPidFromUrlKey(link,
contextAndServletPath)) > 0) ) {
logger.debug("Not a Jahia Link: "+ link);
rawResult.append(token);
@@ -496,8 +516,11 @@
}
if (pid > 0) {
+ // we got an URL key
+ urlKey = link.substring(link.lastIndexOf('/') + 1);
link = buff.append("/pid/").append(pid).toString();
buff.delete(0, buff.length());
+ logger.debug("urlKey: "+urlKey);
}
logger.debug("\n\nFound a Jahia HardCoded link: " + token);
@@ -518,8 +541,8 @@
buff.delete(0, buff.length());
}
- // Get rid of the context and servlet path
- if (link.indexOf(contextAndServletPath) > -1) {
+ // Get rid of the context and servlet path
+ if (link.startsWith(contextAndServletPath)) {
link = StringUtils.replaceOnce(link,
contextAndServletPath, "");
}
@@ -550,27 +573,42 @@
rawResult.append(URL_MARKER);
}
- final Integer pageID = new
Integer(Integer.parseInt(getPID(link)));
+ final Integer pageID;
+ if ( pid > 0) {
+ pageID = new Integer(pid);
+ displayResult.append('/');
+ displayResult.append(urlKey);
+ } else {
+ pageID = new Integer(Integer.parseInt(getPID(link)));
+ }
+
if (! internalLinks.contains(pageID)) {
internalLinks.add(pageID);
}
- // If no language is present in the link, put the
current language
+ // If no language is present in the link,
+ // put the current language, except for url keys
if (link.indexOf("lang/") < 0) {
rawResult.append("/lang/");
rawResult.append(code);
- displayResult.append("/lang/");
- displayResult.append(code);
+ if (pid == -1) {
+ displayResult.append("/lang/");
+ displayResult.append(code);
+ }
}
// All links should have a pid
if (link.indexOf("pid/") < 0) {
rawResult.append("/pid");
- displayResult.append("/pid");
+ if ( pid == -1) {
+ displayResult.append("/pid");
+ }
}
}
- displayResult.append(link);
+ if (pid == -1) {
+ displayResult.append(link);
+ }
displayResult.append("\"");
rawResult.append(link);
rawResult.append("\"");
@@ -602,20 +640,20 @@
/**
* Tries to find a matching pid value from a possible URL key contained
* in the given link.
- *
+ *
* @return The pid value or -1 if not found or something went wrong
*/
- protected int getPidFromUrlKey(String link, final String context) {
+ protected int getPidFromUrlKey(String link, final String context) {
logger.debug("getPidFromUrlKey: " + link);
if (link == null || link.length() == 0 ||
link.indexOf(context) < 0) { return -1; }
- final String urlKey = link.substring(link.lastIndexOf('/') + 1);
+ final String urlKey = new
String(link.substring(link.lastIndexOf('/') + 1));
+ logger.debug("urlKey: "+urlKey);
try {
final List pageProperties = ServicesRegistry.getInstance().
getJahiaPageService().getPagePropertiesByValue(urlKey);
- logger.debug("pageProperties.size(): "+pageProperties.size());
if (pageProperties.size() == 1) {
final PageProperty pageProperty = (PageProperty)
pageProperties.get(0);
if
(pageProperty.getName().equals(PageProperty.PAGE_URL_KEY_PROPNAME)) {
@@ -633,20 +671,56 @@
}
/**
+ *
+ */
+ protected static String getURLKeyFromPID(int pid) throws JahiaException {
+ final ContentPage page;
+ try {
+ page = ContentPage.getPage(pid);
+ } catch (Exception e) { return null; }
+
+ if (page == null) { return null; }
+
+ final PageProperty prop = page.getPageLocalProperty(
+ PageProperty.PAGE_URL_KEY_PROPNAME);
+
+ if (prop != null) {
+ return prop.getValue();
+
+ } else {
+ return null;
+
+ }
+ }
+
+ /**
* Returns true if the given String object only contains numbers
*/
- protected boolean hasOnlyDigits(final String s) {
+ protected static boolean hasOnlyDigits(final String s) {
for (int i=0; i<s.length(); i++) {
if (! Character.isDigit(s.charAt(i))) { return false; }
}
return true;
}
-
+
/**
*
*/
- protected String getPID(final String s) {
- final String value = s.substring(s.lastIndexOf('/') + 1);
+ protected static String getPID(final String s) {
+ logger.debug("Getting PID from: "+s);
+ System.out.println(s);
+ final StringBuffer buff = new StringBuffer();
+ final String value;
+ final int index;
+ if ( (index = s.indexOf("/pid/")) > -1 ) {
+ value = s.substring(index + 5);
+
+ } else if (s.startsWith("/")) {
+ value = s.substring(1);
+
+ } else {
+ value = s;
+ }
if (hasOnlyDigits(value)) {
return value;
@@ -661,9 +735,30 @@
}
}
- final String res = buff.toString();
- buff.delete(0, buff.length());
- return res;
+ return buff.toString();
+ }
+
+ /**
+ */
+ protected static String getURLwithURLKey(String path, String rawURL,
String mode) {
+ final StringBuffer buff = new StringBuffer();
+ final String pid = rawURL.substring(rawURL.indexOf("/pid/"));
+
+ final String urlKey;
+ try {
+ urlKey = getURLKeyFromPID(Integer.parseInt(getPID(pid)));
+ } catch (JahiaException e) { return null; }
+
+ if (urlKey == null) { return null; }
+
+ buff.append("href=\"").append(path).append('/').append(urlKey);
+
+ if (! ParamBean.NORMAL.equals(mode)) {
+ buff.append("/op/").append(mode);
+ }
+
+ buff.append(rawURL.substring(rawURL.indexOf(">") - 1));
+ return buff.toString();
}
/**