blob: 8629f5d84ee292f59184e52a1ebc77d609bdcf08 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache 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.apache.org/licenses/LICENSE-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.apache.myfaces.test.mock.resource;
import org.apache.myfaces.test.mock.MockServletContext;
import javax.faces.application.Resource;
import javax.faces.context.FacesContext;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Map;
/**
* <p>Mock simple implementation of <code>Resource</code>.</p>
*
* <p>
* It is used by MockSimpleResourceHandler to wrap resource instances.
* </p>
*
* @author Jakob Korherr (latest modification by $Author: lu4242 $)
* @version $Revision: 882702 $ $Date: 2009-11-20 15:16:07 -0500 (Vie, 20 Nov 2009) $
* @since 1.0.0
*/
public class MockSimpleResource extends Resource
{
private String _prefix;
private String _libraryName;
private String _libraryVersion;
private String _resourceName;
private String _resourceVersion;
private File _documentRoot;
/**
* Creates new resource object
*
* @param prefix locale prefix if any
* @param libraryName resource library name
* @param libraryVersion resource library version if any
* @param resourceName resource file name
* @param resourceVersion resource version if any
* @param documentRoot parent folder of resource directories. Must not be <code>null</code>
*/
public MockSimpleResource(String prefix, String libraryName,
String libraryVersion, String resourceName, String resourceVersion,
File documentRoot)
{
_prefix = prefix;
_libraryName = libraryName;
_libraryVersion = libraryVersion;
_resourceName = resourceName;
_resourceVersion = resourceVersion;
_documentRoot = documentRoot;
if (_documentRoot == null)
{
throw new IllegalArgumentException("documentRoot must not be null");
}
}
@Override
public String getResourceName()
{
return _resourceName;
}
@Override
public void setResourceName(String resourceName)
{
_resourceName = resourceName;
}
@Override
public String getLibraryName()
{
return _libraryName;
}
@Override
public void setLibraryName(String libraryName)
{
_libraryName = libraryName;
}
@Override
public InputStream getInputStream() throws IOException
{
MockServletContext servletContext = (MockServletContext) FacesContext
.getCurrentInstance().getExternalContext().getContext();
servletContext.setDocumentRoot(_documentRoot);
return servletContext.getResourceAsStream(buildResourcePath());
}
@Override
public String getRequestPath()
{
throw new UnsupportedOperationException();
}
@Override
public Map<String, String> getResponseHeaders()
{
throw new UnsupportedOperationException();
}
@Override
public URL getURL()
{
MockServletContext servletContext = (MockServletContext) FacesContext
.getCurrentInstance().getExternalContext().getContext();
servletContext.setDocumentRoot(_documentRoot);
try
{
return servletContext.getResource(buildResourcePath());
}
catch (MalformedURLException e)
{
return null;
}
}
@Override
public boolean userAgentNeedsUpdate(FacesContext context)
{
return true;
}
private String buildResourcePath()
{
StringBuilder builder = new StringBuilder();
builder.append('/');
boolean firstSlashAdded = false;
if (_prefix != null && _prefix.length() > 0)
{
builder.append(_prefix);
firstSlashAdded = true;
}
if (_libraryName != null)
{
if (firstSlashAdded)
{
builder.append('/');
}
builder.append(_libraryName);
firstSlashAdded = true;
}
if (_libraryVersion != null)
{
if (firstSlashAdded)
{
builder.append('/');
}
builder.append(_libraryVersion);
firstSlashAdded = true;
}
if (_resourceName != null)
{
if (firstSlashAdded)
{
builder.append('/');
}
builder.append(_resourceName);
firstSlashAdded = true;
}
if (_resourceVersion != null)
{
if (firstSlashAdded)
{
builder.append('/');
}
builder.append(_resourceVersion);
builder.append(_resourceName.substring(_resourceName
.lastIndexOf('.')));
}
return builder.toString();
}
}