/********************************************************************************** * $URL: https://source.sakaiproject.org/svn/help/trunk/help-component/src/java/org/sakaiproject/component/app/help/RestConfigurationImpl.java $ * $Id: RestConfigurationImpl.java 105079 2012-02-24 23:08:11Z ottenhoff@longsight.com $ *********************************************************************************** * * Copyright (c) 2003, 2004, 2005, 2006, 2007, 2008 The Sakai Foundation * * Licensed under the Educational Community License, Version 2.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/ECL-2.0 * * 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 org.sakaiproject.component.app.help; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.StringReader; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.apache.commons.codec.binary.Base64; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.sakaiproject.api.app.help.RestConfiguration; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.InputSource; /** * @author <a href="mailto:jlannan.iupui.edu">Jarrod Lannan</a> * @version $Id: RestConfigurationImpl.java 105079 2012-02-24 23:08:11Z ottenhoff@longsight.com $ * */ public class RestConfigurationImpl implements RestConfiguration { /** user:pass as string ... will be converted to Base64 **/ private String restCredentials; private String organization; private String restDomain; private String restUrl; private long cacheInterval; private static String REST_DOMAIN_URL; private static String REST_CORPUS_URL; private final static Log LOG = LogFactory.getLog(RestConfigurationImpl.class); /** * @see org.sakaiproject.api.app.help.RestConfiguration#getOrganization() */ public String getOrganization() { return organization; } /** * @see org.sakaiproject.api.app.help.RestConfiguration#setOrganization(java.lang.String) */ public void setOrganization(String organization) { this.organization = organization; } /** * @see org.sakaiproject.api.app.help.RestConfiguration#getRestCredentials() */ public String getRestCredentials() { return restCredentials; } /** * @see org.sakaiproject.api.app.help.RestConfiguration#setRestCredentials(java.lang.String) */ public void setRestCredentials(String restCredentials) { this.restCredentials = restCredentials; } /** * @see org.sakaiproject.api.app.help.RestConfiguration#getRestDomain() */ public String getRestDomain() { return restDomain; } /** * @see org.sakaiproject.api.app.help.RestConfiguration#setRestDomain(java.lang.String) */ public void setRestDomain(String restDomain) { this.restDomain = restDomain; } /** * @see org.sakaiproject.api.app.help.RestConfiguration#getRestUrl() */ public String getRestUrl() { return restUrl; } /** * @see org.sakaiproject.api.app.help.RestConfiguration#setRestUrl(java.lang.String) */ public void setRestUrl(String restUrl) { this.restUrl = restUrl; } /** * @see org.sakaiproject.api.app.help.RestConfiguration#getCacheInterval() */ public long getCacheInterval() { return cacheInterval; } /** * @see org.sakaiproject.api.app.help.RestConfiguration#setCacheInterval(long) */ public void setCacheInterval(long cacheInterval) { this.cacheInterval = cacheInterval; } /** * @see org.sakaiproject.api.app.help.RestConfiguration#getRestUrlInDomain() */ public String getRestUrlInDomain() { if (REST_DOMAIN_URL != null) { return REST_DOMAIN_URL; } else { return REST_DOMAIN_URL = getRestUrl() + "/" + getRestDomain() + "/" + "document/" + getRestDomain() + "/"; } } /** * @see org.sakaiproject.api.app.help.RestConfiguration#getRestCorpusUrl() */ public String getRestCorpusUrl() { if (REST_DOMAIN_URL != null) { return REST_CORPUS_URL; } else { return REST_CORPUS_URL = getRestUrl() + "/" + getRestDomain() + "/" + "documents"; } } /** * @see org.sakaiproject.api.app.help.RestConfiguration#getCorpusDocument() */ public String getCorpusDocument() { if (LOG.isDebugEnabled()) { LOG.debug("getCorpusDocument()"); } URL url = null; StringBuilder sBuffer = new StringBuilder(); BufferedReader br = null; try { url = new URL(getRestCorpusUrl()); URLConnection urlConnection = url.openConnection(); String basicAuthUserPass = getRestCredentials(); String encoding = Base64.encodeBase64(basicAuthUserPass.getBytes("utf-8")).toString(); urlConnection.setRequestProperty("Authorization", "Basic " + encoding); br = new BufferedReader(new InputStreamReader(urlConnection .getInputStream()), 512); int readReturn = 0; char[] cbuf = new char[512]; while ((readReturn = br.read(cbuf, 0, 512)) != -1) { sBuffer.append(cbuf, 0, readReturn); } } catch (MalformedURLException e) { LOG.error("Malformed URL in REST document: " + url.getPath(), e); } catch (IOException e) { LOG.error("Could not open connection to REST document: " + url.getPath(), e); } finally { try { if (br != null) { br.close(); } } catch (IOException e) { LOG.error("error closing corpus doc", e); } } return sBuffer.toString(); } /** * @see org.sakaiproject.api.app.help.RestConfiguration#getResourceNameFromCorpusDoc(java.lang.String) */ public String getResourceNameFromCorpusDoc(String xml) { try { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setNamespaceAware(true); DocumentBuilder builder = dbf.newDocumentBuilder(); StringReader sReader = new StringReader(xml); InputSource inputSource = new org.xml.sax.InputSource(sReader); org.w3c.dom.Document xmlDocument = builder.parse(inputSource); sReader.close(); NodeList nodeList = xmlDocument.getElementsByTagName("kbq"); int nodeListLength = nodeList.getLength(); for (int i = 0; i < nodeListLength; i++){ Node currentNode = nodeList.item(i); NodeList nlChildren = currentNode.getChildNodes(); for (int j = 0; j < nlChildren.getLength(); j++){ if (nlChildren.item(j).getNodeType() == Node.TEXT_NODE){ return nlChildren.item(j).getNodeValue(); } } } return null; } catch (Exception e) { LOG.error(e.getMessage(), e); } return null; } }