## Class diagram ##
###################

@startuml
hide empty members
hide empty methods
hide empty fields
abstract class UmlDiagramService {
  public void doGet(HttpServletRequest rq, HttpServletResponse rsp)
  abstract public String getSource( String uri)
  abstract FileFormat getOutputFormat()
}
class DiagramResponse {
  DiagramResponse( HttpServletResponse r, FileFormat f)
  void sendDiagram( String uml)
  void sendMap( String uml)
}
abstract HttpServlet <|-- UmlDiagramService
abstract HttpServlet <|-- MapServlet
abstract HttpServlet <|-- ProxyServlet
UmlDiagramService <|-- PngServlet
UmlDiagramService <|-- SvgServlet
UmlDiagramService <|-- EpsServlet
UmlDiagramService <|-- EpsTextServlet
UmlDiagramService <|-- AsciiServlet
UmlDiagramService o- DiagramResponse
MapServlet o-- DiagramResponse
ProxyServlet o-- DiagramResponse
@enduml

## Sequence diagram ##
######################

@startuml
title Generation of a PNG image illustrated
PngServlet -> PngServlet : getSource()
PngServlet -> UmlExtractor : getUmlSource()
UmlExtractor --> PngServlet
PngServlet -> PngServlet : getOutputFormat()
PngServlet -> DiagramResponse : <<create>>
PngServlet -> DiagramResponse : sendDiagram()
participant "PlantUML library" as Lib #99FF99
DiagramResponse -> Lib : generateImage()
Lib --> DiagramResponse
DiagramResponse --> PngServlet
@enduml