Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
83 changes: 83 additions & 0 deletions examples/mapping/gitlab_mapping_example_1_0.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
<mapping version="1.0">

<resources>
<constant value="planks" id="cellar_character"/>
<constant value="wood" id="cellar_external_character"/>
</resources>

<linking source="branch" target="ground"/>


<linking source="tree" target="cellar">
<binding from="numberOfChildren" to="height"/>
</linking>


<linking source="commit" target="floor">
<binding from="addition" to="length">
<conversions>
<conversion type="normalize"/>
</conversions>
</binding>
<binding from="deletion" to="width">
<conversions>
<conversion type="normalize"/>
</conversions>
</binding>
<binding from="total" to="height"/>
<binding from="messageLength" to="character">
<conversions>
<conversion type="quantization">
<parameter name="level0" value="glass"/>
<parameter name="level1" value="sand"/>
<parameter name="level2" value="planks"/>
<parameter name="level3" value="stone"/>
<parameter name="level4" value="obsidian"/>
</conversion>
</conversions>
</binding>
<binding from="messageLength" to="external_character">
<conversions>
<conversion type="quantization">
<parameter name="level0" value="metal"/>
<parameter name="level1" value="sandstone"/>
<parameter name="level2" value="wood"/>
<parameter name="level3" value="cobblestone"/>
<parameter name="level4" value="obsidian"/>
</conversion>
</conversions>
</binding>
<binding from="numberOfComments" to="torches">
<conversions>
<conversion type="quantization">
<parameter name="level0" value="1"/>
<parameter name="level1" value="2"/>
<parameter name="level2" value="3"/>
</conversion>
</conversions>
</binding>
</linking>



<linking source="issue" target="garden">
<binding from="timeEstimate" to="mushroom-ratio">
<conversions>
<conversion type="normalize"/>
</conversions>
</binding>

<binding from="totalTime" to="tree-ratio">
<conversions>
<conversion type="normalize"/>
</conversions>
</binding>

<binding from="timeRatio" to="flower-ratio">
<conversions>
<conversion type="normalize"/>
</conversions>
</binding>
</linking>

</mapping>
66 changes: 66 additions & 0 deletions examples/mapping/gitlab_mapping_example_2_0.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
<mapping version="2.0">

<resources>
<constant value="planks" id="cellar_character"/>
<constant value="wood" id="cellar_external_character"/>
</resources>
<linking source="branch" target="ground"/>

<linking source="commit" target="floor">
<binding from="addition" to="length">
<conversions>
<conversion type="normalize"/>
</conversions>
</binding>
<binding from="deletion" to="width">
<conversions>
<conversion type="normalize"/>
</conversions>
</binding>
<binding from="total" to="height"/>
<binding from="messageLength" to="character">
<conversions>
<conversion type="quantization">
<parameter name="level0" value="glass"/>
<parameter name="level1" value="sand"/>
<parameter name="level2" value="planks"/>
<parameter name="level3" value="stone"/>
<parameter name="level4" value="obsidian"/>
</conversion>
</conversions>
</binding>
<binding from="messageLength" to="external_character">
<conversions>
<conversion type="quantization">
<parameter name="level0" value="metal"/>
<parameter name="level1" value="sandstone"/>
<parameter name="level2" value="wood"/>
<parameter name="level3" value="cobblestone"/>
<parameter name="level4" value="obsidian"/>
</conversion>
</conversions>
</binding>
<binding from="numberOfComments" to="torches">
<conversions>
<conversion type="quantization">
<parameter name="level0" value="1"/>
<parameter name="level1" value="2"/>
<parameter name="level2" value="3"/>
</conversion>
</conversions>
</binding>
</linking>

<linking source="user" target="garden">
<binding from="deletionRatio" to="flower-ratio">
<conversions>
<conversion type="normalize"/>
</conversions>
</binding>
<binding from="additionRatio" to="tree-ratio">
<conversions>
<conversion type="normalize"/>
</conversions>
</binding>
</linking>
</mapping>
11 changes: 11 additions & 0 deletions sources/codemetropolis-toolchain-converter/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,12 @@
<artifactId>codemetropolis-toolchain-commons</artifactId>
<version>1.4.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>args4j</groupId>
<artifactId>args4j</artifactId>
Expand All @@ -64,5 +70,10 @@
<artifactId>graphlib</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.gitlab4j</groupId>
<artifactId>gitlab4j-api</artifactId>
<version>4.9.19</version>
</dependency>
</dependencies>
</project>
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import java.util.Map;

import codemetropolis.toolchain.commons.cdf.converter.CdfConverter;
import codemetropolis.toolchain.converter.gitlab.GitLabConverter;
import codemetropolis.toolchain.converter.sonarqube.SonarQubeConverter;
import codemetropolis.toolchain.converter.sourcemeter.GraphConverter;

Expand All @@ -12,6 +13,8 @@ private ConverterLoader() {}

public static CdfConverter load(ConverterType converterType, Map<String, String> params) {
switch(converterType) {
case GITLAB:
return new GitLabConverter(params);
case SOURCEMETER:
return new GraphConverter(params);
case SONARQUBE:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package codemetropolis.toolchain.converter.control;

public enum ConverterType {
GITLAB,
SOURCEMETER,
SONARQUBE
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package codemetropolis.toolchain.converter.gitlab;

import codemetropolis.toolchain.commons.cdf.CdfElement;
import codemetropolis.toolchain.commons.util.Resources;
import org.gitlab4j.api.*;
import org.gitlab4j.api.models.*;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Base64;
import java.util.List;

public class GitLabClient {

private final String EXCEPTION_MESSAGE = "Invalid project, group, username or password! (-i hostUrl (eg.: http://gitlab-okt.sed.hu) parameters are: -p username=... password=... group=... project=...)";

private String hostUrl;
private String username;
private String password;

public GitLabClient(String hostUrl, String username, String password) {
this.hostUrl = hostUrl;
this.username = username;
this.password = password;
}

public String getHostUrl() {
return hostUrl;
}

public void authentication() throws GitLabConnectException
{
GitLabApi gitLabApi = null;

try {
gitLabApi = GitLabApi.login(hostUrl, username, password);
} catch (GitLabApiException e) {
throw new GitLabConnectException(EXCEPTION_MESSAGE);
}

if(gitLabApi != null) {
GitLabElement.setGitLabApi(gitLabApi);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package codemetropolis.toolchain.converter.gitlab;

import codemetropolis.toolchain.commons.exceptions.CodeMetropolisException;

public class GitLabConnectException extends CodeMetropolisException {
public GitLabConnectException() { super(); }
public GitLabConnectException(String message) { super(message); }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
package codemetropolis.toolchain.converter.gitlab;

import codemetropolis.toolchain.commons.cdf.CdfElement;
import codemetropolis.toolchain.commons.cdf.CdfProperty;
import codemetropolis.toolchain.commons.cdf.CdfTree;
import codemetropolis.toolchain.commons.cdf.converter.CdfConverter;
import codemetropolis.toolchain.commons.exceptions.CodeMetropolisException;
import org.gitlab4j.api.GitLabApi;
import org.gitlab4j.api.GitLabApiException;
import org.gitlab4j.api.models.Project;

import java.util.List;
import java.util.Map;

//to run: -t gitlab -i hostUrl (e.g.: http://gitlab-okt.sed.hu) -o output_dir -p username=<your_username> password=<your_password> group=<group_name> project=<project_name>

public class GitLabConverter extends CdfConverter {

public final String USER_NAME_PARAM = "username";
public final String PASSWORD_PARAM = "password";
public final String GROUP_PARAM = "group";
public final String PROJECT_PARAM = "project";

private String hostUrl;
private String projectName;
private String groupName;

private Project p;

public String getHostUrl() {
return hostUrl;
}

public void setHostUrl(String hostUrl) {
this.hostUrl = hostUrl;
}

public String getProjectName() {
return projectName;
}

public void setProjectName(String projectName) {
this.projectName = projectName;
}

public String getGroupName() {
return groupName;
}

public void setGroupName(String groupName) {
this.groupName = groupName;
}

public Project getP() {
return p;
}

public void setP(Project p) {
this.p = p;
}

public String createFullUrl() {
return hostUrl + "/" + groupName + "/" + projectName;
}

public GitLabConverter() {super(null);}

public GitLabConverter(Map<String, String> params) {
super(params);
}

public void authentication() throws GitLabConnectException
{
projectName = getParameter(PROJECT_PARAM);
groupName = getParameter(GROUP_PARAM);

GitLabClient glc = new GitLabClient(hostUrl, getParameter(USER_NAME_PARAM), getParameter(PASSWORD_PARAM));
glc.authentication();
}

@Override
public CdfTree createElements(String source) throws CodeMetropolisException {
hostUrl = source;

try {
authentication();

List<Project> pList;
pList = GitLabElement.gitLabApi.getProjectApi().getProjects();

for(Project pr : pList)
{
if(pr.getName().equalsIgnoreCase(projectName)) {
p = pr;
GitLabElement.setProjectID(p.getId());
}
}
} catch (GitLabConnectException e) {
throw new CodeMetropolisException(e.getMessage());
} catch (GitLabApiException e) {
throw new CodeMetropolisException(e.getMessage());
}

CdfTree tree = new CdfTree();
CdfElement root = null;

try {
root = GitLabResource.getElement(Type.PROJECT, Integer.toString(GitLabElement.projectId), Integer.toString(GitLabElement.projectId));
} catch (GitLabException e) {
throw new CodeMetropolisException(e.getMessage());
}

tree.setRoot(root);

return tree;
}
}
Loading