package io.airlift.airship.coordinator;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
import javax.xml.transform.stream.StreamSource;
import java.io.File;
import java.io.InputStream;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;
@XmlType
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "metadata")
public class MavenMetadata
{
@XmlElement
public String groupId;
@XmlElement
public String artifactId;
@XmlElement
public String version;
@XmlElement
public Versioning versioning;
@XmlType
@XmlAccessorType(XmlAccessType.FIELD)
public static class Versioning
{
@XmlElement
public Snapshot snapshot;
@XmlElement
public String latest;
@XmlElement
public String release;
@XmlElement
public String lastUpdated;
@XmlElement(name = "snapshotVersion")
@XmlElementWrapper(name = "snapshotVersions")
public final List<SnapshotVersion> snapshotVersions = new ArrayList<SnapshotVersion>();
@XmlElement(name = "version")
@XmlElementWrapper(name = "versions")
public final List<String> versions = new ArrayList<String>();
}
@XmlType
@XmlAccessorType(XmlAccessType.FIELD)
public static class Snapshot
{
@XmlElement
public String timestamp;
@XmlElement
public String buildNumber;
}
@XmlType
@XmlAccessorType(XmlAccessType.FIELD)
public static class SnapshotVersion
{
@XmlElement
public String classifier;
@XmlElement
public String extension;
@XmlElement
public String value;
@XmlElement
public String updated;
}
private static final JAXBContext jaxbContext;
static {
try {
jaxbContext = JAXBContext.newInstance(MavenMetadata.class);
}
catch (JAXBException e) {
throw new RuntimeException(e);
}
}
public static MavenMetadata unmarshalMavenMetadata(InputStream in)
throws Exception
{
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
return unmarshaller.unmarshal(new StreamSource(in), MavenMetadata.class).getValue();
}
public static MavenMetadata unmarshalMavenMetadata(String in)
throws Exception
{
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
return unmarshaller.unmarshal(new StreamSource(new StringReader(in)), MavenMetadata.class).getValue();
}
public static void marshalMavenMetadata(File file, MavenMetadata metadata)
throws Exception
{
file.getParentFile().mkdirs();
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.marshal(metadata, file);
}
}