package org.nate.internal.selector; import org.nate.encoder.NateNode; import org.nate.internal.transformer.NateTransformer; import org.nate.internal.transformer.TransformationMap; public final class AttributeSelectors { private AttributeSelectors() { } public static NateSelector from(String elementSelectionString, String attributeName) { if (elementSelectionString.isEmpty()) { return new SimpleAttributeSelector(attributeName); } return new ElementAttributeSelector(elementSelectionString, attributeName); } private static final class SimpleAttributeSelector implements NateSelector { private final String attributeName; public SimpleAttributeSelector(String attributeName) { this.attributeName = attributeName; } @Override public void transformSelectedNodes(NateTransformer transformer, NateNode node) { transformer.setAttribute(attributeName, node); } } private static final class ElementAttributeSelector implements NateSelector { private final ElementSelector elementSelector; private final String attributeName; public ElementAttributeSelector(String elementSelectionString, String attributeName) { this.attributeName = attributeName; this.elementSelector = new ElementSelector(elementSelectionString); } @Override public void transformSelectedNodes(final NateTransformer transformer, NateNode node) { NateTransformer attributeTransformer = new TransformationMap(new SimpleAttributeSelector(attributeName), transformer); elementSelector.transformSelectedNodes(attributeTransformer, node); } } }