From eefc5da9df56ca00b4cf66e1eca981a15a6b61ca Mon Sep 17 00:00:00 2001 From: Jerry Flood Date: Mon, 25 Mar 2019 12:28:14 -0400 Subject: Commit 16 for Create Optimized Sched API Multiple commits required due to commit size limitation. Change-Id: I7b766a7ec8036460964e8dbe85d96f049515ecd8 Issue-ID: OPTFRA-458 Signed-off-by: Jerry Flood --- .../onap/optf/cmso/sostatus/MsoStatusClient.java | 132 +++++----- .../org/onap/optf/cmso/sostatus/MsoStatusJob.java | 66 +++-- .../onap/optf/cmso/sostatus/ScheduleStatusJob.java | 55 +++-- .../loopback/SchedulerTestLoopbackService.java | 92 +++---- .../loopback/SchedulerTestLoopbackServiceImpl.java | 274 ++++++++++----------- .../test/loopback/TicketMgtLoopbackService.java | 65 +++-- 6 files changed, 344 insertions(+), 340 deletions(-) (limited to 'cmso-service/src/main/java') diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/sostatus/MsoStatusClient.java b/cmso-service/src/main/java/org/onap/optf/cmso/sostatus/MsoStatusClient.java index 41534f8..e760b85 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/sostatus/MsoStatusClient.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/sostatus/MsoStatusClient.java @@ -1,41 +1,39 @@ /* - * Copyright © 2017-2019 AT&T Intellectual Property. - * Modifications Copyright © 2018 IBM. - * - * 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 + * Copyright © 2017-2019 AT&T Intellectual Property. Modifications Copyright © 2018 IBM. + * + * 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. + * + * + * Unless otherwise specified, all documentation contained herein is licensed under the Creative + * Commons License, Attribution 4.0 Intl. (the "License"); you may not use this documentation except + * in compliance with the License. You may obtain a copy of the License at + * + * https://creativecommons.org/licenses/by/4.0/ + * + * Unless required by applicable law or agreed to in writing, documentation 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. - * - * - * Unless otherwise specified, all documentation contained herein is licensed - * under the Creative Commons License, Attribution 4.0 Intl. (the "License"); - * you may not use this documentation except in compliance with the License. - * You may obtain a copy of the License at - * - * https://creativecommons.org/licenses/by/4.0/ - * - * Unless required by applicable law or agreed to in writing, documentation - * 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 org.onap.optf.cmso.sostatus; +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ObjectNode; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Map; import java.util.UUID; - import javax.ws.rs.ProcessingException; import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; @@ -43,44 +41,38 @@ import javax.ws.rs.client.Invocation; import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; - import org.onap.observations.Mdc; import org.onap.observations.Observation; import org.onap.optf.cmso.common.BasicAuthenticatorFilter; import org.onap.optf.cmso.common.CMSStatusEnum; import org.onap.optf.cmso.common.LogMessages; import org.onap.optf.cmso.common.PropertiesManagement; -import org.onap.optf.cmso.filters.CMSOClientFilters; +import org.onap.optf.cmso.filters.CmsoClientFilters; import org.onap.optf.cmso.model.ChangeManagementSchedule; import org.onap.optf.cmso.model.dao.ChangeManagementGroupDAO; import org.onap.optf.cmso.model.dao.ChangeManagementScheduleDAO; import org.onap.optf.cmso.model.dao.ScheduleDAO; import org.onap.optf.cmso.service.rs.models.HealthCheckComponent; import org.onap.optf.cmso.so.bean.MsoOrchestrationQueryResponse; -import org.onap.optf.cmso.so.bean.MsoOrchestrationQueryResponse.MSO_STATUS; +import org.onap.optf.cmso.so.bean.MsoOrchestrationQueryResponse.MsoStatus; import org.quartz.JobExecutionException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; -import com.att.eelf.configuration.EELFLogger; -import com.att.eelf.configuration.EELFManager; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; - @Component public class MsoStatusClient { private static EELFLogger debug = EELFManager.getInstance().getDebugLogger(); @Autowired - ChangeManagementScheduleDAO cmScheduleDAO; + ChangeManagementScheduleDAO cmScheduleDao; @Autowired - ChangeManagementGroupDAO cmGroupDAO; + ChangeManagementGroupDAO cmGroupdao; @Autowired - ScheduleDAO scheduleDAO; + ScheduleDAO scheduleDao; @Autowired Environment env; @@ -88,22 +80,33 @@ public class MsoStatusClient { @Autowired PropertiesManagement pm; + /** + * Execute. + * + * @param id the id + * @throws JobExecutionException the job execution exception + */ public void execute(String id) throws JobExecutionException { debug.debug(LogMessages.MSO_STATUS_JOB, "Entered", id.toString()); try { - UUID uuid = UUID.fromString(id); - ChangeManagementSchedule cmSchedule = cmScheduleDAO.lockOne(uuid); + UUID uuid = UUID.fromString(id); + ChangeManagementSchedule cmSchedule = cmScheduleDao.lockOne(uuid); if (cmSchedule == null) { Observation.report(LogMessages.MSO_POLLING_MISSING_SCHEDULE, id.toString()); return; } poll(cmSchedule); } catch (Exception e) { - Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage()); + Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage()); } debug.debug(LogMessages.MSO_STATUS_JOB, "Exited", id.toString()); } + /** + * Poll. + * + * @param cmSchedule the cm schedule + */ @Transactional public void poll(ChangeManagementSchedule cmSchedule) { Map mdcSave = Mdc.save(); @@ -113,12 +116,13 @@ public class MsoStatusClient { String url = env.getProperty("so.url"); String user = env.getProperty("so.user"); String pass = pm.getProperty("so.pass", ""); - if (!url.endsWith("/")) + if (!url.endsWith("/")) { url = url + "/"; + } url = url + requestId; Client client = ClientBuilder.newClient(); client.register(new BasicAuthenticatorFilter(user, pass)); - client.register(new CMSOClientFilters()); + client.register(new CmsoClientFilters()); WebTarget target = client.target(url); Invocation.Builder invocationBuilder = target.request(MediaType.APPLICATION_JSON); Response response = null; @@ -132,11 +136,11 @@ public class MsoStatusClient { if (resp != null) { cmSchedule.setMsoStatus(resp.getRequestState()); cmSchedule.setMsoMessage(resp.getStatusMessage()); - MSO_STATUS msoStatus = MSO_STATUS.UNKNOWN; + MsoStatus msoStatus = MsoStatus.UNKNOWN; try { - msoStatus = MSO_STATUS.valueOf(resp.getRequestState()); + msoStatus = MsoStatus.valueOf(resp.getRequestState()); } catch (Exception e) { - Observation.report(LogMessages.UNRECOGNIZED_MSO_STATUS, resp.getRequestState()); + Observation.report(LogMessages.UNRECOGNIZED_MSO_STATUS, resp.getRequestState()); } long finishTime = getFinishTime(resp); switch (msoStatus) { @@ -161,16 +165,14 @@ public class MsoStatusClient { } break; - case 404: // Not found - { + case 404: { // Not found // Do not keep polling... cmSchedule.setStatus(CMSStatusEnum.Failed.toString()); cmSchedule.setMsoStatus("Not found"); cmSchedule.setMsoMessage("Call to MSO Failed :" + response.toString()); } break; - case 400: // Bad request - { + case 400: { // Bad request // Do not keep polling... cmSchedule.setStatus(CMSStatusEnum.Error.toString()); cmSchedule.setMsoStatus("Bad Request"); @@ -191,7 +193,7 @@ public class MsoStatusClient { cmSchedule.setMsoStatus("ConnectionException"); cmSchedule.setMsoMessage("Could not call MSO:" + e.getMessage()); } catch (Exception e) { - Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage()); + Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage()); // Probably a transient error... Keep polling cmSchedule.setMsoTimeMillis(System.currentTimeMillis()); cmSchedule.setMsoStatus("Exception"); @@ -200,7 +202,7 @@ public class MsoStatusClient { Mdc.restore(mdcSave); } // Propagate final MSO status to top level - cmScheduleDAO.save(cmSchedule); + cmScheduleDao.save(cmSchedule); propagateStatus(cmSchedule); } @@ -214,7 +216,8 @@ public class MsoStatusClient { Date dateTime = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss z").parse(timestr); finishTime = dateTime.getTime(); } catch (Exception e) { - Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, "Unable to parse MSO finish timestamp: " + timestr); + Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, + "Unable to parse MSO finish timestamp: " + timestr); } } return finishTime; @@ -232,22 +235,26 @@ public class MsoStatusClient { ObjectNode request = (ObjectNode) json.get("request"); ObjectNode requestStatus = (ObjectNode) request.get("requestStatus"); MsoOrchestrationQueryResponse msoResponse = - om.treeToValue(requestStatus, MsoOrchestrationQueryResponse.class); + om.treeToValue(requestStatus, MsoOrchestrationQueryResponse.class); return msoResponse; } catch (Exception e) { - Observation.report(LogMessages.UNABLE_TO_PARSE_MSO_RESPONSE, e, e.getMessage(), resp); + Observation.report(LogMessages.UNABLE_TO_PARSE_MSO_RESPONSE, e, e.getMessage(), resp); } return null; } + /** + * Health check. + * + * @return the health check component + */ public HealthCheckComponent healthCheck() { Map mdcSave = Mdc.save(); String requestId = "healthCheck"; String url = env.getProperty("so.url", ""); - String user = env.getProperty("so.user", ""); - String pass = pm.getProperty("so.pass", ""); - if (!url.endsWith("/")) + if (!url.endsWith("/")) { url = url + "/"; + } url = url + "healthcheck"; HealthCheckComponent hcc = new HealthCheckComponent(); @@ -255,8 +262,11 @@ public class MsoStatusClient { hcc.setUrl(url); Client client = ClientBuilder.newClient(); + String user = env.getProperty("so.user", ""); + String pass = pm.getProperty("so.pass", ""); + client.register(new BasicAuthenticatorFilter(user, pass)); - client.register(new CMSOClientFilters()); + client.register(new CmsoClientFilters()); WebTarget target = client.target(url); Invocation.Builder invocationBuilder = target.request(MediaType.APPLICATION_JSON); diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/sostatus/MsoStatusJob.java b/cmso-service/src/main/java/org/onap/optf/cmso/sostatus/MsoStatusJob.java index 6c52cc3..0a4c2f2 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/sostatus/MsoStatusJob.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/sostatus/MsoStatusJob.java @@ -1,38 +1,34 @@ /* - * Copyright © 2017-2019 AT&T Intellectual Property. - * Modifications Copyright © 2018 IBM. - * - * 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. - * - * - * Unless otherwise specified, all documentation contained herein is licensed - * under the Creative Commons License, Attribution 4.0 Intl. (the "License"); - * you may not use this documentation except in compliance with the License. - * You may obtain a copy of the License at - * - * https://creativecommons.org/licenses/by/4.0/ - * - * Unless required by applicable law or agreed to in writing, documentation - * 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 + * Copyright © 2017-2019 AT&T Intellectual Property. Modifications Copyright © 2018 IBM. + * + * 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. + * + * + * Unless otherwise specified, all documentation contained herein is licensed under the Creative + * Commons License, Attribution 4.0 Intl. (the "License"); you may not use this documentation except + * in compliance with the License. You may obtain a copy of the License at + * + * https://creativecommons.org/licenses/by/4.0/ + * + * Unless required by applicable law or agreed to in writing, documentation 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 org.onap.optf.cmso.sostatus; +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; import java.util.UUID; - import org.onap.observations.Mdc; import org.onap.optf.cmso.common.LogMessages; import org.onap.optf.cmso.model.ChangeManagementSchedule; @@ -44,12 +40,10 @@ import org.quartz.JobExecutionException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; import org.springframework.stereotype.Component; -import com.att.eelf.configuration.EELFLogger; -import com.att.eelf.configuration.EELFManager; /** - * This is the Quartz Job that is run to send the workflow to VID for execution - * + * This is the Quartz Job that is run to send the workflow to VID for execution. + * * */ @Component @@ -63,7 +57,7 @@ public class MsoStatusJob implements Job { MsoStatusClient mso; @Autowired - ChangeManagementScheduleDAO cmScheduleDAO; + ChangeManagementScheduleDAO cmScheduleDao; @Autowired Environment env; @@ -79,8 +73,8 @@ public class MsoStatusJob implements Job { String requestId = context.getJobDetail().getJobDataMap().getString(ContextKeys.msoRequestId.toString()); debug.debug(LogMessages.MSO_STATUS_JOB, "Entered", requestId, id.toString()); try { - UUID uuid = UUID.fromString(id); - ChangeManagementSchedule cmSchedule = cmScheduleDAO.findById(uuid).orElse(null); + UUID uuid = UUID.fromString(id); + ChangeManagementSchedule cmSchedule = cmScheduleDao.findById(uuid).orElse(null); if (cmSchedule == null) { log.warn(LogMessages.MSO_POLLING_MISSING_SCHEDULE, id, requestId); return; diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/sostatus/ScheduleStatusJob.java b/cmso-service/src/main/java/org/onap/optf/cmso/sostatus/ScheduleStatusJob.java index 1c3677c..9eacfd1 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/sostatus/ScheduleStatusJob.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/sostatus/ScheduleStatusJob.java @@ -1,27 +1,27 @@ /* * Copyright © 2017-2019 AT&T Intellectual Property. * Modifications Copyright © 2018 IBM. - * + * * 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. - * - * + * + * * Unless otherwise specified, all documentation contained herein is licensed * under the Creative Commons License, Attribution 4.0 Intl. (the "License"); * you may not use this documentation except in compliance with the License. * You may obtain a copy of the License at - * + * * https://creativecommons.org/licenses/by/4.0/ - * + * * Unless required by applicable law or agreed to in writing, documentation * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -31,24 +31,24 @@ package org.onap.optf.cmso.sostatus; +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; import java.util.List; import java.util.Map; import java.util.UUID; - import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.client.Invocation; import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; - import org.onap.observations.Mdc; import org.onap.observations.Observation; import org.onap.optf.cmso.common.BasicAuthenticatorFilter; import org.onap.optf.cmso.common.DomainsEnum; import org.onap.optf.cmso.common.LogMessages; import org.onap.optf.cmso.common.PropertiesManagement; -import org.onap.optf.cmso.filters.CMSOClientFilters; +import org.onap.optf.cmso.filters.CmsoClientFilters; import org.onap.optf.cmso.model.ChangeManagementSchedule; import org.onap.optf.cmso.model.Schedule; import org.onap.optf.cmso.model.dao.ChangeManagementScheduleDAO; @@ -62,12 +62,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; import org.springframework.stereotype.Component; -import com.att.eelf.configuration.EELFLogger; -import com.att.eelf.configuration.EELFManager; - /** - * This is the Quartz Job that is run to send the workflow to VID for execution - * + * This is the Quartz Job that is run to send the workflow to VID for execution. + * * */ @Component @@ -76,10 +73,10 @@ public class ScheduleStatusJob implements Job { private static EELFLogger debug = EELFManager.getInstance().getDebugLogger(); @Autowired - ScheduleDAO scheduleDAO; + ScheduleDAO scheduleDao; @Autowired - ChangeManagementScheduleDAO cmScheduleDAO; + ChangeManagementScheduleDAO cmScheduleDao; @Autowired PropertiesManagement pm; @@ -87,12 +84,18 @@ public class ScheduleStatusJob implements Job { @Autowired Environment env; + /** + * Execute. + * + * @param context the context + * @throws JobExecutionException the job execution exception + */ @Override public void execute(JobExecutionContext context) throws JobExecutionException { debug.debug(LogMessages.SCHEDULE_STATUS_JOB, "Entered"); try { // First poll SO for WF status - List list = cmScheduleDAO.findAllTriggered(); + List list = cmScheduleDao.findAllTriggered(); for (ChangeManagementSchedule s : list) { debug.debug("Dispathcing to check status of CM schedule Id=" + s.getUuid()); dispatchMso(s.getUuid()); @@ -104,7 +107,7 @@ public class ScheduleStatusJob implements Job { // // Update overall status of in flight schedules including closing tickets - List list = scheduleDAO.findAllInProgress(DomainsEnum.ChangeManagement.toString()); + List list = scheduleDao.findAllInProgress(DomainsEnum.ChangeManagement.toString()); for (Schedule s : list) { debug.debug("Dispatching to check status of scheduleId=" + s.getScheduleId()); dispatchScheduleStatusChecker(s.getUuid()); @@ -115,6 +118,11 @@ public class ScheduleStatusJob implements Job { debug.debug(LogMessages.SCHEDULE_STATUS_JOB, "Exited"); } + /** + * Dispatch schedule status checker. + * + * @param uuid the uuid + */ public void dispatchScheduleStatusChecker(UUID uuid) { Map mdcSave = Mdc.save(); try { @@ -125,7 +133,7 @@ public class ScheduleStatusJob implements Job { String pass = pm.getProperty("mechid.pass", ""); Client client = ClientBuilder.newClient(); client.register(new BasicAuthenticatorFilter(user, pass)); - client.register(CMSOClientFilters.class); + client.register(CmsoClientFilters.class); WebTarget target = client.target(url); Invocation.Builder invocationBuilder = target.request(MediaType.APPLICATION_JSON); Response response = null; @@ -153,6 +161,11 @@ public class ScheduleStatusJob implements Job { } + /** + * Dispatch mso. + * + * @param uuid the uuid + */ public void dispatchMso(UUID uuid) { Map mdcSave = Mdc.save(); try { @@ -163,7 +176,7 @@ public class ScheduleStatusJob implements Job { String pass = pm.getProperty("mechid.pass", ""); Client client = ClientBuilder.newClient(); client.register(new BasicAuthenticatorFilter(user, pass)); - client.register(CMSOClientFilters.class); + client.register(CmsoClientFilters.class); WebTarget target = client.target(url); Invocation.Builder invocationBuilder = target.request(MediaType.APPLICATION_JSON); Response response = null; diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/test/loopback/SchedulerTestLoopbackService.java b/cmso-service/src/main/java/org/onap/optf/cmso/test/loopback/SchedulerTestLoopbackService.java index f75365a..0200520 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/test/loopback/SchedulerTestLoopbackService.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/test/loopback/SchedulerTestLoopbackService.java @@ -1,36 +1,36 @@ /* - * Copyright © 2017-2018 AT&T Intellectual Property. - * Modifications Copyright © 2018 IBM. - * - * 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 + * Copyright © 2017-2018 AT&T Intellectual Property. Modifications Copyright © 2018 IBM. + * + * 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. + * + * + * Unless otherwise specified, all documentation contained herein is licensed under the Creative + * Commons License, Attribution 4.0 Intl. (the "License"); you may not use this documentation except + * in compliance with the License. You may obtain a copy of the License at + * + * https://creativecommons.org/licenses/by/4.0/ + * + * Unless required by applicable law or agreed to in writing, documentation 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. - * - * - * Unless otherwise specified, all documentation contained herein is licensed - * under the Creative Commons License, Attribution 4.0 Intl. (the "License"); - * you may not use this documentation except in compliance with the License. - * You may obtain a copy of the License at - * - * https://creativecommons.org/licenses/by/4.0/ - * - * Unless required by applicable law or agreed to in writing, documentation - * 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 org.onap.optf.cmso.test.loopback; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import io.swagger.annotations.ApiResponse; +import io.swagger.annotations.ApiResponses; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; @@ -40,14 +40,10 @@ import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriInfo; -import org.onap.optf.cmso.optimizer.bean.CMOptimizerRequest; +import org.onap.optf.cmso.optimizer.model.OptimizerRequest; +import org.onap.optf.cmso.optimizer.model.OptimizerResponse; import org.onap.optf.cmso.so.bean.MsoOrchestrationQueryResponse; import org.onap.optf.cmso.wf.bean.WfChangeManagementResponse; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import io.swagger.annotations.ApiParam; -import io.swagger.annotations.ApiResponse; -import io.swagger.annotations.ApiResponses; @Api @Path("/v1/loopbacktest") @@ -55,24 +51,34 @@ import io.swagger.annotations.ApiResponses; public interface SchedulerTestLoopbackService { // ****************************************************************** @POST - @Path("/optimizer") + @Path("/optimize/schedule") @Produces({MediaType.APPLICATION_JSON}) @ApiOperation(value = "", notes = "Test Optimizer connection in loopback mode.") @ApiResponses(value = {@ApiResponse(code = 202, message = "OK"), - @ApiResponse(code = 500, message = "Unexpected Runtime error", response = Exception.class)}) - public Response putToOptimizer(@ApiParam(value = "SNIRO request message") CMOptimizerRequest request, - @Context UriInfo uri); + @ApiResponse(code = 500, message = "Unexpected Runtime error", response = Exception.class)}) + public Response putToOptimizer(@ApiParam(value = "Optimizer request message") OptimizerRequest request, + @Context UriInfo uri); + + // ****************************************************************** + @GET + @Path("/optimize/schedule/{id}") + @Produces({MediaType.APPLICATION_JSON}) + @ApiOperation(value = "", notes = "Test Optimizer connection in loopback mode.", response = OptimizerResponse.class) + @ApiResponses(value = {@ApiResponse(code = 200, message = "OK"), + @ApiResponse(code = 500, message = "Unexpected Runtime error", response = Exception.class)}) + public Response getOptimizerResponse(@ApiParam(value = "Optimizer request is") @PathParam("id") String id, + @Context UriInfo uri); // ****************************************************************** @POST @Path("/onap/so/infra/orchestrationRequests/v7/schedule/{vnfName}") @Produces({MediaType.APPLICATION_JSON}) @ApiOperation(value = "", notes = "Test SO sheduling in loopback mode.", - response = WfChangeManagementResponse.class) + response = WfChangeManagementResponse.class) @ApiResponses(value = {@ApiResponse(code = 200, message = "OK"), - @ApiResponse(code = 500, message = "Unexpected Runtime error", response = Exception.class)}) + @ApiResponse(code = 500, message = "Unexpected Runtime error", response = Exception.class)}) public Response soScheduleLoopback(@ApiParam(value = "vnfName") @PathParam("vnfName") String vnfName, - @ApiParam(value = "SO request message") String request, @Context UriInfo uri); + @ApiParam(value = "SO request message") String request, @Context UriInfo uri); // ****************************************************************** @GET @@ -80,8 +86,8 @@ public interface SchedulerTestLoopbackService { @Produces({MediaType.APPLICATION_JSON}) @ApiOperation(value = "", notes = "Test SO Status query loopback.", response = MsoOrchestrationQueryResponse.class) @ApiResponses(value = {@ApiResponse(code = 200, message = "OK"), - @ApiResponse(code = 500, message = "Unexpected Runtime error", response = Exception.class)}) + @ApiResponse(code = 500, message = "Unexpected Runtime error", response = Exception.class)}) public Response soQueryLoopback(@ApiParam(value = "MSO request ID") @PathParam("requestId") String requestId, - @Context UriInfo uri); + @Context UriInfo uri); } diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/test/loopback/SchedulerTestLoopbackServiceImpl.java b/cmso-service/src/main/java/org/onap/optf/cmso/test/loopback/SchedulerTestLoopbackServiceImpl.java index b2ff6d4..b179719 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/test/loopback/SchedulerTestLoopbackServiceImpl.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/test/loopback/SchedulerTestLoopbackServiceImpl.java @@ -1,79 +1,67 @@ /* - * Copyright © 2017-2018 AT&T Intellectual Property. - * Modifications Copyright © 2018 IBM. - * - * 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 + * Copyright © 2017-2018 AT&T Intellectual Property. Modifications Copyright © 2018 IBM. + * + * 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. + * + * + * Unless otherwise specified, all documentation contained herein is licensed under the Creative + * Commons License, Attribution 4.0 Intl. (the "License"); you may not use this documentation except + * in compliance with the License. You may obtain a copy of the License at + * + * https://creativecommons.org/licenses/by/4.0/ + * + * Unless required by applicable law or agreed to in writing, documentation 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. - * - * - * Unless otherwise specified, all documentation contained herein is licensed - * under the Creative Commons License, Attribution 4.0 Intl. (the "License"); - * you may not use this documentation except in compliance with the License. - * You may obtain a copy of the License at - * - * https://creativecommons.org/licenses/by/4.0/ - * - * Unless required by applicable law or agreed to in writing, documentation - * 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 org.onap.optf.cmso.test.loopback; +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; +import com.fasterxml.jackson.databind.ObjectMapper; import java.util.ArrayList; +import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; -import javax.ws.rs.ProcessingException; -import javax.ws.rs.client.Client; -import javax.ws.rs.client.ClientBuilder; -import javax.ws.rs.client.Entity; -import javax.ws.rs.client.Invocation; -import javax.ws.rs.client.ResponseProcessingException; -import javax.ws.rs.client.WebTarget; -import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.Status; import javax.ws.rs.core.UriInfo; import org.joda.time.DateTime; -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; -import org.onap.optf.cmso.common.BasicAuthenticatorFilter; +import org.onap.observations.Observation; import org.onap.optf.cmso.common.LogMessages; import org.onap.optf.cmso.common.PropertiesManagement; -import org.onap.optf.cmso.optimizer.bean.CMOptimizerRequest; -import org.onap.optf.cmso.optimizer.bean.CMOptimizerResponse; -import org.onap.optf.cmso.optimizer.bean.CMRequestInfo; -import org.onap.optf.cmso.optimizer.bean.CMSchedule; -import org.onap.optf.cmso.optimizer.bean.CMSchedulingInfo; -import org.onap.optf.cmso.optimizer.bean.CMVnfDetails; -import org.onap.optf.cmso.service.rs.CMSOOptimizerCallbackImpl; +import org.onap.optf.cmso.optimizer.model.OptimizerRequest; +import org.onap.optf.cmso.optimizer.model.OptimizerResponse; +import org.onap.optf.cmso.optimizer.model.OptimizerScheduleInfo; +import org.onap.optf.cmso.optimizer.model.ScheduledElement; +import org.onap.optf.cmso.optimizer.model.ScheduledElement.ScheduleType; +import org.onap.optf.cmso.optimizer.model.UnScheduledElement; +import org.onap.optf.cmso.service.rs.CmsoOptimizerCallbackImpl; +import org.onap.optf.cmso.service.rs.models.v2.ChangeWindow; +import org.onap.optf.cmso.service.rs.models.v2.ElementInfo; import org.onap.optf.cmso.wf.bean.WfCmResponse200; import org.onap.optf.cmso.wf.bean.WfMsoRequestReferences; import org.onap.optf.cmso.wf.bean.WfMsoResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; import org.springframework.stereotype.Controller; -import com.att.eelf.configuration.EELFLogger; -import com.att.eelf.configuration.EELFManager; @Controller public class SchedulerTestLoopbackServiceImpl implements SchedulerTestLoopbackService { private static EELFLogger log = EELFManager.getInstance().getLogger(SchedulerTestLoopbackServiceImpl.class); private static EELFLogger debug = EELFManager.getInstance().getDebugLogger(); - private static EELFLogger errors = EELFManager.getInstance().getErrorLogger(); @Autowired Environment env; @@ -81,70 +69,22 @@ public class SchedulerTestLoopbackServiceImpl implements SchedulerTestLoopbackSe @Autowired PropertiesManagement pm; + // ** + // This is test mode only code. + private static Map optimizerResponses = new HashMap<>(); + @Override - public Response putToOptimizer(CMOptimizerRequest request, UriInfo uri) { + public Response putToOptimizer(OptimizerRequest request, UriInfo uri) { // try { - CMOptimizerResponse r = new CMOptimizerResponse(); - CMRequestInfo ri = request.getRequestInfo(); - CMSchedulingInfo si = request.getSchedulingInfo(); - r.setTransactionId(ri.getTransactionId()); - r.setRequestState("Done."); - r.setScheduleId(ri.getRequestId()); - String callback = ri.getCallbackUrl(); - - // This is a dumb opt. WIll not make sense for multiple groups - // Use the code in the callback to help - List nodes = new ArrayList(); - // get total number of nodes across all groups. - for (CMVnfDetails sr : si.getVnfDetails()) { - nodes.add(sr.getNode()); - } - - DateTime startTime = CMSOOptimizerCallbackImpl.convertISODate(si.getStartTime(), "startTime"); - - // Ignore the finish time for now in the calc. Just accept what they - // gave - DateTime finishTime = CMSOOptimizerCallbackImpl.convertISODate(si.getEndTime(), "endTime"); - DateTimeFormatter sniroFmt = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss").withZoneUTC(); - - int add = si.getAdditionalDurationInSecs(); - int normal = si.getNormalDurationInSecs(); - int concurrencyLimit = si.getConcurrencyLimit(); - long totalDuration = (long) add + normal; - long serialized = 0; - if (nodes.size() > concurrencyLimit) { - serialized = (nodes.size() / concurrencyLimit); - serialized = (serialized * totalDuration) * 1000; - } - DateTime latestInstanceStartTime = startTime.plus(serialized); - finishTime = latestInstanceStartTime.plus(totalDuration * 1000); - // Reformat request into a response setting the groups start finish - // time based upon - Map map = new HashMap(); - for (CMVnfDetails sr : si.getVnfDetails()) { - String groupId = sr.getGroupId(); - CMSchedule cms = map.get(groupId); - if (cms == null) { - cms = new CMSchedule(); - cms.setGroupId(groupId); - cms.setFinishTime(groupId); - map.put(groupId, cms); - cms.setStartTime(sniroFmt.print(startTime)); - cms.setFinishTime(sniroFmt.print(finishTime)); - cms.setLatestInstanceStartTime(sniroFmt.print(latestInstanceStartTime)); - } - cms.getNode().add(sr.getNode()); - } - r.setSchedule(map.values().toArray(new CMSchedule[map.values().size()])); - - Thread responseThread = new Thread(new Runnable() { - public void run() { - sendAsyncResponse(r, callback); - } - }); - responseThread.start(); - + OptimizerResponse rsp = new OptimizerResponse(); + rsp.setRequestId(request.getRequestId()); + rsp.setStatus(OptimizerResponse.OptimizeScheduleStatus.COMPLETED); + List schedules = getSchedules(request); + rsp.setSchedules(schedules); + ObjectMapper om = new ObjectMapper(); + String response = om.writeValueAsString(rsp); + optimizerResponses.put(rsp.getRequestId(), response); return Response.accepted().build(); } catch (Exception e) { log.error("Unexpected exception", e); @@ -152,45 +92,90 @@ public class SchedulerTestLoopbackServiceImpl implements SchedulerTestLoopbackSe return Response.serverError().build(); } - private void sendAsyncResponse(CMOptimizerResponse r, String url) { + private List getSchedules(OptimizerRequest request) { + List list = new ArrayList<>(); + OptimizerScheduleInfo osi = new OptimizerScheduleInfo(); + List scheduledList = new ArrayList<>(); + List unscheduledList = new ArrayList<>(); + osi.setScheduledElements(scheduledList); + osi.setUnScheduledElements(unscheduledList); + list.add(osi); + + + List cws = request.getChangeWindows(); + // Assume we cannot get here without at least 1 CW + ChangeWindow cw = cws.get(0); + + // This is a dumb opt. WIll not make sense for multiple groups + // Use the code in the callback to help + Map nodes = new HashMap<>(); + List nodeList = new ArrayList<>(); + // get total number of nodes across all groups. + for (ElementInfo sr : request.getElements()) { + nodes.put(sr.getElementId(), sr.getGroupId()); + nodeList.add(sr.getElementId()); + } + + DateTime startTime = new DateTime(cw.getStartTime().getTime()); + + + long add = request.getAdditionalDuration() * 1000L; + long normal = request.getNormalDuration() * 1000L; + int concurrencyLimit = request.getConcurrencyLimit(); + long totalDuration = add + normal; + long serialized = 0; + if (nodes.size() > concurrencyLimit) { + serialized = (nodes.size() / concurrencyLimit); + serialized = (serialized * totalDuration); + } + DateTime latestInstanceStartTime = startTime.plus(serialized); + DateTime finishTime = latestInstanceStartTime.plus(totalDuration); + // Reformat request into a response setting the groups start finish + // time based upon + + Map> startAndFinishTimeMap = new HashMap>(); try { - Client client = ClientBuilder.newClient(); - String user = env.getProperty("mechid.user", ""); - String pass = pm.getProperty("mechid.pass", ""); - client.register(new BasicAuthenticatorFilter(user, pass)); - WebTarget target = client.target(url); - Invocation.Builder invocationBuilder = target.request(MediaType.APPLICATION_JSON); - try { - Response response = invocationBuilder.post(Entity.json(r)); - switch (response.getStatus()) { - case 202: - // Scheduled with SNIRO - break; - case 400: // Bad request - case 500: - default: { - } - } - } catch (ResponseProcessingException e) { - errors.error(LogMessages.OPTIMIZER_EXCEPTION, e, e.getMessage()); - debug.debug(LogMessages.OPTIMIZER_EXCEPTION, e, e.getMessage()); - - } catch (ProcessingException e) { - log.error(LogMessages.OPTIMIZER_EXCEPTION.toString(), e); - log.error(LogMessages.OPTIMIZER_EXCEPTION, e.getMessage()); + CmsoOptimizerCallbackImpl.makeMap(startTime.getMillis(), latestInstanceStartTime.getMillis(), + concurrencyLimit, totalDuration, nodeList, startAndFinishTimeMap); + for (String node : nodes.keySet()) { + Map map = startAndFinishTimeMap.get(node); + Long nodeStart = map.get("startTime"); + Long nodeEnd = map.get("finishTime"); + ScheduledElement se = new ScheduledElement(); + se.setElementId(node); + se.setDurationSeconds((nodeEnd - nodeStart) / 1000); // in seconds + se.setStartTime(new Date(nodeStart)); + se.setEndTime(new Date(nodeEnd)); + se.setScheduleType(ScheduleType.INDIVIDUAL); + se.setGroupId(nodes.get(node)); + scheduledList.add(se); } } catch (Exception e) { - errors.error(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage()); - debug.debug(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage()); + Observation.report(LogMessages.EXPECTED_EXCEPTION, e, e.getMessage()); + } + return list; + } + + @Override + public Response getOptimizerResponse(String id, UriInfo uri) { + // + try { + String rsp = optimizerResponses.get(id); + return Response.ok(rsp).build(); + } catch (Exception e) { + log.error("Unexpected exception", e); } + return Response.serverError().build(); } + + @Override public Response soScheduleLoopback(String vnfName, String request, UriInfo uri) { String msoRequestId = env.getProperty("loopback.mso.requestId", "4ccbfb85-1d05-442e"); - String r = UUID.randomUUID().toString(); + String ruuid = UUID.randomUUID().toString(); WfMsoRequestReferences rr = new WfMsoRequestReferences(); - rr.setInstanceId(r); + rr.setInstanceId(ruuid); rr.setRequestId(msoRequestId); WfMsoResponse mso = new WfMsoResponse(); mso.setRequestReferences(rr); @@ -204,12 +189,13 @@ public class SchedulerTestLoopbackServiceImpl implements SchedulerTestLoopbackSe public Response soQueryLoopback(String requestId, UriInfo uri) { // Abbreviated response. Only interested in requestStatus.... String response = "{\"request\" : {" + "\"requestId\" : \"dummy-request-id\"," - + "\"startTime\" : \"Wed, 26 Aug 2017 06:36:07 GMT\"," + "\"requestScope\" : \"vfModule\"," - + "\"requestType\" : \"createInstance\"," + "\"requestDetails\" : {}," + "\"instanceReferences\" : {}," - + "\"requestStatus\" : { " + "\"requestState\" : \"COMPLETE\"," - + "\"statusMessage\" : \"Vf Module has been created successfully.\"," + "\"percentProgress\" : 100," - + "\"finishTime\" : \"Crap so cmso uses current time\"}}}"; + + "\"startTime\" : \"Wed, 26 Aug 2017 06:36:07 GMT\"," + "\"requestScope\" : \"vfModule\"," + + "\"requestType\" : \"createInstance\"," + "\"requestDetails\" : {}," + + "\"instanceReferences\" : {}," + "\"requestStatus\" : { " + "\"requestState\" : \"COMPLETE\"," + + "\"statusMessage\" : \"Vf Module has been created successfully.\"," + + "\"percentProgress\" : 100," + "\"finishTime\" : \"Crap so cmso uses current time\"}}}"; return Response.ok().entity(response).build(); } + } diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/test/loopback/TicketMgtLoopbackService.java b/cmso-service/src/main/java/org/onap/optf/cmso/test/loopback/TicketMgtLoopbackService.java index d2953b6..f329cfc 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/test/loopback/TicketMgtLoopbackService.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/test/loopback/TicketMgtLoopbackService.java @@ -1,36 +1,37 @@ /* - * Copyright © 2017-2018 AT&T Intellectual Property. - * Modifications Copyright © 2018 IBM. + * Copyright � 2017-2018 AT&T Intellectual Property. Modifications Copyright � 2018 IBM. * - * 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 + * 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 + * 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. + * 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. * * - * Unless otherwise specified, all documentation contained herein is licensed - * under the Creative Commons License, Attribution 4.0 Intl. (the "License"); - * you may not use this documentation except in compliance with the License. - * You may obtain a copy of the License at + * Unless otherwise specified, all documentation contained herein is licensed under the Creative + * Commons License, Attribution 4.0 Intl. (the "License"); you may not use this documentation except + * in compliance with the License. You may obtain a copy of the License at * - * https://creativecommons.org/licenses/by/4.0/ + * https://creativecommons.org/licenses/by/4.0/ * - * Unless required by applicable law or agreed to in writing, documentation - * 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 + * Unless required by applicable law or agreed to in writing, documentation 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 org.onap.optf.cmso.test.loopback; +import com.fasterxml.jackson.databind.JsonNode; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import io.swagger.annotations.ApiResponse; +import io.swagger.annotations.ApiResponses; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.Produces; @@ -38,12 +39,6 @@ import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriInfo; -import com.fasterxml.jackson.databind.JsonNode; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import io.swagger.annotations.ApiParam; -import io.swagger.annotations.ApiResponse; -import io.swagger.annotations.ApiResponses; @Api @Path("/v1/tm") @@ -56,7 +51,7 @@ public interface TicketMgtLoopbackService { @Produces({MediaType.APPLICATION_JSON}) @ApiOperation(value = "", notes = "Dummy out ticket management check status call.", response = JsonNode.class) @ApiResponses(value = {@ApiResponse(code = 200, message = "OK"), - @ApiResponse(code = 500, message = "Unexpected Runtime error", response = Exception.class)}) + @ApiResponse(code = 500, message = "Unexpected Runtime error", response = Exception.class)}) public Response tmGetChangeRecord(@ApiParam(value = "TM request message") JsonNode request, @Context UriInfo uri); // ****************************************************************** @@ -65,9 +60,9 @@ public interface TicketMgtLoopbackService { @Produces({MediaType.APPLICATION_JSON}) @ApiOperation(value = "", notes = "Dummy out ticket management create call.", response = JsonNode.class) @ApiResponses(value = {@ApiResponse(code = 200, message = "OK"), - @ApiResponse(code = 500, message = "Unexpected Runtime error", response = Exception.class)}) + @ApiResponse(code = 500, message = "Unexpected Runtime error", response = Exception.class)}) public Response tmCreateChangeRecord(@ApiParam(value = "TM request message") JsonNode request, - @Context UriInfo uri); + @Context UriInfo uri); // ****************************************************************** @POST @@ -75,19 +70,19 @@ public interface TicketMgtLoopbackService { @Produces({MediaType.APPLICATION_JSON}) @ApiOperation(value = "", notes = "Dummy out ticket management close call.", response = JsonNode.class) @ApiResponses(value = {@ApiResponse(code = 200, message = "OK"), - @ApiResponse(code = 500, message = "Unexpected Runtime error", response = Exception.class)}) + @ApiResponse(code = 500, message = "Unexpected Runtime error", response = Exception.class)}) public Response tmCloseCancelChangeRecord(@ApiParam(value = "TM request message") JsonNode request, - @Context UriInfo uri); + @Context UriInfo uri); // ****************************************************************** @POST @Path("/updateChangeRecord") @Produces({MediaType.APPLICATION_JSON}) @ApiOperation(value = "", notes = "Dummy out ticket management update to in progress call.", - response = JsonNode.class) + response = JsonNode.class) @ApiResponses(value = {@ApiResponse(code = 200, message = "OK"), - @ApiResponse(code = 500, message = "Unexpected Runtime error", response = Exception.class)}) + @ApiResponse(code = 500, message = "Unexpected Runtime error", response = Exception.class)}) public Response tmUpdateChangeRecord(@ApiParam(value = "TM request message") JsonNode request, - @Context UriInfo uri); + @Context UriInfo uri); } -- cgit 1.2.3-korg