/**
* Copyright 2012 Universitat Pompeu Fabra.
*
* Licensed 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.onexus.website.api.utils;
import org.apache.wicket.Component;
import org.apache.wicket.behavior.Behavior;
import org.apache.wicket.markup.head.CssHeaderItem;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.request.resource.CssResourceReference;
import org.apache.wicket.util.string.Strings;
import org.onexus.data.api.IDataManager;
import org.onexus.resource.api.IResourceManager;
import org.onexus.resource.api.ORI;
import org.onexus.resource.api.Project;
import org.onexus.website.api.WebsiteApplication;
import javax.inject.Inject;
public class CustomCssBehavior extends Behavior {
private transient CssHeaderItem cssHeaderItem;
private ORI resourceUri;
@Inject
private IDataManager dataManager;
@Inject
private IResourceManager resourceManager;
public CustomCssBehavior(ORI parentOri, String cssTag) {
if (!Strings.isEmpty(cssTag)) {
resourceUri = new ORI(cssTag);
if (!resourceUri.isAbsolute()) {
resourceUri = resourceUri.toAbsolute(parentOri);
}
}
}
private CustomCssBehavior(ORI resourceUri) {
this.resourceUri = resourceUri;
}
@Override
public void renderHead(Component component, IHeaderResponse response) {
if (cssHeaderItem == null) {
if (resourceUri != null) {
String dataService = getDataManager().getMount();
Project project = getResourceManager().getProject(resourceUri.getProjectUrl());
String url;
if (project != null) {
url = WebsiteApplication.toAbsolutePath('/' + dataService + '/' + project.getName() + resourceUri.getPath());
} else {
url = resourceUri.toString();
}
cssHeaderItem = CssHeaderItem.forUrl(url);
} else {
cssHeaderItem = CssHeaderItem.forReference(new CssResourceReference(component.getClass(), component.getClass().getSimpleName() + ".css"));
}
}
response.render(cssHeaderItem);
}
private IDataManager getDataManager() {
if (dataManager == null) {
WebsiteApplication.inject(this);
}
return dataManager;
}
private IResourceManager getResourceManager() {
if (resourceManager == null) {
WebsiteApplication.inject(this);
}
return resourceManager;
}
}