/* * $Id: PageUrl.java,v 1.1.2.1 2007/01/12 19:31:48 idegaweb Exp $ * Created on 24.2.2005 * * Copyright (C) 2005 Idega Software hf. All Rights Reserved. * * This software is the proprietary information of Idega hf. * Use is subject to license terms. */ package com.idega.builder.business; import java.util.List; import java.util.ArrayList; import java.util.Iterator; import javax.ejb.FinderException; import com.idega.core.builder.data.ICPage; import com.idega.core.builder.data.ICPageHome; import com.idega.data.IDOLookup; import com.idega.data.IDOLookupException; import com.idega.util.StringHandler; /** * <p> * Class for setting and manipulating generated URLs for builder pages * <p> * Last modified: $Date: 2007/01/12 19:31:48 $ by $Author: idegaweb $ * * @author <a href="mailto:tryggvil@idega.com">tryggvil</a> * @version $Revision: 1.1.2.1 $ */ public class PageUrl { ICPage page; ICPage parentPage; //Stack stack; String pageName; String SLASH = StringHandler.SLASH; int domainId=-1; public PageUrl(ICPage page,int domainId){ this.page=page; this.domainId=domainId; } /** * Create a new PageUri for a new Page whos parent is parentPage and name is pageName * @param parentPage * @param pageName */ public PageUrl(ICPage parentPage,String pageName,int domainId){ this.parentPage=parentPage; this.pageName=pageName; this.domainId=domainId; } /** * Create a new PageUri for a new Page whos name is pageName, in this case the page has no parent and is presumed to be a top level page. * @param parentPage * @param pageName */ public PageUrl(String pageName){ this.pageName=pageName; } public String getGeneratedUrlFromName(){ List list = getUrlPartList(); Iterator iter = list.iterator(); String url=this.SLASH; while(iter.hasNext()){ PageNamePart part = (PageNamePart)iter.next(); if(part.isStartPage){ //nothing done because the starpage should have url="/"; } else{ if(part.url==null){ url=this.SLASH+part.urlPartFromName+url; } else{ url=this.SLASH+part.url+url; break; } } } String parsedUrl = StringHandler.removeMultipleSlashes(url); String newUrl = getStringCheckedWithExistingUrls(parsedUrl); return newUrl; } protected List getUrlPartList(){ //if(stack!=null){ // stack=new Stack(); //} List l = new ArrayList(); ICPage ppage = null; if(this.page!=null){ ppage=this.page; } else if(this.parentPage!=null){ ppage=this.parentPage; } if(this.pageName!=null){ PageNamePart part = new PageNamePart(this.pageName); l.add(part); } while(ppage!=null){ PageNamePart part = getParsedName(ppage); l.add(part); ppage=(ICPage)ppage.getParentNode(); } return l; } protected PageNamePart getParsedName(ICPage page){ PageNamePart part = new PageNamePart(page); return part; } protected BuilderLogic getBuilderLogic(){ return BuilderLogic.getInstance(); } private class PageNamePart{ boolean isStartPage=false; String url; String urlPartFromName; PageNamePart(ICPage page){ String pageName = page.getName(); if(getBuilderLogic().getCurrentDomain().getStartPage().equals(page)){ this.isStartPage=true; } this.url = page.getDefaultPageURI(); if(pageName!=null){ this.urlPartFromName = getUrlPartFromName(pageName); } } PageNamePart(String pageName){ this.isStartPage=false; this.urlPartFromName=getUrlPartFromName(pageName); } } protected String getUrlPartFromName(String name){ return StringHandler.convertToUrlFriendly(name); } /** * Checks if the url exists already for other pages and adds a suffix if it is. */ protected String getStringCheckedWithExistingUrls(String inputUrl){ //check the url: int index=1; String url=inputUrl; while(doesUrlExist(url)){ //ad a number to the end if(inputUrl.endsWith(this.SLASH)){ url=inputUrl.substring(0,inputUrl.length()-1)+index+this.SLASH; } else{ url=inputUrl+index+this.SLASH; } index++; } return url; } protected boolean doesUrlExist(String url){ try { ICPage page = getICPageHome().findByUri(url,this.domainId); if(page!=null){ return true; } } catch (FinderException e) { return false; } return false; } protected ICPageHome getICPageHome(){ try { return (ICPageHome) IDOLookup.getHome(ICPage.class); } catch (IDOLookupException e) { throw new RuntimeException(e); } } }