summaryrefslogtreecommitdiffstats
path: root/libraries/logic/minecraft/GradleSpecifier.h
blob: 1830853766df75789d5662ce5cb86e192640b9c9 (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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#pragma once

#include <QString>
#include <QStringList>
#include "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();
		m_groupId = elements[1];
		m_artifactId = elements[2];
		m_version = elements[3];
		m_classifier = elements[5];
		if(!elements[7].isEmpty())
		{
			m_extension = elements[7];
		}
		return *this;
	}
	operator QString() const
	{
		if(!m_valid)
			return "INVALID";
		QString retval = m_groupId + ":" + m_artifactId + ":" + m_version;
		if(!m_classifier.isEmpty())
		{
			retval += ":" + m_classifier;
		}
		if(m_extension.isExplicit())
		{
			retval += "@" + m_extension;
		}
		return retval;
	}
	QString toPath() const
	{
		if(!m_valid)
			return "INVALID";
		QString path = m_groupId;
		path.replace('.', '/');
		path += '/' + m_artifactId + '/' + m_version + '/' + m_artifactId + '-' + m_version;
		if(!m_classifier.isEmpty())
		{
			path += "-" + m_classifier;
		}
		path += "." + m_extension;
		return path;
	}
	inline bool valid() const
	{
		return m_valid;
	}
	inline QString version() const
	{
		return m_version;
	}
	inline QString groupId() const
	{
		return m_groupId;
	}
	inline QString artifactId() const
	{
		return m_artifactId;
	}
	inline void setClassifier(const QString & classifier)
	{
		m_classifier = classifier;
	}
	inline QString classifier() const
	{
		return m_classifier;
	}
	inline QString extension() const
	{
		return m_extension;
	}
	inline QString artifactPrefix() const
	{
		return m_groupId + ":" + m_artifactId;
	}
	bool matchName(const GradleSpecifier & other) const
	{
		return other.artifactId() == artifactId() && other.groupId() == groupId();
	}
	bool operator==(const GradleSpecifier & other) const
	{
		if(m_groupId != other.m_groupId)
			return false;
		if(m_artifactId != other.m_artifactId)
			return false;
		if(m_version != other.m_version)
			return false;
		if(m_classifier != other.m_classifier)
			return false;
		if(m_extension != other.m_extension)
			return false;
		return true;
	}
private:
	QString m_groupId;
	QString m_artifactId;
	QString m_version;
	QString m_classifier;
	DefaultVariable<QString> m_extension = DefaultVariable<QString>("jar");
	bool m_valid = false;
};