package fr.openwide.core.wicket.more.css.lesscss.model;
import java.io.IOException;
import java.io.Serializable;
import java.util.Collection;
import org.apache.commons.lang3.tuple.Pair;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.io.ClassPathResource;
import com.google.common.collect.Lists;
public class LessCssStylesheetInformation implements Serializable {
private static final long serialVersionUID = 5751644157529838224L;
private static final Logger LOGGER = LoggerFactory.getLogger(LessCssStylesheetInformation.class);
private final Class<?> scope;
private final String name;
private String source;
private long lastModifiedTime;
private Collection<Pair<? extends Class<?>, String>> referencedResources = Lists.newArrayList();
public LessCssStylesheetInformation(LessCssStylesheetInformation reference, String newSource) {
this.scope = reference.scope;
this.name = reference.name;
this.referencedResources.addAll(reference.referencedResources);
this.source = newSource;
this.lastModifiedTime = reference.lastModifiedTime;
}
public LessCssStylesheetInformation(Class<?> scope, String name, String source, long lastModifiedTime) {
this.scope = scope;
this.name = name;
this.referencedResources.add(Pair.of(scope, name));
this.source = source;
this.lastModifiedTime = lastModifiedTime;
}
public Class<?> getScope() {
return scope;
}
public String getName() {
return name;
}
public String getSource() {
return source;
}
public void setSource(String source) {
this.source = source;
}
public void addImportedStylesheet(LessCssStylesheetInformation importedStylesheet) {
if (importedStylesheet.lastModifiedTime > this.lastModifiedTime) {
this.lastModifiedTime = importedStylesheet.lastModifiedTime;
}
this.referencedResources.addAll(importedStylesheet.referencedResources);
}
public long getLastModifiedTime() {
return lastModifiedTime;
}
public boolean isUpToDate() {
for (Pair<? extends Class<?>, String> referencedResource : referencedResources) {
if (!isUpToDate(referencedResource.getLeft(), referencedResource.getRight())) {
return false;
}
}
return true;
}
private boolean isUpToDate(Class<?> scope, String name) {
ClassPathResource resource = new ClassPathResource(name, scope);
try {
return resource.lastModified() <= lastModifiedTime;
} catch (IOException e) {
LOGGER.error("Error while trying to determine if resource " + scope.getName() + "/" + name + " is up to date. Assuming it is outdated.", e);
return false;
}
}
}