summaryrefslogtreecommitdiffstats
path: root/logic/minecraft/GradleSpecifier.h
blob: 3ee40b864d0219c6af4ebf4df4cf320984770fca (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#pragma once

#include <QString>
#include <QStringList>
#include "logic/DefaultVariable.h"

struct GradleSpecifier
{
	GradleSpecifier()
	{
		m_valid = false;
	}
	GradleSpecifier(QString value)
	{
		operator=(value);
	}
	GradleSpecifier & operator =(const QString & value)
	{
		/*
		org.gradle.test.classifiers : service : 1.0 : jdk15 @ jar
		DEBUG   0 "org.gradle.test.classifiers:service:1.0:jdk15@jar" 
		DEBUG   1 "org.gradle.test.classifiers" 
		DEBUG   2 "service" 
		DEBUG   3 "1.0" 
		DEBUG   4 ":jdk15" 
		DEBUG   5 "jdk15" 
		DEBUG   6 "@jar" 
		DEBUG   7 "jar"
		*/
		QRegExp matcher("([^:@]+):([^:@]+):([^:@]+)" "(:([^:@]+))?" "(@([^:@]+))?");
		m_valid = matcher.exactMatch(value);
		auto elements = matcher.capturedTexts();
		groupId = elements[1];
		artifactId = elements[2];
		version = elements[3];
		classifier = elements[5];
		if(!elements[7].isEmpty())
		{
			extension = elements[7];
		}
		return *this;
	}
	operator QString() const
	{
		if(!m_valid)
			return "INVALID";
		QString retval = groupId + ":" + artifactId + ":" + version;
		if(!classifier.isEmpty())
		{
			retval += ":" + classifier;
		}
		if(extension.isExplicit())
		{
			retval += "@" + extension;
		}
		return retval;
	}
	QString toPath() const
	{
		if(!m_valid)
			return "INVALID";
		QString path = groupId;
		path.replace('.', '/');
		path += '/' + artifactId + '/' + version + '/' + artifactId + '-' + version;
		if(!classifier.isEmpty())
		{
			path += "-" + classifier;
		}
		path += "." + extension;
		return path;
	}
	bool valid()
	{
		return m_valid;
	}
private:
	QString groupId;
	QString artifactId;
	QString version;
	QString classifier;
	DefaultVariable<QString> extension = DefaultVariable<QString>("jar");
	bool m_valid = false;
};