xlawrence 2005/06/24 17:31:06 CEST
Modified files:
core/src/java/org/jahia/data/fields JahiaBigTextField.java
core/src/java/org/jahia/engines/shared BigText_Field.java
Log:
Added cleaning and rewriting of URL keys
Revision Changes Path
1.12 +104 -54
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.11&r2=1.12&f=h
1.12 +13 -1
jahia/core/src/java/org/jahia/engines/shared/BigText_Field.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/core/src/java/org/jahia/engines/shared/BigText_Field.java.diff?r1=1.11&r2=1.12&f=h
Index: JahiaBigTextField.java
===================================================================
RCS file:
/home/cvs/repository/jahia/core/src/java/org/jahia/data/fields/JahiaBigTextField.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- JahiaBigTextField.java 21 Jun 2005 14:10:57 -0000 1.11
+++ JahiaBigTextField.java 24 Jun 2005 15:31:06 -0000 1.12
@@ -17,6 +17,7 @@
import org.jahia.services.version.ContentObjectEntryState;
import org.jahia.services.version.EntryLoadRequest;
import org.jahia.services.version.EntrySaveRequest;
+import org.jahia.services.pages.PageProperty;
import org.jahia.data.webapps.Web_App_Xml;
import org.jahia.utils.JahiaTools;
import org.apache.commons.lang.StringUtils;
@@ -32,7 +33,7 @@
public class JahiaBigTextField extends JahiaField implements
JahiaAllowApplyChangeToAllLangField {
- private static org.apache.log4j.Logger logger =
+ private static final org.apache.log4j.Logger logger =
org.apache.log4j.Logger.getLogger(JahiaBigTextField.class);
protected final StringBuffer buff = new StringBuffer();
@@ -44,22 +45,24 @@
// Holds a list of 'pid' as Integer objects
private final List internalLinks;
+ private final List wrongURLKeys;
+
/**
* constructor
*/
- public JahiaBigTextField(Integer ID,
- Integer jahiaID,
- Integer pageID,
- Integer ctnid,
- Integer fieldDefID,
- Integer fieldType,
- Integer connectType,
- String fieldValue,
- Integer rank,
- Integer aclID,
- Integer versionID,
- Integer versionStatus,
- String languageCode) {
+ public JahiaBigTextField(final Integer ID,
+ final Integer jahiaID,
+ final Integer pageID,
+ final Integer ctnid,
+ final Integer fieldDefID,
+ final Integer fieldType,
+ final Integer connectType,
+ final String fieldValue,
+ final Integer rank,
+ final Integer aclID,
+ final Integer versionID,
+ final Integer versionStatus,
+ final String languageCode) {
super(ID, jahiaID, pageID, ctnid, fieldDefID, fieldType, connectType,
fieldValue, rank, aclID, versionID, versionStatus,
languageCode);
@@ -67,10 +70,11 @@
this.languageCode = ContentField.SHARED_LANGUAGE;
}
internalLinks = new ArrayList();
+ wrongURLKeys = new ArrayList();
} // end constructor
- public void load(int loadFlag, ParamBean jParams, EntryLoadRequest
loadRequest)
- throws JahiaException {
+ public void load(final int loadFlag, final ParamBean jParams,
+ final EntryLoadRequest loadRequest) throws JahiaException {
logger.debug("Loading big text field...");
setServletPath(jParams);
@@ -172,7 +176,7 @@
/**
*
*/
- public boolean save(ParamBean jParams) throws JahiaException {
+ public boolean save(final ParamBean jParams) throws JahiaException {
logger.debug("Save Big Text..."+ getValue());
final ContentBigTextField contentBigTextField = (ContentBigTextField)
ContentBigTextField.getField(getID());
@@ -196,7 +200,7 @@
return true;
}
- public void delete(ParamBean jParams)
+ public void delete(final ParamBean jParams)
throws JahiaException {
/* if (this.getConnectType() == ConnectionTypes.LOCAL) {
//String fileName = this.getValue();
@@ -265,8 +269,8 @@
return "bigtext_on";
}
- public JahiaField cloneField(int newctnid, int newPageID, int
clonedAclID,
- boolean childrenCloned) throws JahiaException {
+ public JahiaField cloneField(final int newctnid, final int newPageID,
+ final int clonedAclID, final boolean childrenCloned) throws
JahiaException {
final JahiaField clonedField = ServicesRegistry.getInstance().
getJahiaFieldService().
createJahiaField(0, this.getJahiaID(),
@@ -336,8 +340,8 @@
*
* @param aField A same field in another language
*/
- public void copyValueInAnotherLanguage(JahiaField aField,
- ParamBean jParams) throws JahiaException {
+ public void copyValueInAnotherLanguage(final JahiaField aField,
+ final ParamBean jParams) throws JahiaException {
if (aField == null) {
return;
}
@@ -353,13 +357,17 @@
return internalLinks;
}
+ public List getWrongURLKeys() {
+ return wrongURLKeys;
+ }
+
/**
* Replaces the URL marker in all the internal Jahia links and generates
* a valid and usable URL for each marked links
* @param content The content of the BigText
* @return a String with valid and usable URLs.
*/
- public static String rewriteURLs(String content, ParamBean jParams) {
+ public static String rewriteURLs(final String content, final ParamBean
jParams) {
logger.debug("rewriteURLs...");
if (content == null || content.length() == 0) {
@@ -392,13 +400,17 @@
}
/**
+ * @param content The content of the BigText
+ * @param req The initial request
+ * @param code The current language code
* @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( String content,
HttpServletRequest req,
- String code) {
+ public String[] cleanUpHardCodedLinks( final String content, final
HttpServletRequest req,
+ final String code) {
logger.debug("cleanUpHardCodedLinks...");
internalLinks.clear();
+ wrongURLKeys.clear();
final String[] result = new String[2];
if (content.toLowerCase().indexOf("href") < 0) {
// BigText does not contain any Jahia internal server link
@@ -413,12 +425,30 @@
final String delimiter = " ";
final StringTokenizer tokenizer = new StringTokenizer(content,
delimiter);
+ final String contextAndServletPath =
buff.append(req.getContextPath()).
+ append(SERVLET_PATH).toString();
+ buff.delete(0, buff.length());
+
while (tokenizer.hasMoreTokens()) { // go through each token
- final String token = tokenizer.nextToken();
+ final String rawToken = tokenizer.nextToken();
- if ( token.trim().length() == 0) { continue; }
+ if ( rawToken.trim().length() == 0) { continue; }
- //logger.debug("Token is: "+token);
+ final String token;
+ if (rawToken.indexOf("/op/") > -1) {
+ if (rawToken.indexOf("/op/edit") > -1) {
+ token = StringUtils.replaceOnce(rawToken, "/op/edit",
"");
+
+ } else if (rawToken.indexOf("/op/compare") > -1) {
+ token = StringUtils.replaceOnce(rawToken, "/op/compare",
"");
+
+ } else {
+ token = StringUtils.replaceOnce(rawToken, "/op/preview",
"");
+ }
+
+ } else {
+ token = rawToken;
+ }
if (token.toLowerCase().startsWith("href") ) {
@@ -444,8 +474,9 @@
}
}
- // Check if the URL is a Jahia URL
- if ( !(link.indexOf("pid") > -1 || hasOnlyDigits(link)) ) {
+ // Check if the URL is a Jahia URL...
+ if ( !(link.indexOf("pid") > -1 || hasOnlyDigits(link) ||
+ getPidFromUrlKey(link, contextAndServletPath) > 0) )
{
logger.debug("Not a Jahia Link: "+ link);
rawResult.append(token);
displayResult.append(token);
@@ -472,30 +503,12 @@
buff.delete(0, buff.length());
}
- // Get rid of the context and servlet path
- final String contextAndServletPath =
buff.append(req.getContextPath())
- .append(SERVLET_PATH).toString();
- buff.delete(0, buff.length());
-
+ // Get rid of the context and servlet path
if (link.startsWith(contextAndServletPath)) {
link = StringUtils.replaceOnce(link,
contextAndServletPath, "");
}
- // Get rid of the '/op/.../'
- if (link.indexOf("/op/") > -1) {
- if (link.indexOf("/op/edit") > -1) {
- link = StringUtils.replaceOnce(link, "/op/edit", "");
-
- } else if (link.indexOf("/op/compare") > -1) {
- link = StringUtils.replaceOnce(link, "/op/compare",
"");
-
- } else {
- link = StringUtils.replaceOnce(link, "/op/preview",
"");
-
- }
- }
-
// Get rid of all what is unecessary after the /pid/
// (matrix, jSessionId)
if (link.indexOf("?matrix") > -1) {
@@ -521,6 +534,7 @@
if (link.indexOf(URL_MARKER) < 0) {
rawResult.append(URL_MARKER);
}
+
final Integer pageID = new
Integer(Integer.parseInt(getPID(link)));
if (! internalLinks.contains(pageID)) {
internalLinks.add(pageID);
@@ -570,16 +584,53 @@
}
/**
+ * 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(final String link, final String context)
{
+ if (link == null || link.length() == 0 ||
+ link.indexOf(context) < 0) { return -1; }
+
+ String urlKey = link;
+
+ urlKey = urlKey.substring(urlKey.lastIndexOf('/') + 1);
+ logger.debug("getPidFromUrlKey: " + urlKey);
+
+ try {
+ final List pageProperties = ServicesRegistry.getInstance().
+ getJahiaPageService().getPagePropertiesByValue(urlKey);
+ logger.debug("pageProperties.size(): "+pageProperties.size());
+ if (pageProperties.size() == 1) {
+ logger.debug("1");
+ final PageProperty pageProperty = (PageProperty)
pageProperties.get(0);
+ if
(pageProperty.getName().equals(PageProperty.PAGE_URL_KEY_PROPNAME)) {
+ logger.debug("2");
+ return pageProperty.getPageID();
+ }
+ }
+ } catch (Exception e) {
+ logger.warn("Error while looking URL page key " + urlKey, e);
+ }
+
+ logger.debug("wrongURLKeys added: " + urlKey);
+ wrongURLKeys.add(urlKey);
+
+ return -1;
+ }
+
+ /**
* Returns true if the given String object only contains numbers
*/
- protected boolean hasOnlyDigits(String s) {
+ protected 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(String s) {
+ protected String getPID(final String s) {
final String value = s.substring(s.lastIndexOf('/') + 1);
if (hasOnlyDigits(value)) {
@@ -603,8 +654,7 @@
/**
* Sets the servlet path
*/
- protected void setServletPath(ParamBean jParams)
- throws JahiaException {
+ protected void setServletPath(final ParamBean jParams) throws
JahiaException {
if (SERVLET_PATH == null) { // Only perform this operation once
logger.debug("Setting the SERVLET_PATH...");
@@ -621,7 +671,7 @@
return;
}
- Iterator ite = mappings.keySet().iterator();
+ final Iterator ite = mappings.keySet().iterator();
while (ite.hasNext()) {
final String urlPattern = (String)ite.next();
final String servletName = (String)mappings.get(urlPattern);
Index: BigText_Field.java
===================================================================
RCS file:
/home/cvs/repository/jahia/core/src/java/org/jahia/engines/shared/BigText_Field.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- BigText_Field.java 23 Jun 2005 11:29:07 -0000 1.11
+++ BigText_Field.java 24 Jun 2005 15:31:06 -0000 1.12
@@ -71,7 +71,7 @@
*/
public class BigText_Field {
- private static org.apache.log4j.Logger logger =
+ private static final org.apache.log4j.Logger logger =
org.apache.log4j.Logger.getLogger(BigText_Field.class);
private static final BigText_Field theObject = new
BigText_Field();
@@ -681,6 +681,7 @@
logger.debug("composeWarningMessages... "+theField.getValue());
final List pids = ((JahiaBigTextField)theField).getInternalLinks();
+ final List wrongKeys =
((JahiaBigTextField)theField).getWrongURLKeys();
final EngineMessages result = new EngineMessages();
if (pids.size() > 0) {
@@ -780,6 +781,17 @@
}
}
}
+
+ if (wrongKeys.size() > 0) {
+ final Iterator ite = wrongKeys.iterator();
+ while (ite.hasNext()) {
+ final String urlKey = (String)ite.next();
+ final EngineMessage msg = new EngineMessage(
+ "org.jahia.engines.shared.BigText_Field.wrongKeys",
+ urlKey);
+ result.add("BigText.wrongURLKeys", msg);
+ }
+ }
logger.debug("Returning "+result.getSize()+ " warning message(s):
"+result);
return result;
}