/********************************************************************************** * $URL: https://source.sakaiproject.org/svn/rwiki/trunk/rwiki-impl/impl/src/java/uk/ac/cam/caret/sakai/rwiki/component/service/impl/PageVisits.java $ * $Id: PageVisits.java 74213 2010-03-05 04:48:15Z steve.swinsburg@gmail.com $ *********************************************************************************** * * Copyright (c) 2003, 2004, 2005, 2006, 2007 The Sakai Foundation. * * Licensed under the Educational Community License, Version 1.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.opensource.org/licenses/ecl1.php * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * **********************************************************************************/ package uk.ac.cam.caret.sakai.rwiki.component.service.impl; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.ArrayList; import java.util.List; import java.util.Stack; import org.sakaiproject.component.cover.ServerConfigurationService; import org.sakaiproject.entity.api.Entity; import uk.ac.cam.caret.sakai.rwiki.service.api.RWikiObjectService; import uk.ac.cam.caret.sakai.rwiki.utils.NameHelper; /** * @author ieb */ public class PageVisits { private static final int MAX_SIZE = 10; /** Configuration: allow use of alias for site id in references. */ protected boolean m_siteAlias = true; private Stack<String> s = new Stack<String>(); public PageVisits() { } public void addPage(String globalPageName) { s.remove(globalPageName); s.push(globalPageName); while (s.size() > MAX_SIZE) { s.remove(0); } } public List<String[]> getPageNames(String type) { List<String[]> l = new ArrayList<String[]>(); if (s.size() > 0) { for (String pagename : s) { String[] pagespec = new String[2]; String localSpace = NameHelper.localizeSpace(pagename); pagespec[1] = NameHelper.localizeName(pagename, localSpace); if (m_siteAlias) { String localAliasSpace = NameHelper.aliasSpace(localSpace); pagespec[0] = RWikiObjectService.REFERENCE_ROOT + localAliasSpace + Entity.SEPARATOR + encode(pagespec[1]) + "." + type; } else { // /wiki pagespec[0] = RWikiObjectService.REFERENCE_ROOT + encode(pagename) + "." + type; } l.add(pagespec); } } return l; } private String encode(String toEncode) { try { String encoded = URLEncoder.encode(toEncode, "UTF-8"); encoded = encoded.replaceAll("\\+", "%20").replaceAll("%2F", "/"); return encoded; } catch (UnsupportedEncodingException e) { throw new IllegalStateException("UTF-8 Encoding is not supported when encoding: " + toEncode + ": " + e.getMessage()); } } }