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;
       }
  

Reply via email to