Class AbstractClientlibVisitor
- java.lang.Object
-
- com.composum.sling.clientlibs.processor.AbstractClientlibVisitor
-
- All Implemented Interfaces:
ClientlibVisitor
- Direct Known Subclasses:
ClientlibDebugConsolePlugin.DebugVisitor,ProcessingVisitor,ProcessingVisitor.ExcludeDependenciesVisitor,RenderingVisitor,UpdateTimeVisitor
public abstract class AbstractClientlibVisitor extends Object implements ClientlibVisitor
Base class for visitors to aid processing of all parts of a client library.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface com.composum.sling.clientlibs.handle.ClientlibVisitor
ClientlibVisitor.VisitorMode
-
-
Field Summary
Fields Modifier and Type Field Description protected longembeddedHashprotected booleanhasEmbeddedFilesstatic PatternHASH_PATTERNMatches the results ofgetHash().protected static org.slf4j.LoggerLOGprotected ClientlibElementownerThe clientlib or category which this visitor processes - i.e., which owns embedded stuff.protected LinkedHashSet<ClientlibLink>processedElementsprotected org.apache.sling.api.resource.ResourceResolverresolverprotected ClientlibServiceservice
-
Constructor Summary
Constructors Modifier Constructor Description protectedAbstractClientlibVisitor(ClientlibElement owner, ClientlibService service, org.apache.sling.api.resource.ResourceResolver resolver, LinkedHashSet<ClientlibLink> processedElements)
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected voidaction(ClientlibCategory clientlibCategory, ClientlibVisitor.VisitorMode mode, ClientlibResourceFolder parent)Optional action to take after visiting the element.protected voidaction(ClientlibExternalUri externalUri, ClientlibVisitor.VisitorMode mode, ClientlibResourceFolder parent)Optional action to take after visiting the element.protected voidaction(ClientlibFile file, ClientlibVisitor.VisitorMode mode, ClientlibResourceFolder parent)Optional action to take after visiting the element.protected voidaction(Clientlib clientlib, ClientlibVisitor.VisitorMode mode, ClientlibResourceFolder parent)Optional action to take after visiting the element.protected voidaction(ClientlibResourceFolder folder, ClientlibVisitor.VisitorMode mode, ClientlibResourceFolder parent)Optional action to take after visiting the element.protected voidalreadyProcessed(ClientlibRef ref, ClientlibVisitor.VisitorMode mode, ClientlibResourceFolder folder)Hook for additional checks about already processed elements.protected abstract ClientlibVisitorcreateVisitorFor(ClientlibElement element)Creates a new visitor for the given clientlib or category as owner.ClientlibVisitorexecute()Triggers the processing of theClientlibVisitor.getOwner()by callingClientlibElement.accept(ClientlibVisitor, VisitorMode, ClientlibResourceFolder).StringgetHash()Hash consisting of the updatetimes and paths of all embedded files, which should be sufficient to identify any changes as a strong HTTP ETag.ClientlibElementgetOwner()The ClientlibElement (clientlib or category) whose embedded elements this visitor processes; clientlibs or categories as dependency will be processed by their own visitor.Set<ClientlibLink>getProcessedElements()protected ClientlibVisitorgetVisitorFor(ClientlibVisitor.VisitorMode mode, ClientlibElement element)Returns the appropriate visitor for the given mode and element: if mode=DEPENDS and element is a clientlib or category.protected booleanisNotProcessed(ClientlibRef ref)Checks whether something matching this reference has already beenmarkAsProcessed(ClientlibLink, ClientlibResourceFolder, VisitorMode).protected voidmarkAsProcessed(ClientlibLink link, ClientlibResourceFolder parent, ClientlibVisitor.VisitorMode visitorMode)Marks a link processed for current clientlib call (that is, clientlib tag call).protected voidnotPresent(ClientlibRef ref, ClientlibVisitor.VisitorMode mode, ClientlibResourceFolder parent)Hook for additional checks about an element referenced but not present.protected List<ClientlibElement>removeMinificationDuplicates(List<ClientlibElement> children)protected voidresolveAndAccept(ClientlibRef ref, ClientlibVisitor.VisitorMode mode, ClientlibResourceFolder folder)protected booleansupportsEmbedding(Clientlib.Type type)protected voidupdateHash(String path, Calendar updatetime)voidvisit(ClientlibCategory category, ClientlibVisitor.VisitorMode mode, ClientlibResourceFolder parent)voidvisit(ClientlibExternalUri externalUri, ClientlibVisitor.VisitorMode mode, ClientlibResourceFolder parent)voidvisit(ClientlibFile file, ClientlibVisitor.VisitorMode mode, ClientlibResourceFolder parent)voidvisit(Clientlib clientlib, ClientlibVisitor.VisitorMode mode, ClientlibResourceFolder parent)voidvisit(ClientlibResourceFolder folder, ClientlibVisitor.VisitorMode mode, ClientlibResourceFolder parent)
-
-
-
Field Detail
-
LOG
protected static final org.slf4j.Logger LOG
-
service
protected final ClientlibService service
-
resolver
protected final org.apache.sling.api.resource.ResourceResolver resolver
-
processedElements
protected final LinkedHashSet<ClientlibLink> processedElements
-
owner
protected final ClientlibElement owner
The clientlib or category which this visitor processes - i.e., which owns embedded stuff.
-
embeddedHash
protected long embeddedHash
-
hasEmbeddedFiles
protected boolean hasEmbeddedFiles
-
-
Constructor Detail
-
AbstractClientlibVisitor
protected AbstractClientlibVisitor(ClientlibElement owner, ClientlibService service, org.apache.sling.api.resource.ResourceResolver resolver, LinkedHashSet<ClientlibLink> processedElements)
-
-
Method Detail
-
getOwner
public ClientlibElement getOwner()
Description copied from interface:ClientlibVisitorThe ClientlibElement (clientlib or category) whose embedded elements this visitor processes; clientlibs or categories as dependency will be processed by their own visitor.- Specified by:
getOwnerin interfaceClientlibVisitor
-
execute
public ClientlibVisitor execute() throws IOException, javax.jcr.RepositoryException
Description copied from interface:ClientlibVisitorTriggers the processing of theClientlibVisitor.getOwner()by callingClientlibElement.accept(ClientlibVisitor, VisitorMode, ClientlibResourceFolder).- Specified by:
executein interfaceClientlibVisitor- Returns:
- this
- Throws:
IOExceptionjavax.jcr.RepositoryException
-
getVisitorFor
protected ClientlibVisitor getVisitorFor(ClientlibVisitor.VisitorMode mode, ClientlibElement element)
Returns the appropriate visitor for the given mode and element: if mode=DEPENDS and element is a clientlib or category.
-
createVisitorFor
protected abstract ClientlibVisitor createVisitorFor(ClientlibElement element)
Creates a new visitor for the given clientlib or category as owner. That'll usually be of the same type as ourselves. Caution: they have to share the sameprocessedElementsset!
-
visit
public void visit(ClientlibCategory category, ClientlibVisitor.VisitorMode mode, ClientlibResourceFolder parent) throws IOException, javax.jcr.RepositoryException
- Specified by:
visitin interfaceClientlibVisitor- Throws:
IOExceptionjavax.jcr.RepositoryException
-
visit
public void visit(Clientlib clientlib, ClientlibVisitor.VisitorMode mode, ClientlibResourceFolder parent) throws IOException, javax.jcr.RepositoryException
- Specified by:
visitin interfaceClientlibVisitor- Throws:
IOExceptionjavax.jcr.RepositoryException
-
visit
public void visit(ClientlibResourceFolder folder, ClientlibVisitor.VisitorMode mode, ClientlibResourceFolder parent) throws IOException, javax.jcr.RepositoryException
- Specified by:
visitin interfaceClientlibVisitor- Throws:
IOExceptionjavax.jcr.RepositoryException
-
removeMinificationDuplicates
protected List<ClientlibElement> removeMinificationDuplicates(List<ClientlibElement> children)
-
visit
public void visit(ClientlibFile file, ClientlibVisitor.VisitorMode mode, ClientlibResourceFolder parent) throws javax.jcr.RepositoryException, IOException
- Specified by:
visitin interfaceClientlibVisitor- Throws:
javax.jcr.RepositoryExceptionIOException
-
visit
public void visit(ClientlibExternalUri externalUri, ClientlibVisitor.VisitorMode mode, ClientlibResourceFolder parent)
- Specified by:
visitin interfaceClientlibVisitor
-
resolveAndAccept
protected void resolveAndAccept(ClientlibRef ref, ClientlibVisitor.VisitorMode mode, ClientlibResourceFolder folder) throws IOException, javax.jcr.RepositoryException
- Throws:
IOExceptionjavax.jcr.RepositoryException
-
alreadyProcessed
protected void alreadyProcessed(ClientlibRef ref, ClientlibVisitor.VisitorMode mode, ClientlibResourceFolder folder)
Hook for additional checks about already processed elements.
-
notPresent
protected void notPresent(ClientlibRef ref, ClientlibVisitor.VisitorMode mode, ClientlibResourceFolder parent)
Hook for additional checks about an element referenced but not present. Default: debuglog.
-
getHash
public String getHash()
Hash consisting of the updatetimes and paths of all embedded files, which should be sufficient to identify any changes as a strong HTTP ETag. That's an URL-safe string with 11 characters containing digits, letters and - or _ .
-
isNotProcessed
protected boolean isNotProcessed(ClientlibRef ref)
Checks whether something matching this reference has already beenmarkAsProcessed(ClientlibLink, ClientlibResourceFolder, VisitorMode).
-
markAsProcessed
protected void markAsProcessed(ClientlibLink link, ClientlibResourceFolder parent, ClientlibVisitor.VisitorMode visitorMode)
Marks a link processed for current clientlib call (that is, clientlib tag call).
-
getProcessedElements
public Set<ClientlibLink> getProcessedElements()
-
supportsEmbedding
protected boolean supportsEmbedding(Clientlib.Type type)
-
action
protected void action(ClientlibCategory clientlibCategory, ClientlibVisitor.VisitorMode mode, ClientlibResourceFolder parent)
Optional action to take after visiting the element. Default : empty.
-
action
protected void action(Clientlib clientlib, ClientlibVisitor.VisitorMode mode, ClientlibResourceFolder parent)
Optional action to take after visiting the element. Default : empty.
-
action
protected void action(ClientlibResourceFolder folder, ClientlibVisitor.VisitorMode mode, ClientlibResourceFolder parent)
Optional action to take after visiting the element. Default : empty.
-
action
protected void action(ClientlibFile file, ClientlibVisitor.VisitorMode mode, ClientlibResourceFolder parent) throws javax.jcr.RepositoryException, IOException
Optional action to take after visiting the element. Default : empty.- Throws:
javax.jcr.RepositoryExceptionIOException
-
action
protected void action(ClientlibExternalUri externalUri, ClientlibVisitor.VisitorMode mode, ClientlibResourceFolder parent)
Optional action to take after visiting the element. Default : empty.
-
-