Extended code.
This commit is contained in:
parent
90dee57a2e
commit
e0efd2b812
10 changed files with 814 additions and 211 deletions
|
@ -1,13 +1,13 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" path="src"/>
|
||||
<classpathentry kind="lib" path="lib/apache-httpclient-4.5.2.jar"/>
|
||||
<classpathentry kind="lib" path="lib/apache-httpclient-4.5.2.jar" sourcepath="lib/apache-httpclient-4.5.2-sources.zip"/>
|
||||
<classpathentry kind="lib" path="lib/apache-httpcore-4.4.5.jar"/>
|
||||
<classpathentry kind="lib" path="lib/commons-io-2.4.jar"/>
|
||||
<classpathentry kind="lib" path="lib/commons-io-2.4.jar" sourcepath="lib/commons-io-2.4-sources.jar"/>
|
||||
<classpathentry kind="lib" path="lib/commons-lang3-3.1.jar"/>
|
||||
<classpathentry kind="lib" path="lib/commons-logging-1.2.jar"/>
|
||||
<classpathentry kind="lib" path="lib/devinsy-utils-0.3.1.jar"/>
|
||||
<classpathentry kind="lib" path="lib/javax.json-1.0.4.jar"/>
|
||||
<classpathentry kind="lib" path="lib/javax.json-1.0.4.jar" sourcepath="lib/javax.json-1.0.4-sources.jar"/>
|
||||
<classpathentry kind="lib" path="lib/log4j-1.2.16.jar"/>
|
||||
<classpathentry kind="lib" path="lib/slf4j-api-1.7.5.jar"/>
|
||||
<classpathentry kind="lib" path="lib/slf4j-log4j12-1.7.5.jar"/>
|
||||
|
|
|
@ -13,7 +13,7 @@ cleanup.always_use_this_for_non_static_field_access=true
|
|||
cleanup.always_use_this_for_non_static_method_access=false
|
||||
cleanup.convert_functional_interfaces=false
|
||||
cleanup.convert_to_enhanced_for_loop=false
|
||||
cleanup.correct_indentation=false
|
||||
cleanup.correct_indentation=true
|
||||
cleanup.format_source_code=true
|
||||
cleanup.format_source_code_changes_only=false
|
||||
cleanup.insert_inferred_type_arguments=false
|
||||
|
@ -57,5 +57,63 @@ cleanup.use_this_for_non_static_method_access_only_if_necessary=true
|
|||
cleanup_profile=_GitLabAPI
|
||||
cleanup_settings_version=2
|
||||
eclipse.preferences.version=1
|
||||
editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
|
||||
formatter_profile=_GitLabAPI
|
||||
formatter_settings_version=12
|
||||
sp_cleanup.add_default_serial_version_id=true
|
||||
sp_cleanup.add_generated_serial_version_id=false
|
||||
sp_cleanup.add_missing_annotations=true
|
||||
sp_cleanup.add_missing_deprecated_annotations=true
|
||||
sp_cleanup.add_missing_methods=false
|
||||
sp_cleanup.add_missing_nls_tags=false
|
||||
sp_cleanup.add_missing_override_annotations=true
|
||||
sp_cleanup.add_missing_override_annotations_interface_methods=true
|
||||
sp_cleanup.add_serial_version_id=false
|
||||
sp_cleanup.always_use_blocks=true
|
||||
sp_cleanup.always_use_parentheses_in_expressions=true
|
||||
sp_cleanup.always_use_this_for_non_static_field_access=true
|
||||
sp_cleanup.always_use_this_for_non_static_method_access=false
|
||||
sp_cleanup.convert_functional_interfaces=false
|
||||
sp_cleanup.convert_to_enhanced_for_loop=false
|
||||
sp_cleanup.correct_indentation=true
|
||||
sp_cleanup.format_source_code=true
|
||||
sp_cleanup.format_source_code_changes_only=false
|
||||
sp_cleanup.insert_inferred_type_arguments=false
|
||||
sp_cleanup.make_local_variable_final=false
|
||||
sp_cleanup.make_parameters_final=true
|
||||
sp_cleanup.make_private_fields_final=false
|
||||
sp_cleanup.make_type_abstract_if_missing_method=false
|
||||
sp_cleanup.make_variable_declarations_final=true
|
||||
sp_cleanup.never_use_blocks=false
|
||||
sp_cleanup.never_use_parentheses_in_expressions=false
|
||||
sp_cleanup.on_save_use_additional_actions=true
|
||||
sp_cleanup.organize_imports=true
|
||||
sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
|
||||
sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
|
||||
sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
|
||||
sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
|
||||
sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
|
||||
sp_cleanup.remove_private_constructors=true
|
||||
sp_cleanup.remove_redundant_type_arguments=false
|
||||
sp_cleanup.remove_trailing_whitespaces=true
|
||||
sp_cleanup.remove_trailing_whitespaces_all=true
|
||||
sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
|
||||
sp_cleanup.remove_unnecessary_casts=true
|
||||
sp_cleanup.remove_unnecessary_nls_tags=true
|
||||
sp_cleanup.remove_unused_imports=true
|
||||
sp_cleanup.remove_unused_local_variables=false
|
||||
sp_cleanup.remove_unused_private_fields=true
|
||||
sp_cleanup.remove_unused_private_members=false
|
||||
sp_cleanup.remove_unused_private_methods=true
|
||||
sp_cleanup.remove_unused_private_types=true
|
||||
sp_cleanup.sort_members=true
|
||||
sp_cleanup.sort_members_all=false
|
||||
sp_cleanup.use_anonymous_class_creation=false
|
||||
sp_cleanup.use_blocks=true
|
||||
sp_cleanup.use_blocks_only_for_return_and_throw=false
|
||||
sp_cleanup.use_lambda=true
|
||||
sp_cleanup.use_parentheses_in_expressions=true
|
||||
sp_cleanup.use_this_for_non_static_field_access=true
|
||||
sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=false
|
||||
sp_cleanup.use_this_for_non_static_method_access=true
|
||||
sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
|
||||
|
|
3
README.MD
Normal file
3
README.MD
Normal file
|
@ -0,0 +1,3 @@
|
|||
GitLabAPIC is a GitLab API Client.
|
||||
|
||||
CAUTION: the GitLab API is huge bugged and limited. Lucky you are if it is enough.
|
|
@ -2,7 +2,7 @@
|
|||
# ################
|
||||
log4j.rootLogger = INFO, CONSOLE
|
||||
|
||||
log4j.logger.fr.devinsy.gitlabapi = DEBUG
|
||||
log4j.logger.fr.devinsy.gitlabapic = DEBUG
|
||||
log4j.logger.org.apache.http = INFO
|
||||
org.apache.commons.beanutils = INFO
|
||||
|
||||
|
@ -10,4 +10,4 @@ org.apache.commons.beanutils = INFO
|
|||
#--
|
||||
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
|
||||
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
|
||||
log4j.appender.CONSOLE.layout.ConversionPattern = %d{ISO8601} - MIGPUCK [%-5p] %34.34c.%25M - %m%n
|
||||
log4j.appender.CONSOLE.layout.ConversionPattern = %d{ISO8601} - GITLABAPIC [%-5p] %34.34c.%25M - %m%n
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package fr.devinsy.gitlabapic;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URI;
|
||||
|
@ -9,18 +10,21 @@ import java.util.ArrayList;
|
|||
import java.util.List;
|
||||
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.apache.http.HttpEntity;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.http.HttpException;
|
||||
import org.apache.http.NameValuePair;
|
||||
import org.apache.http.client.entity.UrlEncodedFormEntity;
|
||||
import org.apache.http.client.methods.CloseableHttpResponse;
|
||||
import org.apache.http.client.methods.HttpPost;
|
||||
import org.apache.http.client.methods.HttpPut;
|
||||
import org.apache.http.impl.client.CloseableHttpClient;
|
||||
import org.apache.http.impl.client.HttpClients;
|
||||
import org.apache.http.message.BasicNameValuePair;
|
||||
import org.apache.http.util.EntityUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import fr.devinsy.util.strings.StringList;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Christian Pierre MOMON (christian.momon@devinsy.fr)
|
||||
|
@ -102,10 +106,11 @@ public class Utils
|
|||
* @param uri
|
||||
* @return
|
||||
* @throws IOException
|
||||
* @throws HttpException
|
||||
*/
|
||||
public static int httpPost(final URI uri, final String privateToken, final String... parameters) throws IOException
|
||||
public static String httpPost(final URI uri, final String privateToken, final String... parameters) throws IOException, HttpException
|
||||
{
|
||||
int result;
|
||||
String result;
|
||||
|
||||
logger.debug("[uri={}][privateToken={}][parameters={}]", uri, privateToken, parameters);
|
||||
|
||||
|
@ -115,7 +120,7 @@ public class Utils
|
|||
}
|
||||
else
|
||||
{
|
||||
CloseableHttpResponse response2 = null;
|
||||
CloseableHttpResponse response = null;
|
||||
try
|
||||
{
|
||||
CloseableHttpClient httpClient = HttpClients.createDefault();
|
||||
|
@ -134,22 +139,97 @@ public class Utils
|
|||
nvps.add(new BasicNameValuePair(parameters[parameterIndex], parameters[parameterIndex + 1]));
|
||||
}
|
||||
}
|
||||
|
||||
ByteArrayOutputStream out = new ByteArrayOutputStream(100000);
|
||||
new UrlEncodedFormEntity(nvps).writeTo(out);
|
||||
logger.debug("urlencoded=[{}]", out.toString());
|
||||
httpPost.setEntity(new UrlEncodedFormEntity(nvps));
|
||||
logger.debug("httpPost={}", httpPost);
|
||||
|
||||
response2 = httpClient.execute(httpPost);
|
||||
response = httpClient.execute(httpPost);
|
||||
|
||||
logger.debug("status line={} [{}]", response2.getStatusLine(), uri);
|
||||
result = response2.getStatusLine().getStatusCode();
|
||||
HttpEntity entity2 = response2.getEntity();
|
||||
|
||||
// do something useful with the response body
|
||||
// and ensure it is fully consumed
|
||||
EntityUtils.consume(entity2);
|
||||
logger.debug("status line={} [{}]", response.getStatusLine(), uri);
|
||||
if ((response.getStatusLine().getStatusCode() != 200) && (response.getStatusLine().getStatusCode() != 201))
|
||||
{
|
||||
throw new HttpException("Status code returned: " + response.getStatusLine());
|
||||
}
|
||||
else
|
||||
{
|
||||
result = new StringList(IOUtils.readLines(response.getEntity().getContent())).toString();
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
response2.close();
|
||||
response.close();
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param uri
|
||||
* @param privateToken
|
||||
* @param parameters
|
||||
* @return
|
||||
* @throws IOException
|
||||
* @throws HttpException
|
||||
*/
|
||||
public static String httpPut(final URI uri, final String privateToken, final String... parameters) throws IOException, HttpException
|
||||
{
|
||||
String result;
|
||||
|
||||
logger.debug("[uri={}][privateToken={}][parameters={}]", uri, privateToken, parameters);
|
||||
|
||||
if (uri == null)
|
||||
{
|
||||
throw new IllegalArgumentException("Null parameter.");
|
||||
}
|
||||
else
|
||||
{
|
||||
CloseableHttpResponse response = null;
|
||||
try
|
||||
{
|
||||
CloseableHttpClient httpClient = HttpClients.createDefault();
|
||||
HttpPut httpPut = new HttpPut(uri);
|
||||
|
||||
if (privateToken != null)
|
||||
{
|
||||
httpPut.setHeader("PRIVATE-TOKEN", privateToken);
|
||||
}
|
||||
|
||||
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
|
||||
for (int parameterIndex = 0; parameterIndex < parameters.length; parameterIndex += 2)
|
||||
{
|
||||
if (StringUtils.isNotBlank(parameters[parameterIndex + 1]))
|
||||
{
|
||||
nvps.add(new BasicNameValuePair(parameters[parameterIndex], parameters[parameterIndex + 1]));
|
||||
}
|
||||
}
|
||||
|
||||
ByteArrayOutputStream out = new ByteArrayOutputStream(100000);
|
||||
new UrlEncodedFormEntity(nvps).writeTo(out);
|
||||
logger.debug("urlencoded=[{}]", out.toString());
|
||||
httpPut.setEntity(new UrlEncodedFormEntity(nvps));
|
||||
logger.debug("httpPut={}", httpPut);
|
||||
|
||||
response = httpClient.execute(httpPut);
|
||||
|
||||
logger.debug("status line={} [{}]", response.getStatusLine(), uri);
|
||||
if ((response.getStatusLine().getStatusCode() != 200) && (response.getStatusLine().getStatusCode() != 201))
|
||||
{
|
||||
throw new HttpException("Status code returned: " + response.getStatusLine());
|
||||
}
|
||||
else
|
||||
{
|
||||
result = new StringList(IOUtils.readLines(response.getEntity().getContent())).toString();
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
response.close();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2,6 +2,7 @@ package fr.devinsy.gitlabapic.v3;
|
|||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.StringReader;
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.net.URL;
|
||||
|
@ -10,12 +11,15 @@ import javax.json.Json;
|
|||
import javax.json.JsonArray;
|
||||
import javax.json.JsonObject;
|
||||
import javax.json.JsonReader;
|
||||
import javax.json.JsonString;
|
||||
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.http.HttpException;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import fr.devinsy.gitlabapic.GitLabAPIException;
|
||||
import fr.devinsy.gitlabapic.Utils;
|
||||
import fr.devinsy.util.strings.StringList;
|
||||
|
||||
|
@ -28,15 +32,21 @@ public class GitLab
|
|||
private static final Logger logger = LoggerFactory.getLogger(GitLab.class);
|
||||
|
||||
public static final String DEFAULT_CHARSET_NAME = "UTF-8";
|
||||
public static final int NOID = -1;
|
||||
|
||||
public static void closeIssue(final ProjectRef source, final int issueId, final String updatedAt) throws GitLabAPIException
|
||||
{
|
||||
editIssue(source, issueId, null, null, null, null, null, "close", updatedAt);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @throws GitLabAPIException
|
||||
* @throws IOException
|
||||
* @throws URISyntaxException
|
||||
*/
|
||||
public static void copyLabels(final ProjectRef source, final ProjectRef target) throws IOException, URISyntaxException
|
||||
public static void copyLabels(final ProjectRef source, final ProjectRef target) throws GitLabAPIException
|
||||
{
|
||||
//
|
||||
Labels labels = GitLab.searchLabels(source);
|
||||
for (Label label : labels)
|
||||
{
|
||||
|
@ -47,10 +57,11 @@ public class GitLab
|
|||
/**
|
||||
*
|
||||
* @param args
|
||||
* @throws GitLabAPIException
|
||||
* @throws IOException
|
||||
* @throws URISyntaxException
|
||||
*/
|
||||
public static int createIssue(final ProjectRef project, final Issue issue) throws IOException, URISyntaxException
|
||||
public static int createIssue(final ProjectRef project, final Issue issue) throws GitLabAPIException
|
||||
{
|
||||
int result;
|
||||
|
||||
|
@ -66,27 +77,44 @@ public class GitLab
|
|||
* admin.
|
||||
*
|
||||
* @param args
|
||||
* @throws GitLabAPIException
|
||||
* @throws IOException
|
||||
* @throws URISyntaxException
|
||||
*/
|
||||
public static int createIssue(final ProjectRef project, final String title, final String description, final String assigneeId, final String milestoneId, final StringList labels,
|
||||
final String createdAt) throws IOException, URISyntaxException
|
||||
final String createdAt) throws GitLabAPIException
|
||||
{
|
||||
int result;
|
||||
|
||||
String url = String.format("%sapi/v3/projects/%d/issues", project.getWebsite(), project.getId());
|
||||
|
||||
StringList fixedLabels;
|
||||
if (labels == null)
|
||||
try
|
||||
{
|
||||
fixedLabels = new StringList();
|
||||
}
|
||||
else
|
||||
{
|
||||
fixedLabels = labels;
|
||||
}
|
||||
String url = String.format("%sapi/v3/projects/%d/issues", project.getWebsite(), project.getId());
|
||||
|
||||
result = Utils.httpPost(new URI(url), project.getPrivateToken(), "title", title, "description", description, "labels", fixedLabels.toStringWithCommas(), "created_at", createdAt);
|
||||
StringList fixedLabels;
|
||||
if (labels == null)
|
||||
{
|
||||
fixedLabels = new StringList();
|
||||
}
|
||||
else
|
||||
{
|
||||
fixedLabels = labels;
|
||||
}
|
||||
|
||||
//
|
||||
String response = Utils.httpPost(new URI(url), project.getPrivateToken(), "title", fixBug19902(title), "description", fixBug19902(description), "labels", fixedLabels.toStringWithCommas(),
|
||||
"created_at", createdAt);
|
||||
|
||||
//
|
||||
JsonReader source = Json.createReader(new StringReader(response));
|
||||
JsonObject item = source.readObject();
|
||||
|
||||
result = item.getInt("id");
|
||||
}
|
||||
catch (IOException | URISyntaxException | HttpException exception)
|
||||
{
|
||||
logger.error(exception.getMessage(), exception);
|
||||
throw new GitLabAPIException("Error creating issue: " + exception.getMessage(), exception);
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
|
@ -97,10 +125,11 @@ public class GitLab
|
|||
* @param args
|
||||
* @throws IOException
|
||||
* @throws URISyntaxException
|
||||
* @throws GitLabAPIException
|
||||
*/
|
||||
public static int createLabel(final ProjectRef project, final Label label) throws IOException, URISyntaxException
|
||||
public static String createLabel(final ProjectRef project, final Label label) throws GitLabAPIException
|
||||
{
|
||||
int result;
|
||||
String result;
|
||||
|
||||
result = createLabel(project, label.getName(), label.getColor(), label.getDescription());
|
||||
|
||||
|
@ -111,16 +140,136 @@ public class GitLab
|
|||
/**
|
||||
*
|
||||
* @param args
|
||||
* @throws GitLabAPIException
|
||||
* @throws IOException
|
||||
* @throws URISyntaxException
|
||||
*/
|
||||
public static int createLabel(final ProjectRef project, final String name, final String color, final String description) throws IOException, URISyntaxException
|
||||
public static String createLabel(final ProjectRef project, final String name, final String color, final String description) throws GitLabAPIException
|
||||
{
|
||||
int result;
|
||||
String result;
|
||||
|
||||
String url = String.format("%sapi/v3/projects/%d/labels", project.getWebsite(), project.getId());
|
||||
|
||||
result = Utils.httpPost(new URI(url), project.getPrivateToken(), "name", name, "color", color, "description", description);
|
||||
try
|
||||
{
|
||||
String response = Utils.httpPost(new URI(url), project.getPrivateToken(), "name", name, "color", color, "description", description);
|
||||
|
||||
JsonReader source = Json.createReader(new StringReader(response));
|
||||
JsonObject item = source.readObject();
|
||||
|
||||
result = item.getString("name");
|
||||
}
|
||||
catch (IOException | URISyntaxException | HttpException exception)
|
||||
{
|
||||
logger.error(exception.getMessage(), exception);
|
||||
throw new GitLabAPIException("Error creating label: " + exception.getMessage(), exception);
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* CAUTION: created_at parameter is ignored in case of non project owner or
|
||||
* admin.
|
||||
*
|
||||
* @param args
|
||||
* @throws GitLabAPIException
|
||||
* @throws IOException
|
||||
* @throws URISyntaxException
|
||||
*/
|
||||
public static int createNote(final ProjectRef project, final int parentId, final String body, final String createdAt) throws GitLabAPIException
|
||||
{
|
||||
int result;
|
||||
try
|
||||
{
|
||||
String url = String.format("%sapi/v3/projects/%d/issues/%d/notes", project.getWebsite(), project.getId(), parentId);
|
||||
|
||||
String response = Utils.httpPost(new URI(url), project.getPrivateToken(), "body", fixBug19902(body), "created_at", createdAt, "system", "true");
|
||||
|
||||
logger.debug("response=[{}]", response);
|
||||
|
||||
result = 0;
|
||||
}
|
||||
catch (IOException | URISyntaxException | HttpException exception)
|
||||
{
|
||||
logger.error(exception.getMessage(), exception);
|
||||
throw new GitLabAPIException("Error creating note: " + exception.getMessage(), exception);
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* CAUTION: created_at parameter is ignored in case of non project owner or
|
||||
* admin.
|
||||
*
|
||||
* @param args
|
||||
* @throws GitLabAPIException
|
||||
* @throws IOException
|
||||
* @throws URISyntaxException
|
||||
*/
|
||||
public static int editIssue(final ProjectRef project, final int issueId, final String title, final String description, final String assigneeId, final String milestoneId, final StringList labels,
|
||||
final String stateEvent, final String updatedAt) throws GitLabAPIException
|
||||
{
|
||||
int result;
|
||||
|
||||
try
|
||||
{
|
||||
String url = String.format("%sapi/v3/projects/%d/issues/%d", project.getWebsite(), project.getId(), issueId);
|
||||
|
||||
StringList fixedLabels;
|
||||
if (labels == null)
|
||||
{
|
||||
fixedLabels = new StringList();
|
||||
}
|
||||
else
|
||||
{
|
||||
fixedLabels = labels;
|
||||
}
|
||||
|
||||
//
|
||||
String response = Utils.httpPut(new URI(url), project.getPrivateToken(), "title", fixBug19902(title), "description", fixBug19902(description), "labels", fixedLabels.toStringWithCommas(),
|
||||
"state_event", stateEvent, "updated_at", updatedAt);
|
||||
|
||||
//
|
||||
JsonReader source = Json.createReader(new StringReader(response));
|
||||
JsonObject item = source.readObject();
|
||||
|
||||
result = item.getInt("id");
|
||||
}
|
||||
catch (IOException | URISyntaxException | HttpException exception)
|
||||
{
|
||||
logger.error(exception.getMessage(), exception);
|
||||
throw new GitLabAPIException("Error creating issue: " + exception.getMessage(), exception);
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* https://gitlab.com/gitlab-org/gitlab-ce/issues/19902
|
||||
*
|
||||
* @param source
|
||||
* @return
|
||||
*/
|
||||
private static String fixBug19902(final String string)
|
||||
{
|
||||
String result;
|
||||
|
||||
if (string == null)
|
||||
{
|
||||
result = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
result = string.replace("é", "e").replace("ç", "c").replace("è", "e");
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
|
@ -131,10 +280,11 @@ public class GitLab
|
|||
* @param sourceWebsite
|
||||
* @param projectId
|
||||
* @param privateToken
|
||||
* @throws GitLabAPIException
|
||||
* @throws IOException
|
||||
* @throws URISyntaxException
|
||||
*/
|
||||
public static void importLabels(final ProjectRef source, final ProjectRef target) throws IOException, URISyntaxException
|
||||
public static void importLabels(final ProjectRef source, final ProjectRef target) throws GitLabAPIException
|
||||
{
|
||||
Labels labels = GitLab.searchLabels(source);
|
||||
|
||||
|
@ -148,97 +298,56 @@ public class GitLab
|
|||
*
|
||||
* @param args
|
||||
* @throws IOException
|
||||
* @throws GitLabAPIException
|
||||
* @throws URISyntaxException
|
||||
*/
|
||||
public static Issue searchIssue(final ProjectRef project, final int issueId) throws IOException
|
||||
public static Issue searchIssue(final ProjectRef project, final int issueId) throws GitLabAPIException
|
||||
{
|
||||
Issue result;
|
||||
|
||||
logger.debug("[project={}][issueId={}]", project, issueId);
|
||||
|
||||
String url = String.format("%sapi/v3/projects/%d/issues/%d", project.getWebsite(), project.getId(), issueId);
|
||||
|
||||
logger.debug("url=[{}]", url);
|
||||
|
||||
//
|
||||
byte[] data = Utils.httpGet(new URL(url), project.getPrivateToken());
|
||||
|
||||
//
|
||||
StringList json = new StringList(IOUtils.readLines(new ByteArrayInputStream(data), DEFAULT_CHARSET_NAME));
|
||||
logger.debug("json={}", json);
|
||||
|
||||
//
|
||||
JsonReader source = Json.createReader(new ByteArrayInputStream(data));
|
||||
|
||||
JsonArray items = source.readArray();
|
||||
|
||||
result = new Issue();
|
||||
/*
|
||||
result.setId(item.getInt("id"));
|
||||
result.setIid(item.getInt("iid"));
|
||||
result.setProjectId(item.getInt("project_id"));
|
||||
result.setTitle(item.getString("title"));
|
||||
result.setDescription(item.getString("description"));
|
||||
result.setState(item.getString("state"));
|
||||
result.setCreatedAt(item.getString("created_at"));
|
||||
result.setUpdatedAt(item.getString("updated_at"));
|
||||
// private StringList labels;
|
||||
// issue.setMilestone(item.getString("milestone"));
|
||||
// private String assignee;
|
||||
result.setAuthorId(item.getJsonObject("author").getInt("id"));
|
||||
result.setAuthorUserName(item.getJsonObject("author").getString("username"));
|
||||
result.setSubscribed(item.getBoolean("subscribed"));
|
||||
*/
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param args
|
||||
* @throws IOException
|
||||
* @throws URISyntaxException
|
||||
*/
|
||||
public static Issues searchIssues(final ProjectRef project) throws IOException
|
||||
{
|
||||
Issues result;
|
||||
|
||||
String url = String.format("%sapi/v3/projects/%d/issues", project.getWebsite(), project.getId());
|
||||
|
||||
//
|
||||
byte[] data = Utils.httpGet(new URL(url), project.getPrivateToken());
|
||||
|
||||
//
|
||||
StringList json = new StringList(IOUtils.readLines(new ByteArrayInputStream(data), DEFAULT_CHARSET_NAME));
|
||||
logger.debug("json={}", json);
|
||||
|
||||
//
|
||||
JsonReader source = Json.createReader(new ByteArrayInputStream(data));
|
||||
|
||||
JsonArray items = source.readArray();
|
||||
|
||||
result = new Issues();
|
||||
for (JsonObject item : items.getValuesAs(JsonObject.class))
|
||||
try
|
||||
{
|
||||
Issue issue = new Issue();
|
||||
logger.debug("[project={}][issueId={}]", project, issueId);
|
||||
|
||||
issue.setId(item.getInt("id"));
|
||||
issue.setIid(item.getInt("iid"));
|
||||
issue.setProjectId(item.getInt("project_id"));
|
||||
issue.setTitle(item.getString("title"));
|
||||
issue.setDescription(item.getString("description"));
|
||||
issue.setState(item.getString("state"));
|
||||
issue.setCreatedAt(item.getString("created_at"));
|
||||
issue.setUpdatedAt(item.getString("updated_at"));
|
||||
String url = String.format("%sapi/v3/projects/%d/issues/%d", project.getWebsite(), project.getId(), issueId);
|
||||
|
||||
logger.debug("url=[{}]", url);
|
||||
|
||||
//
|
||||
byte[] data = Utils.httpGet(new URL(url), project.getPrivateToken());
|
||||
|
||||
//
|
||||
StringList json = new StringList(IOUtils.readLines(new ByteArrayInputStream(data), DEFAULT_CHARSET_NAME));
|
||||
logger.debug("json={}", json);
|
||||
|
||||
//
|
||||
JsonReader source = Json.createReader(new ByteArrayInputStream(data));
|
||||
|
||||
JsonArray items = source.readArray();
|
||||
|
||||
result = new Issue();
|
||||
/*
|
||||
result.setId(item.getInt("id"));
|
||||
result.setIid(item.getInt("iid"));
|
||||
result.setProjectId(item.getInt("project_id"));
|
||||
result.setTitle(item.getString("title"));
|
||||
result.setDescription(item.getString("description"));
|
||||
result.setState(item.getString("state"));
|
||||
result.setCreatedAt(item.getString("created_at"));
|
||||
result.setUpdatedAt(item.getString("updated_at"));
|
||||
// private StringList labels;
|
||||
// issue.setMilestone(item.getString("milestone"));
|
||||
// private String assignee;
|
||||
issue.setAuthorId(item.getJsonObject("author").getInt("id"));
|
||||
issue.setAuthorUserName(item.getJsonObject("author").getString("username"));
|
||||
issue.setSubscribed(item.getBoolean("subscribed"));
|
||||
result.setAuthorId(item.getJsonObject("author").getInt("id"));
|
||||
result.setAuthorUserName(item.getJsonObject("author").getString("username"));
|
||||
result.setSubscribed(item.getBoolean("subscribed"));
|
||||
*/
|
||||
|
||||
result.add(issue);
|
||||
}
|
||||
catch (IOException exception)
|
||||
{
|
||||
logger.error(exception.getMessage(), exception);
|
||||
throw new GitLabAPIException("Error searching issue: " + exception.getMessage(), exception);
|
||||
}
|
||||
|
||||
//
|
||||
|
@ -248,36 +357,162 @@ public class GitLab
|
|||
/**
|
||||
*
|
||||
* @param args
|
||||
* @throws GitLabAPIException
|
||||
* @throws IOException
|
||||
* @throws URISyntaxException
|
||||
*/
|
||||
public static Labels searchLabels(final ProjectRef project) throws IOException
|
||||
public static Notes searchIssueNotes(final ProjectRef project, final int issueId) throws GitLabAPIException
|
||||
{
|
||||
Notes result;
|
||||
|
||||
try
|
||||
{
|
||||
String url = String.format("%sapi/v3/projects/%d/issues/%d/notes", project.getWebsite(), project.getId(), issueId);
|
||||
|
||||
//
|
||||
byte[] data = Utils.httpGet(new URL(url), project.getPrivateToken());
|
||||
|
||||
//
|
||||
StringList json = new StringList(IOUtils.readLines(new ByteArrayInputStream(data), DEFAULT_CHARSET_NAME));
|
||||
logger.debug("json={}", json);
|
||||
|
||||
//
|
||||
JsonReader source = Json.createReader(new ByteArrayInputStream(data));
|
||||
|
||||
JsonArray items = source.readArray();
|
||||
|
||||
result = new Notes();
|
||||
for (JsonObject item : items.getValuesAs(JsonObject.class))
|
||||
{
|
||||
Note note = new Note();
|
||||
|
||||
note.setId(item.getInt("id"));
|
||||
note.setBody(item.getString("body"));
|
||||
note.setCreatedAt(item.getString("created_at"));
|
||||
note.setAuthorId(item.getJsonObject("author").getInt("id"));
|
||||
note.setAuthorName(item.getJsonObject("author").getString("name"));
|
||||
note.setAuthorUserName(item.getJsonObject("author").getString("username"));
|
||||
|
||||
result.add(note);
|
||||
}
|
||||
}
|
||||
catch (IOException exception)
|
||||
{
|
||||
logger.error(exception.getMessage(), exception);
|
||||
throw new GitLabAPIException("Error searching labels: " + exception.getMessage(), exception);
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param args
|
||||
* @throws GitLabAPIException
|
||||
* @throws IOException
|
||||
* @throws URISyntaxException
|
||||
*/
|
||||
public static Issues searchIssues(final ProjectRef project) throws GitLabAPIException
|
||||
{
|
||||
Issues result;
|
||||
|
||||
try
|
||||
{
|
||||
String url = String.format("%sapi/v3/projects/%d/issues", project.getWebsite(), project.getId());
|
||||
|
||||
//
|
||||
byte[] data = Utils.httpGet(new URL(url), project.getPrivateToken());
|
||||
|
||||
//
|
||||
StringList json = new StringList(IOUtils.readLines(new ByteArrayInputStream(data), DEFAULT_CHARSET_NAME));
|
||||
logger.debug("json={}", json);
|
||||
|
||||
//
|
||||
JsonReader source = Json.createReader(new ByteArrayInputStream(data));
|
||||
|
||||
JsonArray items = source.readArray();
|
||||
|
||||
result = new Issues();
|
||||
for (JsonObject item : items.getValuesAs(JsonObject.class))
|
||||
{
|
||||
Issue issue = new Issue();
|
||||
|
||||
issue.setId(item.getInt("id"));
|
||||
issue.setIid(item.getInt("iid"));
|
||||
issue.setProjectId(item.getInt("project_id"));
|
||||
issue.setTitle(item.getString("title"));
|
||||
issue.setDescription(item.getString("description"));
|
||||
issue.setState(item.getString("state"));
|
||||
issue.setCreatedAt(item.getString("created_at"));
|
||||
issue.setUpdatedAt(item.getString("updated_at"));
|
||||
|
||||
for (JsonString subItem : item.getJsonArray("labels").getValuesAs(JsonString.class))
|
||||
{
|
||||
issue.labels().add(subItem.getString());
|
||||
}
|
||||
// issue.setMilestone(item.getString("milestone"));
|
||||
// private String assignee;
|
||||
issue.setAuthorId(item.getJsonObject("author").getInt("id"));
|
||||
issue.setAuthorName(item.getJsonObject("author").getString("name"));
|
||||
issue.setAuthorUserName(item.getJsonObject("author").getString("username"));
|
||||
issue.setSubscribed(item.getBoolean("subscribed"));
|
||||
|
||||
result.add(issue);
|
||||
}
|
||||
}
|
||||
catch (IOException exception)
|
||||
{
|
||||
logger.error(exception.getMessage(), exception);
|
||||
throw new GitLabAPIException("Error searching labels: " + exception.getMessage(), exception);
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param args
|
||||
* @throws GitLabAPIException
|
||||
* @throws IOException
|
||||
* @throws URISyntaxException
|
||||
*/
|
||||
public static Labels searchLabels(final ProjectRef project) throws GitLabAPIException
|
||||
{
|
||||
Labels result;
|
||||
|
||||
String url = String.format("%sapi/v3/projects/%d/labels", project.getWebsite(), project.getId());
|
||||
|
||||
//
|
||||
byte[] data = Utils.httpGet(new URL(url), project.getPrivateToken());
|
||||
|
||||
//
|
||||
StringList json = new StringList(IOUtils.readLines(new ByteArrayInputStream(data), DEFAULT_CHARSET_NAME));
|
||||
logger.debug("json={}", json);
|
||||
|
||||
//
|
||||
JsonReader source = Json.createReader(new ByteArrayInputStream(data));
|
||||
|
||||
JsonArray items = source.readArray();
|
||||
|
||||
result = new Labels();
|
||||
for (JsonObject item : items.getValuesAs(JsonObject.class))
|
||||
try
|
||||
{
|
||||
Label label = new Label();
|
||||
String url = String.format("%sapi/v3/projects/%d/labels", project.getWebsite(), project.getId());
|
||||
|
||||
label.setName(item.getString("name"));
|
||||
label.setColor(item.getString("color"));
|
||||
//
|
||||
byte[] data = Utils.httpGet(new URL(url), project.getPrivateToken());
|
||||
|
||||
result.add(label);
|
||||
//
|
||||
StringList json = new StringList(IOUtils.readLines(new ByteArrayInputStream(data), DEFAULT_CHARSET_NAME));
|
||||
logger.debug("json={}", json);
|
||||
|
||||
//
|
||||
JsonReader source = Json.createReader(new ByteArrayInputStream(data));
|
||||
|
||||
JsonArray items = source.readArray();
|
||||
|
||||
result = new Labels();
|
||||
for (JsonObject item : items.getValuesAs(JsonObject.class))
|
||||
{
|
||||
Label label = new Label();
|
||||
|
||||
label.setName(item.getString("name"));
|
||||
label.setColor(item.getString("color"));
|
||||
|
||||
result.add(label);
|
||||
}
|
||||
}
|
||||
catch (IOException exception)
|
||||
{
|
||||
logger.error(exception.getMessage(), exception);
|
||||
throw new GitLabAPIException("Error searching labels: " + exception.getMessage(), exception);
|
||||
}
|
||||
|
||||
//
|
||||
|
@ -291,61 +526,70 @@ public class GitLab
|
|||
* name of project with namespace
|
||||
* @param privateToken
|
||||
* @return
|
||||
* @throws GitLabAPIException
|
||||
* @throws IOException
|
||||
* @throws URISyntaxException
|
||||
*/
|
||||
public static ProjectRef searchProject(final String website, final String token, final String privateToken) throws IOException
|
||||
public static ProjectRef searchProject(final String website, final String token, final String privateToken) throws GitLabAPIException
|
||||
{
|
||||
ProjectRef result;
|
||||
|
||||
String url = String.format("%sapi/v3/projects", website);
|
||||
|
||||
//
|
||||
byte[] data = Utils.httpGet(new URL(url), privateToken);
|
||||
|
||||
//
|
||||
StringList json = new StringList(IOUtils.readLines(new ByteArrayInputStream(data), DEFAULT_CHARSET_NAME));
|
||||
logger.debug("json={}", json);
|
||||
|
||||
//
|
||||
JsonReader source = Json.createReader(new ByteArrayInputStream(data));
|
||||
JsonArray items = source.readArray();
|
||||
|
||||
//
|
||||
boolean ended = false;
|
||||
int itemIndex = 0;
|
||||
JsonObject searchedItem = null;
|
||||
while (!ended)
|
||||
try
|
||||
{
|
||||
if (itemIndex < items.size())
|
||||
{
|
||||
JsonObject item = items.getJsonObject(itemIndex);
|
||||
String url = String.format("%sapi/v3/projects", website);
|
||||
|
||||
if (StringUtils.equals(item.getString("name_with_namespace"), token))
|
||||
//
|
||||
byte[] data = Utils.httpGet(new URL(url), privateToken);
|
||||
|
||||
//
|
||||
StringList json = new StringList(IOUtils.readLines(new ByteArrayInputStream(data), DEFAULT_CHARSET_NAME));
|
||||
logger.debug("json={}", json);
|
||||
|
||||
//
|
||||
JsonReader source = Json.createReader(new ByteArrayInputStream(data));
|
||||
JsonArray items = source.readArray();
|
||||
|
||||
//
|
||||
boolean ended = false;
|
||||
int itemIndex = 0;
|
||||
JsonObject searchedItem = null;
|
||||
while (!ended)
|
||||
{
|
||||
if (itemIndex < items.size())
|
||||
{
|
||||
ended = true;
|
||||
searchedItem = item;
|
||||
JsonObject item = items.getJsonObject(itemIndex);
|
||||
|
||||
if (StringUtils.equals(item.getString("name_with_namespace"), token))
|
||||
{
|
||||
ended = true;
|
||||
searchedItem = item;
|
||||
}
|
||||
else
|
||||
{
|
||||
itemIndex += 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
itemIndex += 1;
|
||||
ended = true;
|
||||
searchedItem = null;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
if (searchedItem == null)
|
||||
{
|
||||
result = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
ended = true;
|
||||
searchedItem = null;
|
||||
result = new ProjectRef(website, searchedItem.getInt("id"), privateToken);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
if (searchedItem == null)
|
||||
catch (IOException exception)
|
||||
{
|
||||
result = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
result = new ProjectRef(website, searchedItem.getInt("id"), privateToken);
|
||||
logger.error(exception.getMessage(), exception);
|
||||
throw new GitLabAPIException("Error searching labels: " + exception.getMessage(), exception);
|
||||
}
|
||||
|
||||
//
|
||||
|
|
|
@ -25,8 +25,9 @@ public class Issue
|
|||
private StringList labels;
|
||||
private String milestone;
|
||||
private String assignee;
|
||||
private String authorUserName;
|
||||
private int authorId;
|
||||
private String authorName;
|
||||
private String authorUserName;
|
||||
private boolean subscribed;
|
||||
|
||||
/**
|
||||
|
@ -47,6 +48,11 @@ public class Issue
|
|||
return this.authorId;
|
||||
}
|
||||
|
||||
public String getAuthorName()
|
||||
{
|
||||
return this.authorName;
|
||||
}
|
||||
|
||||
public String getAuthorUserName()
|
||||
{
|
||||
return this.authorUserName;
|
||||
|
@ -72,11 +78,6 @@ public class Issue
|
|||
return this.iid;
|
||||
}
|
||||
|
||||
public StringList labels()
|
||||
{
|
||||
return this.labels;
|
||||
}
|
||||
|
||||
public String getMilestone()
|
||||
{
|
||||
return this.milestone;
|
||||
|
@ -102,11 +103,21 @@ public class Issue
|
|||
return this.updatedAt;
|
||||
}
|
||||
|
||||
public boolean isSubscribed()
|
||||
{
|
||||
return this.subscribed;
|
||||
}
|
||||
|
||||
public boolean isSuscribed()
|
||||
{
|
||||
return this.subscribed;
|
||||
}
|
||||
|
||||
public StringList labels()
|
||||
{
|
||||
return this.labels;
|
||||
}
|
||||
|
||||
public void setAssignee(final String assignee)
|
||||
{
|
||||
this.assignee = assignee;
|
||||
|
@ -117,6 +128,11 @@ public class Issue
|
|||
this.authorId = authorId;
|
||||
}
|
||||
|
||||
public void setAuthorName(final String authorName)
|
||||
{
|
||||
this.authorName = authorName;
|
||||
}
|
||||
|
||||
public void setAuthorUserName(final String authorUserName)
|
||||
{
|
||||
this.authorUserName = authorUserName;
|
||||
|
|
170
src/fr/devinsy/gitlabapic/v3/Note.java
Normal file
170
src/fr/devinsy/gitlabapic/v3/Note.java
Normal file
|
@ -0,0 +1,170 @@
|
|||
package fr.devinsy.gitlabapic.v3;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Christian Pierre MOMON (christian.momon@devinsy.fr)
|
||||
*/
|
||||
public class Note
|
||||
{
|
||||
private static final Logger logger = LoggerFactory.getLogger(Note.class);
|
||||
|
||||
private int id;
|
||||
private String body;
|
||||
// "attachment": null,
|
||||
private int authorId;
|
||||
private String authorName;
|
||||
private String authorUserName;
|
||||
// "author": {"id": 1, "username": "pipin", "email": "admin@example.com",
|
||||
// "name": "Pip", "state": "active", "created_at": "2013-09-30T13:46:01Z" },
|
||||
private String createdAt;
|
||||
private String updatedAt;
|
||||
private boolean system;
|
||||
private boolean upvote;
|
||||
private boolean downvote;
|
||||
private int noteableId;
|
||||
private String noteableType;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public Note()
|
||||
{
|
||||
}
|
||||
|
||||
public int getAuthorId()
|
||||
{
|
||||
return this.authorId;
|
||||
}
|
||||
|
||||
public String getAuthorName()
|
||||
{
|
||||
return this.authorName;
|
||||
}
|
||||
|
||||
public String getAuthorUserName()
|
||||
{
|
||||
return this.authorUserName;
|
||||
}
|
||||
|
||||
public String getBody()
|
||||
{
|
||||
return this.body;
|
||||
}
|
||||
|
||||
public String getCreatedAt()
|
||||
{
|
||||
return this.createdAt;
|
||||
}
|
||||
|
||||
public int getId()
|
||||
{
|
||||
return this.id;
|
||||
}
|
||||
|
||||
public int getNoteableId()
|
||||
{
|
||||
return this.noteableId;
|
||||
}
|
||||
|
||||
public String getNoteableType()
|
||||
{
|
||||
return this.noteableType;
|
||||
}
|
||||
|
||||
public String getUpdatedAt()
|
||||
{
|
||||
return this.updatedAt;
|
||||
}
|
||||
|
||||
public boolean isDownvote()
|
||||
{
|
||||
return this.downvote;
|
||||
}
|
||||
|
||||
public boolean isSystem()
|
||||
{
|
||||
return this.system;
|
||||
}
|
||||
|
||||
public boolean isUpvote()
|
||||
{
|
||||
return this.upvote;
|
||||
}
|
||||
|
||||
public void setAuthorId(final int authorId)
|
||||
{
|
||||
this.authorId = authorId;
|
||||
}
|
||||
|
||||
public void setAuthorName(final String authorName)
|
||||
{
|
||||
this.authorName = authorName;
|
||||
}
|
||||
|
||||
public void setAuthorUserName(final String authorUserName)
|
||||
{
|
||||
this.authorUserName = authorUserName;
|
||||
}
|
||||
|
||||
public void setBody(final String body)
|
||||
{
|
||||
this.body = body;
|
||||
}
|
||||
|
||||
public void setCreatedAt(final String createdAt)
|
||||
{
|
||||
this.createdAt = createdAt;
|
||||
}
|
||||
|
||||
public void setDownvote(final boolean downvote)
|
||||
{
|
||||
this.downvote = downvote;
|
||||
}
|
||||
|
||||
public void setId(final int id)
|
||||
{
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public void setNoteableId(final int noteableId)
|
||||
{
|
||||
this.noteableId = noteableId;
|
||||
}
|
||||
|
||||
public void setNoteableType(final String noteableType)
|
||||
{
|
||||
this.noteableType = noteableType;
|
||||
}
|
||||
|
||||
public void setSystem(final boolean system)
|
||||
{
|
||||
this.system = system;
|
||||
}
|
||||
|
||||
public void setUpdatedAt(final String updatedAt)
|
||||
{
|
||||
this.updatedAt = updatedAt;
|
||||
}
|
||||
|
||||
public void setUpvote(final boolean upvote)
|
||||
{
|
||||
this.upvote = upvote;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
String result;
|
||||
|
||||
result = String.format("[id=%d][body=%s]", this.id, this.body);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
}
|
32
src/fr/devinsy/gitlabapic/v3/Notes.java
Normal file
32
src/fr/devinsy/gitlabapic/v3/Notes.java
Normal file
|
@ -0,0 +1,32 @@
|
|||
package fr.devinsy.gitlabapic.v3;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
|
||||
import fr.devinsy.gitlabapic.v3.IssueComparator.Sorting;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Christian Pierre MOMON (christian.momon@devinsy.fr)
|
||||
*/
|
||||
public class Notes extends ArrayList<Note>
|
||||
{
|
||||
private static final long serialVersionUID = 5126712173655206727L;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public Notes()
|
||||
{
|
||||
super();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param initialCapacity
|
||||
*/
|
||||
public Notes(final int initialCapacity)
|
||||
{
|
||||
super(initialCapacity);
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue