
com.hpe.adm.octane.ideplugins.services.nonentity.CommitMessageService Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of octane-plugin-common Show documentation
Show all versions of octane-plugin-common Show documentation
Service layer for ALM Octane IDE Plugins, used by:
https://github.com/HPSoftware/octane-intellij-plugin
https://github.com/HPSoftware/octane-eclipse-plugin
The newest version!
/*******************************************************************************
* Copyright 2017-2023 Open Text.
*
* The only warranties for products and services of Open Text and
* its affiliates and licensors (“Open Text”) are as may be set forth
* in the express warranty statements accompanying such products and services.
* Nothing herein should be construed as constituting an additional warranty.
* Open Text shall not be liable for technical or editorial errors or
* omissions contained herein. The information contained herein is subject
* to change without notice.
*
* Except as specifically indicated otherwise, this document contains
* confidential information and a valid license is required for possession,
* use or copying. If this work is provided to the U.S. Government,
* consistent with FAR 12.211 and 12.212, Commercial Computer Software,
* Computer Software Documentation, and Technical Data for Commercial Items are
* licensed to the U.S. Government under vendor's standard commercial license.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
******************************************************************************/
package com.hpe.adm.octane.ideplugins.services.nonentity;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
import com.google.gson.JsonSyntaxException;
import com.google.inject.Inject;
import com.hpe.adm.nga.sdk.model.EntityModel;
import com.hpe.adm.nga.sdk.model.ReferenceFieldModel;
import com.hpe.adm.nga.sdk.network.OctaneHttpClient;
import com.hpe.adm.nga.sdk.network.OctaneHttpRequest;
import com.hpe.adm.nga.sdk.network.OctaneHttpResponse;
import com.hpe.adm.nga.sdk.query.Query;
import com.hpe.adm.nga.sdk.query.QueryMethod;
import com.hpe.adm.octane.ideplugins.services.EntityService;
import com.hpe.adm.octane.ideplugins.services.connection.ConnectionSettings;
import com.hpe.adm.octane.ideplugins.services.connection.ConnectionSettingsProvider;
import com.hpe.adm.octane.ideplugins.services.connection.HttpClientProvider;
import com.hpe.adm.octane.ideplugins.services.filtering.Entity;
import com.hpe.adm.octane.ideplugins.services.util.UrlParser;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.*;
public class CommitMessageService {
private static final Logger logger = LoggerFactory.getLogger(CommitMessageService.class);
private static final JsonParser JSON_PARSER = new JsonParser();
@Inject
protected ConnectionSettingsProvider connectionSettingsProvider;
@Inject
protected HttpClientProvider httpClientProvider;
@Inject
private EntityService entityService;
public boolean validateCommitMessage(String commitMessage, Entity entityType, long entityId) {
ConnectionSettings connectionSettings = connectionSettingsProvider.getConnectionSettings();
OctaneHttpClient httpClient = httpClientProvider.getOctaneHttpClient();
if (null != httpClient) {
OctaneHttpRequest request = new OctaneHttpRequest.GetOctaneHttpRequest(
connectionSettings.getBaseUrl() +
"/internal-api/shared_spaces/" + connectionSettings.getSharedSpaceId() +
"/workspaces/" + connectionSettings.getWorkspaceId() +
"/ali/validateCommitPattern?comment=" + UrlParser.urlEncodeQueryParamValue(commitMessage)
);
OctaneHttpResponse response = httpClient.execute(request);
String jsonString = response.getContent();
try {
JsonArray matchedIdsArray =
JSON_PARSER
.parse(jsonString)
.getAsJsonObject()
.get(entityType.getSubtypeName())
.getAsJsonArray();
for (JsonElement element : matchedIdsArray) {
if (element.getAsLong() == entityId) {
return true;
}
}
} catch (JsonSyntaxException ex) {
logger.error("Failed to parse response json: " + ex);
return false;
}
}
return false;
}
public List getCommitPatternsForStoryType(Entity entityType) {
String type;
switch (entityType) {
case DEFECT:
type = "Defect";
break;
case USER_STORY:
type = "User story";
break;
case QUALITY_STORY:
type = "Quality story";
break;
default:
return null;
}
List commitPatterns = new ArrayList<>();
ConnectionSettings connectionSettings = connectionSettingsProvider.getConnectionSettings();
OctaneHttpClient httpClient = httpClientProvider.getOctaneHttpClient();
if (null != httpClient) {
OctaneHttpRequest request = new OctaneHttpRequest.GetOctaneHttpRequest(
connectionSettings.getBaseUrl() +
"/api/shared_spaces/" + connectionSettings.getSharedSpaceId() +
"/workspaces/" + connectionSettings.getWorkspaceId() + "/scm_commit_patterns");
OctaneHttpResponse response = httpClient.execute(request);
String jsonString = response.getContent();
JsonArray dataArray = JSON_PARSER.parse(jsonString)
.getAsJsonObject()
.get("data")
.getAsJsonArray();
for (JsonElement elem : dataArray) {
String name = elem.getAsJsonObject().get("entity_type").getAsJsonObject().get("name").getAsString();
if (name.equals(type)) {
commitPatterns.add(elem.getAsJsonObject().get("pattern").getAsString());
}
}
return commitPatterns;
}
return null;
}
public String generateLocalCommitMessage(EntityModel entityModel) {
String taskString = "";
if (Entity.getEntityType(entityModel) == Entity.TASK) {
taskString = ": task #" + entityModel.getId();
entityModel = addReferenceFieldIfNeeded(entityModel);
entityModel = (EntityModel) entityModel.getValue("story").getValue();
}
StringBuilder messageBuilder = new StringBuilder();
String id = entityModel.getId();
Entity type = Entity.getEntityType(entityModel);
switch (type) {
case USER_STORY:
messageBuilder.append("user story #");
break;
case QUALITY_STORY:
messageBuilder.append("quality story #");
break;
case DEFECT:
messageBuilder.append("defect #");
break;
}
messageBuilder.append(id);
messageBuilder.append(taskString);
return messageBuilder.toString();
}
private EntityModel addReferenceFieldIfNeeded(EntityModel entityModel) {
if (Entity.getEntityType(entityModel) == Entity.TASK && entityModel.getValue("story") == null) {
EntityModel taskParent = getTaskParent(entityModel.getId());
entityModel.setValue(new ReferenceFieldModel("story", taskParent));
}
return entityModel;
}
private EntityModel getTaskParent(String id) {
Set storyField = new HashSet<>(Collections.singletonList("story"));
Query.QueryBuilder idQuery = Query.statement("id", QueryMethod.EqualTo, id);
Collection results = entityService.findEntities(Entity.TASK, idQuery, storyField);
if (results.size() == 1) {
return (EntityModel) results.iterator().next().getValue("story").getValue();
} else {
return null;
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy