package nl.gertontenham.magnolia.templating.beans;
import info.magnolia.config.registry.DefinitionProvider;
import info.magnolia.config.registry.Registry;
import info.magnolia.registry.RegistrationException;
import info.magnolia.rendering.template.AreaDefinition;
import info.magnolia.rendering.template.ComponentAvailability;
import info.magnolia.rendering.template.TemplateDefinition;
import info.magnolia.rendering.template.registry.TemplateDefinitionRegistry;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.inject.Inject;
import java.util.HashMap;
import java.util.Map;
/**
* AvailabilityConfig node2bean
*/
public class AvailabilityConfig {
private static final Logger log = LoggerFactory.getLogger(AvailabilityConfig.class);
private String targetDefinitionId;
private String targetAreaName;
private Map<String,ComponentAvailability> components = new HashMap<>();
//private Map<String, AreaDefinition> areas = new HashMap<>();
private TemplateDefinitionRegistry templateDefinitionRegistry;
@Inject
public AvailabilityConfig(TemplateDefinitionRegistry templateDefinitionRegistry) {
this.templateDefinitionRegistry = templateDefinitionRegistry;
}
public Map<String, ComponentAvailability> getComponents() {
return components;
}
public void setComponents(Map<String, ComponentAvailability> components) {
try {
String[] areaNames = StringUtils.split(getTargetAreaName(),":");
final DefinitionProvider<TemplateDefinition> templateDefinitionProvider = templateDefinitionRegistry.getProvider("magnolia-templating-foundation:pages/genericPage");
AreaDefinition areaDefinition = templateDefinitionProvider.get().getAreas().get(areaNames[0]);
for (int i = 1; i < areaNames.length; i++) {
areaDefinition = areaDefinition.getAreas().get(areaNames[i]);
}
areaDefinition.getAvailableComponents().putAll(components);
} catch (IllegalArgumentException | Registry.NoSuchDefinitionException | Registry.InvalidDefinitionException e) {
log.debug("Error", e);
}
this.components = components;
}
public void addComponent(String name, ComponentAvailability component){
this.components.put(name, component);
}
public String getTargetDefinitionId() {
return targetDefinitionId;
}
public void setTargetDefinitionId(String targetDefinitionId) {
this.targetDefinitionId = targetDefinitionId;
}
public String getTargetAreaName() {
return targetAreaName;
}
public void setTargetAreaName(String targetAreaName) {
this.targetAreaName = targetAreaName;
}
}