class MavenMetaAnalyzer extends AbstractMetaAnalyzer {

    private static final Logger LOGGER = Logger.getLogger(MavenMetaAnalyzer.class);
    private static final String DEFAULT_BASE_URL = "https://repo1.maven.org/maven2";
    private static final String REPO_METADATA_URL = "/%s/maven-metadata.xml";

    MavenMetaAnalyzer() {
        this.baseUrl = DEFAULT_BASE_URL;
    }

    /**
     * {@inheritDoc}
     */
    public boolean isApplicable(final Component component) {
        return component.getPurl() != null && PackageURL.StandardTypes.MAVEN.equals(component.getPurl().getType());
    }

    /**
     * {@inheritDoc}
     */
    public RepositoryType supportedRepositoryType() {
        return RepositoryType.MAVEN;
    }

    /**
     * {@inheritDoc}
     */
    public MetaModel analyze(final Component component) {<FILL_FUNCTION_BODY>}
}

        final MetaModel meta = new MetaModel(component);
        if (component.getPurl() != null) {
            final String mavenGavUrl = component.getPurl().getNamespace().replaceAll("\\.", "/") + "/" + component.getPurl().getName();
            final String url = String.format(baseUrl + REPO_METADATA_URL, mavenGavUrl);
            try (final CloseableHttpResponse response = processHttpRequest(url)) {
                if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                    final HttpEntity entity = response.getEntity();
                    if (entity != null) {
                        try (InputStream in = entity.getContent()) {
                            final Document document = XmlUtil.buildSecureDocumentBuilder().parse(in);
                            final var xpathFactory = XPathFactory.newInstance();
                            final XPath xpath = xpathFactory.newXPath();

                            final XPathExpression releaseExpression = xpath.compile("/metadata/versioning/release");
                            final XPathExpression latestExpression = xpath.compile("/metadata/versioning/latest");
                            final var release = (String) releaseExpression.evaluate(document, XPathConstants.STRING);
                            final String latest = (String) latestExpression.evaluate(document, XPathConstants.STRING);

                            final XPathExpression lastUpdatedExpression = xpath.compile("/metadata/versioning/lastUpdated");
                            final var lastUpdated = (String) lastUpdatedExpression.evaluate(document, XPathConstants.STRING);

                            meta.setLatestVersion(release != null ? release : latest);
                            if (lastUpdated != null) {
                                meta.setPublishedTimestamp(DateUtil.parseDate(lastUpdated));
                            }
                        }
                    }
                } else {
                    handleUnexpectedHttpResponse(LOGGER, url, response.getStatusLine().getStatusCode(), response.getStatusLine().getReasonPhrase(), component);
                }
            } catch (IOException | ParserConfigurationException | SAXException | XPathExpressionException e) {
                handleRequestException(LOGGER, e);
            } catch (Exception ex) {
                throw new MetaAnalyzerException(ex);
            }

        }
        return meta;
    
<methods>public non-sealed void <init>() ,public void setRepositoryBaseUrl(java.lang.String) ,public void setRepositoryUsernameAndPassword(java.lang.String, java.lang.String) <variables>protected java.lang.String baseUrl,protected java.lang.String password,protected java.lang.String username