package com.celements.emptycheck.service;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import javax.inject.Singleton;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.xwiki.component.annotation.Component;
import org.xwiki.component.annotation.Requirement;
import org.xwiki.context.Execution;
import org.xwiki.model.reference.DocumentReference;
import com.celements.emptycheck.internal.NextNonEmptyChildrenCommand;
import com.xpn.xwiki.XWikiContext;
@Component
@Singleton
public class EmptyCheckService implements IEmptyCheckRole {
private static Log LOGGER = LogFactory.getFactory().getInstance(EmptyCheckService.class);
@Requirement
Map<String, IEmptyDocStrategyRole> emptyDocStrategies;
@Requirement
Execution execution;
private XWikiContext getContext() {
return (XWikiContext) execution.getContext().getProperty("xwikicontext");
}
public DocumentReference getNextNonEmptyChildren(DocumentReference documentRef) {
DocumentReference nonEmptyChildRef = new NextNonEmptyChildrenCommand().getNextNonEmptyChildren(
documentRef);
if (nonEmptyChildRef != null) {
return nonEmptyChildRef;
}
return documentRef;
}
public boolean isEmptyRTEDocument(DocumentReference docRef) {
boolean isEmptyRTEdoc = true;
for (String checkImplName : getCheckImplNamesConfig()) {
if (emptyDocStrategies.keySet().contains(checkImplName)) {
if (isEmptyRTEdoc) {
isEmptyRTEdoc &= emptyDocStrategies.get(checkImplName).isEmptyRTEDocument(docRef);
}
} else if (!"".equals(checkImplName)) {
LOGGER.warn("wrong checkImpleNames configuration in [" + getContext().getDatabase()
+ "] skipping implName [" + checkImplName + "].");
}
}
return isEmptyRTEdoc;
}
public boolean isEmptyDocument(DocumentReference docRef) {
boolean isEmptyRTEdoc = true;
for (String checkImplName : getCheckImplNamesConfig()) {
if (emptyDocStrategies.keySet().contains(checkImplName)) {
if (isEmptyRTEdoc) {
isEmptyRTEdoc &= emptyDocStrategies.get(checkImplName).isEmptyDocument(docRef);
}
} else if (!"".equals(checkImplName)) {
LOGGER.warn("wrong checkImpleNames configuration in [" + getContext().getDatabase()
+ "] skipping implName [" + checkImplName + "].");
}
}
return isEmptyRTEdoc;
}
List<String> getCheckImplNamesConfig() {
String implConfigNames = getContext().getWiki().getXWikiPreference(EMPTYCHECK_MODULS_PREF_NAME,
"celements.emptycheckModuls", "default", getContext());
if ((implConfigNames != null) && (!"".equals(implConfigNames))) {
return Arrays.asList(implConfigNames.split("[;,]"));
} else {
return Arrays.asList("default");
}
}
}