package com.rectang.xsm.wicket; import com.rectang.xsm.XSM; import com.rectang.xsm.pages.XSMSession; import com.rectang.xsm.site.Site; import org.apache.wicket.Session; import org.apache.wicket.markup.html.DynamicWebResource; import org.apache.wicket.util.time.Time; import org.headsupdev.support.java.IOUtil; import java.io.*; /** * Page that returns the requested style from the current site * <p/> * Created: 08/12/2012 * * @author Andrew Williams * @since 2.0 */ public class SiteThemeResource extends DynamicWebResource { private final String style; public SiteThemeResource( String style ) { this.style = style; } @Override protected ResourceState getResourceState() { return new ResourceState() { @Override public byte[] getData() { InputStream file = getFile(); if ( file == null ) { return new byte[0]; } return IOUtil.toString( file ).getBytes(); } @Override public String getContentType() { return "text/css"; } @Override public Time lastModifiedTime() { // don't cache (for now...) // TODO get correct timing return Time.now(); } private InputStream getFile() { Site site = ((XSMSession) Session.get()).getSite(); if ( site == null ) { return null; } if ( style.equals( "style" ) ) { return getStyleFile( site.getStylesheet() ); } else { return getStyleFile( site.getLayout() ); } } private InputStream getStyleFile( String id ) { Site site = ((XSMSession) Session.get()).getSite(); if ( !id.equals( "custom" ) ) { String lookup = "/com/rectang/xsm/publish/" + style + "/" + id + ".css"; return getClass().getClassLoader().getResourceAsStream( lookup ); } // using a custom file so read it from the template directory File file = new File( XSM.getConfig().getSiteTemplateDir( site ), "/" + style + ".css" ); if ( file.exists() ) { try { return new FileInputStream( file ); } catch ( FileNotFoundException e ) { return null; } } else { return null; } } }; } }