diff options
121 files changed, 8103 insertions, 5159 deletions
diff --git a/INFO.yaml b/INFO.yaml new file mode 100644 index 0000000..0b79111 --- /dev/null +++ b/INFO.yaml @@ -0,0 +1,80 @@ +--- +project: 'optf-cmso' +project_creation_date: '2017-07-06' +lifecycle_state: 'Incubation' +project_lead: &onap_releng_ptl + name: 'Shankaranarayanan Puzhavakath Narayanan' + email: 'snarayanan@research.att.com' + id: 'snarayanan' + company: 'ATT' + timezone: 'America/Bedminster' +project_category: '' +primary_contact: *onap_releng_ptl +issue_tracking: + type: 'jira' + url: 'https://jira.onap.org/projects/OPTFRA' + key: 'OPTFRA' +mailing_list: + type: 'groups.io' + url: 'lists.onap.org' + tag: '<[sub-project_name]>' +realtime_discussion: '' +meetings: + - type: 'zoom' + agenda: 'https://wiki.onap.org/display/DW/Project+Resources+for+OOF' + url: 'https://wiki.onap.org/display/DW/Optimization+Framework+Project' + server: 'n/a' + channel: 'n/a' + repeats: 'weekly' + time: '15:00 UTC' +repositories: + - 'optf-cmso' + - 'optf-fgps' + - 'optf-has' + - 'optf-osdf' +committers: + - <<: *onap_releng_ptl + - name: 'Sarat Puthenpura' + email: 'sarat@research.att.com' + company: 'ATT' + id: 'sarat' + timezone: 'America/Bedminster' + - name: 'ramki krishnan' + email: 'ramkri123@gmail.com' + company: 'VMWare' + id: 'ramkri123' + timezone: 'America/Los_Angeles' + - name: 'Dileep Ranganathan' + email: 'dileep.ranganathan@intel.com' + company: 'Intel' + id: 'dileep.ranganathan' + timezone: 'America/Los_Angeles' + - name: 'Vikas Varma' + email: 'vikas.varma@att.com' + company: 'ATT' + id: 'vrvarma' + timezone: 'America/New_York' +tsc: + approval: 'https://lists.onap.org/pipermail/onap-tsc' + changes: + - type: 'Addition' + name: 'Ankitkumar Patel' + link: 'https://lists.onap.org/pipermail/onap-tsc/2018-April/004657.html' + - type: 'Removal' + name: 'maopeng zhang' + name: 'Sastry Isukapalli' + name: 'Yoram Zini' + link: 'https://lists.onap.org/pipermail/onap-tsc/2018-June/004975.html' + - type: 'Addition' + name: 'ramki krishnan' + name: 'Dileep Ranganathan' + link: 'https://lists.onap.org/g/ONAP-TSC/message/3205' + - type: 'Removal' + name: 'Ankitkumar Patel' + link: 'https://lists.onap.org/g/ONAP-TSC/message/3550' + - type: 'Addition' + name: 'Vikas Varma' + link: 'http://ircbot.wl.linuxfoundation.org/meetings/onap-meeting/2018/onap-meeting.2018-08-30-13.57.log.txt' + - type: 'Addition' + name: 'Shankaranarayanan Puzhavakath Narayanan' + link: 'https://civs.cs.cornell.edu/cgi-bin/results.pl?id=E_2696d1c15c2fdd16'
\ No newline at end of file diff --git a/cmso-database/etc/config/liquibase.properties b/cmso-database/etc/config/liquibase.properties index 2454070..e755bf2 100644 --- a/cmso-database/etc/config/liquibase.properties +++ b/cmso-database/etc/config/liquibase.properties @@ -1,5 +1,5 @@ ###
-# Copyright © 2017-2018 AT&T Intellectual Property.
+# Copyright © 2017-2019 AT&T Intellectual Property.
# Modifications Copyright © 2018 IBM.
#
# Licensed under the Apache License, Version 2.0 (the "License");
@@ -39,16 +39,5 @@ spring.datasource.tomcat.initialSize=5 spring.datasource.tomcat.max-active=25
spring.datasource.tomcat.test-on-borrow=true
-
-#changeLogFile=calendar-liquibase-changeLog.xml
changeLogFile=cmso-liquibase-changeLog.xml
-
-#spring.main.web-environment=false
-#outputChangeLogFile=src/main/resources/cmso-output-changelog.xml
-#url=jdbc:mariadb://localhost:3306/calendar
-#url=jdbc:mysql://localhost:3306/cmso
-#username=root
-#password=root
-#driver=org.mariadb.jdbc.Driver
-#driver=com.mysql.jdbc.Driver
diff --git a/cmso-database/src/main/resources/cmso-dbchangelog/onap-cmso-v1.1-add-uuid.sql b/cmso-database/src/main/resources/cmso-dbchangelog/onap-cmso-v1.1-add-uuid.sql index b11ea0a..2f6aafb 100644 --- a/cmso-database/src/main/resources/cmso-dbchangelog/onap-cmso-v1.1-add-uuid.sql +++ b/cmso-database/src/main/resources/cmso-dbchangelog/onap-cmso-v1.1-add-uuid.sql @@ -91,3 +91,5 @@ update SCHEDULE_APPROVALS set approval_types_uuid = (select distinct s.uuid from SCHEDULE_APPROVALS t, APPROVAL_TYPES s where t.approval_type_id = s.id); SET SQL_SAFE_UPDATES = 1; + +ALTER TABLE CHANGE_MANAGEMENT_SCHEDULES ADD COLUMN request LONGTEXT NULL DEFAULT NULL; diff --git a/cmso-database/src/main/resources/cmso-liquibase-changeLog.xml b/cmso-database/src/main/resources/cmso-liquibase-changeLog.xml index 0bc23c1..bf45ff9 100644 --- a/cmso-database/src/main/resources/cmso-liquibase-changeLog.xml +++ b/cmso-database/src/main/resources/cmso-liquibase-changeLog.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!--
- Copyright © 2017-2018 AT&T Intellectual Property.
+ Copyright © 2017-2019 AT&T Intellectual Property.
Modifications Copyright © 2018 IBM.
Licensed under the Apache License, Version 2.0 (the "License");
@@ -45,4 +45,11 @@ <sqlFile path="cmso-dbchangelog/onap-cmso-v1-schema.sql" />
</changeSet>
+ <changeSet author="ONAP" id="cmso-v1.1-schema1">
+ <sqlFile path="cmso-dbchangelog/onap-cmso-v1.1-drop-indices.sql" />
+ <sqlFile path="cmso-dbchangelog/onap-cmso-v1.1-add-uuid.sql" />
+ <sqlFile path="cmso-dbchangelog/onap-cmso-v1.1-restore-indices.sql" />
+ <sqlFile path="cmso-dbchangelog/onap-cmso-v1.1-drop-ids.sql" />
+ </changeSet>
+
</databaseChangeLog>
diff --git a/cmso-database/src/main/resources/optimizer-dbchanges/onap-cmso-v1-schema.sql b/cmso-database/src/main/resources/optimizer-dbchanges/onap-optimizer-v1-schema.sql index d6e225b..171cb2d 100644 --- a/cmso-database/src/main/resources/optimizer-dbchanges/onap-cmso-v1-schema.sql +++ b/cmso-database/src/main/resources/optimizer-dbchanges/onap-optimizer-v1-schema.sql @@ -26,6 +26,7 @@ CREATE TABLE IF NOT EXISTS `optimizer`.`topology` ( topology_start BIGINT(20) NULL DEFAULT NULL, topology_end BIGINT(20) NULL DEFAULT NULL, topology_retries INT NULL DEFAULT NULL, + topology_polling_interval INT NULL DEFAULT NULL, PRIMARY KEY (`uuid`)) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8; @@ -36,6 +37,7 @@ CREATE TABLE IF NOT EXISTS `optimizer`.`tickets` ( tickets_start BIGINT(20) NULL DEFAULT NULL, tickets_end BIGINT(20) NULL DEFAULT NULL, tickets_retries INT NULL DEFAULT NULL, + topology_polling_interval INT NULL DEFAULT NULL, PRIMARY KEY (`uuid`)) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8; @@ -46,6 +48,7 @@ CREATE TABLE IF NOT EXISTS `optimizer`.`optimizer` ( optimize_start BIGINT(20) NULL DEFAULT NULL, optimize_end BIGINT(20) NULL DEFAULT NULL, optimize_retries INT NULL DEFAULT NULL, + optimize_polling_interval INT NULL DEFAULT NULL, PRIMARY KEY (`uuid`)) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8; diff --git a/cmso-database/src/main/resources/optimizer-liquibase-changeLog.xml b/cmso-database/src/main/resources/optimizer-liquibase-changeLog.xml new file mode 100644 index 0000000..e735975 --- /dev/null +++ b/cmso-database/src/main/resources/optimizer-liquibase-changeLog.xml @@ -0,0 +1,48 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- + 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. +--> + +<databaseChangeLog + xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.4.xsd"> + + <changeSet author="ONAP" id="optimizer-v1-schema1"> + <preConditions onFail="MARK_RAN"> + <not> + <tableExists schemaName="optimizer" tableName="request" /> + </not> + </preConditions> + <sqlFile path="optimizer-dbchanges/onap-optimizer-v1-schema.sql" /> + </changeSet> + +</databaseChangeLog> diff --git a/cmso-robot/docker/Dockerfile b/cmso-robot/docker/Dockerfile index b70c16b..aa41520 100644 --- a/cmso-robot/docker/Dockerfile +++ b/cmso-robot/docker/Dockerfile @@ -1,22 +1,51 @@ -FROM robotframework/rfdocker:3.1.1 +FROM ubuntu:16.04 MAINTAINER "CMSO" LABEL name="Docker image for the CMSO Robot Testing Framework" LABEL usage="docker run -e <testname> optf-cmso-robot" +RUN apt-get update +RUN apt-get install -y software-properties-common vim +RUN add-apt-repository ppa:jonathonf/python-3.6 +RUN apt-get update +RUN apt-get install -y build-essential python3.6 python3.6-dev python3-pip python3.6-venv + +# update pip +RUN python3.6 -m pip install pip --upgrade +RUN python3.6 -m pip install wheel + +RUN apt-get update \ + && apt-get install \ + --no-install-recommends \ + --assume-yes \ + chromium-browser \ + chromium-chromedriver \ + dnsutils \ + git \ + gcc + + COPY /onap-cmso/robot /opt/cmso-robot/robot COPY /onap-cmso/ete.sh /opt/cmso-robot RUN chmod 777 /opt/cmso-robot/ete.sh COPY /onap-cmso/server.py /opt/cmso-robot + + +RUN ln -s /usr/bin/python3.6 /usr/bin/python +RUN python --version +RUN pip --version +RUN pip install robotframework==3.1.1 + RUN pip install Flask +RUN pip install selenium +RUN pip install robotframework-sshlibrary +RUN pip install robotframework-requests ###Just to keep it running CMD ["/usr/bin/python", "/opt/cmso-robot/server.py"] ### Use --entrypoint to override to run the tests test and exit ### --entrypoint /opt/cmso-robot/ete.sh - - diff --git a/cmso-service/etc/config/optimizer.properties b/cmso-service/etc/config/optimizer.properties index db014d6..13021ed 100644 --- a/cmso-service/etc/config/optimizer.properties +++ b/cmso-service/etc/config/optimizer.properties @@ -29,6 +29,6 @@ # limitations under the License.
#-------------------------------------------------------------------------------
-cmso.optimizer.url=http://localhost:8080/cmso/v1/loopbacktest/optimizer
-cmso.optimizer.callbackurl=http://localhost:8080/cmso/v1/optimizerCallback
-
+cmso.optimizer.request.url=http://localhost:8080/cmso/v1/loopbacktest/optimize/schedule
+cmso.optimizer.status.url=http://localhost:8080/cmso/v1/loopbacktest/optimize/schedule
+cmso.optimizer.health.url=http://localhost:8080/cmso/v1/loopbacktest/optimize/schedule/health
diff --git a/cmso-service/pom.xml b/cmso-service/pom.xml index d64709e..3700d25 100644 --- a/cmso-service/pom.xml +++ b/cmso-service/pom.xml @@ -166,10 +166,6 @@ </dependency>
<dependency>
<groupId>org.springframework</groupId>
- <artifactId>spring-beans</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
diff --git a/cmso-service/src/main/java/org/onap/observations/Mdc.java b/cmso-service/src/main/java/org/onap/observations/Mdc.java index b00bed3..b9b30ea 100644 --- a/cmso-service/src/main/java/org/onap/observations/Mdc.java +++ b/cmso-service/src/main/java/org/onap/observations/Mdc.java @@ -1,32 +1,29 @@ /* * Copyright © 2019 AT&T Intellectual Property. - * - * 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 + * + * 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.observations; import static com.att.eelf.configuration.Configuration.MDC_BEGIN_TIMESTAMP; @@ -45,12 +42,12 @@ import static com.att.eelf.configuration.Configuration.MDC_STATUS_CODE; import static com.att.eelf.configuration.Configuration.MDC_TARGET_ENTITY; import static com.att.eelf.configuration.Configuration.MDC_TARGET_SERVICE_NAME; +import com.att.eelf.utils.Stopwatch; import java.net.InetAddress; import java.net.URI; import java.util.Date; import java.util.Map; import java.util.UUID; - import javax.servlet.http.HttpServletRequest; import javax.ws.rs.client.ClientRequestContext; import javax.ws.rs.client.ClientResponseContext; @@ -58,191 +55,261 @@ import javax.ws.rs.container.ContainerRequestContext; import javax.ws.rs.container.ContainerResponseContext; import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.core.Response.StatusType; - import org.onap.optf.cmso.filters.MessageHeaders.HeadersEnum; import org.quartz.JobExecutionContext; import org.slf4j.MDC; -import com.att.eelf.utils.Stopwatch; - /** - * ECOMP EELF logging MDC fields not defined in the MDC Configuration (i.e. - * MDC_ALERT_SEVERITY) + * ECOMP EELF logging MDC fields not defined in the MDC Configuration (i.e. MDC_ALERT_SEVERITY) **/ public class Mdc { - public static final String SERVICE_NAME = "CSS-Scheduler"; - public enum Enum { - // BeginTimestamp, - // EndTimeStamp, - // RequestId, - // ServiceInstanceId, - VirtualServerName, - // ServiceName, - // PartnerName, - // StatusCOde, - // ResponseCode, - // ResponseDescription, - // InstanceUUID, - // AlertSeverity, - // ServerIPAddress, - // ElapsedTime, - // ServerFQDN, - // RemoteHost, - ClassName, Unused, - // ProcessKey, - CustomField1, CustomField2, CustomField3, CustomField4, - // TargetVirtualEntity, - // TargetEntity, - // TargetServiceName, - ErrorCode, ErrorDescription, Timer, - } - - public static String getCaller(int back) - { - StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace(); - return stackTraceElements[back].getClassName() + "." + stackTraceElements[back].getMethodName(); - } - - public static void setCaller(int back) - { - String caller = MDC.get(Enum.ClassName.name()); - if (caller == null) - MDC.put(Enum.ClassName.name(), getCaller(back)); - } - - public static void setObservation(ObservationInterface o) - { - MDC.put(Enum.CustomField4.name(), o.name()); - } - - public static void clearCaller() - { - MDC.remove(Enum.ClassName.name()); - } - - public static void quartzJobBegin(JobExecutionContext context) - { - MDC.clear(); - MDC.put(MDC_BEGIN_TIMESTAMP, Stopwatch.isoFormatter.format(new Date())); - MDC.put(MDC_INSTANCE_UUID, UUID.randomUUID().toString()); - try{ MDC.put(MDC_SERVER_FQDN, InetAddress.getLocalHost().getHostName()); } catch (Exception e){ MDC.put(MDC_SERVER_FQDN, e.getMessage());} - try{ MDC.put(MDC_SERVER_IP_ADDRESS, InetAddress.getLocalHost().getHostAddress()); } catch (Exception e){ MDC.put(MDC_SERVER_FQDN, e.getMessage());} - MDC.put(MDC_SERVICE_INSTANCE_ID, "UNKNOWN"); - MDC.put(MDC_SERVICE_NAME, SERVICE_NAME); - MDC.put(Enum.ClassName.name(), getCaller(3)); - } - - public static void quartzJobEnd(JobExecutionContext context) - { - MDC.put(MDC_END_TIMESTAMP, Stopwatch.isoFormatter.format(new Date())); - MDC.put(Enum.ClassName.name(), getCaller(3)); - } - - public static Map<String, String> save() - { - Map<String, String> save = MDC.getCopyOfContextMap(); - return save; - } - - public static void restore(Map<String, String> mdcSave) - { - MDC.clear(); - for (String name : mdcSave.keySet()) - MDC.put(name, mdcSave.get(name)); - } - - - - public static void setRequestIdIfNotSet(String requestId) { - if (MDC.get(MDC_KEY_REQUEST_ID) == null || MDC.get(MDC_KEY_REQUEST_ID).equals("")) - { - setRequestId(requestId); - } - } - - public static void setRequestId(String requestId) { - MDC.put(MDC_KEY_REQUEST_ID, requestId); - } - - public static void metricStart(ClientRequestContext requestContext) { - MDC.put(MDC_BEGIN_TIMESTAMP, Stopwatch.isoFormatter.format(new Date())); - MDC.put(MDC_END_TIMESTAMP, MDC.get(MDC_BEGIN_TIMESTAMP)); - setPartnerTargetFromUri(requestContext.getUri()); - } - - public static void metricEnd(ClientResponseContext response) - { - - Date now = new Date(); - //MDC.put(MDC_BEGIN_TIMESTAMP, Stopwatch.isoFormatter.format(now)); - MDC.put(MDC_END_TIMESTAMP, Stopwatch.isoFormatter.format(now)); - setResponseInfo(response.getStatusInfo()); - - } - public static void auditStart(ContainerRequestContext requestContext, HttpServletRequest servletRequest) - { - MDC.put(MDC_BEGIN_TIMESTAMP, Stopwatch.isoFormatter.format(new Date())); - MDC.put(MDC_END_TIMESTAMP, MDC.get(MDC_BEGIN_TIMESTAMP)); - MDC.put(MDC_REMOTE_HOST, servletRequest.getRemoteHost()); - MDC.put(Enum.ClassName.name(), getCaller(4)); - MultivaluedMap<String, String> headers = requestContext.getHeaders(); - String transactionId = (String) headers.getFirst(HeadersEnum.TransactionID.toString()); - if (transactionId != null) - { - setRequestId(transactionId); - } - else - { - setRequestId(UUID.randomUUID().toString()); - } - - } - - public static void auditEnd(ContainerRequestContext requestContext, ContainerResponseContext response) - { - Date now = new Date(); - //MDC.put(MDC_BEGIN_TIMESTAMP, Stopwatch.isoFormatter.format(now)); - MDC.put(MDC_END_TIMESTAMP, Stopwatch.isoFormatter.format(now)); - MDC.put(Enum.ClassName.name(), getCaller(4)); - - setResponseInfo(response.getStatusInfo()); - - } - - private static void setResponseInfo(StatusType statusInfo) - { - Integer status = statusInfo.getStatusCode(); - String completed = "ERROR"; - if (status >=200 && status < 300) - { - completed = "COMPLETE"; - } - MDC.put(MDC_RESPONSE_CODE, status.toString()); - MDC.put(MDC_RESPONSE_DESC, statusInfo.getReasonPhrase()); - MDC.put(MDC_STATUS_CODE, completed); - } - - public static void setEvent(String requestID) { - MDC.put(MDC_BEGIN_TIMESTAMP, Stopwatch.isoFormatter.format(new Date())); - MDC.put(MDC_END_TIMESTAMP, MDC.get(MDC_BEGIN_TIMESTAMP)); - setRequestId(requestID); - } - - private static void setPartnerTargetFromUri(URI uri) - { - try - { - MDC.put(MDC_PARTNER_NAME, uri.getHost()); - MDC.put(MDC_TARGET_ENTITY, uri.getScheme() + "://" + uri.getHost() + ":" + uri.getPort()); - MDC.put(MDC_TARGET_SERVICE_NAME, uri.getPath()); - } - catch (Exception e) - { - MDC.put(MDC_PARTNER_NAME, "UNKNOWN"); - MDC.put(MDC_TARGET_ENTITY, "UNKNOWN"); - MDC.put(MDC_TARGET_SERVICE_NAME, "UNKNOWN"); - } - } - - -}
\ No newline at end of file + + /** The Constant SERVICE_NAME. */ + public static final String SERVICE_NAME = "CSS-Scheduler"; + + /** + * The Enum Enum. + */ + public enum Enum { + // BeginTimestamp, + // EndTimeStamp, + // RequestId, + // ServiceInstanceId, + VirtualServerName, + // ServiceName, + // PartnerName, + // StatusCOde, + // ResponseCode, + // ResponseDescription, + // InstanceUUID, + // AlertSeverity, + // ServerIPAddress, + // ElapsedTime, + // ServerFQDN, + // RemoteHost, + ClassName, Unused, + // ProcessKey, + CustomField1, CustomField2, CustomField3, CustomField4, + // TargetVirtualEntity, + // TargetEntity, + // TargetServiceName, + ErrorCode, ErrorDescription, Timer, + } + + /** + * Gets the caller. + * + * @param back the back + * @return the caller + */ + public static String getCaller(int back) { + StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace(); + return stackTraceElements[back].getClassName() + "." + stackTraceElements[back].getMethodName(); + } + + /** + * Sets the caller. + * + * @param back the new caller + */ + public static void setCaller(int back) { + String caller = MDC.get(Enum.ClassName.name()); + if (caller == null) + { + MDC.put(Enum.ClassName.name(), getCaller(back)); + } + } + + /** + * Sets the observation. + * + * @param obs the new observation + */ + public static void setObservation(ObservationInterface obs) { + MDC.put(Enum.CustomField4.name(), obs.name()); + } + + /** + * Clear caller. + */ + public static void clearCaller() { + MDC.remove(Enum.ClassName.name()); + } + + /** + * Quartz job begin. + * + * @param context the context + */ + public static void quartzJobBegin(JobExecutionContext context) { + MDC.clear(); + MDC.put(MDC_BEGIN_TIMESTAMP, Stopwatch.isoFormatter.format(new Date())); + MDC.put(MDC_INSTANCE_UUID, UUID.randomUUID().toString()); + try { + MDC.put(MDC_SERVER_FQDN, InetAddress.getLocalHost().getHostName()); + } catch (Exception e) { + MDC.put(MDC_SERVER_FQDN, e.getMessage()); + } + try { + MDC.put(MDC_SERVER_IP_ADDRESS, InetAddress.getLocalHost().getHostAddress()); + } catch (Exception e) { + MDC.put(MDC_SERVER_FQDN, e.getMessage()); + } + MDC.put(MDC_SERVICE_INSTANCE_ID, "UNKNOWN"); + MDC.put(MDC_SERVICE_NAME, SERVICE_NAME); + MDC.put(Enum.ClassName.name(), getCaller(3)); + } + + /** + * Quartz job end. + * + * @param context the context + */ + public static void quartzJobEnd(JobExecutionContext context) { + MDC.put(MDC_END_TIMESTAMP, Stopwatch.isoFormatter.format(new Date())); + MDC.put(Enum.ClassName.name(), getCaller(3)); + } + + /** + * Save. + * + * @return the map + */ + public static Map<String, String> save() { + Map<String, String> save = MDC.getCopyOfContextMap(); + return save; + } + + /** + * Restore. + * + * @param mdcSave the mdc save + */ + public static void restore(Map<String, String> mdcSave) { + MDC.clear(); + for (String name : mdcSave.keySet()) + { + MDC.put(name, mdcSave.get(name)); + } + } + + + + /** + * Sets the request id if not set. + * + * @param requestId the new request id if not set + */ + public static void setRequestIdIfNotSet(String requestId) { + if (MDC.get(MDC_KEY_REQUEST_ID) == null || MDC.get(MDC_KEY_REQUEST_ID).equals("")) { + setRequestId(requestId); + } + } + + /** + * Sets the request id. + * + * @param requestId the new request id + */ + public static void setRequestId(String requestId) { + MDC.put(MDC_KEY_REQUEST_ID, requestId); + } + + /** + * Metric start. + * + * @param requestContext the request context + */ + public static void metricStart(ClientRequestContext requestContext) { + MDC.put(MDC_BEGIN_TIMESTAMP, Stopwatch.isoFormatter.format(new Date())); + MDC.put(MDC_END_TIMESTAMP, MDC.get(MDC_BEGIN_TIMESTAMP)); + setPartnerTargetFromUri(requestContext.getUri()); + } + + /** + * Metric end. + * + * @param response the response + */ + public static void metricEnd(ClientResponseContext response) { + + Date now = new Date(); + // MDC.put(MDC_BEGIN_TIMESTAMP, Stopwatch.isoFormatter.format(now)); + MDC.put(MDC_END_TIMESTAMP, Stopwatch.isoFormatter.format(now)); + setResponseInfo(response.getStatusInfo()); + + } + + /** + * Audit start. + * + * @param requestContext the request context + * @param servletRequest the servlet request + */ + public static void auditStart(ContainerRequestContext requestContext, HttpServletRequest servletRequest) { + MDC.put(MDC_BEGIN_TIMESTAMP, Stopwatch.isoFormatter.format(new Date())); + MDC.put(MDC_END_TIMESTAMP, MDC.get(MDC_BEGIN_TIMESTAMP)); + MDC.put(MDC_REMOTE_HOST, servletRequest.getRemoteHost()); + MDC.put(Enum.ClassName.name(), getCaller(4)); + MultivaluedMap<String, String> headers = requestContext.getHeaders(); + String transactionId = headers.getFirst(HeadersEnum.TransactionID.toString()); + if (transactionId != null) { + setRequestId(transactionId); + } else { + setRequestId(UUID.randomUUID().toString()); + } + + } + + /** + * Audit end. + * + * @param requestContext the request context + * @param response the response + */ + public static void auditEnd(ContainerRequestContext requestContext, ContainerResponseContext response) { + Date now = new Date(); + // MDC.put(MDC_BEGIN_TIMESTAMP, Stopwatch.isoFormatter.format(now)); + MDC.put(MDC_END_TIMESTAMP, Stopwatch.isoFormatter.format(now)); + MDC.put(Enum.ClassName.name(), getCaller(4)); + + setResponseInfo(response.getStatusInfo()); + + } + + private static void setResponseInfo(StatusType statusInfo) { + Integer status = statusInfo.getStatusCode(); + String completed = "ERROR"; + if (status >= 200 && status < 300) { + completed = "COMPLETE"; + } + MDC.put(MDC_RESPONSE_CODE, status.toString()); + MDC.put(MDC_RESPONSE_DESC, statusInfo.getReasonPhrase()); + MDC.put(MDC_STATUS_CODE, completed); + } + + /** + * Sets the event. + * + * @param requestId the new event + */ + public static void setEvent(String requestId) { + MDC.put(MDC_BEGIN_TIMESTAMP, Stopwatch.isoFormatter.format(new Date())); + MDC.put(MDC_END_TIMESTAMP, MDC.get(MDC_BEGIN_TIMESTAMP)); + setRequestId(requestId); + } + + private static void setPartnerTargetFromUri(URI uri) { + try { + MDC.put(MDC_PARTNER_NAME, uri.getHost()); + MDC.put(MDC_TARGET_ENTITY, uri.getScheme() + "://" + uri.getHost() + ":" + uri.getPort()); + MDC.put(MDC_TARGET_SERVICE_NAME, uri.getPath()); + } catch (Exception e) { + MDC.put(MDC_PARTNER_NAME, "UNKNOWN"); + MDC.put(MDC_TARGET_ENTITY, "UNKNOWN"); + MDC.put(MDC_TARGET_SERVICE_NAME, "UNKNOWN"); + } + } + + +} diff --git a/cmso-service/src/main/java/org/onap/observations/Observation.java b/cmso-service/src/main/java/org/onap/observations/Observation.java index 39bc3ca..3d2d176 100644 --- a/cmso-service/src/main/java/org/onap/observations/Observation.java +++ b/cmso-service/src/main/java/org/onap/observations/Observation.java @@ -1,126 +1,129 @@ /* * Copyright © 2019 AT&T Intellectual Property. - * - * 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 + * + * 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.observations; +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; import org.apache.log4j.Level; import org.onap.optf.cmso.Application; -import com.att.eelf.configuration.EELFLogger; -import com.att.eelf.configuration.EELFManager; +/** + * The Class Observation. + */ +public class Observation { + private static EELFLogger log = EELFManager.getInstance().getLogger(Application.class); + private static EELFLogger metrics = EELFManager.getInstance().getMetricsLogger(); + private static EELFLogger audit = EELFManager.getInstance().getAuditLogger(); + private static EELFLogger errors = EELFManager.getInstance().getErrorLogger(); + private static EELFLogger debug = EELFManager.getInstance().getDebugLogger(); + + /** + * Report. + * + * @param obs the o + * @param execpt the e + * @param arguments the arguments + */ + // ************************************************************************************************* + public static void report(ObservationInterface obs, Exception execpt, String... arguments) { + Mdc.setCaller(4); + Mdc.setObservation(obs); + if (obs.getAudit()) { + audit.info(obs, execpt, arguments); + } + if (obs.getMetric()) { + metrics.info(obs, execpt, arguments); + } + Level lev = obs.getLevel(); + switch (lev.toInt()) { + case Level.WARN_INT: + errors.warn(obs, arguments); + debug.debug(obs, execpt, arguments); + break; + case Level.INFO_INT: + log.info(obs, execpt, arguments); + debug.debug(obs, execpt, arguments); + break; + case Level.ERROR_INT: + errors.error(obs, arguments); + debug.debug(obs, execpt, arguments); + break; + case Level.TRACE_INT: + debug.trace(obs, execpt, arguments); + break; + case Level.DEBUG_INT: + debug.debug(obs, execpt, arguments); + break; + default: + log.info(obs, execpt, arguments); + } + Mdc.clearCaller(); + } -public class Observation -{ - private static EELFLogger log = EELFManager.getInstance().getLogger(Application.class); - private static EELFLogger metrics = EELFManager.getInstance().getMetricsLogger(); - private static EELFLogger audit = EELFManager.getInstance().getAuditLogger(); - private static EELFLogger errors = EELFManager.getInstance().getErrorLogger(); - private static EELFLogger debug = EELFManager.getInstance().getDebugLogger(); - - //************************************************************************************************* - public static void report(ObservationInterface o, Exception e, String ...arguments) - { - Mdc.setCaller(4); - Mdc.setObservation(o); - if (o.getAudit()) - { - audit.info(o, e, arguments); - } - if (o.getMetric()) - { - metrics.info(o, e, arguments); - } - Level l = o.getLevel(); - switch (l.toInt()) - { - case Level.WARN_INT: - errors.warn(o, arguments); - debug.debug(o, e, arguments); - break; - case Level.INFO_INT: - log.info(o, e, arguments); - debug.debug(o, e, arguments); - break; - case Level.ERROR_INT: - errors.error(o, arguments); - debug.debug(o, e, arguments); - break; - case Level.TRACE_INT: - debug.trace(o, e, arguments); - break; - case Level.DEBUG_INT: - debug.debug(o, e, arguments); - break; - default: - log.info(o, e, arguments); - } - Mdc.clearCaller(); - } - - public static void report(ObservationInterface o, String ...arguments) - { - Mdc.setCaller(4); - Mdc.setObservation(o); - if (o.getAudit()) - { - audit.info(o, arguments); - } - if (o.getMetric()) - { - metrics.info(o, arguments); - } - Level l = o.getLevel(); - switch (l.toInt()) - { - case Level.WARN_INT: - errors.warn(o, arguments); - debug.debug(o, arguments); - break; - case Level.INFO_INT: - log.info(o, arguments); - debug.debug(o, arguments); - break; - case Level.ERROR_INT: - errors.error(o, arguments); - debug.debug(o, arguments); - break; - case Level.TRACE_INT: - debug.debug(o, arguments); - break; - case Level.DEBUG_INT: - debug.debug(o, arguments); - break; - default: - log.info(o, arguments); - } - Mdc.clearCaller(); - } + /** + * Report. + * + * @param obs the o + * @param arguments the arguments + */ + public static void report(ObservationInterface obs, String... arguments) { + Mdc.setCaller(4); + Mdc.setObservation(obs); + if (obs.getAudit()) { + audit.info(obs, arguments); + } + if (obs.getMetric()) { + metrics.info(obs, arguments); + } + Level levl = obs.getLevel(); + switch (levl.toInt()) { + case Level.WARN_INT: + errors.warn(obs, arguments); + debug.debug(obs, arguments); + break; + case Level.INFO_INT: + log.info(obs, arguments); + debug.debug(obs, arguments); + break; + case Level.ERROR_INT: + errors.error(obs, arguments); + debug.debug(obs, arguments); + break; + case Level.TRACE_INT: + debug.debug(obs, arguments); + break; + case Level.DEBUG_INT: + debug.debug(obs, arguments); + break; + default: + log.info(obs, arguments); + } + Mdc.clearCaller(); + } } diff --git a/cmso-service/src/main/java/org/onap/observations/ObservationInterface.java b/cmso-service/src/main/java/org/onap/observations/ObservationInterface.java index 16305bc..0dce93d 100644 --- a/cmso-service/src/main/java/org/onap/observations/ObservationInterface.java +++ b/cmso-service/src/main/java/org/onap/observations/ObservationInterface.java @@ -1,48 +1,49 @@ /* * Copyright © 2019 AT&T Intellectual Property. - * - * 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 + * + * 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.observations; +import com.att.eelf.i18n.EELFResolvableErrorEnum; import javax.ws.rs.core.Response.Status; - import org.apache.log4j.Level; -import com.att.eelf.i18n.EELFResolvableErrorEnum; +public interface ObservationInterface extends EELFResolvableErrorEnum { + public Enum<?> getValue(); + + public Level getLevel(); + + public String getMessage(); + + public Status getStatus(); + + public String getDomain(); + + public String name(); + + public Boolean getAudit(); -public interface ObservationInterface extends EELFResolvableErrorEnum -{ - public Enum<?> getValue(); - public Level getLevel(); - public String getMessage(); - public Status getStatus(); - public String getDomain(); - public String name(); - public Boolean getAudit(); - public Boolean getMetric(); -}
\ No newline at end of file + public Boolean getMetric(); +} diff --git a/cmso-service/src/main/java/org/onap/observations/ObservationObject.java b/cmso-service/src/main/java/org/onap/observations/ObservationObject.java index 639db76..17bd939 100644 --- a/cmso-service/src/main/java/org/onap/observations/ObservationObject.java +++ b/cmso-service/src/main/java/org/onap/observations/ObservationObject.java @@ -1,109 +1,198 @@ /* * Copyright © 2019 AT&T Intellectual Property. - * - * 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 + * + * 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.observations; +import com.att.eelf.i18n.EELFResolvableErrorEnum; +import com.att.eelf.i18n.EELFResourceManager; import javax.ws.rs.core.Response.Status; - import org.apache.log4j.Level; -import com.att.eelf.i18n.EELFResolvableErrorEnum; -import com.att.eelf.i18n.EELFResourceManager; +/** + * The Class ObservationObject. + */ +public class ObservationObject implements ObservationInterface { + + // ************************************************************************************************* + // Interface class that matches the ObservationInteface pattern + // This will be used in case we decide to provide external overrides and we need to instantiate + // For now, we'll just use the Enum itself. + // + // + private Enum<?> value = null; + + private Level level = null;; + private String message = null; + private Status status = null; + private String domain = null; + private Boolean metric = false; + private Boolean audit = false; + + /** + * Instantiates a new observation object. + * + * @param obs the o + */ + public ObservationObject(ObservationInterface obs) { + this.value = obs.getValue(); + this.level = obs.getLevel(); + this.message = obs.getMessage(); + this.status = obs.getStatus(); + this.domain = obs.getDomain(); + this.metric = obs.getMetric(); + this.audit = obs.getAudit(); + + } + + /** + * Gets the value. + * + * @return the value + */ + @Override + public Enum<?> getValue() { + return value; + } + + /** + * Gets the message. + * + * @return the message + */ + @Override + public String getMessage() { + return message; + } + + /** + * Gets the status. + * + * @return the status + */ + @Override + public Status getStatus() { + return status; + } + + /** + * Gets the domain. + * + * @return the domain + */ + @Override + public String getDomain() { + return domain; + } + + /** + * Gets the level. + * + * @return the level + */ + @Override + public Level getLevel() { + return level; + } + + /** + * Name. + * + * @return the string + */ + @Override + public String name() { + return value.name(); + } + + /** + * Gets the audit. + * + * @return the audit + */ + @Override + public Boolean getAudit() { + return audit; + } + + /** + * Gets the metric. + * + * @return the metric + */ + @Override + public Boolean getMetric() { + return metric; + } + + /** + * Gets the message. + * + * @param arguments the arguments + * @return the message + */ + public String getMessagef(String... arguments) { + return EELFResourceManager.format((EELFResolvableErrorEnum) value, arguments); + } + + /** + * Sets the value. + * + * @param value the new value + */ + public void setValue(Enum<?> value) { + this.value = value; + } + + /** + * Sets the level. + * + * @param level the new level + */ + public void setLevel(Level level) { + this.level = level; + } + + /** + * Sets the message. + * + * @param message the new message + */ + public void setMessage(String message) { + this.message = message; + } -public class ObservationObject implements ObservationInterface -{ - - //************************************************************************************************* - // Interface class that matches the ObservationInteface pattern - // This will be used in case we decide to provide external overrides and we need to instantiate - // For now, we'll just use the Enum itself. - // - // - private Enum<?> value = null; - private Level level = null;; - private String message = null; - private Status status = null; - private String domain = null; - private Boolean metric = false; - private Boolean audit = false; - public ObservationObject(ObservationInterface o) - { - this.value = o.getValue(); - this.level = o.getLevel(); - this.message = o.getMessage(); - this.status = o.getStatus(); - this.domain = o.getDomain(); - this.metric = o.getMetric(); - this.audit = o.getAudit(); - - } - public Enum<?> getValue() {return value;} - @Override - public String getMessage() {return message;} - @Override - public Status getStatus() {return status;} - @Override - public String getDomain() {return domain;} - - @Override - public Level getLevel() { - return level; - } - @Override - public String name() { - return value.name(); - } - @Override - public Boolean getAudit() { - return audit; - } - @Override - public Boolean getMetric() { - return metric; - } - - public String getMessage(String ...arguments) { - return EELFResourceManager.format((EELFResolvableErrorEnum)value, arguments); - } - public void setValue(Enum<?> value) { - this.value = value; - } - public void setLevel(Level level) { - this.level = level; - } - public void setMessage(String message) { - this.message = message; - } - public void setStatus(Status status) { - this.status = status; - } + /** + * Sets the status. + * + * @param status the new status + */ + public void setStatus(Status status) { + this.status = status; + } } diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/JerseyConfiguration.java b/cmso-service/src/main/java/org/onap/optf/cmso/JerseyConfiguration.java index 9189326..46db256 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/JerseyConfiguration.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/JerseyConfiguration.java @@ -40,10 +40,10 @@ import org.glassfish.jersey.logging.LoggingFeature; import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.servlet.ServletProperties;
import org.onap.optf.cmso.dispatcher.rs.DispatcherServiceImpl;
-import org.onap.optf.cmso.filters.CMSOContainerFilters;
+import org.onap.optf.cmso.filters.CmsoContainerFilters;
import org.onap.optf.cmso.service.rs.AdminToolImpl;
-import org.onap.optf.cmso.service.rs.CMSOOptimizerCallbackImpl;
-import org.onap.optf.cmso.service.rs.CMSOServiceImpl;
+import org.onap.optf.cmso.service.rs.CmsoOptimizerCallbackImpl;
+import org.onap.optf.cmso.service.rs.CmsoServiceImpl;
import org.onap.optf.cmso.service.rs.HealthCheckImpl;
import org.onap.optf.cmso.test.loopback.SchedulerTestLoopbackServiceImpl;
import org.onap.optf.cmso.test.loopback.TicketMgtLoopbackServiceImpl;
@@ -75,8 +75,8 @@ public class JerseyConfiguration extends ResourceConfig { @Autowired
public JerseyConfiguration( /* LogRequestFilter lrf */ ) {
- register(CMSOServiceImpl.class);
- register(CMSOOptimizerCallbackImpl.class);
+ register(CmsoServiceImpl.class);
+ register(CmsoOptimizerCallbackImpl.class);
register(SchedulerTestLoopbackServiceImpl.class);
register(TicketMgtLoopbackServiceImpl.class);
register(HealthCheckImpl.class);
@@ -89,7 +89,7 @@ public class JerseyConfiguration extends ResourceConfig { // TODO: Examine which logging features to enable
register(new LoggingFeature(log));
- register(CMSOContainerFilters.class);
+ register(CmsoContainerFilters.class);
}
@Bean
diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/aaf/AafAuthorizationFilter.java b/cmso-service/src/main/java/org/onap/optf/cmso/aaf/AafAuthorizationFilter.java index 25a1e77..f3b36f5 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/aaf/AafAuthorizationFilter.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/aaf/AafAuthorizationFilter.java @@ -1,32 +1,40 @@ -/** - * ============LICENSE_START======================================================= - * org.onap.optf.cmso - * ================================================================================ - * Copyright © 2019 AT&T Intellectual Property. All rights reserved. - * ================================================================================ +/******************************************************************************* + * Copyright © 2019 AT&T Intellectual Property. + * * 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. - * ============LICENSE_END========================================================= - */ + * + * + * 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.aaf; import java.io.IOException; import java.util.List; - import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; - import org.onap.aaf.cadi.CadiWrap; import org.onap.aaf.cadi.Permission; import org.onap.observations.Observation; @@ -39,53 +47,46 @@ import org.springframework.context.annotation.Profile; import org.springframework.stereotype.Component; /** - * AAF authorization filter + * AAF authorization filter. */ @Component @Profile(SpringProfiles.AAF_AUTHENTICATION) -public class AafAuthorizationFilter extends OrderedRequestContextFilter { +public class AafAuthorizationFilter extends OrderedRequestContextFilter { - @Autowired - AafUserRoleProperties userRoleProperties; - + @Autowired + AafUserRoleProperties userRoleProperties; + + /** + * Instantiates a new aaf authorization filter. + */ public AafAuthorizationFilter() { this.setOrder(FilterPriority.AAF_AUTHORIZATION.getPriority()); - + } @Override - protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws IOException, ServletException { - try - { - if (request instanceof CadiWrap) - { - CadiWrap cw = (CadiWrap)request; - List<Permission> perms = cw.getPermissions(cw.getUserPrincipal()); - if (userRoleProperties.processPermissions(request, perms)) - { - filterChain.doFilter(request,response); - } - else - { - Observation.report(LogMessages.UNAUTHORIZED); - ResponseFormatter.errorResponse(request, response, - new CMSException(LogMessages.UNAUTHORIZED.getStatus(), - LogMessages.UNAUTHORIZED, "")); - } - } - else - { - throw new Exception(); - } - } - catch (Exception e) - { - Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage()); - ResponseFormatter.errorResponse(request, response, - new CMSException(LogMessages.UNAUTHORIZED.getStatus(), - LogMessages.UNAUTHORIZED, "")); - } + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) + throws IOException, ServletException { + try { + if (request instanceof CadiWrap) { + CadiWrap cw = (CadiWrap) request; + List<Permission> perms = cw.getPermissions(cw.getUserPrincipal()); + if (userRoleProperties.processPermissions(request, perms)) { + filterChain.doFilter(request, response); + } else { + Observation.report(LogMessages.UNAUTHORIZED); + ResponseFormatter.errorResponse(request, response, new CMSException( + LogMessages.UNAUTHORIZED.getStatus(), LogMessages.UNAUTHORIZED, "")); + } + } else { + throw new Exception(); + } + } catch (Exception e) { + Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage()); + ResponseFormatter.errorResponse(request, response, + new CMSException(LogMessages.UNAUTHORIZED.getStatus(), LogMessages.UNAUTHORIZED, "")); + } } } diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/aaf/AafFilter.java b/cmso-service/src/main/java/org/onap/optf/cmso/aaf/AafFilter.java index 1bdebdd..586822f 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/aaf/AafFilter.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/aaf/AafFilter.java @@ -1,33 +1,41 @@ -/** - * ============LICENSE_START======================================================= - * org.onap.optf.cmso - * ================================================================================ - * Copyright © 2019 AT&T Intellectual Property. All rights reserved. - * ================================================================================ +/******************************************************************************* + * Copyright © 2019 AT&T Intellectual Property. + * * 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. - * ============LICENSE_END========================================================= - */ -package org.onap.optf.cmso.aaf; + * + * + * 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.aaf; import java.io.IOException; import java.util.Properties; - import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; - import org.onap.aaf.cadi.PropAccess; import org.onap.aaf.cadi.filter.CadiFilter; import org.onap.observations.Observation; @@ -40,7 +48,7 @@ import org.springframework.context.annotation.Profile; import org.springframework.stereotype.Component; /** - * AAF authentication filter + * AAF authentication filter. */ @Component @@ -49,6 +57,12 @@ public class AafFilter extends OrderedRequestContextFilter { private final CadiFilter cadiFilter; + /** + * Instantiates a new aaf filter. + * + * @throws IOException Signals that an I/O exception has occurred. + * @throws ServletException the servlet exception + */ public AafFilter() throws IOException, ServletException { Properties cadiProperties = new Properties(); cadiProperties.load(Application.class.getClassLoader().getResourceAsStream("cadi.properties")); @@ -57,13 +71,13 @@ public class AafFilter extends OrderedRequestContextFilter { } @Override - protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws IOException, ServletException { + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) + throws IOException, ServletException { cadiFilter.doFilter(request, response, filterChain); - if(response.getStatus() ==401){ - Observation.report(LogMessages.UNAUTHENTICATED); - ResponseFormatter.errorResponse(request, response, - new CMSException(LogMessages.UNAUTHENTICATED.getStatus(), - LogMessages.UNAUTHENTICATED, "")); + if (response.getStatus() == 401) { + Observation.report(LogMessages.UNAUTHENTICATED); + ResponseFormatter.errorResponse(request, response, + new CMSException(LogMessages.UNAUTHENTICATED.getStatus(), LogMessages.UNAUTHENTICATED, "")); } } diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/aaf/AafPerm.java b/cmso-service/src/main/java/org/onap/optf/cmso/aaf/AafPerm.java index ea9d324..db58156 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/aaf/AafPerm.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/aaf/AafPerm.java @@ -1,78 +1,137 @@ -/** - * ============LICENSE_START======================================================= - * org.onap.optf.cmso - * ================================================================================ - * Copyright © 2019 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * 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 +/******************************************************************************* + * Copyright © 2019 AT&T Intellectual Property. + * + * 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. + * * - * http://www.apache.org/licenses/LICENSE-2.0 + * 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 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 + * 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. - * ============LICENSE_END========================================================= - */ + ******************************************************************************/ + package org.onap.optf.cmso.aaf; import java.util.HashSet; import java.util.Set; - import org.onap.aaf.cadi.aaf.AAFPermission; -public class AafPerm -{ - private String type; - private String instance; - private String action; - private Set<String> actions = new HashSet<>(); - - public String getAction() { - return action; - } - public void setAction(String action) { - this.action = action; - String list[] = action.split(","); - for (String a : list) - actions.add(a); - } - public String getType() { - return type; - } - public void setType(String type) { - this.type = type; - } - public String getInstance() { - return instance; - } - public void setInstance(String instance) { - this.instance = instance; - } - - public Set<String> getActions() { - return actions; - } - public void setActions(Set<String> actions) { - this.actions = actions; - } - public boolean matches(AAFPermission userPerm) - { - if (type.equals(userPerm.getType())) - { - if (userPerm.getInstance().equals("*") || instance.equals("*") || userPerm.getInstance().equals(instance)) - { - for (String userAction : userPerm.getAction().split(",")) - { - if (userAction.equals("*") || actions.contains("*") || actions.contains(userAction)) - return true; - } - } - } - return false; - } +/** + * The Class AafPerm. + */ +public class AafPerm { + private String type; + private String instance; + private String action; + private Set<String> actions = new HashSet<>(); + + /** + * Gets the action. + * + * @return the action + */ + public String getAction() { + return action; + } + + /** + * Sets the action. + * + * @param action the new action + */ + public void setAction(String action) { + this.action = action; + String[] list = action.split(","); + for (String a : list) { + actions.add(a); + } + } + + /** + * Gets the type. + * + * @return the type + */ + public String getType() { + return type; + } + + /** + * Sets the type. + * + * @param type the new type + */ + public void setType(String type) { + this.type = type; + } + + /** + * Gets the single instance of AafPerm. + * + * @return single instance of AafPerm + */ + public String getInstance() { + return instance; + } + + /** + * Sets the instance. + * + * @param instance the new instance + */ + public void setInstance(String instance) { + this.instance = instance; + } + + /** + * Gets the actions. + * + * @return the actions + */ + public Set<String> getActions() { + return actions; + } + + /** + * Sets the actions. + * + * @param actions the new actions + */ + public void setActions(Set<String> actions) { + this.actions = actions; + } + + /** + * Matches. + * + * @param userPerm the user perm + * @return true, if successful + */ + public boolean matches(AAFPermission userPerm) { + if (type.equals(userPerm.getType())) { + if (userPerm.getInstance().equals("*") || instance.equals("*") || userPerm.getInstance().equals(instance)) { + for (String userAction : userPerm.getAction().split(",")) { + if (userAction.equals("*") || actions.contains("*") || actions.contains(userAction)) { + return true; + } + } + } + } + return false; + } } diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/aaf/AafSecurityConfig.java b/cmso-service/src/main/java/org/onap/optf/cmso/aaf/AafSecurityConfig.java index cb00a90..068e6c3 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/aaf/AafSecurityConfig.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/aaf/AafSecurityConfig.java @@ -1,32 +1,33 @@ /* * Copyright © 2019 AT&T Intellectual Property. - * + * * 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.aaf; import org.onap.optf.cmso.SpringProfiles; @@ -43,17 +44,17 @@ import org.springframework.security.config.annotation.web.configuration.WebSecur @ComponentScan("org.onap.optf") @Profile(SpringProfiles.AAF_AUTHENTICATION) public class AafSecurityConfig extends WebSecurityConfigurerAdapter { - - + + @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { - + } - + @Override protected void configure(HttpSecurity http) throws Exception { - + http.csrf().disable(); - + } }
\ No newline at end of file diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/aaf/AafUserRole.java b/cmso-service/src/main/java/org/onap/optf/cmso/aaf/AafUserRole.java index 762cf3c..f9351b2 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/aaf/AafUserRole.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/aaf/AafUserRole.java @@ -1,127 +1,177 @@ -/** - * ============LICENSE_START======================================================= - * org.onap.optf.cmso - * ================================================================================ - * Copyright © 2019 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * 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 +/******************************************************************************* + * Copyright © 2019 AT&T Intellectual Property. + * + * 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 * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://creativecommons.org/licenses/by/4.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 + * 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. - * ============LICENSE_END========================================================= - */ + ******************************************************************************/ + package org.onap.optf.cmso.aaf; import java.util.ArrayList; import java.util.List; -public class AafUserRole -{ - private String url = ""; - private String pathParts[] = {}; - private String perm = ""; - private String method = ""; - private List<AafPerm> aafPerms = new ArrayList<>(); - - public AafUserRole(String url, String perm) - { - this.setUrl(url); - this.setPerm(perm); - pathParts = url.split("\\/"); - - String[] perms = perm.split(","); - for (String p : perms) - { - String parts[] = p.split(" "); - if (parts.length == 2) - method = parts[1]; - else - method = "ALL"; - - String[] list = parts[0].split("\\|"); - if (list.length == 3) - { - AafPerm aafPerm = new AafPerm(); - aafPerm.setAction(list[2]); - aafPerm.setInstance(list[1]); - aafPerm.setType(list[0]); - aafPerms.add(aafPerm); - } - } - } - public String getUrl() { - return url; - } - public void setUrl(String url) { - this.url = url; - } - public String getPerm() { - return perm; - } - public void setPerm(String perm) { - this.perm = perm; - } - public List<AafPerm> getAafPerms() { - return aafPerms; - } - public void setAafPerms(List<AafPerm> aafPerms) { - this.aafPerms = aafPerms; - } - - public boolean matches(String path, String matchMethod) - { - if (!this.method.equalsIgnoreCase("ALL") - && !this.method.equals("*") - && !this.method.equals(matchMethod)) - return false; - List<String> inNodes = new ArrayList<>(); - List<String> matchNodes = new ArrayList<>(); - String[] pathList = path.split("\\/"); - for (String n : pathList) - { - inNodes.add(n); - } - for (String n : pathParts) - { - matchNodes.add(n); - } - - while (!inNodes.isEmpty() && !matchNodes.isEmpty()) - { - String inNode = inNodes.remove(0); - String matchNode = matchNodes.get(0); - if (matchNode.equals(inNode) || matchNode.equals("*")) - { - matchNodes.remove(0); - } - else - { - if (!matchNode.equals("**")) - { - return false; - } - } - } - - // - if (inNodes.isEmpty() && matchNodes.isEmpty()) - return true; - - // We have incoming nodes remaining, see if we can wildcard them - if (matchNodes.size() == 1) - { - if (matchNodes.get(0).equals("**")) - return true; - if (inNodes.size() == 1 && matchNodes.get(0).equals("*")) - return true; - } - return false; - } +/** + * The Class AafUserRole. + */ +public class AafUserRole { + private String url = ""; + private String pathParts[] = {}; + private String perm = ""; + private String method = ""; + private List<AafPerm> aafPerms = new ArrayList<>(); + + /** + * Instantiates a new aaf user role. + * + * @param url the url + * @param perm the perm + */ + public AafUserRole(String url, String perm) { + this.setUrl(url); + this.setPerm(perm); + pathParts = url.split("\\/"); + + String[] perms = perm.split(","); + for (String p : perms) { + String[] parts = p.split(" "); + if (parts.length == 2) { + method = parts[1]; + } + else { + method = "ALL"; + } + + String[] list = parts[0].split("\\|"); + if (list.length == 3) { + AafPerm aafPerm = new AafPerm(); + aafPerm.setAction(list[2]); + aafPerm.setInstance(list[1]); + aafPerm.setType(list[0]); + aafPerms.add(aafPerm); + } + } + } + + /** + * Gets the url. + * + * @return the url + */ + public String getUrl() { + return url; + } + + /** + * Sets the url. + * + * @param url the new url + */ + public void setUrl(String url) { + this.url = url; + } + + /** + * Gets the perm. + * + * @return the perm + */ + public String getPerm() { + return perm; + } + + /** + * Sets the perm. + * + * @param perm the new perm + */ + public void setPerm(String perm) { + this.perm = perm; + } + + /** + * Gets the aaf perms. + * + * @return the aaf perms + */ + public List<AafPerm> getAafPerms() { + return aafPerms; + } + + /** + * Sets the aaf perms. + * + * @param aafPerms the new aaf perms + */ + public void setAafPerms(List<AafPerm> aafPerms) { + this.aafPerms = aafPerms; + } + + /** + * Matches. + * + * @param path the path + * @param matchMethod the match method + * @return true, if successful + */ + public boolean matches(String path, String matchMethod) { + if (!this.method.equalsIgnoreCase("ALL") && !this.method.equals("*") && !this.method.equals(matchMethod)) { + return false; + } + List<String> inNodes = new ArrayList<>(); + List<String> matchNodes = new ArrayList<>(); + String[] pathList = path.split("\\/"); + for (String n : pathList) { + inNodes.add(n); + } + for (String n : pathParts) { + matchNodes.add(n); + } + + while (!inNodes.isEmpty() && !matchNodes.isEmpty()) { + String inNode = inNodes.remove(0); + String matchNode = matchNodes.get(0); + if (matchNode.equals(inNode) || matchNode.equals("*")) { + matchNodes.remove(0); + } else { + if (!matchNode.equals("**")) { + return false; + } + } + } + + // + if (inNodes.isEmpty() && matchNodes.isEmpty()) { + return true; + } + + // We have incoming nodes remaining, see if we can wildcard them + if (matchNodes.size() == 1) { + if (matchNodes.get(0).equals("**")) { + return true; + } + if (inNodes.size() == 1 && matchNodes.get(0).equals("*")) { + return true; + } + } + return false; + } } diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/aaf/AafUserRoleProperties.java b/cmso-service/src/main/java/org/onap/optf/cmso/aaf/AafUserRoleProperties.java index 7a7598d..d9a419d 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/aaf/AafUserRoleProperties.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/aaf/AafUserRoleProperties.java @@ -1,33 +1,43 @@ -/** - * ============LICENSE_START======================================================= - * org.onap.optf.cmso - * ================================================================================ - * Copyright © 2019 AT&T Intellectual Property. All rights reserved. - * ================================================================================ +/******************************************************************************* + * Copyright © 2019 AT&T Intellectual Property. + * * 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. - * ============LICENSE_END========================================================= - */ + * + * + * 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.aaf; +import com.fasterxml.jackson.databind.ObjectMapper; import java.io.File; import java.io.FileInputStream; import java.util.ArrayList; import java.util.List; import java.util.Properties; - import javax.annotation.PostConstruct; import javax.servlet.http.HttpServletRequest; - import org.onap.aaf.cadi.Permission; import org.onap.aaf.cadi.aaf.AAFPermission; import org.onap.observations.Observation; @@ -38,91 +48,92 @@ import org.springframework.context.annotation.Profile; import org.springframework.core.env.Environment; import org.springframework.stereotype.Component; -import com.fasterxml.jackson.databind.ObjectMapper; /** - * - * This class uses a properties file to map URL patterns/method to AAF Permissions (AafPerm) + * This class uses a properties file to map URL patterns/method to AAF Permissions (AafPerm). + * * @author jf9860 * */ @Component @Profile(SpringProfiles.AAF_AUTHENTICATION) -public class AafUserRoleProperties -{ - @Autowired - Environment env; - - private List<AafUserRole> list = new ArrayList<>(); - - @PostConstruct - public void initializePermissions() - { - String userRolePropertiesName = env.getProperty("aaf.user.roles", "src/main/resources/aaf/AAFUserRoles.properties"); - Properties props = new Properties(); - try - { - props.load(new FileInputStream(new File(userRolePropertiesName))); - } - catch (Exception e) - { - Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage()); - } - for (Object url : props.keySet()) - { - Object value = props.get(url); - list.add(new AafUserRole((String)url, (String)value)); - } - } +public class AafUserRoleProperties { + @Autowired + Environment env; + + private List<AafUserRole> list = new ArrayList<>(); + + /** + * Initialize permissions. + */ + @PostConstruct + public void initializePermissions() { + String userRolePropertiesName = + env.getProperty("aaf.user.roles", "src/main/resources/aaf/AAFUserRoles.properties"); + Properties props = new Properties(); + try { + props.load(new FileInputStream(new File(userRolePropertiesName))); + } catch (Exception e) { + Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage()); + } + for (Object url : props.keySet()) { + Object value = props.get(url); + list.add(new AafUserRole((String) url, (String) value)); + } + } + + /** + * Gets the for url method. + * + * @param url the url + * @param method the method + * @return the for url method + */ + public List<AafUserRole> getForUrlMethod(String url, String method) { + List<AafUserRole> userRoleList = new ArrayList<>(); + for (AafUserRole aur : list) { + if (aur.matches(url, method)) { + userRoleList.add(aur); + } + } + return userRoleList; + } - public List<AafUserRole> getForUrlMethod(String url, String method) - { - List<AafUserRole> userRoleList = new ArrayList<>(); - for (AafUserRole aur : list) - { - if (aur.matches(url, method)) - { - userRoleList.add(aur); - } - } - return userRoleList; - } + /** + * Process permissions. + * + * @param request the request + * @param userPerms the user perms + * @return true, if successful + */ + public boolean processPermissions(HttpServletRequest request, List<Permission> userPerms) { + try { + // Get list of perms that match incoming URL. May be more than 1... + // Users perms must match all that match URL + List<AafUserRole> perms = getForUrlMethod(request.getRequestURI(), request.getMethod()); + int tested = 0; + int passed = 0; + for (AafUserRole perm : perms) { + for (AafPerm test : perm.getAafPerms()) { + tested++; + for (Permission userPerm : userPerms) { - public boolean processPermissions(HttpServletRequest request, List<Permission> userPerms) - { - try - { - // Get list of perms that match incoming URL. May be more than 1... - // Users perms must match all that match URL - List<AafUserRole> perms = getForUrlMethod(request.getRequestURI(), request.getMethod()); - ObjectMapper om = new ObjectMapper(); - int tested = 0; - int passed = 0; - for (AafUserRole perm : perms) - { - for (AafPerm test : perm.getAafPerms()) - { - tested++; - for (Permission userPerm: userPerms) - { - - if (test.matches((AAFPermission)userPerm)) - { - passed++; - break; - } - } - } - } - // All permissions must be OK - if (tested > 0 && tested == passed) - return true; - else - return false; - } - catch (Exception e) - { - Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage()); - } - return false; - } + if (test.matches((AAFPermission) userPerm)) { + passed++; + break; + } + } + } + } + // All permissions must be OK + if (tested > 0 && tested == passed) { + return true; + } + else { + return false; + } + } catch (Exception e) { + Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage()); + } + return false; + } } diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/aaf/FilterPriority.java b/cmso-service/src/main/java/org/onap/optf/cmso/aaf/FilterPriority.java index 39981c7..e973a4f 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/aaf/FilterPriority.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/aaf/FilterPriority.java @@ -1,35 +1,46 @@ -/** - * ============LICENSE_START======================================================= - * org.onap.optf.cmso - * ================================================================================ - * Copyright © 2019 AT&T Intellectual Property. All rights reserved. - * ================================================================================ +/******************************************************************************* + * Copyright © 2019 AT&T Intellectual Property. + * * 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. - * ============LICENSE_END========================================================= - */ + * + * + * 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.aaf; import org.springframework.core.Ordered; public enum FilterPriority { - AAF_AUTHENTICATION(Ordered.HIGHEST_PRECEDENCE), - AAF_AUTHORIZATION(Ordered.HIGHEST_PRECEDENCE + 1); //higher number = lower priority - + AAF_AUTHENTICATION(Ordered.HIGHEST_PRECEDENCE), AAF_AUTHORIZATION(Ordered.HIGHEST_PRECEDENCE + 1); private final int priority; - FilterPriority(final int p) { - priority = p; + FilterPriority(final int ppri) { + priority = ppri; } - public int getPriority() { return priority; } + public int getPriority() { + return priority; + } } diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/aaf/ResponseFormatter.java b/cmso-service/src/main/java/org/onap/optf/cmso/aaf/ResponseFormatter.java index 769262b..e7ddcdf 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/aaf/ResponseFormatter.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/aaf/ResponseFormatter.java @@ -1,38 +1,45 @@ -/** - * ============LICENSE_START======================================================= - * org.onap.optf.cmso - * ================================================================================ - * Copyright © 2019 AT&T Intellectual Property. All rights reserved. - * ================================================================================ +/******************************************************************************* + * Copyright © 2019 AT&T Intellectual Property. + * * 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. - * ============LICENSE_END========================================================= - */ + * + * + * 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.aaf; import java.io.IOException; - import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import javax.ws.rs.core.MediaType; - import org.onap.optf.cmso.common.exceptions.CMSException; class ResponseFormatter { - private static final String ACCEPT_HEADER = "accept"; - static void errorResponse(HttpServletRequest request, HttpServletResponse response, CMSException error) throws IOException { - String accept = request.getHeader(ACCEPT_HEADER) == null ? MediaType.APPLICATION_JSON : request.getHeader(ACCEPT_HEADER); + static void errorResponse(HttpServletRequest request, HttpServletResponse response, CMSException error) + throws IOException { response.setStatus(error.getStatus().getStatusCode()); response.getWriter().write(error.getRequestError().toString()); response.getWriter().flush(); diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/common/ApprovalStatusEnum.java b/cmso-service/src/main/java/org/onap/optf/cmso/common/ApprovalStatusEnum.java index 0069f26..db48437 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/common/ApprovalStatusEnum.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/common/ApprovalStatusEnum.java @@ -1,36 +1,34 @@ /*
- * 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.common;
+/**
+ * The Enum ApprovalStatusEnum.
+ */
public enum ApprovalStatusEnum {
Accepted("Accepted"), Rejected("Rejected"),;
@@ -40,6 +38,12 @@ public enum ApprovalStatusEnum { this.text = text;
}
+ /**
+ * To string.
+ *
+ * @return the string
+ */
+ @Override
public String toString() {
return text;
}
diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/common/ApprovalTypesEnum.java b/cmso-service/src/main/java/org/onap/optf/cmso/common/ApprovalTypesEnum.java index 927dbf1..97e33d5 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/common/ApprovalTypesEnum.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/common/ApprovalTypesEnum.java @@ -1,33 +1,28 @@ /*
- * 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.common;
@@ -40,6 +35,7 @@ public enum ApprovalTypesEnum { this.text = text;
}
+ @Override
public String toString() {
return text;
}
diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/common/CMSStatusEnum.java b/cmso-service/src/main/java/org/onap/optf/cmso/common/CMSStatusEnum.java index de1e701..5b0a539 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/common/CMSStatusEnum.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/common/CMSStatusEnum.java @@ -1,102 +1,95 @@ /*
- * 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
- *
+ *
* 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.common;
public enum CMSStatusEnum {
- PendingSchedule("Pending Schedule",
- "Schedule request as been accepted. Pending determination of recommended schedule."), SchedulingFailed(
- "Scheduling Failed", "Failed to determine recommended schedule."), ScheduleFailed("Schedule Failed",
- "Determination of recommended schedule failed."), OptimizationInProgress(
- "Optimization In Progress",
- "Determination of recommended schedule is in progress."), PendingApproval(
- "Pending Approval",
- "Pending approval of the recommended schedule."), OptimizationFailed(
- "Optimization Failed",
- "Unable to determine recommended schedule."), Accepted("Accepted",
- "Recommended schedule has been accepted."), Scheduled(
- "Scheduled",
- "All approvals received. Recommended schedule is pending execution."), ScheduledImmediate(
- "Scheduled Immediate",
- "All approvals received. Event is scheduled for immediate execution."), Triggered(
- "Triggered",
- "Scheduled event has been triggered."), ApprovalRejected(
- "Approval Rejected",
- "Recommended schedule has been rejected."), PastDue(
- "Past due",
- "Scheduled event time has passed. Queued event was not dispatched."), Error(
- "Error",
- "Attempt to displatch event failed."), Failed(
- "Failed",
- "Triggered event reported a failure."), Rejected(
- "Rejected",
- "Recommended schedule has been rejected."), NotificationsInitiated(
- "Notifications Initiated",
- "Notifications of scheduled events has been initiated."), Completed(
- "Completed",
- "Notification of all scheduled events have been sent."), CompletedWithError(
- "Completed with error(s)",
- "All scheduled events have completed, some with errors."), Deleted(
- "Deleted",
- "Schedule deleted prior to acceptance or after execution."), Cancelled(
- "Cancelled",
- "Scheduled event cancelled before execution."),;
+ PendingSchedule(
+ "Pending Schedule",
+ "Schedule request as been accepted. Pending determination of recommended schedule."),
+ SchedulingFailed("Scheduling Failed", "Failed to determine recommended schedule."),
+ ScheduleFailed("Schedule Failed", "Determination of recommended schedule failed."),
+ OptimizationInProgress(
+ "Optimization In Progress", "Determination of recommended schedule is in progress."),
+ PendingApproval("Pending Approval", "Pending approval of the recommended schedule."),
+ OptimizationFailed("Optimization Failed", "Unable to determine recommended schedule."),
+ Accepted("Accepted", "Recommended schedule has been accepted."),
+ Scheduled("Scheduled", "All approvals received. Recommended schedule is pending execution."),
+ ScheduledImmediate(
+ "Scheduled Immediate", "All approvals received. Event is scheduled for immediate execution."),
+ Triggered("Triggered", "Scheduled event has been triggered."),
+ ApprovalRejected("Approval Rejected", "Recommended schedule has been rejected."),
+ PastDue("Past due", "Scheduled event time has passed. Queued event was not dispatched."),
+ Error("Error", "Attempt to displatch event failed."),
+ Failed("Failed", "Triggered event reported a failure."),
+ Rejected("Rejected", "Recommended schedule has been rejected."),
+ NotificationsInitiated(
+ "Notifications Initiated", "Notifications of scheduled events has been initiated."),
+ Completed("Completed", "Notification of all scheduled events have been sent."),
+ CompletedWithError(
+ "Completed with error(s)", "All scheduled events have completed, some with errors."),
+ Deleted("Deleted", "Schedule deleted prior to acceptance or after execution."),
+ Cancelled("Cancelled", "Scheduled event cancelled before execution."),
+ NotScheduled("Not scheduled by optimizer", "Element not included in the schedule by optimizer."),
+ ;
- private final String text;
- private final String description;
+ private final String text;
+ private final String description;
- private CMSStatusEnum(String text, String description) {
- this.text = text;
- this.description = description;
- }
+ private CMSStatusEnum(String text, String description) {
+ this.text = text;
+ this.description = description;
+ }
- public String toString() {
- return text;
- }
+ @Override
+ public String toString() {
+ return text;
+ }
- public CMSStatusEnum fromString(String text) {
- for (CMSStatusEnum e : CMSStatusEnum.values())
- if (e.text.equals(text))
- return e;
- return null;
- }
-
- // To include in the AID.
- public static void main(String argv[]) {
- StringBuilder sb = new StringBuilder();
- sb.append("<html><body><table border=\"1\">\n");
- for (CMSStatusEnum v : CMSStatusEnum.values())
- sb.append("<tr><td>").append(v.text).append("</td><td>").append(v.description).append("</td></tr>\n");
- sb.append("</table></body></html>\n");
- System.out.println(sb.toString());
- }
+ public CMSStatusEnum fromString(String text) {
+ for (CMSStatusEnum e : CMSStatusEnum.values()) if (e.text.equals(text)) return e;
+ return null;
+ }
+ // To include in the AID.
+ public static void main(String argv[]) {
+ StringBuilder sb = new StringBuilder();
+ sb.append("<html><body><table border=\"1\">\n");
+ for (CMSStatusEnum v : CMSStatusEnum.values())
+ sb.append("<tr><td>")
+ .append(v.text)
+ .append("</td><td>")
+ .append(v.description)
+ .append("</td></tr>\n");
+ sb.append("</table></body></html>\n");
+ System.out.println(sb.toString());
+ }
}
diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/common/CmHelpers.java b/cmso-service/src/main/java/org/onap/optf/cmso/common/CmHelpers.java index 832acb7..c5ff7f0 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/common/CmHelpers.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/common/CmHelpers.java @@ -1,27 +1,27 @@ /*
- * 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
- *
+ *
* 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.
@@ -33,12 +33,13 @@ package org.onap.optf.cmso.common; import java.util.List;
import org.onap.optf.cmso.model.DomainData;
+import org.onap.optf.cmso.model.ElementData;
import org.onap.optf.cmso.model.Schedule;
import org.onap.optf.cmso.service.rs.models.CmDomainDataEnum;
/**
* Collection of commann static helper methods for CHangeManagement
- *
+ *
* @author jf9860
*
*/
@@ -56,4 +57,16 @@ public class CmHelpers { return null;
}
+ public static String getEventData(Schedule schedule, CmDomainDataEnum key) {
+ return getDomainData(schedule.getDomainData(), key);
+ }
+
+ public static String getElementData(List<ElementData> eventData, CmDomainDataEnum key) {
+ for (ElementData map : eventData) {
+ if (map.getName().equals(key.toString()))
+ return map.getValue();
+ }
+ return null;
+ }
+
}
diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/common/LogMessages.java b/cmso-service/src/main/java/org/onap/optf/cmso/common/LogMessages.java index efb4dd0..3fd6cc8 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/common/LogMessages.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/common/LogMessages.java @@ -1,237 +1,315 @@ /*
- * 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.common;
+import com.att.eelf.configuration.EELFManager;
+import com.att.eelf.i18n.EELFResourceManager;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
-
import javax.ws.rs.core.Response.Status;
-
import org.apache.log4j.Level;
import org.onap.observations.ObservationInterface;
-import com.att.eelf.configuration.EELFManager;
-import com.att.eelf.i18n.EELFResourceManager;
-
+/**
+ * The Enum LogMessages.
+ */
public enum LogMessages implements ObservationInterface {
- SEARCH_SCHEDULE_REQUEST_DETAILS("Search Schedule Request Details {0} from {1}: {2}", Status.OK, Level.INFO),
- SEARCH_SCHEDULE_REQUEST("Search Schedule Request {0} from {1}: {2} : {3}", Status.OK, Level.INFO),
- CREATE_SCHEDULE_REQUEST("Create Schedule Request {0} from {1}: {2} : {3}", Status.OK, Level.INFO),
- DELETE_SCHEDULE_REQUEST("Delete Schedule Request {0} from {1}: {2} : {3}", Status.OK, Level.INFO),
- GET_SCHEDULE_REQUEST_INFO("Get Schedule Request Info {0} from {1}: {2} : {3}", Status.OK, Level.INFO),
- PROCESS_OPTIMIZER_CALLBACK("Change management optimizer callback {0} from {1}: {2} ", Status.OK, Level.INFO),
- APPROVE_SCHEDULE_REQUEST("Approve Schedule Request {0} from {1}: {2} : {3}", Status.OK, Level.INFO),
- SCHEDULE_ALREADY_EXISTS("Schedule already exists domain={0} schedule id={1}", Status.OK, Level.INFO),
- SCHEDULE_NOT_FOUND("Schedule not found domain={0} schedule id={1}", Status.BAD_REQUEST, Level.INFO),
- INVALID_ATTRIBUTE("Invalid attribute {0}={1}", Status.BAD_REQUEST, Level.INFO),
- MISSING_REQUIRED_ATTRIBUTE("Missing required attribute '{0}'", Status.BAD_REQUEST, Level.INFO),
- INVALID_REQUEST("The input data structure is incorrect", Status.BAD_REQUEST, Level.INFO),
- REQUEST_TIMED_OUT("Request timed out.", Status.INTERNAL_SERVER_ERROR, Level.ERROR),
- UNEXPECTED_EXCEPTION("Unexpected exception encountered during processing. Please contact support : {0}", Status.INTERNAL_SERVER_ERROR, Level.ERROR),
- UNDEFINED_DOMAIN_DATA_ATTRIBUTE("Domain data attribute not defined domain={0} name={1} value={2}", Status.BAD_REQUEST, Level.INFO),
- UNDEFINED_FILTER_ATTRIBUTE("Undefined filter attribute {0}", Status.BAD_REQUEST, Level.INFO),
- INVALID_DATE_FILTER("Invalid date filter provided {0}=(1}", Status.BAD_REQUEST, Level.INFO),
- OPTIMIZER_QUARTZ_JOB("Quartz scheduling of OptimizerQuartzJob: {0}", Status.OK, Level.INFO),
- OPTIMIZER_EXCEPTION("Exception making client call to optimizer {0}", Status.INTERNAL_SERVER_ERROR, Level.ERROR),
- OPTIMIZER_CALLBACK_STATE_ERROR("Optimizer callback on schedule in invalid state. Should be {0} but was {1}.", Status.INTERNAL_SERVER_ERROR, Level.ERROR),
- CHANGE_MANAGEMENT_GROUP_NOT_FOUND("ChangeManagementGroup not found on optimizer callback scheduleId={0} groupId={1}", Status.NOT_FOUND, Level.INFO),
- INCOMING_MESSAGE("Incoming message method={0} path={1}", Status.OK, Level.INFO, true, false),
- INCOMING_MESSAGE_RESPONSE("Message response method={0} path={1} status={2}", Status.OK, Level.INFO, true, false),
- OUTGOING_MESSAGE("Outgoing message method={0} path={1}", Status.OK, Level.INFO, true, false),
- OUTGOING_MESSAGE_RETURNED("Outgoing message returned method={0} path={1} status={2}", Status.OK, Level.INFO, true, false),
-
- // TODO: Review the status and level of the remaining enums
- UNABLE_TO_ALLOCATE_VNF_TIMESLOTS("Unable to allocate VNF timeslots with Optimizer results startTime={0}, latestStartTime={1}, totalDuration={2}, concurrency={3} nvfs={4}", Status.OK, Level.INFO),
- UNABLE_TO_LOCATE_SCHEDULE_DETAIL("Unable to locate ChangeManagementSchedule for VNF. scheduleId={0}, groupId={1}, vnfName={2}", Status.OK, Level.INFO),
- CM_JOB("Quartz scheduling of CmJob: {0}", Status.OK, Level.INFO),
- CM_QUARTZ_JOB("Quartz scheduling of CmQuartzJob: {0}", Status.OK, Level.INFO),
- NOT_PENDING_APPROVAL("Approval request received for schedule that is not in Pending Approval state: domain={0} scheduleId={1} state={3}", Status.OK, Level.INFO),
- SCHEDULE_PAST_DUE("Attempt to dispatch an event that is Past due scheduleId={0}, vnf={1}, now={2}, startTime={3}", Status.OK, Level.INFO),
- MSO_POLLING_MISSING_SCHEDULE("Attempt to poll MSO for request id {1} for missing ChangeManagementSchedule id={0}", Status.OK, Level.INFO),
- MSO_STATUS_JOB("Polling MSO {0} for requestId={1} for id={2}", Status.OK, Level.INFO),
- UNEXPECTED_RESPONSE("Unexpected response from {0} HTTP Status={1} : {2}", Status.OK, Level.INFO),
- SCHEDULE_STATUS_JOB("Quartz scheduling of ScheduleStatusJob: {0}", Status.OK, Level.INFO),
- CM_TICKET_NOT_APPROVED("Attempt to dispatch a change management event that has no TM Ticket approved. scheduleId={0} VNF Name={1} TM ChangeId={2} Status={3} Approval Status={4}", Status.OK, Level.INFO),
- MULTIPLE_GROUPS_NOT_SUPPORTED("Multiple groups not supported on immediate requests", Status.OK, Level.INFO),
- TM_CREATE_CHANGE_RECORD("TM Create Change Record:{0} : Schedule ID: {1}", Status.OK, Level.INFO),
- TM_LIST("TM list:{0} : URL : {1}", Status.OK, Level.INFO),
- TM_API("TM API Call: URL : {0}", Status.OK, Level.INFO),
- UNABLE_TO_CREATE_CHANGE_TICKET("Unable to create change ticket in TM: Schedule ID: {0} : Reason : {1}", Status.OK, Level.INFO),
- TM_UPDATE_CHECKLIST("TM Fetch Checklist:{0} : Schedule ID: {1} : Change Id : {2} : URL : {3}", Status.OK, Level.INFO),
- OPTIMIZER_REQUEST("Optimi Request:{0} : Schedule ID: {1} : URL : {2}", Status.OK, Level.INFO),
- TM_CLOSE_CHANGE_RECORD("TM Close Change Record:{0} : Schedule ID: {1} : Change Id : {2}", Status.OK, Level.INFO),
- UNABLE_TO_CLOSE_CHANGE_TICKET("Unable to close change ticket in TM: Schedule ID: {0} : changeid: {1} : Reason: {2}", Status.OK, Level.INFO),
- CANNOT_CANCEL_IN_PROGRESS("Cannot delete/cancel a schedule with events in progress.", Status.OK, Level.INFO),
- UNABLE_TO_PARSE_SCHEDULING_INFO("Cannot parse scheduling info.", Status.OK, Level.INFO),
- UNABLE_TO_LOCATE_CHANGE_RECORD("Unable to locate TM change record {2} to check status before displacth of {1} for schedulId={0}", Status.OK, Level.INFO),
- INVALID_CHANGE_WINDOW("Change window end time {1} must be after start time {0}", Status.OK, Level.INFO),
- NODE_LIST_CONTAINS_EMTPY_NODE("vnfDetails node list contains at least one empty node.", Status.OK, Level.INFO),
- SO_API("SO Poll Request {0}", Status.OK, Level.INFO),
- EXPECTED_EXCEPTION("Expected exception encountered during processing. {0}", Status.OK, Level.INFO),
- TM_UPDATE_CHANGE_RECORD("TM Update Change Record:{0} : Schedule ID: {1} : Change Id : {2} : URL : {3}", Status.OK, Level.INFO),
- UNABLE_TO_UPDATE_CHANGE_TICKET("Unable to update change ticket in TM: Schedule ID: {0} : changeid: {1} : Reason: {2}", Status.OK, Level.INFO),
- UNAUTHORIZED("Authorization failed.", Status.FORBIDDEN, Level.INFO),
- UNAUTHENTICATED("Authentication failed.", Status.UNAUTHORIZED, Level.INFO),
- UNRECOGNIZED_MSO_STATUS("Unrecognized status returned by MSO {0}", Status.INTERNAL_SERVER_ERROR, Level.ERROR),
- UNABLE_TO_PARSE_MSO_RESPONSE("Unable to parse status message from MSO {0} : {1}", Status.INTERNAL_SERVER_ERROR, Level.ERROR),
- ;
- private final String defaultId;
- private final String defaultMessage;
- private final String defaultResolution;
- private final String defaultAction;
-
- private final Status status;
- private final Level level;
- private final Boolean audit;
- private final Boolean metric;
-
-
- private LogMessages(String message, Status code, Level l)
- {
- defaultMessage = message;
- level=l;
- status = code;
- this.defaultId = this.name();
- this.defaultResolution = "No resolution needed";
- this.defaultAction = "No action is required";
- this.audit = false;
- this.metric = false;
- }
-
- private LogMessages(String message, Status code, Level l, Boolean audit, Boolean metric)
- {
- defaultMessage = message;
- level=l;
- status = code;
- this.audit = audit;
- this.metric = metric;
- this.defaultId = this.name();
- this.defaultResolution = "No resolution needed";
- this.defaultAction = "No action is required";
- }
-
- private LogMessages(String message, Status code, Level l, String id, String resolution, String action)
- {
- level=l;
- status = code;
- defaultMessage = message;
- this.defaultId = id;
- this.defaultResolution = resolution;
- this.defaultAction = action;
- this.audit = false;
- this.metric = false;
- }
-
- static {
- EELFResourceManager.loadMessageBundle("logmessages");
- }
-
- public String genProperties()
- {
- // Use this to regenerate properties file. The desire to change messages without updating code is
- // well understood, but the developer should be able to code the defaults without having to update 2 different files and
- // get it wrong.
- StringBuilder sb = new StringBuilder();
- sb.append("# Generated from ").append(this.getClass().getName()).append("\n");
- for (LogMessages lm : values())
- {
- sb.append(lm.name());
- sb.append(" ").append(lm.defaultId);
- sb.append("|").append(lm.defaultMessage);
- sb.append("|").append(lm.defaultResolution);
- sb.append("|").append(lm.defaultAction);
- sb.append("\n");
- }
- return sb.toString();
- }
-
-
- // interface methods
- @Override
- public Level getLevel() {return level;}
- @Override
- public String getMessage() {return defaultMessage;}
- @Override
- public Status getStatus() {return status;}
- @Override
- public Enum<?> getValue() {return this;}
- @Override
- public String getDomain() {return this.getClass().getSimpleName();}
- @Override
- public Boolean getAudit() { return audit; }
- @Override
- public Boolean getMetric() { return metric; }
-
- public static void main(String argv[])
- {
- System.out.println(LogMessages.UNEXPECTED_EXCEPTION.genProperties());
- try
- {
- Files.write(Paths.get("src/main/resources/logmessages.properties"), LogMessages.UNEXPECTED_EXCEPTION.genProperties().getBytes());
- }
- catch (IOException e)
- {
- EELFManager.getInstance().getDebugLogger().debug("Failed to update properties file.", e);
-
- }
- StringBuilder sb = new StringBuilder();
- sb.append("<html><body><h1>Cell Site Selection Scheduler mS Observations</h1>\n<table border=\"1\">\n<tr>");
- sb.append("<td>Code</td> ");
- sb.append("<td>Log Level</td> ");
- sb.append("<td>Message</td> ");
- sb.append("</tr>\n");
- for (LogMessages m : LogMessages.values())
- {
- if (m.level == Level.ERROR || m.level == Level.WARN || m.level == Level.FATAL)
- {
- sb.append("<tr>");
- sb.append("<td>").append(m.name()).append("</td> ");
- sb.append("<td>").append(m.level).append("</td> ");
- sb.append("<td>").append(m.defaultMessage).append("</td> ");
- sb.append("</tr>\n");
- }
- }
- try
- {
- Files.write(Paths.get("logmessages.html"), sb.toString().getBytes());
- }
- catch (IOException e)
- {
- EELFManager.getInstance().getDebugLogger().debug("Failed to update properties html file.", e);
-
- }
-
- }
+ SEARCH_SCHEDULE_REQUEST_DETAILS("Search Schedule Request Details {0} from {1}: {2}", Status.OK, Level.INFO),
+ SEARCH_SCHEDULE_REQUEST("Search Schedule Request {0} from {1}: {2} : {3}", Status.OK, Level.INFO),
+ CREATE_SCHEDULE_REQUEST("Create Schedule Request {0} from {1}: {2} : {3}", Status.OK, Level.INFO),
+ DELETE_SCHEDULE_REQUEST("Delete Schedule Request {0} from {1}: {2} : {3}", Status.OK, Level.INFO),
+ GET_SCHEDULE_REQUEST_INFO("Get Schedule Request Info {0} from {1}: {2} : {3}", Status.OK, Level.INFO),
+ PROCESS_OPTIMIZER_CALLBACK("Change management optimizer callback {0} from {1}: {2} ", Status.OK, Level.INFO),
+ APPROVE_SCHEDULE_REQUEST("Approve Schedule Request {0} from {1}: {2} : {3}", Status.OK, Level.INFO),
+ SCHEDULE_ALREADY_EXISTS("Schedule already exists domain={0} schedule id={1}", Status.OK, Level.INFO),
+ SCHEDULE_NOT_FOUND("Schedule not found domain={0} schedule id={1}", Status.BAD_REQUEST, Level.INFO),
+ INVALID_ATTRIBUTE("Invalid attribute {0}={1}", Status.BAD_REQUEST, Level.INFO),
+ MISSING_REQUIRED_ATTRIBUTE("Missing required attribute '{0}'", Status.BAD_REQUEST, Level.INFO),
+ INVALID_REQUEST("The input data structure is incorrect", Status.BAD_REQUEST, Level.INFO),
+ REQUEST_TIMED_OUT("Request timed out.", Status.INTERNAL_SERVER_ERROR, Level.ERROR),
+ UNEXPECTED_EXCEPTION("Unexpected exception encountered during processing. Please contact support : {0}",
+ Status.INTERNAL_SERVER_ERROR, Level.ERROR),
+ UNDEFINED_DOMAIN_DATA_ATTRIBUTE("Domain data attribute not defined domain={0} name={1} value={2}",
+ Status.BAD_REQUEST, Level.INFO),
+ UNDEFINED_FILTER_ATTRIBUTE("Undefined filter attribute {0}", Status.BAD_REQUEST, Level.INFO),
+ INVALID_DATE_FILTER("Invalid date filter provided {0}=(1}", Status.BAD_REQUEST, Level.INFO),
+ OPTIMIZER_QUARTZ_JOB("Quartz scheduling of OptimizerQuartzJob: {0}", Status.OK, Level.INFO),
+ OPTIMIZER_EXCEPTION("Exception making client call to optimizer {0}", Status.INTERNAL_SERVER_ERROR, Level.ERROR),
+ OPTIMIZER_CALLBACK_STATE_ERROR("Optimizer callback on schedule in invalid state. Should be {0} but was {1}.",
+ Status.INTERNAL_SERVER_ERROR, Level.ERROR),
+ CHANGE_MANAGEMENT_GROUP_NOT_FOUND(
+ "ChangeManagementGroup not found on optimizer callback scheduleId={0} groupId={1}",
+ Status.NOT_FOUND, Level.INFO),
+ INCOMING_MESSAGE("Incoming message method={0} path={1}", Status.OK, Level.INFO, true, false),
+ INCOMING_MESSAGE_RESPONSE("Message response method={0} path={1} status={2}", Status.OK, Level.INFO, true, false),
+ OUTGOING_MESSAGE("Outgoing message method={0} path={1}", Status.OK, Level.INFO, true, false),
+ OUTGOING_MESSAGE_RETURNED("Outgoing message returned method={0} path={1} status={2}", Status.OK, Level.INFO, true,
+ false),
+
+ // TODO: Review the status and level of the remaining enums
+ UNABLE_TO_ALLOCATE_VNF_TIMESLOTS(
+ "Unable to allocate VNF timeslots with Optimizer results startTime={0},"
+ + " latestStartTime={1}, totalDuration={2}, concurrency={3} nvfs={4}",
+ Status.OK, Level.INFO),
+ UNABLE_TO_LOCATE_SCHEDULE_DETAIL(
+ "Unable to locate ChangeManagementSchedule for VNF. scheduleId={0}, groupId={1}, vnfName={2}",
+ Status.OK, Level.INFO),
+ CM_JOB("Quartz scheduling of CmJob: {0}", Status.OK, Level.INFO),
+ CM_QUARTZ_JOB("Quartz scheduling of CmQuartzJob: {0}", Status.OK, Level.INFO),
+ NOT_PENDING_APPROVAL(
+ "Approval request received for schedule that is not in Pending Approval state:"
+ + " domain={0} scheduleId={1} state={3}",
+ Status.OK, Level.INFO),
+ SCHEDULE_PAST_DUE("Attempt to dispatch an event that is Past due scheduleId={0}, vnf={1}, now={2}, startTime={3}",
+ Status.OK, Level.INFO),
+ MSO_POLLING_MISSING_SCHEDULE("Attempt to poll MSO for request id {1} for missing ChangeManagementSchedule id={0}",
+ Status.OK, Level.INFO),
+ MSO_STATUS_JOB("Polling MSO {0} for requestId={1} for id={2}", Status.OK, Level.INFO),
+ UNEXPECTED_RESPONSE("Unexpected response from {0} HTTP Status={1} : {2}", Status.OK, Level.INFO),
+ SCHEDULE_STATUS_JOB("Quartz scheduling of ScheduleStatusJob: {0}", Status.OK, Level.INFO),
+ CM_TICKET_NOT_APPROVED(
+ "Attempt to dispatch a change management event that has no TM Ticket approved."
+ + "scheduleId={0} VNF Name={1} TM ChangeId={2} Status={3} Approval Status={4}",
+ Status.OK, Level.INFO),
+ MULTIPLE_GROUPS_NOT_SUPPORTED("Multiple groups not supported on immediate requests", Status.OK, Level.INFO),
+ TM_CREATE_CHANGE_RECORD("TM Create Change Record:{0} : Schedule ID: {1}", Status.OK, Level.INFO),
+ TM_LIST("TM list:{0} : URL : {1}", Status.OK, Level.INFO),
+ TM_API("TM API Call: URL : {0}", Status.OK, Level.INFO),
+ UNABLE_TO_CREATE_CHANGE_TICKET("Unable to create change ticket in TM: Schedule ID: {0} : Reason : {1}", Status.OK,
+ Level.INFO),
+ TM_UPDATE_CHECKLIST("TM Fetch Checklist:{0} : Schedule ID: {1} : Change Id : {2} : URL : {3}", Status.OK,
+ Level.INFO),
+ OPTIMIZER_REQUEST("Optimi Request:{0} : Schedule ID: {1} : URL : {2}", Status.OK, Level.INFO),
+ TM_CLOSE_CHANGE_RECORD("TM Close Change Record:{0} : Schedule ID: {1} : Change Id : {2}", Status.OK, Level.INFO),
+ UNABLE_TO_CLOSE_CHANGE_TICKET(
+ "Unable to close change ticket in TM: Schedule ID: {0} : changeid: {1} : Reason: {2}", Status.OK,
+ Level.INFO),
+ CANNOT_CANCEL_IN_PROGRESS("Cannot delete/cancel a schedule with events in progress.", Status.OK, Level.INFO),
+ UNABLE_TO_PARSE_SCHEDULING_INFO("Cannot parse scheduling info.", Status.OK, Level.INFO),
+ UNABLE_TO_LOCATE_CHANGE_RECORD(
+ "Unable to locate TM change record {2} to check status before displacth of {1} for schedulId={0}",
+ Status.OK, Level.INFO),
+ INVALID_CHANGE_WINDOW("Change window end time {1} must be after start time {0}", Status.OK, Level.INFO),
+ NODE_LIST_CONTAINS_EMTPY_NODE("vnfDetails node list contains at least one empty node.", Status.OK, Level.INFO),
+ SO_API("SO Poll Request {0}", Status.OK, Level.INFO),
+ EXPECTED_EXCEPTION("Expected exception encountered during processing. {0}", Status.OK, Level.INFO),
+ TM_UPDATE_CHANGE_RECORD("TM Update Change Record:{0} : Schedule ID: {1} : Change Id : {2} : URL : {3}", Status.OK,
+ Level.INFO),
+ UNABLE_TO_UPDATE_CHANGE_TICKET(
+ "Unable to update change ticket in TM: Schedule ID: {0} : changeid: {1} : Reason: {2}", Status.OK,
+ Level.INFO),
+ UNAUTHORIZED("Authorization failed.", Status.FORBIDDEN, Level.INFO),
+ UNAUTHENTICATED("Authentication failed.", Status.UNAUTHORIZED, Level.INFO),
+ UNRECOGNIZED_MSO_STATUS("Unrecognized status returned by MSO {0}", Status.INTERNAL_SERVER_ERROR, Level.ERROR),
+ UNABLE_TO_PARSE_MSO_RESPONSE("Unable to parse status message from MSO {0} : {1}", Status.INTERNAL_SERVER_ERROR,
+ Level.ERROR),
+ MISSING_VALID_GROUP_FOR_ELEMENT("Element {0} returned by optimizer has invalid group id",
+ Status.INTERNAL_SERVER_ERROR, Level.ERROR),;
+ private final String defaultId;
+ private final String defaultMessage;
+ private final String defaultResolution;
+ private final String defaultAction;
+
+ private final Status status;
+ private final Level level;
+ private final Boolean audit;
+ private final Boolean metric;
+
+
+ private LogMessages(String message, Status code, Level lev) {
+ defaultMessage = message;
+ level = lev;
+ status = code;
+ this.defaultId = this.name();
+ this.defaultResolution = "No resolution needed";
+ this.defaultAction = "No action is required";
+ this.audit = false;
+ this.metric = false;
+ }
+
+ private LogMessages(String message, Status code, Level lev, Boolean audit, Boolean metric) {
+ defaultMessage = message;
+ level = lev;
+ status = code;
+ this.audit = audit;
+ this.metric = metric;
+ this.defaultId = this.name();
+ this.defaultResolution = "No resolution needed";
+ this.defaultAction = "No action is required";
+ }
+
+ private LogMessages(String message, Status code, Level lev, String id, String resolution, String action) {
+ level = lev;
+ status = code;
+ defaultMessage = message;
+ this.defaultId = id;
+ this.defaultResolution = resolution;
+ this.defaultAction = action;
+ this.audit = false;
+ this.metric = false;
+ }
+
+ static {
+ EELFResourceManager.loadMessageBundle("logmessages");
+ }
+
+ /**
+ * Gen properties.
+ *
+ * @return the string
+ */
+ public String genProperties() {
+ // Use this to regenerate properties file. The desire to change messages without updating code is
+ // well understood, but the developer should be able to code the defaults without having to update 2
+ // different files and
+ // get it wrong.
+ StringBuilder sb = new StringBuilder();
+ sb.append("# Generated from ").append(this.getClass().getName()).append("\n");
+ for (LogMessages lm : values()) {
+ sb.append(lm.name());
+ sb.append(" ").append(lm.defaultId);
+ sb.append("|").append(lm.defaultMessage);
+ sb.append("|").append(lm.defaultResolution);
+ sb.append("|").append(lm.defaultAction);
+ sb.append("\n");
+ }
+ return sb.toString();
+ }
+
+
+ /**
+ * Gets the level.
+ *
+ * @return the level
+ */
+ // interface methods
+ @Override
+ public Level getLevel() {
+ return level;
+ }
+
+ /**
+ * Gets the message.
+ *
+ * @return the message
+ */
+ @Override
+ public String getMessage() {
+ return defaultMessage;
+ }
+
+ /**
+ * Gets the status.
+ *
+ * @return the status
+ */
+ @Override
+ public Status getStatus() {
+ return status;
+ }
+
+ /**
+ * Gets the value.
+ *
+ * @return the value
+ */
+ @Override
+ public Enum<?> getValue() {
+ return this;
+ }
+
+ /**
+ * Gets the domain.
+ *
+ * @return the domain
+ */
+ @Override
+ public String getDomain() {
+ return this.getClass().getSimpleName();
+ }
+
+ /**
+ * Gets the audit.
+ *
+ * @return the audit
+ */
+ @Override
+ public Boolean getAudit() {
+ return audit;
+ }
+
+ /**
+ * Gets the metric.
+ *
+ * @return the metric
+ */
+ @Override
+ public Boolean getMetric() {
+ return metric;
+ }
+
+ /**
+ * The main method.
+ *
+ * @param argv the arguments
+ */
+ public static void main(String[] argv) {
+ System.out.println(LogMessages.UNEXPECTED_EXCEPTION.genProperties());
+ try {
+ Files.write(Paths.get("src/main/resources/logmessages.properties"),
+ LogMessages.UNEXPECTED_EXCEPTION.genProperties().getBytes());
+ } catch (IOException e) {
+ EELFManager.getInstance().getDebugLogger().debug("Failed to update properties file.", e);
+
+ }
+ StringBuilder sb = new StringBuilder();
+ sb.append("<html><body><h1>Cell Site Selection Scheduler mS Observations</h1>\n<table border=\"1\">\n<tr>");
+ sb.append("<td>Code</td> ");
+ sb.append("<td>Log Level</td> ");
+ sb.append("<td>Message</td> ");
+ sb.append("</tr>\n");
+ for (LogMessages m : LogMessages.values()) {
+ if (m.level == Level.ERROR || m.level == Level.WARN || m.level == Level.FATAL) {
+ sb.append("<tr>");
+ sb.append("<td>").append(m.name()).append("</td> ");
+ sb.append("<td>").append(m.level).append("</td> ");
+ sb.append("<td>").append(m.defaultMessage).append("</td> ");
+ sb.append("</tr>\n");
+ }
+ }
+ try {
+ Files.write(Paths.get("logmessages.html"), sb.toString().getBytes());
+ } catch (IOException e) {
+ EELFManager.getInstance().getDebugLogger().debug("Failed to update properties html file.", e);
+
+ }
+
+ }
}
diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/dispatcher/CMSOClient.java b/cmso-service/src/main/java/org/onap/optf/cmso/dispatcher/CMSOClient.java index 19927ad..d726107 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/dispatcher/CMSOClient.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/dispatcher/CMSOClient.java @@ -1,27 +1,27 @@ /*
- * 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
- *
+ *
* 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,6 +31,10 @@ package org.onap.optf.cmso.dispatcher;
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
import javax.ws.rs.ProcessingException;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
@@ -42,16 +46,14 @@ import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response;
import org.onap.optf.cmso.common.BasicAuthenticatorFilter;
import org.onap.optf.cmso.common.CMSStatusEnum;
-import org.onap.optf.cmso.common.CmHelpers;
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.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.CmDomainDataEnum;
import org.onap.optf.cmso.ticketmgt.TmClient;
import org.onap.optf.cmso.wf.bean.WfChangeManagementResponse;
import org.onap.optf.cmso.wf.bean.WfVidCmResponse;
@@ -60,10 +62,6 @@ 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.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
@Component
public class CMSOClient {
@@ -81,6 +79,7 @@ public class CMSOClient { @Autowired
ScheduleDAO scheduleDAO;
+
@Autowired
Environment env;
@@ -97,13 +96,13 @@ public class CMSOClient { if (!url.endsWith("/"))
url += "/";
url = url + "schedule/" + cmSchedule.getVnfName();
- String callbackData = CmHelpers.getDomainData(schedule, CmDomainDataEnum.CallbackData);
+ String callbackData = cmSchedule.getRequest();
String user = env.getProperty("so.user", "");
String pass = pm.getProperty("so.pass", "");
Client client = ClientBuilder.newClient();
if (!user.equals(""))
client.register(new BasicAuthenticatorFilter(user, pass));
- client.register(new CMSOClientFilters());
+ client.register(new CmsoClientFilters());
WebTarget target = client.target(url);
ObjectMapper om = new ObjectMapper();
JsonNode jsonEntity = om.readTree(callbackData);
diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/dispatcher/CmJob.java b/cmso-service/src/main/java/org/onap/optf/cmso/dispatcher/CmJob.java index 880566a..8766eee 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/dispatcher/CmJob.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/dispatcher/CmJob.java @@ -32,6 +32,7 @@ package org.onap.optf.cmso.dispatcher;
import java.util.Map;
+import java.util.UUID;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
@@ -45,7 +46,7 @@ import org.onap.optf.cmso.common.BasicAuthenticatorFilter; import org.onap.optf.cmso.common.LogMessages;
import org.onap.optf.cmso.common.PropertiesManagement;
import org.onap.optf.cmso.eventq.DispatchedEventList;
-import org.onap.optf.cmso.filters.CMSOClientFilters;
+import org.onap.optf.cmso.filters.CmsoClientFilters;
import org.onap.optf.cmso.model.dao.ChangeManagementGroupDAO;
import org.onap.optf.cmso.model.dao.ChangeManagementScheduleDAO;
import org.onap.optf.cmso.model.dao.ScheduleDAO;
@@ -103,19 +104,19 @@ public class CmJob implements Job { public void execute(JobExecutionContext context) throws JobExecutionException {
Mdc.quartzJobBegin(context);
debug.debug(LogMessages.CM_JOB, "Entered");
- Integer id = context.getJobDetail().getJobDataMap().getInt("key");
+ String id = context.getJobDetail().getJobDataMap().getString("key");
try {
// Hand this off to a transactional service
loopback(id);
} catch (Exception e) {
log.warn("Unexpected exception", e);
} finally {
- dispatchedEventList.remove(id);
+ dispatchedEventList.remove(UUID.fromString(id));
}
debug.debug(LogMessages.CM_JOB, "Exited");
}
- public void loopback(Integer id) {
+ public void loopback(String id) {
Map<String, String> mdcSave = Mdc.save();
try {
String url = env.getProperty("cmso.dispatch.url", "http://localhost:8089");
@@ -125,7 +126,7 @@ public class CmJob implements Job { String pass = pm.getProperty("mechid.pass", "");
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;
diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/dispatcher/DispatchJob.java b/cmso-service/src/main/java/org/onap/optf/cmso/dispatcher/DispatchJob.java index cb8597f..60d8bdb 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/dispatcher/DispatchJob.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/dispatcher/DispatchJob.java @@ -1,6 +1,6 @@ /*
- * 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.
@@ -35,6 +35,8 @@ import java.net.InetAddress; import java.util.Date;
import java.util.HashSet;
import java.util.Set;
+import java.util.UUID;
+
import org.onap.optf.cmso.common.CMSStatusEnum;
import org.onap.optf.cmso.common.LogMessages;
import org.onap.optf.cmso.model.ChangeManagementGroup;
@@ -52,6 +54,7 @@ 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.att.eelf.i18n.EELFResourceManager;
@@ -86,15 +89,15 @@ public class DispatchJob { @Autowired
Environment env;
- public void execute(Integer id) throws JobExecutionException {
+ public void execute(UUID id) throws JobExecutionException {
debug.debug(LogMessages.CM_JOB, "Entered");
try {
// No other instance can read this cmso until we are done.
ChangeManagementSchedule cmSchedule = cmScheduleDAO.lockOne(id);
cmSchedule.setDispatcherInstance(InetAddress.getLocalHost().getHostAddress());
- ChangeManagementGroup group = cmGroupDAO.findById(cmSchedule.getChangeManagementGroupsId()).orElse(null);
+ ChangeManagementGroup group = cmGroupDAO.findById(cmSchedule.getChangeManagementGroupUuid()).orElse(null);
if (group != null) {
- Schedule schedule = scheduleDAO.findById(group.getSchedulesId()).orElse(null);
+ Schedule schedule = scheduleDAO.findById(group.getSchedulesUuid()).orElse(null);
if (schedule != null) {
schedule.setStatus(CMSStatusEnum.NotificationsInitiated.toString());
if (safeToDispatch(cmSchedule, schedule))
diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/dispatcher/rs/DispacherService.java b/cmso-service/src/main/java/org/onap/optf/cmso/dispatcher/rs/DispacherService.java index adc3260..3c53759 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/dispatcher/rs/DispacherService.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/dispatcher/rs/DispacherService.java @@ -59,7 +59,7 @@ public interface DispacherService { @ApiOperation(value = "", notes = "Does dispsatch of provided cm schedule id.", response = Integer.class)
@ApiResponses(
value = {@ApiResponse(code = 200, message = "OK"), @ApiResponse(code = 400, message = "Request failed")})
- public Response dispatchSchedule(@ApiParam(value = "Identifier", allowMultiple = false) @PathParam("id") Integer id,
+ public Response dispatchSchedule(@ApiParam(value = "Identifier", allowMultiple = false) @PathParam("id") String id,
@Context UriInfo uri, @Context HttpServletRequest request);
// ******************************************************************
@@ -70,7 +70,7 @@ public interface DispacherService { @ApiResponses(
value = {@ApiResponse(code = 200, message = "OK"), @ApiResponse(code = 400, message = "Request failed")})
public Response dispatchOptimizer(
- @ApiParam(value = "Identifier", allowMultiple = false) @PathParam("id") Integer id, @Context UriInfo uri,
+ @ApiParam(value = "Identifier", allowMultiple = false) @PathParam("id") String id, @Context UriInfo uri,
@Context HttpServletRequest request);
// ******************************************************************
@@ -81,7 +81,7 @@ public interface DispacherService { @ApiResponses(
value = {@ApiResponse(code = 200, message = "OK"), @ApiResponse(code = 400, message = "Request failed")})
public Response dispatchScheduleStatus(
- @ApiParam(value = "Identifier", allowMultiple = false) @PathParam("id") Integer id, @Context UriInfo uri,
+ @ApiParam(value = "Identifier", allowMultiple = false) @PathParam("id") String id, @Context UriInfo uri,
@Context HttpServletRequest request);
// ******************************************************************
@@ -91,7 +91,7 @@ public interface DispacherService { @ApiOperation(value = "", notes = "Does dispsatch of provided cm schedule id.", response = Integer.class)
@ApiResponses(
value = {@ApiResponse(code = 200, message = "OK"), @ApiResponse(code = 400, message = "Request failed")})
- public Response dispatchSoStatus(@ApiParam(value = "Identifier", allowMultiple = true) @PathParam("id") Integer id,
+ public Response dispatchSoStatus(@ApiParam(value = "Identifier", allowMultiple = true) @PathParam("id") String id,
@Context UriInfo uri, @Context HttpServletRequest request);
}
diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/dispatcher/rs/DispatcherServiceImpl.java b/cmso-service/src/main/java/org/onap/optf/cmso/dispatcher/rs/DispatcherServiceImpl.java index 67a69cb..92bb3f3 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/dispatcher/rs/DispatcherServiceImpl.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/dispatcher/rs/DispatcherServiceImpl.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,22 +31,21 @@ package org.onap.optf.cmso.dispatcher.rs;
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+import java.util.UUID;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;
-
import org.onap.optf.cmso.common.LogMessages;
import org.onap.optf.cmso.dispatcher.DispatchJob;
-import org.onap.optf.cmso.optimizer.CMSOptimizerClient;
+import org.onap.optf.cmso.optimizer.CmsoOptimizerClient;
import org.onap.optf.cmso.sostatus.MsoStatusClient;
import org.onap.optf.cmso.ticketmgt.TmStatusClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-
@Controller
public class DispatcherServiceImpl implements DispacherService {
private static EELFLogger log = EELFManager.getInstance().getLogger(DispatcherServiceImpl.class);
@@ -58,7 +57,7 @@ public class DispatcherServiceImpl implements DispacherService { DispatchJob dispatchJob;
@Autowired
- CMSOptimizerClient optimizerClient;
+ CmsoOptimizerClient optimizerClient;
@Autowired
TmStatusClient tmStatusClient;
@@ -68,10 +67,11 @@ public class DispatcherServiceImpl implements DispacherService { @Override
@Transactional
- public Response dispatchSchedule(Integer id, UriInfo uri, HttpServletRequest request) {
+ public Response dispatchSchedule(String id, UriInfo uri, HttpServletRequest request) {
debug.debug("dispatchSchedule entered {}" , id);
try {
- dispatchJob.execute(id);
+ UUID uuid = UUID.fromString(id);
+ dispatchJob.execute(uuid);
} catch (Exception e) {
errors.error(LogMessages.UNEXPECTED_EXCEPTION, e.getMessage());
debug.error(e.getMessage(), e);
@@ -82,22 +82,23 @@ public class DispatcherServiceImpl implements DispacherService { @Override
@Transactional
- public Response dispatchOptimizer(Integer id, UriInfo uri, HttpServletRequest request) {
+ public Response dispatchOptimizer(String id, UriInfo uri, HttpServletRequest request) {
debug.debug("dispatchOptimizer entered {}", id);
try {
- optimizerClient.scheduleOptimization(id);
+ UUID uuid = UUID.fromString(id);
+ optimizerClient.scheduleOptimization(uuid);
} catch (Exception e) {
errors.error(LogMessages.UNEXPECTED_EXCEPTION, e.getMessage());
debug.error(e.getMessage(), e);
}
Response response = Response.ok().build();
- audit.info("dispatchSNIRO");
+ audit.info("dispatchOptimizer");
return response;
}
@Override
@Transactional
- public Response dispatchScheduleStatus(Integer id, UriInfo uri, HttpServletRequest request) {
+ public Response dispatchScheduleStatus(String id, UriInfo uri, HttpServletRequest request) {
debug.debug("dispatchScheduleStatus entered {}", id);
try {
tmStatusClient.checkStatus(id);
@@ -111,7 +112,7 @@ public class DispatcherServiceImpl implements DispacherService { @Override
@Transactional
- public Response dispatchSoStatus(Integer id, UriInfo uri, HttpServletRequest request) {
+ public Response dispatchSoStatus(String id, UriInfo uri, HttpServletRequest request) {
debug.debug("dispatchSoStatus entered {}", id);
try {
msoStatusClient.execute(id);
diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/eventq/CMSQueueJob.java b/cmso-service/src/main/java/org/onap/optf/cmso/eventq/CMSQueueJob.java index 59df59f..0987f8b 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/eventq/CMSQueueJob.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/eventq/CMSQueueJob.java @@ -1,6 +1,6 @@ /*
- * 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.
@@ -87,9 +87,9 @@ public class CMSQueueJob { return false;
for (ChangeManagementSchedule schedule : schedules) {
try {
- if (!dispatchedEventList.isAlreadyDispatched(schedule.getId())) {
+ if (!dispatchedEventList.isAlreadyDispatched(schedule.getUuid())) {
scheduleCmJob(schedule);
- dispatchedEventList.addToDispathcedEventList(schedule.getId());
+ dispatchedEventList.addToDispathcedEventList(schedule.getUuid());
}
} catch (org.quartz.SchedulerException e) {
debug.debug(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage());
@@ -118,7 +118,7 @@ public class CMSQueueJob { dispatchTime = startTime - dispatherLeadTime;
JobDetail jobDetail = JobBuilder.newJob(CmJob.class).build();
- jobDetail.getJobDataMap().put("key", schedule.getId());
+ jobDetail.getJobDataMap().put("key", schedule.getUuid().toString());
TriggerBuilder<Trigger> tb = TriggerBuilder.newTrigger().forJob(jobDetail);
diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/eventq/DispatchedEventList.java b/cmso-service/src/main/java/org/onap/optf/cmso/eventq/DispatchedEventList.java index 0c346d3..3e02cd1 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/eventq/DispatchedEventList.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/eventq/DispatchedEventList.java @@ -1,6 +1,6 @@ /*
- * 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.
@@ -33,6 +33,8 @@ package org.onap.optf.cmso.eventq; import java.util.HashSet;
import java.util.Set;
+import java.util.UUID;
+
import org.springframework.stereotype.Component;
/**
@@ -45,18 +47,18 @@ import org.springframework.stereotype.Component; @Component
public class DispatchedEventList {
- private Set<Integer> list = new HashSet<>();
+ private Set<UUID> list = new HashSet<>();
- public synchronized void addToDispathcedEventList(Integer id) {
+ public synchronized void addToDispathcedEventList(UUID id) {
list.add(id);
}
- public synchronized void remove(Integer id) {
+ public synchronized void remove(UUID id) {
list.remove(id);
}
- public synchronized boolean isAlreadyDispatched(Integer id) {
- return list.contains(id);
+ public synchronized boolean isAlreadyDispatched(UUID uuid) {
+ return list.contains(uuid);
}
}
diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/filters/CMSOClientFilters.java b/cmso-service/src/main/java/org/onap/optf/cmso/filters/CmsoClientFilters.java index 5e29607..00b8fe5 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/filters/CMSOClientFilters.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/filters/CmsoClientFilters.java @@ -1,91 +1,86 @@ -/*
- * 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.filters;
-
-import static com.att.eelf.configuration.Configuration.MDC_KEY_REQUEST_ID;
-
-import java.io.IOException;
-
-import javax.ws.rs.client.ClientRequestContext;
-import javax.ws.rs.client.ClientRequestFilter;
-import javax.ws.rs.client.ClientResponseContext;
-import javax.ws.rs.client.ClientResponseFilter;
-import javax.ws.rs.core.MultivaluedMap;
-
-import org.onap.observations.Mdc;
-import org.onap.observations.Observation;
-import org.onap.optf.cmso.common.LogMessages;
-import org.onap.optf.cmso.filters.MessageHeaders.HeadersEnum;
-import org.onap.optf.cmso.service.rs.CMSOServiceImpl;
-import org.slf4j.MDC;
-import org.springframework.stereotype.Component;
-
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-
-// @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
-@Component
-public class CMSOClientFilters implements ClientRequestFilter, ClientResponseFilter {
-
- private static EELFLogger log = EELFManager.getInstance().getLogger(CMSOServiceImpl.class);
- private static String appId = "cmso";
-
- @Override
- public void filter(ClientRequestContext requestContext, ClientResponseContext responseContext) throws IOException {
- // On the way back
- Mdc.metricEnd(responseContext);
- Mdc.setCaller(17);
- Observation.report(LogMessages.OUTGOING_MESSAGE_RETURNED,
- requestContext.getMethod(),
- requestContext.getUri().getPath().toString(),
- responseContext.getStatusInfo().toString());
- }
-
- @Override
- public void filter(ClientRequestContext requestContext) throws IOException {
- // On the way out
- Mdc.metricStart(requestContext);
- Mdc.setCaller(17);
- Observation.report(LogMessages.OUTGOING_MESSAGE,
- requestContext.getMethod(),
- requestContext.getUri().getPath().toString());
- MultivaluedMap<String, Object> headers = requestContext.getHeaders();
-
- String transactionId = (String) headers.getFirst(MessageHeaders.HeadersEnum.TransactionID.toString());
- String mdcId = MDC.get(MDC_KEY_REQUEST_ID);
- if (transactionId == null || transactionId.equals(""))
- if (mdcId != null)
- headers.add(HeadersEnum.TransactionID.toString(), mdcId);
- headers.add(HeadersEnum.FromAppID.toString(), appId);
- }
-
-}
+/* + * 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.filters; + +import static com.att.eelf.configuration.Configuration.MDC_KEY_REQUEST_ID; +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; +import java.io.IOException; +import javax.ws.rs.client.ClientRequestContext; +import javax.ws.rs.client.ClientRequestFilter; +import javax.ws.rs.client.ClientResponseContext; +import javax.ws.rs.client.ClientResponseFilter; +import javax.ws.rs.core.MultivaluedMap; +import org.onap.observations.Mdc; +import org.onap.observations.Observation; +import org.onap.optf.cmso.common.LogMessages; +import org.onap.optf.cmso.filters.MessageHeaders.HeadersEnum; +import org.slf4j.MDC; +import org.springframework.stereotype.Component; + +// @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection") +@Component +public class CmsoClientFilters implements ClientRequestFilter, ClientResponseFilter { + + private static EELFLogger log = EELFManager.getInstance().getLogger(CmsoClientFilters.class); + private static String appId = "cmso"; + + @Override + public void filter(ClientRequestContext requestContext, ClientResponseContext responseContext) throws IOException { + // On the way back + Mdc.metricEnd(responseContext); + Mdc.setCaller(17); + Observation.report(LogMessages.OUTGOING_MESSAGE_RETURNED, + requestContext.getMethod(), + requestContext.getUri().getPath().toString(), + responseContext.getStatusInfo().toString()); + } + + @Override + public void filter(ClientRequestContext requestContext) throws IOException { + // On the way out + Mdc.metricStart(requestContext); + Mdc.setCaller(17); + Observation.report(LogMessages.OUTGOING_MESSAGE, + requestContext.getMethod(), + requestContext.getUri().getPath().toString()); + MultivaluedMap<String, Object> headers = requestContext.getHeaders(); + + String transactionId = (String) headers.getFirst(MessageHeaders.HeadersEnum.TransactionID.toString()); + String mdcId = MDC.get(MDC_KEY_REQUEST_ID); + if (transactionId == null || transactionId.equals("")) + if (mdcId != null) + headers.add(HeadersEnum.TransactionID.toString(), mdcId); + headers.add(HeadersEnum.FromAppID.toString(), appId); + } + +} diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/filters/CMSOContainerFilters.java b/cmso-service/src/main/java/org/onap/optf/cmso/filters/CmsoContainerFilters.java index 8b37a71..4c44163 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/filters/CMSOContainerFilters.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/filters/CmsoContainerFilters.java @@ -1,141 +1,141 @@ -/*
- * 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.filters;
-
-import java.io.IOException;
-import java.util.UUID;
-
-import javax.annotation.Priority;
-import javax.servlet.http.HttpServletRequest;
-import javax.ws.rs.WebApplicationException;
-import javax.ws.rs.container.ContainerRequestContext;
-import javax.ws.rs.container.ContainerRequestFilter;
-import javax.ws.rs.container.ContainerResponseContext;
-import javax.ws.rs.container.ContainerResponseFilter;
-import javax.ws.rs.core.Context;
-import javax.ws.rs.core.MultivaluedMap;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.Response.ResponseBuilder;
-import javax.ws.rs.ext.Provider;
-
-import org.onap.observations.Mdc;
-import org.onap.observations.Observation;
-import org.onap.optf.cmso.common.LogMessages;
-import org.onap.optf.cmso.filters.MessageHeaders.HeadersEnum;
-import org.springframework.stereotype.Component;
-
-@Priority(1)
-@Provider
-@Component
-public class CMSOContainerFilters implements ContainerRequestFilter, ContainerResponseFilter {
-
-
- @Context
- private HttpServletRequest servletRequest;
-
- @Override
- public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext)
- throws IOException {
- try {
- Mdc.auditEnd(requestContext, responseContext);
- Observation.report(LogMessages.INCOMING_MESSAGE_RESPONSE,
- requestContext.getMethod(),
- requestContext.getUriInfo().getPath().toString(),
- responseContext.getStatusInfo().toString());
- MultivaluedMap<String, String> reqHeaders = requestContext.getHeaders();
- MultivaluedMap<String, Object> respHeaders = responseContext.getHeaders();
- String minorVersion = (String) reqHeaders.getFirst(HeadersEnum.MinorVersion.toString());
- respHeaders.add(HeadersEnum.MinorVersion.toString(), minorVersion);
- respHeaders.add(HeadersEnum.LatestVersion.toString(), MessageHeaders.latestVersion);
- respHeaders.add(HeadersEnum.PatchVersion.toString(), MessageHeaders.patchVersion);
-
- } catch (Exception e) {
- if (e instanceof WebApplicationException) {
- Observation.report(LogMessages.EXPECTED_EXCEPTION, e.getMessage());
- } else {
- Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e.getMessage());
- }
- }
- }
-
- @Override
- public void filter(ContainerRequestContext requestContext) throws IOException {
- try {
- // On the way in
- Mdc.auditStart(requestContext, servletRequest);
- Observation.report(LogMessages.INCOMING_MESSAGE,
- requestContext.getMethod(),
- requestContext.getUriInfo().getPath().toString());
-
- String majorVersion = requestContext.getUriInfo().getPath();
- if (majorVersion != null) {
-
- if (majorVersion.startsWith("dispatch/"))
- return;
- majorVersion = majorVersion.replaceAll("/.*$", "");
- }
- if (!MessageHeaders.validateMajorVersion(majorVersion)) {
- ResponseBuilder builder = null;
- String response = "Unsupported Major version";
- builder = Response.status(Response.Status.NOT_FOUND).entity(response);
- throw new WebApplicationException(builder.build());
- }
- MultivaluedMap<String, String> headers = requestContext.getHeaders();
- String transactionId = (String) headers.getFirst(HeadersEnum.TransactionID.toString());
- if (transactionId == null) {
- transactionId = UUID.randomUUID().toString();
- headers.add(HeadersEnum.TransactionID.toString(), transactionId);
- }
- String minorVersion = (String) headers.getFirst(HeadersEnum.MinorVersion.toString());
- if (minorVersion == null) {
- minorVersion = MessageHeaders.supportedMajorVersions.get(majorVersion);
- headers.add(HeadersEnum.MinorVersion.toString(), minorVersion);
- }
- if (!MessageHeaders.validateMajorMinorVersion(majorVersion, minorVersion)) {
- ResponseBuilder builder = null;
- String response = "Unsupported API version";
- builder = Response.status(Response.Status.NOT_FOUND).entity(response);
- throw new WebApplicationException(builder.build());
-
- }
- } catch (Exception e) {
- if (e instanceof WebApplicationException) {
- Observation.report(LogMessages.EXPECTED_EXCEPTION, e.getMessage());
- throw e;
- } else {
- Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e.getMessage());
- }
- }
-
- }
-
-}
+/* + * 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.filters; + +import java.io.IOException; +import java.util.UUID; + +import javax.annotation.Priority; +import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.WebApplicationException; +import javax.ws.rs.container.ContainerRequestContext; +import javax.ws.rs.container.ContainerRequestFilter; +import javax.ws.rs.container.ContainerResponseContext; +import javax.ws.rs.container.ContainerResponseFilter; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MultivaluedMap; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.Response.ResponseBuilder; +import javax.ws.rs.ext.Provider; + +import org.onap.observations.Mdc; +import org.onap.observations.Observation; +import org.onap.optf.cmso.common.LogMessages; +import org.onap.optf.cmso.filters.MessageHeaders.HeadersEnum; +import org.springframework.stereotype.Component; + +@Priority(1) +@Provider +@Component +public class CmsoContainerFilters implements ContainerRequestFilter, ContainerResponseFilter { + + + @Context + private HttpServletRequest servletRequest; + + @Override + public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) + throws IOException { + try { + Mdc.auditEnd(requestContext, responseContext); + Observation.report(LogMessages.INCOMING_MESSAGE_RESPONSE, + requestContext.getMethod(), + requestContext.getUriInfo().getPath().toString(), + responseContext.getStatusInfo().toString()); + MultivaluedMap<String, String> reqHeaders = requestContext.getHeaders(); + MultivaluedMap<String, Object> respHeaders = responseContext.getHeaders(); + String minorVersion = (String) reqHeaders.getFirst(HeadersEnum.MinorVersion.toString()); + respHeaders.add(HeadersEnum.MinorVersion.toString(), minorVersion); + respHeaders.add(HeadersEnum.LatestVersion.toString(), MessageHeaders.latestVersion); + respHeaders.add(HeadersEnum.PatchVersion.toString(), MessageHeaders.patchVersion); + + } catch (Exception e) { + if (e instanceof WebApplicationException) { + Observation.report(LogMessages.EXPECTED_EXCEPTION, e.getMessage()); + } else { + Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e.getMessage()); + } + } + } + + @Override + public void filter(ContainerRequestContext requestContext) throws IOException { + try { + // On the way in + Mdc.auditStart(requestContext, servletRequest); + Observation.report(LogMessages.INCOMING_MESSAGE, + requestContext.getMethod(), + requestContext.getUriInfo().getPath().toString()); + + String majorVersion = requestContext.getUriInfo().getPath(); + if (majorVersion != null) { + + if (majorVersion.startsWith("dispatch/")) + return; + majorVersion = majorVersion.replaceAll("/.*$", ""); + } + if (!MessageHeaders.validateMajorVersion(majorVersion)) { + ResponseBuilder builder = null; + String response = "Unsupported Major version"; + builder = Response.status(Response.Status.NOT_FOUND).entity(response); + throw new WebApplicationException(builder.build()); + } + MultivaluedMap<String, String> headers = requestContext.getHeaders(); + String transactionId = (String) headers.getFirst(HeadersEnum.TransactionID.toString()); + if (transactionId == null) { + transactionId = UUID.randomUUID().toString(); + headers.add(HeadersEnum.TransactionID.toString(), transactionId); + } + String minorVersion = (String) headers.getFirst(HeadersEnum.MinorVersion.toString()); + if (minorVersion == null) { + minorVersion = MessageHeaders.supportedMajorVersions.get(majorVersion); + headers.add(HeadersEnum.MinorVersion.toString(), minorVersion); + } + if (!MessageHeaders.validateMajorMinorVersion(majorVersion, minorVersion)) { + ResponseBuilder builder = null; + String response = "Unsupported API version"; + builder = Response.status(Response.Status.NOT_FOUND).entity(response); + throw new WebApplicationException(builder.build()); + + } + } catch (Exception e) { + if (e instanceof WebApplicationException) { + Observation.report(LogMessages.EXPECTED_EXCEPTION, e.getMessage()); + throw e; + } else { + Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e.getMessage()); + } + } + + } + +} diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/model/ApprovalType.java b/cmso-service/src/main/java/org/onap/optf/cmso/model/ApprovalType.java index 121774b..677f5ce 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/model/ApprovalType.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/model/ApprovalType.java @@ -1,48 +1,42 @@ /*
- * 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.model;
import java.io.Serializable;
+import java.util.UUID;
import javax.persistence.Column;
import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
/**
* The persistent class for the approval_types database table.
- *
+ *
*/
@Entity
@Table(name = "APPROVAL_TYPES")
@@ -51,8 +45,7 @@ public class ApprovalType implements Serializable { private static final long serialVersionUID = 1L;
@Id
- @GeneratedValue(strategy=GenerationType.IDENTITY)
- private Integer id;
+ private UUID uuid;
@Column(name = "approval_count")
private Integer approvalCount;
@@ -64,36 +57,82 @@ public class ApprovalType implements Serializable { @Column(name = "domain")
private String domain;
+ /**
+ * Instantiates a new approval type.
+ */
public ApprovalType() {}
- public Integer getId() {
- return this.id;
+
+ /**
+ * Gets the uuid.
+ *
+ * @return the uuid
+ */
+ public UUID getUuid() {
+ return uuid;
}
- public void setId(Integer id) {
- this.id = id;
+
+ /**
+ * Sets the uuid.
+ *
+ * @param uuid the new uuid
+ */
+ public void setUuid(UUID uuid) {
+ this.uuid = uuid;
}
+
+ /**
+ * Gets the approval count.
+ *
+ * @return the approval count
+ */
public Integer getApprovalCount() {
return this.approvalCount;
}
+ /**
+ * Sets the approval count.
+ *
+ * @param approvalCount the new approval count
+ */
public void setApprovalCount(Integer approvalCount) {
this.approvalCount = approvalCount;
}
+ /**
+ * Gets the approval type.
+ *
+ * @return the approval type
+ */
public String getApprovalType() {
return this.approvalType;
}
+ /**
+ * Sets the approval type.
+ *
+ * @param approvalType the new approval type
+ */
public void setApprovalType(String approvalType) {
this.approvalType = approvalType;
}
+ /**
+ * Gets the domain.
+ *
+ * @return the domain
+ */
public String getDomain() {
return domain;
}
+ /**
+ * Sets the domain.
+ *
+ * @param domain the new domain
+ */
public void setDomain(String domain) {
this.domain = domain;
}
diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/model/ChangeManagementChangeWindow.java b/cmso-service/src/main/java/org/onap/optf/cmso/model/ChangeManagementChangeWindow.java index 7224508..f0b1da1 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/model/ChangeManagementChangeWindow.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/model/ChangeManagementChangeWindow.java @@ -1,54 +1,48 @@ /*
- * 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.model;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
+import java.util.UUID;
import javax.persistence.Column;
import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Transient;
import org.joda.time.format.ISODateTimeFormat;
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
/**
* The persistent class for the change_management_change_windows database table.
- *
+ *
*/
@Entity
@Table(name = "CHANGE_MANAGEMENT_CHANGE_WINDOWS")
@@ -59,8 +53,7 @@ public class ChangeManagementChangeWindow implements Serializable { @JsonIgnore
@Id
- @GeneratedValue(strategy=GenerationType.IDENTITY)
- private Integer id;
+ private UUID uuid;
@JsonIgnore
@Column(name = "finish_time")
@@ -81,55 +74,127 @@ public class ChangeManagementChangeWindow implements Serializable { private String startTime;
@JsonIgnore
- @Column(name = "change_management_groups_id")
- private Integer changeManagementGroupsId;
+ @Column(name = "change_management_group_uuid")
+ private UUID changeManagementGroupUuid;
+ /**
+ * Instantiates a new change management change window.
+ */
public ChangeManagementChangeWindow() {}
- public Integer getId() {
- return this.id;
- }
-
- public void setId(Integer id) {
- this.id = id;
- }
+ /**
+ * Gets the finish time.
+ *
+ * @return the finish time
+ */
public String getFinishTime() {
- if (finishTimeMillis != null)
+ if (finishTimeMillis != null) {
return ISODateTimeFormat.dateTimeNoMillis().print(this.finishTimeMillis);
+ }
return null;
}
+ /**
+ * Sets the finish time.
+ *
+ * @param finishTime the new finish time
+ */
public void setFinishTime(String finishTime) {}
+ /**
+ * Gets the start time.
+ *
+ * @return the start time
+ */
public String getStartTime() {
- if (startTimeMillis != null)
+ if (startTimeMillis != null) {
return ISODateTimeFormat.dateTimeNoMillis().print(this.startTimeMillis);
+ }
return null;
}
+ /**
+ * Sets the start time.
+ *
+ * @param startTime the new start time
+ */
public void setStartTime(String startTime) {}
- public Integer getChangeManagementGroupsId() {
- return changeManagementGroupsId;
+
+ /**
+ * Gets the uuid.
+ *
+ * @return the uuid
+ */
+ public UUID getUuid() {
+ return uuid;
}
- public void setChangeManagementGroupsId(Integer changeManagementGroupsId) {
- this.changeManagementGroupsId = changeManagementGroupsId;
+
+ /**
+ * Sets the uuid.
+ *
+ * @param uuid the new uuid
+ */
+ public void setUuid(UUID uuid) {
+ this.uuid = uuid;
}
+
+
+ /**
+ * Gets the change management group uuid.
+ *
+ * @return the change management group uuid
+ */
+ public UUID getChangeManagementGroupUuid() {
+ return changeManagementGroupUuid;
+ }
+
+
+ /**
+ * Sets the change management group uuid.
+ *
+ * @param changeManagementGroupUuid the new change management group uuid
+ */
+ public void setChangeManagementGroupUuid(UUID changeManagementGroupUuid) {
+ this.changeManagementGroupUuid = changeManagementGroupUuid;
+ }
+
+
+ /**
+ * Gets the finish time millis.
+ *
+ * @return the finish time millis
+ */
public Long getFinishTimeMillis() {
return finishTimeMillis;
}
+ /**
+ * Sets the finish time millis.
+ *
+ * @param finishTimeMillis the new finish time millis
+ */
public void setFinishTimeMillis(Long finishTimeMillis) {
this.finishTimeMillis = finishTimeMillis;
}
+ /**
+ * Gets the start time millis.
+ *
+ * @return the start time millis
+ */
public Long getStartTimeMillis() {
return startTimeMillis;
}
+ /**
+ * Sets the start time millis.
+ *
+ * @param startTimeMillis the new start time millis
+ */
public void setStartTimeMillis(Long startTimeMillis) {
this.startTimeMillis = startTimeMillis;
}
diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/model/ChangeManagementDetail.java b/cmso-service/src/main/java/org/onap/optf/cmso/model/ChangeManagementDetail.java index 31c4a2b..304eb03 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/model/ChangeManagementDetail.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/model/ChangeManagementDetail.java @@ -1,49 +1,46 @@ /*
- * 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.model;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.util.UUID;
import javax.persistence.Column;
import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.Transient;
import org.joda.time.format.ISODateTimeFormat;
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
+/**
+ * The Class ChangeManagementDetail.
+ */
@Entity
// @NamedNativeQueries({
@@ -55,12 +52,11 @@ import io.swagger.annotations.ApiModelProperty; // ),
// })
@ApiModel(value = "Change Management Details",
- description = "VNF information returned for Change Management Schedule Search request")
+ description = "VNF information returned for Change Management Schedule Search request")
public class ChangeManagementDetail {
@Id
@JsonIgnore
- @GeneratedValue(strategy=GenerationType.IDENTITY)
- private Integer id;
+ private UUID uuid;
@ApiModelProperty(value = "Name of the VNF.")
@Column(name = "vnf_name")
@@ -91,7 +87,9 @@ public class ChangeManagementDetail { private Long startTimeMillis;
@ApiModelProperty(
- value = "Start time of this VNF workflow assigned by Scheduler based upon the group start time returned by the optimizer and concurrency.")
+ value = "Start time of this VNF workflow"
+ + " assigned by Scheduler based upon the"
+ + " group start time returned by the optimizer and concurrency.")
@JsonProperty
@Transient
private String startTime;
@@ -168,206 +166,482 @@ public class ChangeManagementDetail { private String msoTime;
@JsonIgnore
- private Integer schedules_id;
-
+ @Column(name = "schedules_uuid")
+ private UUID schedulesUuid;
+
+ /**
+ * Gets the vnf name.
+ *
+ * @return the vnf name
+ */
public String getVnfName() {
return vnfName;
}
+ /**
+ * Sets the vnf name.
+ *
+ * @param vnfName the new vnf name
+ */
public void setVnfName(String vnfName) {
this.vnfName = vnfName;
}
+ /**
+ * Gets the vnf id.
+ *
+ * @return the vnf id
+ */
public String getVnfId() {
return vnfId;
}
+ /**
+ * Sets the vnf id.
+ *
+ * @param vnfId the new vnf id
+ */
public void setVnfId(String vnfId) {
this.vnfId = vnfId;
}
+ /**
+ * Gets the status.
+ *
+ * @return the status
+ */
public String getStatus() {
return status;
}
+ /**
+ * Sets the status.
+ *
+ * @param status the new status
+ */
public void setStatus(String status) {
this.status = status;
}
+ /**
+ * Gets the tm change id.
+ *
+ * @return the tm change id
+ */
public String getTmChangeId() {
return tmChangeId;
}
+ /**
+ * Sets the tm change id.
+ *
+ * @param tmChangeId the new tm change id
+ */
public void setTmChangeId(String tmChangeId) {
this.tmChangeId = tmChangeId;
}
+ /**
+ * Gets the start time.
+ *
+ * @return the start time
+ */
public String getStartTime() {
if (startTimeMillis != null)
return ISODateTimeFormat.dateTimeNoMillis().print(startTimeMillis);
return null;
}
+ /**
+ * Sets the start time.
+ *
+ * @param startTime the new start time
+ */
public void setStartTime(String startTime) {}
+ /**
+ * Gets the finish time.
+ *
+ * @return the finish time
+ */
public String getFinishTime() {
if (finishTimeMillis != null)
return ISODateTimeFormat.dateTimeNoMillis().print(finishTimeMillis);
return null;
}
+ /**
+ * Sets the finish time.
+ *
+ * @param finishTime the new finish time
+ */
public void setFinishTime(String finishTime) {}
+ /**
+ * Gets the group id.
+ *
+ * @return the group id
+ */
public String getGroupId() {
return groupId;
}
+ /**
+ * Sets the group id.
+ *
+ * @param groupId the new group id
+ */
public void setGroupId(String groupId) {
this.groupId = groupId;
}
+ /**
+ * Gets the last instance start time.
+ *
+ * @return the last instance start time
+ */
public String getLastInstanceStartTime() {
- if (lastInstanceStartTimeMillis != null)
+ if (lastInstanceStartTimeMillis != null) {
return ISODateTimeFormat.dateTimeNoMillis().print(lastInstanceStartTimeMillis);
+ }
return null;
}
+ /**
+ * Sets the last instance start time.
+ *
+ * @param lastInstanceStartTime the new last instance start time
+ */
public void setLastInstanceStartTime(String lastInstanceStartTime) {}
+ /**
+ * Gets the policy id.
+ *
+ * @return the policy id
+ */
public String getPolicyId() {
return policyId;
}
+ /**
+ * Sets the policy id.
+ *
+ * @param policyId the new policy id
+ */
public void setPolicyId(String policyId) {
this.policyId = policyId;
}
- public Integer getSchedulesId() {
- return schedules_id;
+
+ /**
+ * Gets the uuid.
+ *
+ * @return the uuid
+ */
+ public UUID getUuid() {
+ return uuid;
+ }
+
+ /**
+ * Sets the uuid.
+ *
+ * @param uuid the new uuid
+ */
+ public void setUuid(UUID uuid) {
+ this.uuid = uuid;
+ }
+
+
+
+ /**
+ * Gets the schedules uuid.
+ *
+ * @return the schedules uuid
+ */
+ public UUID getSchedulesUuid() {
+ return schedulesUuid;
}
- public void setSchedulesId(Integer schedules_id) {
- this.schedules_id = schedules_id;
+ /**
+ * Sets the schedules uuid.
+ *
+ * @param schedulesUuid the new schedules uuid
+ */
+ public void setSchedulesUuid(UUID schedulesUuid) {
+ this.schedulesUuid = schedulesUuid;
}
+ /**
+ * Gets the start time millis.
+ *
+ * @return the start time millis
+ */
public Long getStartTimeMillis() {
return startTimeMillis;
}
+ /**
+ * Sets the start time millis.
+ *
+ * @param startTimeMillis the new start time millis
+ */
public void setStartTimeMillis(Long startTimeMillis) {
this.startTimeMillis = startTimeMillis;
}
+ /**
+ * Gets the finish time millis.
+ *
+ * @return the finish time millis
+ */
public Long getFinishTimeMillis() {
return finishTimeMillis;
}
+ /**
+ * Sets the finish time millis.
+ *
+ * @param finishTimeMillis the new finish time millis
+ */
public void setFinishTimeMillis(Long finishTimeMillis) {
this.finishTimeMillis = finishTimeMillis;
}
+ /**
+ * Gets the last instance start time millis.
+ *
+ * @return the last instance start time millis
+ */
public Long getLastInstanceStartTimeMillis() {
return lastInstanceStartTimeMillis;
}
+ /**
+ * Sets the last instance start time millis.
+ *
+ * @param lastInstanceStartTimeMillis the new last instance start time millis
+ */
public void setLastInstanceStartTimeMillis(Long lastInstanceStartTimeMillis) {
this.lastInstanceStartTimeMillis = lastInstanceStartTimeMillis;
}
+ /**
+ * Gets the tm status.
+ *
+ * @return the tm status
+ */
public String getTmStatus() {
return tmStatus;
}
+ /**
+ * Sets the tm status.
+ *
+ * @param tmStatus the new tm status
+ */
public void setTmStatus(String tmStatus) {
this.tmStatus = tmStatus;
}
+ /**
+ * Gets the tm approval status.
+ *
+ * @return the tm approval status
+ */
public String getTmApprovalStatus() {
return tmApprovalStatus;
}
+ /**
+ * Sets the tm approval status.
+ *
+ * @param tmApprovalStatus the new tm approval status
+ */
public void setTmApprovalStatus(String tmApprovalStatus) {
this.tmApprovalStatus = tmApprovalStatus;
}
+ /**
+ * Gets the mso request id.
+ *
+ * @return the mso request id
+ */
public String getMsoRequestId() {
return msoRequestId;
}
+ /**
+ * Sets the mso request id.
+ *
+ * @param msoRequestId the new mso request id
+ */
public void setMsoRequestId(String msoRequestId) {
this.msoRequestId = msoRequestId;
}
+ /**
+ * Gets the mso status.
+ *
+ * @return the mso status
+ */
public String getMsoStatus() {
return msoStatus;
}
+ /**
+ * Sets the mso status.
+ *
+ * @param msoStatus the new mso status
+ */
public void setMsoStatus(String msoStatus) {
this.msoStatus = msoStatus;
}
+ /**
+ * Gets the mso message.
+ *
+ * @return the mso message
+ */
public String getMsoMessage() {
return msoMessage;
}
+ /**
+ * Sets the mso message.
+ *
+ * @param msoMessage the new mso message
+ */
public void setMsoMessage(String msoMessage) {
this.msoMessage = msoMessage;
}
+ /**
+ * Gets the dispatch time millis.
+ *
+ * @return the dispatch time millis
+ */
public Long getDispatchTimeMillis() {
return dispatchTimeMillis;
}
+ /**
+ * Sets the dispatch time millis.
+ *
+ * @param dispatchTimeMillis the new dispatch time millis
+ */
public void setDispatchTimeMillis(Long dispatchTimeMillis) {
this.dispatchTimeMillis = dispatchTimeMillis;
}
+ /**
+ * Gets the dispatch time.
+ *
+ * @return the dispatch time
+ */
public String getDispatchTime() {
- if (dispatchTimeMillis != null)
+ if (dispatchTimeMillis != null) {
return ISODateTimeFormat.dateTimeNoMillis().print(dispatchTimeMillis);
+ }
return null;
}
+ /**
+ * Sets the dispatch time.
+ *
+ * @param dispatchTime the new dispatch time
+ */
public void setDispatchTime(String dispatchTime) {}
+ /**
+ * Gets the execution completed time millis.
+ *
+ * @return the execution completed time millis
+ */
public Long getExecutionCompletedTimeMillis() {
return executionCompletedTimeMillis;
}
+ /**
+ * Sets the execution completed time millis.
+ *
+ * @param executionCompletedTimeMillis the new execution completed time millis
+ */
public void setExecutionCompletedTimeMillis(Long executionCompletedTimeMillis) {
this.executionCompletedTimeMillis = executionCompletedTimeMillis;
}
+ /**
+ * Gets the execution completed time.
+ *
+ * @return the execution completed time
+ */
public String getExecutionCompletedTime() {
- if (executionCompletedTimeMillis != null)
+ if (executionCompletedTimeMillis != null) {
return ISODateTimeFormat.dateTimeNoMillis().print(executionCompletedTimeMillis);
+ }
return null;
}
+ /**
+ * Sets the execution completed time.
+ *
+ * @param executionCompletedTime the new execution completed time
+ */
public void setExecutionCompletedTime(String executionCompletedTime) {}
+ /**
+ * Gets the status message.
+ *
+ * @return the status message
+ */
public String getStatusMessage() {
return statusMessage;
}
+ /**
+ * Sets the status message.
+ *
+ * @param statusMessage the new status message
+ */
public void setStatusMessage(String statusMessage) {
this.statusMessage = statusMessage;
}
+ /**
+ * Gets the mso time millis.
+ *
+ * @return the mso time millis
+ */
public Long getMsoTimeMillis() {
return msoTimeMillis;
}
+ /**
+ * Sets the mso time millis.
+ *
+ * @param msoTimeMillis the new mso time millis
+ */
public void setMsoTimeMillis(Long msoTimeMillis) {
this.msoTimeMillis = msoTimeMillis;
}
+ /**
+ * Gets the mso time.
+ *
+ * @return the mso time
+ */
public String getMsoTime() {
- if (msoTimeMillis != null)
+ if (msoTimeMillis != null) {
return ISODateTimeFormat.dateTimeNoMillis().print(msoTimeMillis);
+ }
return null;
}
+ /**
+ * Sets the mso time.
+ *
+ * @param msoTime the new mso time
+ */
public void setMsoTime(String msoTime) {}
}
diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/model/ChangeManagementGroup.java b/cmso-service/src/main/java/org/onap/optf/cmso/model/ChangeManagementGroup.java index 6aeb325..2d4790d 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/model/ChangeManagementGroup.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/model/ChangeManagementGroup.java @@ -1,55 +1,49 @@ /*
- * 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.model;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import java.util.List;
+import java.util.UUID;
import javax.persistence.Column;
import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Transient;
import org.joda.time.format.ISODateTimeFormat;
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
/**
* The persistent class for the change_management_groups database table.
- *
+ *
*/
@Entity
@Table(name = "CHANGE_MANAGEMENT_GROUPS")
@@ -60,8 +54,7 @@ public class ChangeManagementGroup implements Serializable { @JsonIgnore
@Id
- @GeneratedValue(strategy=GenerationType.IDENTITY)
- private Integer id;
+ private UUID uuid;
@JsonIgnore
@Column(name = "finish_time")
@@ -95,8 +88,8 @@ public class ChangeManagementGroup implements Serializable { private String startTime;
@JsonIgnore
- @Column(name = "schedules_id")
- private Integer schedulesId;
+ @Column(name = "schedules_uuid")
+ private UUID schedulesUuid;
@Column(name = "additional_duration_in_secs")
@ApiModelProperty(value = "Time added to the workflow interval to allow for rollback in case of failure.")
@@ -111,7 +104,8 @@ public class ChangeManagementGroup implements Serializable { private Integer normalDurationInSecs;
@ApiModelProperty(
- value = "The name of the schedule optimization policy used by the change management schedule optimizer.")
+ value = "The name of the schedule optimization policy "
+ + "used by the change management schedule optimizer.")
@Column(name = "policy_id")
private String policyId;
@@ -120,118 +114,270 @@ public class ChangeManagementGroup implements Serializable { @Transient
private List<ChangeManagementSchedule> changeManagementSchedules;
+ /**
+ * Instantiates a new change management group.
+ */
public ChangeManagementGroup() {}
- public Integer getId() {
- return this.id;
- }
-
- public void setId(Integer id) {
- this.id = id;
- }
+ /**
+ * Gets the finish time.
+ *
+ * @return the finish time
+ */
public String getFinishTime() {
- if (finishTimeMillis != null)
+ if (finishTimeMillis != null) {
return ISODateTimeFormat.dateTimeNoMillis().print(this.finishTimeMillis);
+ }
return null;
}
+ /**
+ * Sets the finish time.
+ *
+ * @param finishTime the new finish time
+ */
public void setFinishTime(String finishTime) {}
+ /**
+ * Gets the group id.
+ *
+ * @return the group id
+ */
public String getGroupId() {
return this.groupId;
}
+ /**
+ * Sets the group id.
+ *
+ * @param groupId the new group id
+ */
public void setGroupId(String groupId) {
this.groupId = groupId;
}
+ /**
+ * Gets the last instance start time.
+ *
+ * @return the last instance start time
+ */
public String getLastInstanceStartTime() {
- if (lastInstanceStartTimeMillis != null)
+ if (lastInstanceStartTimeMillis != null) {
return ISODateTimeFormat.dateTimeNoMillis().print(this.lastInstanceStartTimeMillis);
+ }
return null;
}
+ /**
+ * Sets the last instance start time.
+ *
+ * @param lastInstanceStartTime the new last instance start time
+ */
public void setLastInstanceStartTime(String lastInstanceStartTime) {}
+ /**
+ * Gets the start time.
+ *
+ * @return the start time
+ */
public String getStartTime() {
- if (startTimeMillis != null)
+ if (startTimeMillis != null) {
return ISODateTimeFormat.dateTimeNoMillis().print(this.startTimeMillis);
+ }
return null;
}
+ /**
+ * Sets the start time.
+ *
+ * @param startTime the new start time
+ */
public void setStartTime(String startTime) {}
- public Integer getSchedulesId() {
- return schedulesId;
- }
-
- public void setSchedulesId(Integer schedulesId) {
- this.schedulesId = schedulesId;
- }
+ /**
+ * Gets the additional duration in secs.
+ *
+ * @return the additional duration in secs
+ */
public Integer getAdditionalDurationInSecs() {
return additionalDurationInSecs;
}
+ /**
+ * Sets the additional duration in secs.
+ *
+ * @param additionalDurationInSecs the new additional duration in secs
+ */
public void setAdditionalDurationInSecs(Integer additionalDurationInSecs) {
this.additionalDurationInSecs = additionalDurationInSecs;
}
+ /**
+ * Gets the concurrency limit.
+ *
+ * @return the concurrency limit
+ */
public Integer getConcurrencyLimit() {
return concurrencyLimit;
}
+ /**
+ * Sets the concurrency limit.
+ *
+ * @param concurrencyLimit the new concurrency limit
+ */
public void setConcurrencyLimit(Integer concurrencyLimit) {
this.concurrencyLimit = concurrencyLimit;
}
+ /**
+ * Gets the normal duration in secs.
+ *
+ * @return the normal duration in secs
+ */
public Integer getNormalDurationInSecs() {
return normalDurationInSecs;
}
+ /**
+ * Sets the normal duration in secs.
+ *
+ * @param normalDurationInSecs the new normal duration in secs
+ */
public void setNormalDurationInSecs(Integer normalDurationInSecs) {
this.normalDurationInSecs = normalDurationInSecs;
}
+ /**
+ * Gets the policy id.
+ *
+ * @return the policy id
+ */
public String getPolicyId() {
return policyId;
}
+ /**
+ * Sets the policy id.
+ *
+ * @param policyId the new policy id
+ */
public void setPolicyId(String policyId) {
this.policyId = policyId;
}
+ /**
+ * Gets the finish time millis.
+ *
+ * @return the finish time millis
+ */
public Long getFinishTimeMillis() {
return finishTimeMillis;
}
+ /**
+ * Sets the finish time millis.
+ *
+ * @param finishTimeMillis the new finish time millis
+ */
public void setFinishTimeMillis(Long finishTimeMillis) {
this.finishTimeMillis = finishTimeMillis;
}
+ /**
+ * Gets the last instance start time millis.
+ *
+ * @return the last instance start time millis
+ */
public Long getLastInstanceStartTimeMillis() {
return lastInstanceStartTimeMillis;
}
+ /**
+ * Sets the last instance start time millis.
+ *
+ * @param lastInstanceStartTimeMillis the new last instance start time millis
+ */
public void setLastInstanceStartTimeMillis(Long lastInstanceStartTimeMillis) {
this.lastInstanceStartTimeMillis = lastInstanceStartTimeMillis;
}
+ /**
+ * Gets the start time millis.
+ *
+ * @return the start time millis
+ */
public Long getStartTimeMillis() {
return startTimeMillis;
}
+ /**
+ * Sets the start time millis.
+ *
+ * @param startTimeMillis the new start time millis
+ */
public void setStartTimeMillis(Long startTimeMillis) {
this.startTimeMillis = startTimeMillis;
}
+ /**
+ * Gets the change management schedules.
+ *
+ * @return the change management schedules
+ */
public List<ChangeManagementSchedule> getChangeManagementSchedules() {
return changeManagementSchedules;
}
+ /**
+ * Sets the change management schedules.
+ *
+ * @param changeManagementSchedules the new change management schedules
+ */
public void setChangeManagementSchedules(List<ChangeManagementSchedule> changeManagementSchedules) {
this.changeManagementSchedules = changeManagementSchedules;
}
+
+ /**
+ * Gets the uuid.
+ *
+ * @return the uuid
+ */
+ public UUID getUuid() {
+ return uuid;
+ }
+
+
+ /**
+ * Sets the uuid.
+ *
+ * @param uuid the new uuid
+ */
+ public void setUuid(UUID uuid) {
+ this.uuid = uuid;
+ }
+
+
+ /**
+ * Gets the schedules uuid.
+ *
+ * @return the schedules uuid
+ */
+ public UUID getSchedulesUuid() {
+ return schedulesUuid;
+ }
+
+
+ /**
+ * Sets the schedules uuid.
+ *
+ * @param schedulesUuid the new schedules uuid
+ */
+ public void setSchedulesUuid(UUID schedulesUuid) {
+ this.schedulesUuid = schedulesUuid;
+ }
+
}
diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/model/ChangeManagementSchedule.java b/cmso-service/src/main/java/org/onap/optf/cmso/model/ChangeManagementSchedule.java index 9690290..f9dd418 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/model/ChangeManagementSchedule.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/model/ChangeManagementSchedule.java @@ -1,55 +1,49 @@ /*
- * 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.model;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
+import java.util.UUID;
import javax.persistence.Column;
import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Transient;
import org.joda.time.format.ISODateTimeFormat;
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
/**
* The persistent class for the change_management_schedules database table.
- *
+ *
*/
@Entity
@Table(name = "CHANGE_MANAGEMENT_SCHEDULES")
@@ -61,8 +55,7 @@ public class ChangeManagementSchedule implements Serializable { @JsonIgnore
@Id
- @GeneratedValue(strategy=GenerationType.IDENTITY)
- private Integer id;
+ private UUID uuid;
@ApiModelProperty(value = "TM Change Id")
@Column(name = "tm_change_id")
@@ -90,7 +83,9 @@ public class ChangeManagementSchedule implements Serializable { private Long startTimeMillis;
@ApiModelProperty(
- value = "Start time of this VNF workflow assigned by Scheduler based upon the group start time returned by the optimizer and concurrency.")
+ value = "Start time of this VNF workflow assigned by "
+ + "Scheduler based upon the group start"
+ + " time returned by the optimizer and concurrency.")
@JsonProperty
@Transient
private String startTime;
@@ -107,9 +102,9 @@ public class ChangeManagementSchedule implements Serializable { @Column(name = "vnf_name")
private String vnfName;
- @Column(name = "change_management_groups_id")
+ @Column(name = "change_management_group_uuid")
@JsonIgnore
- private Integer changeManagementGroupsId;
+ private UUID changeManagementGroupUuid;
@JsonIgnore
@Column(name = "dispatch_time")
@@ -160,190 +155,448 @@ public class ChangeManagementSchedule implements Serializable { @Transient
private String msoTime;
- public ChangeManagementSchedule() {}
-
- public Integer getId() {
- return this.id;
- }
+ @ApiModelProperty(value = "Change equest.")
+ @Lob
+ @Column(name = "request")
+ private String request;
- public void setId(Integer id) {
- this.id = id;
- }
+ /**
+ * Instantiates a new change management schedule.
+ */
+ public ChangeManagementSchedule() {}
+ /**
+ * Gets the finish time.
+ *
+ * @return the finish time
+ */
public String getFinishTime() {
- if (finishTimeMillis != null)
+ if (finishTimeMillis != null) {
return ISODateTimeFormat.dateTimeNoMillis().print(finishTimeMillis);
+ }
return null;
}
+ /**
+ * Sets the finish time.
+ *
+ * @param finishTime the new finish time
+ */
public void setFinishTime(String finishTime) {}
+ /**
+ * Gets the start time.
+ *
+ * @return the start time
+ */
public String getStartTime() {
- if (startTimeMillis != null)
+ if (startTimeMillis != null) {
return ISODateTimeFormat.dateTimeNoMillis().print(startTimeMillis);
+ }
return null;
}
+ /**
+ * Sets the start time.
+ *
+ * @param startTime the new start time
+ */
public void setStartTime(String startTime) {}
+ /**
+ * Gets the status.
+ *
+ * @return the status
+ */
public String getStatus() {
return this.status;
}
+ /**
+ * Sets the status.
+ *
+ * @param status the new status
+ */
public void setStatus(String status) {
this.status = status;
}
+ /**
+ * Gets the vnf id.
+ *
+ * @return the vnf id
+ */
public String getVnfId() {
return this.vnfId;
}
+ /**
+ * Sets the vnf id.
+ *
+ * @param vnfId the new vnf id
+ */
public void setVnfId(String vnfId) {
this.vnfId = vnfId;
}
+ /**
+ * Gets the vnf name.
+ *
+ * @return the vnf name
+ */
public String getVnfName() {
return this.vnfName;
}
+ /**
+ * Sets the vnf name.
+ *
+ * @param vnfName the new vnf name
+ */
public void setVnfName(String vnfName) {
this.vnfName = vnfName;
}
+ /**
+ * Gets the tm change id.
+ *
+ * @return the tm change id
+ */
public String getTmChangeId() {
return tmChangeId;
}
+ /**
+ * Sets the tm change id.
+ *
+ * @param tmChangeId the new tm change id
+ */
public void setTmChangeId(String tmChangeId) {
this.tmChangeId = tmChangeId;
}
- public Integer getChangeManagementGroupsId() {
- return changeManagementGroupsId;
+
+ /**
+ * Gets the uuid.
+ *
+ * @return the uuid
+ */
+ public UUID getUuid() {
+ return uuid;
}
- public void setChangeManagementGroupsId(Integer changeManagementGroupsId) {
- this.changeManagementGroupsId = changeManagementGroupsId;
+ /**
+ * Sets the uuid.
+ *
+ * @param uuid the new uuid
+ */
+ public void setUuid(UUID uuid) {
+ this.uuid = uuid;
+ }
+
+
+ /**
+ * Gets the change management group uuid.
+ *
+ * @return the change management group uuid
+ */
+ public UUID getChangeManagementGroupUuid() {
+ return changeManagementGroupUuid;
}
+ /**
+ * Sets the change management group uuid.
+ *
+ * @param changeManagementGroupUuid the new change management group uuid
+ */
+ public void setChangeManagementGroupUuid(UUID changeManagementGroupUuid) {
+ this.changeManagementGroupUuid = changeManagementGroupUuid;
+ }
+
+ /**
+ * Gets the dispatch time.
+ *
+ * @return the dispatch time
+ */
public String getDispatchTime() {
- if (dispatchTimeMillis != null)
+ if (dispatchTimeMillis != null) {
return ISODateTimeFormat.dateTimeNoMillis().print(dispatchTimeMillis);
+ }
return null;
}
+ /**
+ * Sets the dispatch time.
+ *
+ * @param dispatchTime the new dispatch time
+ */
public void setDispatchTime(String dispatchTime) {}
+ /**
+ * Gets the dispatcher instance.
+ *
+ * @return the dispatcher instance
+ */
public String getDispatcherInstance() {
return dispatcherInstance;
}
+ /**
+ * Sets the dispatcher instance.
+ *
+ * @param dispatcherInstance the new dispatcher instance
+ */
public void setDispatcherInstance(String dispatcherInstance) {
this.dispatcherInstance = dispatcherInstance;
}
+ /**
+ * Gets the execution completed time.
+ *
+ * @return the execution completed time
+ */
public String getExecutionCompletedTime() {
- if (executionCompletedTimeMillis != null)
+ if (executionCompletedTimeMillis != null) {
return ISODateTimeFormat.dateTimeNoMillis().print(executionCompletedTimeMillis);
+ }
return null;
}
+ /**
+ * Sets the execution completed time.
+ *
+ * @param executionCompletedTime the new execution completed time
+ */
public void setExecutionCompletedTime(String executionCompletedTime) {}
+ /**
+ * Gets the mso request id.
+ *
+ * @return the mso request id
+ */
public String getMsoRequestId() {
return msoRequestId;
}
+ /**
+ * Sets the mso request id.
+ *
+ * @param msoRequestId the new mso request id
+ */
public void setMsoRequestId(String msoRequestId) {
this.msoRequestId = msoRequestId;
}
+ /**
+ * Gets the status message.
+ *
+ * @return the status message
+ */
public String getStatusMessage() {
return statusMessage;
}
+ /**
+ * Sets the status message.
+ *
+ * @param statusMessage the new status message
+ */
public void setStatusMessage(String statusMessage) {
this.statusMessage = statusMessage;
}
+ /**
+ * Gets the finish time millis.
+ *
+ * @return the finish time millis
+ */
public Long getFinishTimeMillis() {
return finishTimeMillis;
}
+ /**
+ * Sets the finish time millis.
+ *
+ * @param finishTimeMillis the new finish time millis
+ */
public void setFinishTimeMillis(Long finishTimeMillis) {
this.finishTimeMillis = finishTimeMillis;
}
+ /**
+ * Gets the start time millis.
+ *
+ * @return the start time millis
+ */
public Long getStartTimeMillis() {
return startTimeMillis;
}
+ /**
+ * Sets the start time millis.
+ *
+ * @param startTimeMillis the new start time millis
+ */
public void setStartTimeMillis(Long startTimeMillis) {
this.startTimeMillis = startTimeMillis;
}
+ /**
+ * Gets the dispatch time millis.
+ *
+ * @return the dispatch time millis
+ */
public Long getDispatchTimeMillis() {
return dispatchTimeMillis;
}
+ /**
+ * Sets the dispatch time millis.
+ *
+ * @param dispatchTimeMillis the new dispatch time millis
+ */
public void setDispatchTimeMillis(Long dispatchTimeMillis) {
this.dispatchTimeMillis = dispatchTimeMillis;
}
+ /**
+ * Gets the execution completed time millis.
+ *
+ * @return the execution completed time millis
+ */
public Long getExecutionCompletedTimeMillis() {
return executionCompletedTimeMillis;
}
+ /**
+ * Sets the execution completed time millis.
+ *
+ * @param executionCompletedTimeMillis the new execution completed time millis
+ */
public void setExecutionCompletedTimeMillis(Long executionCompletedTimeMillis) {
this.executionCompletedTimeMillis = executionCompletedTimeMillis;
}
+ /**
+ * Gets the mso status.
+ *
+ * @return the mso status
+ */
public String getMsoStatus() {
return msoStatus;
}
+ /**
+ * Sets the mso status.
+ *
+ * @param msoStatus the new mso status
+ */
public void setMsoStatus(String msoStatus) {
this.msoStatus = msoStatus;
}
+ /**
+ * Gets the mso message.
+ *
+ * @return the mso message
+ */
public String getMsoMessage() {
return msoMessage;
}
+ /**
+ * Sets the mso message.
+ *
+ * @param msoMessage the new mso message
+ */
public void setMsoMessage(String msoMessage) {
this.msoMessage = msoMessage;
}
+ /**
+ * Gets the mso time millis.
+ *
+ * @return the mso time millis
+ */
public Long getMsoTimeMillis() {
return msoTimeMillis;
}
+ /**
+ * Sets the mso time millis.
+ *
+ * @param msoTimeMillis the new mso time millis
+ */
public void setMsoTimeMillis(Long msoTimeMillis) {
this.msoTimeMillis = msoTimeMillis;
}
+ /**
+ * Gets the mso time.
+ *
+ * @return the mso time
+ */
public String getMsoTime() {
- if (msoTimeMillis != null)
+ if (msoTimeMillis != null) {
return ISODateTimeFormat.dateTimeNoMillis().print(msoTimeMillis);
+ }
return null;
}
protected void setMsoTime(String msoTime) {}
+ /**
+ * Gets the tm status.
+ *
+ * @return the tm status
+ */
public String getTmStatus() {
return tmStatus;
}
+ /**
+ * Sets the tm status.
+ *
+ * @param tmStatus the new tm status
+ */
public void setTmStatus(String tmStatus) {
this.tmStatus = tmStatus;
}
+ /**
+ * Gets the tm approval status.
+ *
+ * @return the tm approval status
+ */
public String getTmApprovalStatus() {
return tmApprovalStatus;
}
+ /**
+ * Sets the tm approval status.
+ *
+ * @param tmApprovalStatus the new tm approval status
+ */
public void setTmApprovalStatus(String tmApprovalStatus) {
this.tmApprovalStatus = tmApprovalStatus;
}
+ /**
+ * Gets the request.
+ *
+ * @return the request
+ */
+ public String getRequest() {
+ return request;
+ }
+
+ /**
+ * Sets the request.
+ *
+ * @param request the new request
+ */
+ public void setRequest(String request) {
+ this.request = request;
+ }
+
}
diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/model/Domain.java b/cmso-service/src/main/java/org/onap/optf/cmso/model/Domain.java index c7af7c5..c8f7e85 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/model/Domain.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/model/Domain.java @@ -1,33 +1,28 @@ /*
- * 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.model;
diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/model/DomainData.java b/cmso-service/src/main/java/org/onap/optf/cmso/model/DomainData.java index fc86964..b08bde9 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/model/DomainData.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/model/DomainData.java @@ -1,47 +1,41 @@ /*
- * 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.model;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import io.swagger.annotations.ApiModel;
import java.io.Serializable;
+import java.util.UUID;
import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import io.swagger.annotations.ApiModel;
/**
* The persistent class for the domain_data database table.
@@ -56,28 +50,30 @@ public class DomainData implements Serializable { @JsonIgnore
@Id
- @GeneratedValue(strategy=GenerationType.IDENTITY)
- private Integer id;
+ private UUID uuid;
private String name;
private String value;
@ManyToOne(optional = true)
- @JoinColumn(name = "schedules_id", nullable = false, updatable = false)
+ @JoinColumn(name = "schedules_uuid", nullable = false, updatable = false)
@JsonIgnore
private Schedule schedule;
public DomainData() {}
- public Integer getId() {
- return this.id;
+
+ public UUID getUuid() {
+ return uuid;
}
- public void setId(Integer id) {
- this.id = id;
+
+ public void setUuid(UUID uuid) {
+ this.uuid = uuid;
}
+
public String getName() {
return this.name;
}
diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/model/ElementData.java b/cmso-service/src/main/java/org/onap/optf/cmso/model/ElementData.java new file mode 100644 index 0000000..b4114a8 --- /dev/null +++ b/cmso-service/src/main/java/org/onap/optf/cmso/model/ElementData.java @@ -0,0 +1,99 @@ +/* + * 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. + */ + +package org.onap.optf.cmso.model; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import io.swagger.annotations.ApiModel; +import java.io.Serializable; +import java.util.UUID; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.NamedQuery; +import javax.persistence.Table; + +/** + * The persistent class for the domain_data database table. + * + */ +@Entity +@Table(name = "ELEMENT_DATA") +@NamedQuery(name = "ElementData.findAll", query = "SELECT d FROM ElementData d") +@ApiModel(value = "Element data", description = "Element data represented as name/value pairs") +public class ElementData implements Serializable { + private static final long serialVersionUID = 1L; + + @JsonIgnore + @Id + private UUID uuid; + + private String name; + + private String value; + + private UUID changeManagementSchedulesUuid; + + public ElementData() {} + + + public UUID getUuid() { + return uuid; + } + + + public void setUuid(UUID uuid) { + this.uuid = uuid; + } + + + public String getName() { + return this.name; + } + + public void setName(String name) { + this.name = name; + } + + public String getValue() { + return this.value; + } + + public void setValue(String value) { + this.value = value; + } + + + public UUID getChangeManagementSchedulesUuid() { + return changeManagementSchedulesUuid; + } + + + public void setChangeManagementSchedulesUuid(UUID changeManagementSchedulesUuid) { + this.changeManagementSchedulesUuid = changeManagementSchedulesUuid; + } + + +} diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/model/Schedule.java b/cmso-service/src/main/java/org/onap/optf/cmso/model/Schedule.java index d6fe4f9..200e641 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/model/Schedule.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/model/Schedule.java @@ -1,44 +1,41 @@ /*
- * 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.model;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
+import java.util.UUID;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.NamedQuery;
@@ -48,9 +45,6 @@ import javax.persistence.Transient; import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;
import org.joda.time.format.ISODateTimeFormat;
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import io.swagger.annotations.ApiModelProperty;
/**
* The persistent class for the schedules database table.
@@ -64,8 +58,7 @@ public class Schedule implements Serializable { @JsonIgnore
@Id
- @GeneratedValue(strategy=GenerationType.IDENTITY)
- private Integer id;
+ private UUID uuid;
@JsonIgnore
@Column(name = "create_date_time")
@@ -160,12 +153,20 @@ public class Schedule implements Serializable { public Schedule() {}
- public Integer getId() {
- return this.id;
+ public UUID getUuid() {
+ return uuid;
+ }
+
+ public void setUuid(UUID uuid) {
+ this.uuid = uuid;
+ }
+
+ public void setDomainData(List<DomainData> domainData) {
+ this.domainData = domainData;
}
- public void setId(Integer id) {
- this.id = id;
+ public void setScheduleApprovals(List<ScheduleApproval> scheduleApprovals) {
+ this.scheduleApprovals = scheduleApprovals;
}
public String getCreateDateTime() {
diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/model/ScheduleApproval.java b/cmso-service/src/main/java/org/onap/optf/cmso/model/ScheduleApproval.java index dee3c42..588aede 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/model/ScheduleApproval.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/model/ScheduleApproval.java @@ -1,41 +1,39 @@ /*
- * 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.model;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
+import java.util.UUID;
import javax.persistence.Column;
import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
@@ -43,10 +41,6 @@ import javax.persistence.NamedQuery; import javax.persistence.Table;
import javax.persistence.Transient;
import org.joda.time.format.ISODateTimeFormat;
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
/**
* The persistent class for the schedule_approvals database table.
@@ -60,9 +54,8 @@ public class ScheduleApproval implements Serializable { private static final long serialVersionUID = 1L;
@Id
- @GeneratedValue(strategy=GenerationType.IDENTITY)
@JsonIgnore
- private Integer id;
+ private UUID uuid;
@JsonIgnore
@Column(name = "approval_date_time")
@@ -82,23 +75,16 @@ public class ScheduleApproval implements Serializable { private String userId;
@ManyToOne(optional = true)
- @JoinColumn(name = "schedules_id", nullable = false, updatable = false)
+ @JoinColumn(name = "schedules_uuid", nullable = false, updatable = false)
@JsonIgnore
private Schedule schedule;
@JsonIgnore
- @Column(name = "approval_type_id")
- private Integer approvalTypeId;
+ @Column(name = "approval_types_uuid")
+ private UUID approvalTypesUuid;
public ScheduleApproval() {}
- public Integer getId() {
- return this.id;
- }
-
- public void setId(Integer id) {
- this.id = id;
- }
public String getApprovalDateTime() {
if (approvalDateTimeMillis != null)
@@ -124,13 +110,6 @@ public class ScheduleApproval implements Serializable { this.userId = userId;
}
- public Integer getApprovalTypeId() {
- return approvalTypeId;
- }
-
- public void setApprovalTypeId(Integer approvalTypeId) {
- this.approvalTypeId = approvalTypeId;
- }
public void setSchedule(Schedule schedule) {
this.schedule = schedule;
@@ -148,4 +127,26 @@ public class ScheduleApproval implements Serializable { this.approvalDateTimeMillis = approvalDateTimeMillis;
}
+
+ public UUID getUuid() {
+ return uuid;
+ }
+
+
+ public void setUuid(UUID uuid) {
+ this.uuid = uuid;
+ }
+
+
+ public UUID getApprovalTypesUuid() {
+ return approvalTypesUuid;
+ }
+
+
+ public void setApprovalTypesUuid(UUID approvalTypesUuid) {
+ this.approvalTypesUuid = approvalTypesUuid;
+ }
+
+
+
}
diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/model/ScheduleEvent.java b/cmso-service/src/main/java/org/onap/optf/cmso/model/ScheduleEvent.java deleted file mode 100644 index 46cb46e..0000000 --- a/cmso-service/src/main/java/org/onap/optf/cmso/model/ScheduleEvent.java +++ /dev/null @@ -1,163 +0,0 @@ -/*
- * 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.
-*/
-
-package org.onap.optf.cmso.model;
-
-import java.io.Serializable;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.Lob;
-import javax.persistence.NamedQuery;
-import javax.persistence.Table;
-import javax.persistence.Transient;
-import org.joda.time.format.ISODateTimeFormat;
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-/**
- * The persistent class for the schedule_events database table.
- *
- */
-@Entity
-@Table(name = "SCHEDULE_EVENTS")
-@NamedQuery(name = "ScheduleEvent.findAll", query = "SELECT s FROM ScheduleEvent s")
-public class ScheduleEvent implements Serializable {
- private static final long serialVersionUID = 1L;
-
- @Id
- @GeneratedValue(strategy=GenerationType.IDENTITY)
- private Integer id;
-
- private String domain;
-
- @Lob
- @Column(name = "event_text")
- private String eventText;
-
- @JsonIgnore
- @Column(name = "event_time")
- private Long eventTimeMillis;
-
- @JsonProperty
- @Transient
- private String eventTime;
-
- @JsonIgnore
- @Column(name = "reminder_time")
- private Long reminderTimeMillis;
-
- @JsonProperty
- @Transient
- private String reminderTime;
-
- @Column(name = "schedules_id")
- private Integer schedulesId;
-
- private String status;
-
- public ScheduleEvent() {}
-
- public Integer getId() {
- return this.id;
- }
-
- public void setId(Integer id) {
- this.id = id;
- }
-
- public String getDomain() {
- return this.domain;
- }
-
- public void setDomain(String domain) {
- this.domain = domain;
- }
-
- public String getEventText() {
- return this.eventText;
- }
-
- public void setEventText(String eventText) {
- this.eventText = eventText;
- }
-
- public Integer getSchedulesId() {
- return this.schedulesId;
- }
-
- public void setSchedulesId(Integer schedulesId) {
- this.schedulesId = schedulesId;
- }
-
- public String getStatus() {
- return this.status;
- }
-
- public void setStatus(String status) {
- this.status = status;
- }
-
- public Long getEventTimeMillis() {
- return eventTimeMillis;
- }
-
- public void setEventTimeMillis(Long eventTimeMillis) {
- this.eventTimeMillis = eventTimeMillis;
- }
-
- public String getEventTime() {
- if (eventTimeMillis != null)
- return ISODateTimeFormat.dateTimeNoMillis().print(this.eventTimeMillis);
- return null;
- }
-
- public void setEventTime(String eventTime) {}
-
- public Long getReminderTimeMillis() {
- return reminderTimeMillis;
- }
-
- public void setReminderTimeMillis(Long reminderTimeMillis) {
- this.reminderTimeMillis = reminderTimeMillis;
- }
-
- public String getReminderTime() {
- if (reminderTimeMillis != null)
- return ISODateTimeFormat.dateTimeNoMillis().print(this.reminderTimeMillis);
- return null;
- }
-
- public void setReminderTime(String reminderTime) {}
-
-}
diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/model/ScheduleQuery.java b/cmso-service/src/main/java/org/onap/optf/cmso/model/ScheduleQuery.java index 84d3e5c..24caf1e 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/model/ScheduleQuery.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/model/ScheduleQuery.java @@ -1,36 +1,32 @@ /*
- * 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.model;
+import java.util.UUID;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
@@ -38,15 +34,16 @@ import javax.persistence.Id; @Entity
public class ScheduleQuery {
@Id
- @Column(name = "id")
- private Integer id;
+ @Column(name = "uuid")
+ private UUID uuid;
- public Integer getId() {
- return id;
+ public UUID getUuid() {
+ return uuid;
}
- public void setId(Integer id) {
- this.id = id;
+ public void setUuid(UUID uuid) {
+ this.uuid = uuid;
}
+
}
diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/model/dao/ApprovalTypeDAO.java b/cmso-service/src/main/java/org/onap/optf/cmso/model/dao/ApprovalTypeDAO.java index 7eb2430..9e4b546 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/model/dao/ApprovalTypeDAO.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/model/dao/ApprovalTypeDAO.java @@ -1,6 +1,6 @@ /*
- * 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.
@@ -33,12 +33,14 @@ package org.onap.optf.cmso.model.dao; import java.util.List;
import java.util.Optional;
+import java.util.UUID;
+
import org.onap.optf.cmso.model.ApprovalType;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
-public interface ApprovalTypeDAO extends PagingAndSortingRepository<ApprovalType, Integer> {
- Optional<ApprovalType> findById(Integer id);
+public interface ApprovalTypeDAO extends PagingAndSortingRepository<ApprovalType, UUID> {
+ Optional<ApprovalType> findById(UUID id);
ApprovalType save(ApprovalType persisted);
diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/model/dao/ChangeManagementChangeWindowDAO.java b/cmso-service/src/main/java/org/onap/optf/cmso/model/dao/ChangeManagementChangeWindowDAO.java index 293209e..303be20 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/model/dao/ChangeManagementChangeWindowDAO.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/model/dao/ChangeManagementChangeWindowDAO.java @@ -1,6 +1,6 @@ /*
- * 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.
@@ -33,24 +33,26 @@ package org.onap.optf.cmso.model.dao; import java.util.List;
import java.util.Optional;
+import java.util.UUID;
+
import org.onap.optf.cmso.model.ChangeManagementChangeWindow;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
public interface ChangeManagementChangeWindowDAO
- extends PagingAndSortingRepository<ChangeManagementChangeWindow, Integer> {
- Optional<ChangeManagementChangeWindow> findById(Integer id);
+ extends PagingAndSortingRepository<ChangeManagementChangeWindow, UUID> {
+ Optional<ChangeManagementChangeWindow> findById(UUID id);
ChangeManagementChangeWindow save(ChangeManagementChangeWindow persisted);
void delete(ChangeManagementChangeWindow toDelete);
- @Query(value = "SELECT d FROM ChangeManagementChangeWindow d WHERE d.changeManagementGroupsId = ?1")
- List<ChangeManagementChangeWindow> findByGroupsID(Integer id);
+ @Query(value = "SELECT d FROM ChangeManagementChangeWindow d WHERE d.changeManagementGroupUuid = ?1")
+ List<ChangeManagementChangeWindow> findByGroupsUUID(UUID id);
@Modifying
- @Query(value = "DELETE FROM ChangeManagementChangeWindow d WHERE d.changeManagementGroupsId = ?1")
- int deleteByChangeManagementGroupId(int id);
+ @Query(value = "DELETE FROM ChangeManagementChangeWindow d WHERE d.changeManagementGroupUuid = ?1")
+ int deleteByChangeManagementGroupUuid(UUID id);
}
diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/model/dao/ChangeManagementDetailDAOImpl.java b/cmso-service/src/main/java/org/onap/optf/cmso/model/dao/ChangeManagementDetailDAOImpl.java index 2c083d6..028241c 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/model/dao/ChangeManagementDetailDAOImpl.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/model/dao/ChangeManagementDetailDAOImpl.java @@ -1,6 +1,6 @@ /*
- * 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.
@@ -46,7 +46,7 @@ public class ChangeManagementDetailDAOImpl implements ChangeManagementDetailDAO @Override
public List<ChangeManagementDetail> searchScheduleDetails(String where, int limit) {
StringBuilder sql = new StringBuilder();
- sql.append("select distinct" + " s.id as id," + " s.vnf_name as vnf_name," + " s.vnf_id as vnf_id,"
+ sql.append("select distinct" + " s.uuid as uuid," + " s.vnf_name as vnf_name," + " s.vnf_id as vnf_id,"
+ " s.status as status," + " s.tm_change_id as tm_change_Id," + " s.start_time as start_time,"
+ " s.finish_time as finish_time," + " s.mso_request_id as mso_request_id,"
+ " s.mso_status as mso_status," + " s.mso_message as mso_message," + " s.mso_time as mso_time,"
@@ -54,17 +54,17 @@ public class ChangeManagementDetailDAOImpl implements ChangeManagementDetailDAO + " s.status_message as status_message," + " s.tm_approval_status as tm_approval_status,"
+ " s.tm_status as tm_status," + " g.group_id as group_id,"
+ " g.last_instance_start_time as last_instance_start_time," + " g.policy_id as policy_id,"
- + " g.schedules_id as schedules_id"
+ + " g.schedules_uuid as schedules_uuid"
// + " ss.schedule_id as scheduleId,"
// + " dd.name"
+ " from" + " CHANGE_MANAGEMENT_SCHEDULES s"
- + " inner join CHANGE_MANAGEMENT_GROUPS g on s.change_management_groups_id = g.id"
- + " inner join SCHEDULES ss on g.schedules_id = ss.id "
- + " left outer join DOMAIN_DATA dd on ss.id = dd.schedules_id"
- + " left outer join SCHEDULE_APPROVALS sa on ss.id = sa.schedules_id"
- + " left outer join APPROVAL_TYPES at on sa.approval_type_id = at.id ");
+ + " inner join CHANGE_MANAGEMENT_GROUPS g on s.change_management_group_uuid = g.uuid"
+ + " inner join SCHEDULES ss on g.schedules_uuid = ss.uuid "
+ + " left outer join DOMAIN_DATA dd on ss.uuid = dd.schedules_uuid"
+ + " left outer join SCHEDULE_APPROVALS sa on ss.uuid = sa.schedules_uuid"
+ + " left outer join APPROVAL_TYPES at on sa.approval_types_uuid = at.uuid ");
sql.append(where);
- sql.append(" order by id ");
+ sql.append(" order by uuid ");
if (limit > 0)
sql.append("LIMIT " + limit);
diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/model/dao/ChangeManagementGroupDAO.java b/cmso-service/src/main/java/org/onap/optf/cmso/model/dao/ChangeManagementGroupDAO.java index 39f4baa..7acc228 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/model/dao/ChangeManagementGroupDAO.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/model/dao/ChangeManagementGroupDAO.java @@ -1,6 +1,6 @@ /*
- * 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.
@@ -33,21 +33,23 @@ package org.onap.optf.cmso.model.dao; import java.util.List;
import java.util.Optional;
+import java.util.UUID;
+
import org.onap.optf.cmso.model.ChangeManagementGroup;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
-public interface ChangeManagementGroupDAO extends PagingAndSortingRepository<ChangeManagementGroup, Integer> {
- Optional<ChangeManagementGroup> findById(Integer id);
+public interface ChangeManagementGroupDAO extends PagingAndSortingRepository<ChangeManagementGroup, UUID> {
+ Optional<ChangeManagementGroup> findById(UUID id);
ChangeManagementGroup save(ChangeManagementGroup persisted);
void delete(ChangeManagementGroup toDelete);
- @Query(value = "SELECT d FROM ChangeManagementGroup d WHERE d.schedulesId = ?1")
- List<ChangeManagementGroup> findBySchedulesID(Integer id);
+ @Query(value = "SELECT d FROM ChangeManagementGroup d WHERE d.schedulesUuid = ?1")
+ List<ChangeManagementGroup> findBySchedulesID(UUID id);
- @Query(value = "SELECT d FROM ChangeManagementGroup d WHERE d.schedulesId = ?1 AND d.groupId = ?2")
- ChangeManagementGroup findOneBySchedulesIDGroupID(Integer id, String groupId);
+ @Query(value = "SELECT d FROM ChangeManagementGroup d WHERE d.schedulesUuid = ?1 AND d.groupId = ?2")
+ ChangeManagementGroup findOneBySchedulesIDGroupID(UUID id, String groupId);
}
diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/model/dao/ChangeManagementScheduleDAO.java b/cmso-service/src/main/java/org/onap/optf/cmso/model/dao/ChangeManagementScheduleDAO.java index a089c2b..27a5029 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/model/dao/ChangeManagementScheduleDAO.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/model/dao/ChangeManagementScheduleDAO.java @@ -1,27 +1,27 @@ /*
- * 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
- *
+ *
* 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.
@@ -33,6 +33,7 @@ package org.onap.optf.cmso.model.dao; import java.util.List;
import java.util.Optional;
+import java.util.UUID;
import javax.persistence.LockModeType;
import org.onap.optf.cmso.model.ChangeManagementSchedule;
import org.springframework.data.jpa.repository.Lock;
@@ -40,22 +41,33 @@ import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
-public interface ChangeManagementScheduleDAO extends PagingAndSortingRepository<ChangeManagementSchedule, Integer> {
- Optional<ChangeManagementSchedule> findById(Integer id);
+public interface ChangeManagementScheduleDAO extends PagingAndSortingRepository<ChangeManagementSchedule, UUID> {
+ @Override + Optional<ChangeManagementSchedule> findById(UUID id);
+ @Override ChangeManagementSchedule save(ChangeManagementSchedule persisted);
+ @Override void delete(ChangeManagementSchedule toDelete);
- @Query(value = "SELECT d FROM ChangeManagementSchedule d WHERE d.changeManagementGroupsId = ?1")
- List<ChangeManagementSchedule> findByChangeManagementGroupId(Integer id);
+ @Query(value = "SELECT d FROM ChangeManagementSchedule d WHERE d.changeManagementGroupUuid = ?1")
+ List<ChangeManagementSchedule> findByChangeManagementGroupId(UUID id);
@Modifying
- @Query(value = "DELETE FROM ChangeManagementSchedule d WHERE d.changeManagementGroupsId = ?1")
- public int deleteByChangeManagementGroupsId(Integer id);
+ @Query(value = "DELETE FROM ChangeManagementSchedule d WHERE d.changeManagementGroupUuid = ?1")
+ public int deleteByChangeManagementGroupsId(UUID id);
+
+ @Query(value = "SELECT d FROM ChangeManagementSchedule d WHERE d.changeManagementGroupUuid = ?1 AND d.vnfName = ?2")
+ ChangeManagementSchedule findOneByGroupUuidAndVnfName(UUID id, String vnfName);
+
+ @Query(value = "SELECT d FROM ChangeManagementSchedule d, ChangeManagementGroup g"
+ + " WHERE g.schedulesUuid = ?1"
+ + " AND g.groupId = ?2"
+ + " AND d.changeManagementGroupUuid = g.uuid"
+ + " AND d.vnfName = ?3")
+ ChangeManagementSchedule findOneByScheduleUUIDGroupIdAndVnfName(UUID id, String groupId, String vnfName);
- @Query(value = "SELECT d FROM ChangeManagementSchedule d WHERE d.changeManagementGroupsId = ?1 AND d.vnfName = ?2")
- ChangeManagementSchedule findOneByGroupIDAndVnfName(Integer id, String vnfName);
@Query(value = "SELECT d FROM ChangeManagementSchedule d WHERE (d.status = ?1 AND d.startTimeMillis <= ?2) or d.status = 'Scheduled Immediate' order by d.startTimeMillis")
List<ChangeManagementSchedule> findByStatusAndEndTime(String status, Long date);
@@ -70,8 +82,8 @@ public interface ChangeManagementScheduleDAO extends PagingAndSortingRepository< @Query(value = "SELECT d FROM ChangeManagementSchedule d WHERE d.tmApprovalStatus = 'Pending Approval'")
List<ChangeManagementSchedule> findAllAwaitingTmApproval();
- @Query(value = "SELECT d FROM ChangeManagementSchedule d WHERE d.id = ?1")
+ @Query(value = "SELECT d FROM ChangeManagementSchedule d WHERE d.uuid = ?1")
@Lock(LockModeType.PESSIMISTIC_WRITE)
- ChangeManagementSchedule lockOne(Integer id);
+ ChangeManagementSchedule lockOne(UUID id);
}
diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/model/dao/DomainDataDAO.java b/cmso-service/src/main/java/org/onap/optf/cmso/model/dao/DomainDataDAO.java index 9556938..75299a1 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/model/dao/DomainDataDAO.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/model/dao/DomainDataDAO.java @@ -1,6 +1,6 @@ /*
- * 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.
@@ -32,11 +32,13 @@ package org.onap.optf.cmso.model.dao;
import java.util.Optional;
+import java.util.UUID;
+
import org.onap.optf.cmso.model.DomainData;
import org.springframework.data.repository.PagingAndSortingRepository;
-public interface DomainDataDAO extends PagingAndSortingRepository<DomainData, Integer> {
- Optional<DomainData> findById(Integer id);
+public interface DomainDataDAO extends PagingAndSortingRepository<DomainData, UUID> {
+ Optional<DomainData> findById(UUID id);
DomainData save(DomainData persisted);
diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/model/HelloWorld.java b/cmso-service/src/main/java/org/onap/optf/cmso/model/dao/ElementDataDAO.java index ed09ad7..dada4e1 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/model/HelloWorld.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/model/dao/ElementDataDAO.java @@ -1,58 +1,49 @@ -/*
- * 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.
-*/
-
-package org.onap.optf.cmso.model;
-
-public class HelloWorld {
-
- private String message;
-
- public HelloWorld() {
- // needed for deserializer
- }
-
- public HelloWorld(String message) {
- this.message = message;
- }
-
- public String getMessage() {
- return message;
- }
-
- public void setMessage(String message) {
- this.message = message;
- }
-
- @Override
- public String toString() {
- return "message = " + getMessage();
- }
-}
+/* + * 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. +*/ + +package org.onap.optf.cmso.model.dao; + +import java.util.Optional; +import java.util.UUID; +import org.onap.optf.cmso.model.ElementData; +import org.springframework.data.repository.PagingAndSortingRepository; + +public interface ElementDataDAO extends PagingAndSortingRepository<ElementData, UUID> { + @Override + Optional<ElementData> findById(UUID id); + + @Override + ElementData save(ElementData persisted); + + @Override + void delete(ElementData toDelete); + +} diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/model/dao/ScheduleApprovalDAO.java b/cmso-service/src/main/java/org/onap/optf/cmso/model/dao/ScheduleApprovalDAO.java index d9badd0..3fabd63 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/model/dao/ScheduleApprovalDAO.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/model/dao/ScheduleApprovalDAO.java @@ -1,6 +1,6 @@ /*
- * 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.
@@ -32,11 +32,13 @@ package org.onap.optf.cmso.model.dao;
import java.util.Optional;
+import java.util.UUID;
+
import org.onap.optf.cmso.model.ScheduleApproval;
import org.springframework.data.repository.PagingAndSortingRepository;
-public interface ScheduleApprovalDAO extends PagingAndSortingRepository<ScheduleApproval, Integer> {
- Optional<ScheduleApproval> findById(Integer id);
+public interface ScheduleApprovalDAO extends PagingAndSortingRepository<ScheduleApproval, UUID> {
+ Optional<ScheduleApproval> findById(UUID id);
ScheduleApproval save(ScheduleApproval persisted);
diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/model/dao/ScheduleDAO.java b/cmso-service/src/main/java/org/onap/optf/cmso/model/dao/ScheduleDAO.java index f68fd22..90843c4 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/model/dao/ScheduleDAO.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/model/dao/ScheduleDAO.java @@ -1,6 +1,6 @@ /*
- * 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.
@@ -33,14 +33,17 @@ package org.onap.optf.cmso.model.dao; import java.util.List;
import java.util.Optional;
+import java.util.UUID;
+
import javax.persistence.LockModeType;
+
import org.onap.optf.cmso.model.Schedule;
import org.springframework.data.jpa.repository.Lock;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
-public interface ScheduleDAO extends PagingAndSortingRepository<Schedule, Integer> {
- Optional<Schedule> findById(Integer id);
+public interface ScheduleDAO extends PagingAndSortingRepository<Schedule, UUID> {
+ Optional<Schedule> findById(UUID id);
Schedule save(Schedule persited);
@@ -58,9 +61,9 @@ public interface ScheduleDAO extends PagingAndSortingRepository<Schedule, Intege @Query(value = "SELECT s FROM Schedule s WHERE s.domain = ?1 AND s.status = 'Notifications Initiated'")
List<Schedule> findAllInProgress(String string);
- @Query(value = "SELECT d FROM Schedule d WHERE d.id = ?1")
+ @Query(value = "SELECT d FROM Schedule d WHERE d.uuid = ?1")
@Lock(LockModeType.PESSIMISTIC_WRITE)
- Schedule lockOne(Integer id);
+ Schedule lockOne(UUID id);
@Query(value = "SELECT s FROM Schedule s WHERE s.optimizerTransactionId= ?1")
@Lock(LockModeType.PESSIMISTIC_WRITE)
diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/model/dao/ScheduleEventDAO.java b/cmso-service/src/main/java/org/onap/optf/cmso/model/dao/ScheduleEventDAO.java deleted file mode 100644 index c3c2483..0000000 --- a/cmso-service/src/main/java/org/onap/optf/cmso/model/dao/ScheduleEventDAO.java +++ /dev/null @@ -1,53 +0,0 @@ -/*
- * 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.
-*/
-
-package org.onap.optf.cmso.model.dao;
-
-import java.util.List;
-import java.util.Optional;
-import org.onap.optf.cmso.model.ScheduleEvent;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.data.repository.PagingAndSortingRepository;
-
-public interface ScheduleEventDAO extends PagingAndSortingRepository<ScheduleEvent, Integer> {
- Optional<ScheduleEvent> findById(Integer id);
-
- ScheduleEvent save(ScheduleEvent persisted);
-
- void delete(ScheduleEvent toDelete);
-
- @Query(value = "SELECT d FROM ScheduleEvent d WHERE d.schedulesId = ?1")
- List<ScheduleEvent> findByScheduleId(Integer id);
-
- @Query(value = "SELECT d FROM ScheduleEvent d WHERE d.status = ?1 AND d.reminderTimeMillis <= ?2")
- List<ScheduleEvent> findByStatusAndEndTime(String status, Long date);
-
-}
diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/model/dao/ScheduleQueryDAOImpl.java b/cmso-service/src/main/java/org/onap/optf/cmso/model/dao/ScheduleQueryDAOImpl.java index 37fbf52..80bb7f0 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/model/dao/ScheduleQueryDAOImpl.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/model/dao/ScheduleQueryDAOImpl.java @@ -1,6 +1,6 @@ /*
- * 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.
@@ -46,14 +46,14 @@ public class ScheduleQueryDAOImpl implements ScheduleQueryDAO { @Override
public List<ScheduleQuery> searchSchedules(String where, int limit) {
StringBuilder sql = new StringBuilder();
- sql.append("select distinct" + " ss.id as id" + " from" + " SCHEDULES ss"
- + " left outer join CHANGE_MANAGEMENT_GROUPS g on ss.id = g.schedules_id"
- + " left outer join CHANGE_MANAGEMENT_SCHEDULES s on g.id = s.change_management_groups_id"
- + " left outer join DOMAIN_DATA dd on ss.id = dd.schedules_id"
- + " left outer join SCHEDULE_APPROVALS sa on ss.id = sa.schedules_id"
- + " left outer join APPROVAL_TYPES at on sa.approval_type_id = at.id ");
+ sql.append("select distinct" + " ss.uuid as uuid" + " from" + " SCHEDULES ss"
+ + " left outer join CHANGE_MANAGEMENT_GROUPS g on ss.uuid = g.schedules_uuid"
+ + " left outer join CHANGE_MANAGEMENT_SCHEDULES s on g.uuid = s.change_management_group_uuid"
+ + " left outer join DOMAIN_DATA dd on ss.uuid = dd.schedules_uuid"
+ + " left outer join SCHEDULE_APPROVALS sa on ss.uuid = sa.schedules_uuid"
+ + " left outer join APPROVAL_TYPES at on sa.approval_types_uuid = at.uuid ");
sql.append(where);
- sql.append(" order by id ");
+ sql.append(" order by uuid ");
if (limit > 0)
sql.append("LIMIT " + limit);
diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/optimizer/CMSOptimizerClient.java b/cmso-service/src/main/java/org/onap/optf/cmso/optimizer/CmsoOptimizerClient.java index 9feea2d..d81c293 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/optimizer/CMSOptimizerClient.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/optimizer/CmsoOptimizerClient.java @@ -1,373 +1,401 @@ -/*
- * 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.optimizer;
-
-import java.util.ArrayList;
-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 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.model.Schedule;
-import org.onap.optf.cmso.model.dao.ScheduleDAO;
-import org.onap.optf.cmso.optimizer.bean.CMOptimizerRequest;
-import org.onap.optf.cmso.optimizer.bean.CMRequestInfo;
-import org.onap.optf.cmso.optimizer.bean.CMSchedulingInfo;
-import org.onap.optf.cmso.optimizer.bean.CMVnfDetails;
-import org.onap.optf.cmso.service.rs.models.CMSInfo;
-import org.onap.optf.cmso.service.rs.models.ChangeWindowMessage;
-import org.onap.optf.cmso.service.rs.models.HealthCheckComponent;
-import org.onap.optf.cmso.service.rs.models.VnfDetailsMessage;
-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;
-
-@Component
-public class CMSOptimizerClient {
- private static EELFLogger debug = EELFManager.getInstance().getDebugLogger();
-
- @Autowired
- ScheduleDAO scheduleDAO;
-
- @Autowired
- Environment env;
-
- @Autowired
- PropertiesManagement pm;
-
- public boolean scheduleOptimization(Integer id) {
- Map<String, String> mdcSave = Mdc.save();
- try {
- String optimizerurl = env.getProperty("cmso.optimizer.url");
- String optimizercallbackurl = env.getProperty("cmso.optimizer.callbackurl");
- String username = env.getProperty("mechid.user");
- Integer maxAttempts = env.getProperty("cmso.optimizer.maxAttempts", Integer.class, 20);
-
- // Ensure that only one cmso is requsting this call to optimizer
- Schedule schedule = scheduleDAO.lockOne(id);
- if (!schedule.getStatus().equals(CMSStatusEnum.PendingSchedule.toString()))
- return false;
-
- String password = pm.getProperty("mechid.pass", "");
- //
- // Only 'successfully' process one schedule per invocation
- // If a schedule attemp fails and it could be because of the data in the
- // message, try the next one. We don't want bad data to
- //
- if (schedule.getOptimizerAttemptsToSchedule() >= maxAttempts) {
- schedule.setStatus(CMSStatusEnum.OptimizationFailed.toString());
- schedule.setOptimizerMessage("Maximum number of attempts exceeded " + maxAttempts);
- updateScheduleStatus(schedule);
- return true;
- }
- CMOptimizerRequest cmReq = new CMOptimizerRequest();
- try {
- CMSInfo info = reconstituteMessage(schedule);
- if (info == null) {
- return true;
- }
- buildRequest(cmReq, info, schedule, optimizercallbackurl);
- } catch (Exception e) {
- Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage());
- schedule.setStatus(CMSStatusEnum.OptimizationFailed.toString());
- schedule.setOptimizerMessage("Unexpected exception: " + e.getMessage());
- updateScheduleStatus(schedule);
- return true;
- }
-
- // This service will call SNIO for each PendingOptimiztion
- // If the request is successfully scheduled in optimizer, status will be
- // updated to OptimizationInProgress.
- Client client = ClientBuilder.newClient();
- client.register(new BasicAuthenticatorFilter(username, password));
- client.register(new CMSOClientFilters());
- WebTarget optimizerTarget = client.target(optimizerurl);
- Invocation.Builder invocationBuilder = optimizerTarget.request(MediaType.APPLICATION_JSON);
- try {
- //
- // First, push OptimizationInProgress to the DB (flush()) assuming a 202 status,
- // in case the optimizer callback is received prior to the
- // commit of this transaction.
- // optimizer Callback will throw an error if it receives a response in the incorrect
- // state.
- //
- schedule.setOptimizerTransactionId(cmReq.getRequestInfo().getTransactionId());
- schedule.setOptimizerDateTimeMillis(System.currentTimeMillis());
- schedule.setStatus(CMSStatusEnum.OptimizationInProgress.toString());
- updateScheduleStatus(schedule);
- debug.debug("optimizer url / user: " + optimizerurl + " / " + username);
- debug.debug("optimizer Request: " + new ObjectMapper().writeValueAsString(cmReq));
- Observation.report(LogMessages.OPTIMIZER_REQUEST, "Begin", schedule.getScheduleId(), optimizerurl);
- Response response = invocationBuilder.post(Entity.json(cmReq));
- Observation.report(LogMessages.OPTIMIZER_REQUEST, "End", schedule.getScheduleId(), optimizerurl);
- switch (response.getStatus()) {
- case 202:
- debug.debug("Successfully scheduled optimization: " + schedule.getScheduleId());
- // Scheduled with optimizer
- break;
- case 400: // Bad request
- {
- schedule.setOptimizerDateTimeMillis(System.currentTimeMillis());
- schedule.setOptimizerStatus("HTTP Status: " + response.getStatus());
- String message = response.readEntity(String.class);
- schedule.setOptimizerMessage(message);
- schedule.setStatus(CMSStatusEnum.ScheduleFailed.toString());
- // Need to understand the cause of this error. May be teh same as optimizer
- // down.
- int tries = schedule.getOptimizerAttemptsToSchedule();
- tries++;
- schedule.setOptimizerAttemptsToSchedule(tries);
- updateScheduleStatus(schedule);
- Observation.report(LogMessages.OPTIMIZER_EXCEPTION, message);
- return true;
- }
-
- case 500:
- default: {
- String message = response.readEntity(String.class);
- // SHould probably track the number of retries.
- schedule.setOptimizerDateTimeMillis(System.currentTimeMillis());
- int tries = schedule.getOptimizerAttemptsToSchedule();
- tries++;
- schedule.setStatus(CMSStatusEnum.ScheduleFailed.toString());
- schedule.setOptimizerAttemptsToSchedule(tries);
- schedule.setOptimizerMessage(message);
- updateScheduleStatus(schedule);
- /// Got processing error response
- // may be transient, wait for next cycle.
- Observation.report(LogMessages.OPTIMIZER_EXCEPTION, message);
- // Wait until next cycle and try again.
- return false;
- }
-
- }
- //
- return true;
- } catch (ResponseProcessingException e) {
- schedule.setOptimizerDateTimeMillis(System.currentTimeMillis());
- schedule.setOptimizerStatus("Failed to parse optimizer response");
- schedule.setStatus(CMSStatusEnum.ScheduleFailed.toString());
- // Need to understand the cause of this error. May be teh same as optimizer down.
- int tries = schedule.getOptimizerAttemptsToSchedule();
- tries++;
- schedule.setOptimizerAttemptsToSchedule(tries);
- updateScheduleStatus(schedule);
- // Getting invalid response from optimizer.
- // May be data related.
- Observation.report(LogMessages.OPTIMIZER_EXCEPTION, e, e.getMessage());
- return false;
-
- } catch (ProcessingException e) {
- // Don't track number of retries on IO error (optimizer is down)
- schedule.setOptimizerDateTimeMillis(System.currentTimeMillis());
- schedule.setStatus(CMSStatusEnum.PendingSchedule.toString());
- updateScheduleStatus(schedule);
- /// Cannot connect to optimizer
- Observation.report(LogMessages.OPTIMIZER_EXCEPTION, e, e.getMessage());
- // Wait until next cycle
- return false;
- }
- } catch (Exception e) {
- Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage());
-
- } finally {
- Mdc.restore(mdcSave);
- }
- return false;
- }
-
- private void buildRequest(CMOptimizerRequest cmReq, CMSInfo info, Schedule schedule, String optimizercallbackurl) {
-
- // TODO: Need to get optimizer to accept ChangeManagementSchedulingInfo
- // This is to support 1707 optimizer interface
- CMRequestInfo reqInfo = cmReq.getRequestInfo();
- CMSchedulingInfo schInfo = cmReq.getSchedulingInfo();
-
- UUID uuid = UUID.randomUUID();
- reqInfo.setCallbackUrl(optimizercallbackurl);
- reqInfo.setOptimizer(new String[] {"scheduling"});
- reqInfo.setTransactionId(schedule.getOptimizerTransactionId());
- reqInfo.setRequestId("CM-" + uuid.toString());
- reqInfo.setSourceId("cmso");
-
- String[] policyArray = new String[1];
- policyArray[0] = info.getPolicyId();
- schInfo.setPolicyId(policyArray);
- schInfo.setAdditionalDurationInSecs(info.getAdditionalDurationInSeconds());
- schInfo.setConcurrencyLimit(info.getConcurrencyLimit());
- schInfo.setNormalDurationInSecs(info.getNormalDurationInSeconds());
- schInfo.setScheduleId(schedule.getScheduleId());
- List<CMVnfDetails> list = new ArrayList<CMVnfDetails>();
- String startTime = "";
- String endTime = "";
-
- for (VnfDetailsMessage vnf : info.getVnfDetails()) {
- String groupId = vnf.getGroupId();
- for (String node : vnf.getNode()) {
- CMVnfDetails d = new CMVnfDetails(vnf.getGroupId());
- d.setNode(node);
- list.add(d);
- }
- if (startTime.equals("")) {
- // Only supporting 1 CW for 1710
- ChangeWindowMessage cw = vnf.getChangeWindow().get(0);
- startTime = cw.getStartTime();
- endTime = cw.getEndTime();
- }
- }
- schInfo.setStartTime(startTime);
- schInfo.setEndTime(endTime);
- schInfo.setVnfDetails(list.toArray(new CMVnfDetails[list.size()]));
-
- }
-
- private CMSInfo reconstituteMessage(Schedule schedule) {
- String request = schedule.getScheduleInfo();
- ObjectMapper om = new ObjectMapper();
- try {
- CMSInfo info = om.readValue(request, CMSInfo.class);
- return info;
- } catch (Exception e) {
- // Parsing should work here because this was a toString on the original object.
- // We may have an issue when upgrading....
- // Perhaps We create ChangeManagementSchedulingInfoV1, ...V2, etc.
- // ANd try them one after another....
- Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, "Unable to parse message. Format changed?");
- schedule.setOptimizerStatus("Failed to parse optimizer request");
- schedule.setOptimizerDateTimeMillis(System.currentTimeMillis());
- schedule.setStatus(CMSStatusEnum.OptimizationFailed.toString());
- scheduleDAO.save(schedule);
- }
- return null;
- }
-
- @Transactional
- public void updateScheduleStatus(Schedule schedule) {
- scheduleDAO.save(schedule);
-
- }
-
- public HealthCheckComponent healthCheck() {
- Map<String, String> mdcSave = Mdc.save();
- HealthCheckComponent hcc = new HealthCheckComponent();
- hcc.setName("OPtimizer Interface");
- String optimizerurl = env.getProperty("cmso.optimizer.url");
- String optimizercallbackurl = env.getProperty("cmso.optimizer.callbackurl");
- String username = env.getProperty("mechid.user");
- String password = pm.getProperty("mechid.pass", "");
- hcc.setUrl(optimizerurl);
- try {
- UUID uuid = UUID.randomUUID();
- // Build a bogus request should fail policy validation
- CMRequestInfo requestInfo = new CMRequestInfo();
- CMSchedulingInfo schedulingInfo = new CMSchedulingInfo();
- CMOptimizerRequest cmReq = new CMOptimizerRequest();
- cmReq.setRequestInfo(requestInfo);
- cmReq.setSchedulingInfo(schedulingInfo);
- requestInfo.setCallbackUrl("http://callbackurl.onap.org:8080/healthcheck");
- requestInfo.setOptimizer(new String[] {"scheduling"});
- requestInfo.setTransactionId(uuid.toString());
- requestInfo.setRequestId("CM-" + uuid.toString());
- requestInfo.setSourceId("cmso");
- schedulingInfo.setAdditionalDurationInSecs(10);
- schedulingInfo.setConcurrencyLimit(10);
- schedulingInfo.setNormalDurationInSecs(10);
- schedulingInfo.setPolicyId(new String[] {"healthcheck"});
- schedulingInfo.setScheduleId(uuid.toString());
- CMVnfDetails details = new CMVnfDetails();
- details.setGroupId("");
- details.setNode("healtcheck");
- schedulingInfo.setVnfDetails(new CMVnfDetails[] {details});
- schedulingInfo.setStartTime("2017-12-11T15:23:24Z");
- schedulingInfo.setEndTime("2017-12-11T22:23:24Z");
-
- Client client = ClientBuilder.newClient();
- client.register(new BasicAuthenticatorFilter(username, password));
- client.register(new CMSOClientFilters());
-
- WebTarget optimizerTarget = client.target(optimizerurl);
- Invocation.Builder invocationBuilder = optimizerTarget.request(MediaType.APPLICATION_JSON);
- debug.debug("Optimizer url / user: " + optimizerurl + " / " + username);
- Observation.report(LogMessages.OPTIMIZER_REQUEST, "Begin", "healthcheck", optimizerurl);
- Response response = invocationBuilder.post(Entity.json(cmReq));
- Observation.report(LogMessages.OPTIMIZER_REQUEST, "End", "healthcheck", optimizerurl);
- String message = response.getStatus() + ":" + response.readEntity(String.class);
- switch (response.getStatus()) {
- case 202:
- debug.debug("Successful optimizer healthcheck");
- hcc.setHealthy(true);
- break;
- case 400:
- // Expecting policy not found.
- if (message.contains("Cannot fetch policy")) {
- debug.debug("Successful optimizer healthcheck");
- hcc.setHealthy(true);
- hcc.setStatus("OK");
- } else {
- hcc.setStatus(message);
- }
- break;
- default:
- hcc.setStatus(message);
- break;
- }
- } catch (Exception e) {
- Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e.toString());
- hcc.setStatus(e.toString());
- } finally {
- Mdc.restore(mdcSave);
- }
- return hcc;
-
- }
-}
+/* + * 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.optimizer; + +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.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 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.model.DomainData; +import org.onap.optf.cmso.model.Schedule; +import org.onap.optf.cmso.model.dao.ScheduleDAO; +import org.onap.optf.cmso.optimizer.model.OptimizerRequest; +import org.onap.optf.cmso.optimizer.model.OptimizerResponse; +import org.onap.optf.cmso.service.rs.models.HealthCheckComponent; +import org.onap.optf.cmso.service.rs.models.v2.NameValue; +import org.onap.optf.cmso.service.rs.models.v2.SchedulingData; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.env.Environment; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +/** + * The Class CmsoOptimizerClient. + */ +@Component +public class CmsoOptimizerClient { + private static EELFLogger debug = EELFManager.getInstance().getDebugLogger(); + + @Autowired + ScheduleDAO scheduleDAO; + + @Autowired + Environment env; + + @Autowired + PropertiesManagement pm; + + @Autowired + CmsoOptimizerHandler optimizerHandler; + + /** + * Schedule optimization. + * + * @param uuid - non empty + */ + public void scheduleOptimization(UUID uuid) { + Map<String, String> mdcSave = Mdc.save(); + try { + // Ensure that only one cmso is requsting this call to optimizer + Schedule schedule = scheduleDAO.lockOne(uuid); + if (schedule.getStatus().equals(CMSStatusEnum.PendingSchedule.toString())) { + scheduleNewOptimization(schedule); + } + if (schedule.getStatus().equals(CMSStatusEnum.OptimizationInProgress.toString())) { + pollOptimizer(schedule); + } + return; + } catch (Exception e) { + Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage()); + } finally { + Mdc.restore(mdcSave); + } + } + + /** + * Schedule New Optimization. + * + * @param schedule - schedule + */ + public void scheduleNewOptimization(Schedule schedule) { + try { + Integer maxAttempts = env.getProperty("cmso.optimizer.maxAttempts", Integer.class, 20); + // + // Only 'successfully' process one schedule per invocation + // If a schedule attemp fails and it could be because of the data in the + // message, try the next one. We don't want bad data to + // + if (schedule.getOptimizerAttemptsToSchedule() >= maxAttempts) { + schedule.setStatus(CMSStatusEnum.OptimizationFailed.toString()); + schedule.setOptimizerMessage("Maximum number of attempts exceeded " + maxAttempts); + updateScheduleStatus(schedule); + return; + } + OptimizerRequest cmReq = null; + try { + cmReq = buildRequestMessage(schedule); + if (cmReq == null) { + return; + } + } catch (Exception e) { + Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage()); + schedule.setStatus(CMSStatusEnum.OptimizationFailed.toString()); + schedule.setOptimizerMessage("Unexpected exception: " + e.getMessage()); + updateScheduleStatus(schedule); + return; + } + initiateOptimization(schedule, cmReq); + } catch (Exception e) { + Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage()); + } + } + + private void initiateOptimization(Schedule schedule, OptimizerRequest cmReq) { + try { + String optimizerurl = env.getProperty("cmso.optimizer.request.url"); + String username = env.getProperty("mechid.user"); + String password = pm.getProperty("mechid.pass", ""); + // This service will call optimizer for each PendingSchedule + // If the request is successfully scheduled in optimizer, status will be + // updated to OptimizationInProgress. + Client client = ClientBuilder.newClient(); + client.register(new BasicAuthenticatorFilter(username, password)); + client.register(new CmsoClientFilters()); + WebTarget optimizerTarget = client.target(optimizerurl); + Invocation.Builder invocationBuilder = optimizerTarget.request(MediaType.APPLICATION_JSON); + try { + // + // First, push OptimizationInProgress to the DB (flush()) assuming a 202 status, + // in case the optimizer callback is received prior to the + // commit of this transaction. + // optimizer Callback will throw an error if it receives a response in the incorrect + // state. + // + schedule.setOptimizerTransactionId(cmReq.getRequestId()); + schedule.setOptimizerDateTimeMillis(System.currentTimeMillis()); + schedule.setStatus(CMSStatusEnum.OptimizationInProgress.toString()); + updateScheduleStatus(schedule); + debug.debug("optimizer url / user: " + optimizerurl + " / " + username); + debug.debug("optimizer Request: " + new ObjectMapper().writeValueAsString(cmReq)); + Observation.report(LogMessages.OPTIMIZER_REQUEST, "Begin", schedule.getScheduleId(), optimizerurl); + Response response = invocationBuilder.post(Entity.json(cmReq)); + Observation.report(LogMessages.OPTIMIZER_REQUEST, "End", schedule.getScheduleId(), optimizerurl); + switch (response.getStatus()) { + case 202: + debug.debug("Successfully scheduled optimization: " + schedule.getScheduleId()); + // Scheduled with optimizer + break; + case 400: // Bad request + { + schedule.setOptimizerDateTimeMillis(System.currentTimeMillis()); + schedule.setOptimizerStatus("HTTP Status: " + response.getStatus()); + String message = response.readEntity(String.class); + schedule.setOptimizerMessage(message); + schedule.setStatus(CMSStatusEnum.ScheduleFailed.toString()); + // Need to understand the cause of this error. May be teh same as optimizer + // down. + int tries = schedule.getOptimizerAttemptsToSchedule(); + tries++; + schedule.setOptimizerAttemptsToSchedule(tries); + updateScheduleStatus(schedule); + Observation.report(LogMessages.OPTIMIZER_EXCEPTION, message); + } + break; + case 500: + default: { + String message = response.readEntity(String.class); + // SHould probably track the number of retries. + schedule.setOptimizerDateTimeMillis(System.currentTimeMillis()); + int tries = schedule.getOptimizerAttemptsToSchedule(); + tries++; + schedule.setStatus(CMSStatusEnum.ScheduleFailed.toString()); + schedule.setOptimizerAttemptsToSchedule(tries); + schedule.setOptimizerMessage(message); + updateScheduleStatus(schedule); + /// Got processing error response + // may be transient, wait for next cycle. + Observation.report(LogMessages.OPTIMIZER_EXCEPTION, message); + // Wait until next cycle and try again. + } + } + } catch (ResponseProcessingException e) { + schedule.setOptimizerDateTimeMillis(System.currentTimeMillis()); + schedule.setOptimizerStatus("Failed to parse optimizer response"); + schedule.setStatus(CMSStatusEnum.ScheduleFailed.toString()); + // Need to understand the cause of this error. May be teh same as optimizer down. + int tries = schedule.getOptimizerAttemptsToSchedule(); + tries++; + schedule.setOptimizerAttemptsToSchedule(tries); + updateScheduleStatus(schedule); + // Getting invalid response from optimizer. + // May be data related. + Observation.report(LogMessages.OPTIMIZER_EXCEPTION, e, e.getMessage()); + } catch (ProcessingException e) { + // Don't track number of retries on IO error (optimizer is down) + schedule.setOptimizerDateTimeMillis(System.currentTimeMillis()); + schedule.setStatus(CMSStatusEnum.PendingSchedule.toString()); + updateScheduleStatus(schedule); + /// Cannot connect to optimizer + Observation.report(LogMessages.OPTIMIZER_EXCEPTION, e, e.getMessage()); + // Wait until next cycle + } + } catch (Exception e) { + Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage()); + } + + } + + /** + * Poll the optimizer. + * + * @param schedule - schedule + */ + public void pollOptimizer(Schedule schedule) { + try { + String optimizerurl = env.getProperty("cmso.optimizer.status.url"); + String username = env.getProperty("mechid.user"); + String password = pm.getProperty("mechid.pass", ""); + Long timeout = env.getProperty("cmso.optimizer.request.timeout.secs", Long.class); + if (timeout == null) { + timeout = 3600L; + } + if (!optimizerurl.endsWith("/")) { + optimizerurl += "/"; + } + Long now = System.currentTimeMillis(); + if (now > schedule.getOptimizerDateTimeMillis() + (timeout * 1000)) { + schedule.setStatus(CMSStatusEnum.ScheduleFailed.toString()); + updateScheduleStatus(schedule); + return; + } + + optimizerurl += schedule.getOptimizerTransactionId(); + // This service will call optimizer for each PendingSchedule + // If the request is successfully scheduled in optimizer, status will be + // updated to OptimizationInProgress. + Client client = ClientBuilder.newClient(); + client.register(new BasicAuthenticatorFilter(username, password)); + client.register(new CmsoClientFilters()); + WebTarget optimizerTarget = client.target(optimizerurl); + Invocation.Builder invocationBuilder = optimizerTarget.request(MediaType.APPLICATION_JSON); + debug.debug("optimizer url / user: " + optimizerurl + " / " + username); + Observation.report(LogMessages.OPTIMIZER_REQUEST, "Begin", schedule.getScheduleId(), optimizerurl); + Response response = invocationBuilder.get(); + Observation.report(LogMessages.OPTIMIZER_REQUEST, "End", schedule.getScheduleId(), optimizerurl); + switch (response.getStatus()) { + case 200: + + String optimizerResponseString = response.readEntity(String.class); + ObjectMapper om = new ObjectMapper(); + OptimizerResponse optimizerResponse = + om.readValue(optimizerResponseString, OptimizerResponse.class); + debug.debug("Successfully retrieved optimization: " + schedule.getScheduleId()); + optimizerHandler.handleOptimizerResponse(optimizerResponse, schedule); + break; + default: // Bad request + { + schedule.setOptimizerDateTimeMillis(System.currentTimeMillis()); + schedule.setOptimizerStatus("HTTP Status: " + response.getStatus()); + String message = response.readEntity(String.class); + schedule.setOptimizerMessage(message); + schedule.setStatus(CMSStatusEnum.ScheduleFailed.toString()); + updateScheduleStatus(schedule); + Observation.report(LogMessages.OPTIMIZER_EXCEPTION, message); + } + } + } catch (Exception e) { + Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage()); + schedule.setOptimizerDateTimeMillis(System.currentTimeMillis()); + schedule.setOptimizerMessage(e.getMessage()); + schedule.setStatus(CMSStatusEnum.ScheduleFailed.toString()); + updateScheduleStatus(schedule); + } + } + + private OptimizerRequest buildRequestMessage(Schedule schedule) { + String request = schedule.getScheduleInfo(); + ObjectMapper om = new ObjectMapper(); + try { + SchedulingData info = om.readValue(request, SchedulingData.class); + OptimizerRequest orequest = new OptimizerRequest(); + orequest.setChangeWindows(info.getChangeWindows()); + orequest.setPolicies(info.getPolicies()); + orequest.setRequestId(schedule.getScheduleId()); + orequest.setCommonData(marshallCommonData(schedule)); + orequest.setElements(info.getElements()); + orequest.setAdditionalDuration(info.getAdditionalDurationInSeconds()); + orequest.setNormalDuration(info.getNormalDurationInSeconds()); + orequest.setConcurrencyLimit(info.getConcurrencyLimit()); + return orequest; + } catch (Exception e) { + // Parsing should work here because this was a toString on the original object. + // We may have an issue when upgrading.... + // Perhaps We create ChangeManagementSchedulingInfoV1, ...V2, etc. + // ANd try them one after another.... + Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, "Unable to parse message. Format changed?"); + schedule.setOptimizerStatus("Failed to parse optimizer request"); + schedule.setOptimizerDateTimeMillis(System.currentTimeMillis()); + schedule.setStatus(CMSStatusEnum.OptimizationFailed.toString()); + scheduleDAO.save(schedule); + } + return null; + } + + private List<NameValue> marshallCommonData(Schedule schedule) { + List<NameValue> nvList = new ArrayList<>(); + List<DomainData> ddList = schedule.getDomainData(); + for (DomainData dd : ddList) { + NameValue nv = new NameValue(); + nv.setName(dd.getName()); + // TODO: handle other than String values + nv.setValue(dd.getValue()); + nvList.add(nv); + } + return nvList; + } + + /** + * Update schedule status. + * + * @param schedule the schedule + */ + @Transactional + public void updateScheduleStatus(Schedule schedule) { + scheduleDAO.save(schedule); + } + + /** + * Health check. + * @return + */ + public HealthCheckComponent healthCheck() { + Map<String, String> mdcSave = Mdc.save(); + HealthCheckComponent hcc = new HealthCheckComponent(); + hcc.setName("OPtimizer Interface"); + String optimizerurl = env.getProperty("cmso.optimizer.health.url"); + String username = env.getProperty("mechid.user"); + String password = pm.getProperty("mechid.pass", ""); + hcc.setUrl(optimizerurl); + try { + Client client = ClientBuilder.newClient(); + client.register(new BasicAuthenticatorFilter(username, password)); + client.register(new CmsoClientFilters()); + + WebTarget optimizerTarget = client.target(optimizerurl); + Invocation.Builder invocationBuilder = optimizerTarget.request(MediaType.APPLICATION_JSON); + debug.debug("Optimizer url / user: " + optimizerurl + " / " + username); + Response response = invocationBuilder.get(); + Observation.report(LogMessages.OPTIMIZER_REQUEST, "End", "healthcheck", optimizerurl); + String message = response.getStatus() + ":" + response.readEntity(String.class); + switch (response.getStatus()) { + case 200: + debug.debug("Successful optimizer healthcheck"); + hcc.setHealthy(true); + break; + case 400: + default: + hcc.setStatus(message); + break; + } + } catch (Exception e) { + Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e.toString()); + hcc.setStatus(e.toString()); + } finally { + Mdc.restore(mdcSave); + } + return hcc; + } +} diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/optimizer/CmsoOptimizerHandler.java b/cmso-service/src/main/java/org/onap/optf/cmso/optimizer/CmsoOptimizerHandler.java new file mode 100644 index 0000000..ea78df1 --- /dev/null +++ b/cmso-service/src/main/java/org/onap/optf/cmso/optimizer/CmsoOptimizerHandler.java @@ -0,0 +1,262 @@ +/******************************************************************************* + * Copyright © 2019 AT&T Intellectual Property. + * + * 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.optimizer; + +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import javax.ws.rs.core.Response.Status; +import org.onap.observations.Observation; +import org.onap.optf.cmso.common.CMSStatusEnum; +import org.onap.optf.cmso.common.LogMessages; +import org.onap.optf.cmso.common.exceptions.CMSException; +import org.onap.optf.cmso.model.ChangeManagementGroup; +import org.onap.optf.cmso.model.ChangeManagementSchedule; +import org.onap.optf.cmso.model.Schedule; +import org.onap.optf.cmso.model.dao.ChangeManagementChangeWindowDAO; +import org.onap.optf.cmso.model.dao.ChangeManagementDetailDAO; +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.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.UnScheduledElement; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.env.Environment; +import org.springframework.stereotype.Component; + +/** + * The Class CmsoOptimizerHandler. + */ +@Component +public class CmsoOptimizerHandler { + private static EELFLogger debug = EELFManager.getInstance().getDebugLogger(); + + @Autowired + Environment env; + + @Autowired + ChangeManagementScheduleDAO cmScheduleDAO; + + @Autowired + ScheduleDAO scheduleDAO; + + @Autowired + ChangeManagementGroupDAO cmGroupDAO; + + @Autowired + ChangeManagementChangeWindowDAO cmChangeWindowDAO; + + @Autowired + ChangeManagementDetailDAO cmDetailsDAO; + + /** + * Handle optimizer response. + * + * @param response the response + * @param schedule the schedule + */ + public void handleOptimizerResponse(OptimizerResponse response, Schedule schedule) { + try { + // Note that transaction ID and schedule ID are currently the same value. + + String id = response.getRequestId(); + CMSStatusEnum status = CMSStatusEnum.PendingApproval.fromString(schedule.getStatus()); + debug.debug("Status at time of optimizer status is " + status.toString() + " for " + id); + switch (status) { + // PendingSchedule may be a valid status in the cases where SNIRO async call + // returns before + // We have committed the OptimizationInProgress status + // The dispatch logic ensures that we only every dispatch once. + case OptimizationInProgress: + processResponse(response, schedule); + scheduleDAO.save(schedule); + break; + default: + throw new CMSException(Status.PRECONDITION_FAILED, LogMessages.OPTIMIZER_CALLBACK_STATE_ERROR, + CMSStatusEnum.OptimizationInProgress.toString(), schedule.getStatus().toString()); + } + } catch (Exception e) { + Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage()); + } + } + + private void processResponse(OptimizerResponse response, Schedule schedule) { + try { + schedule.setOptimizerReturnDateTimeMillis(System.currentTimeMillis()); + schedule.setOptimizerStatus(response.getStatus().toString()); + schedule.setOptimizerMessage(response.getErrorMessage()); + switch (response.getStatus()) { + case COMPLETED: + saveSchedules(response, schedule); + break; + case FAILED: + schedule.setStatus(CMSStatusEnum.OptimizationFailed.toString()); + break; + case PENDING_OPTIMIZER: + case PENDING_TICKETS: + case PENDING_TOPOLOGY: + // Leave status as In progress + break; + default: + break; + } + scheduleDAO.save(schedule); + } catch (CMSException e) { + Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage()); + schedule.setStatus(CMSStatusEnum.OptimizationFailed.toString()); + schedule.setOptimizerStatus(e.getStatus().toString()); + schedule.setOptimizerMessage(e.getLocalizedMessage()); + } catch (Exception e) { + Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage()); + schedule.setStatus(CMSStatusEnum.OptimizationFailed.toString()); + schedule.setOptimizerStatus("Exception"); + schedule.setOptimizerMessage(e.getLocalizedMessage()); + } + } + + private void saveSchedules(OptimizerResponse response, Schedule schedule) throws CMSException { + + // TODO: Persist the list of schedules in the DB + + // For Dublin we choose the best schedule. + // and only request Accept on that one. + // FOr the future, the user will get to choose one of the persisted schedules + List<OptimizerScheduleInfo> schedules = response.getSchedules(); + + OptimizerScheduleInfo osi = chooseSchedule(schedules); + if (osi == null) { + schedule.setStatus(CMSStatusEnum.OptimizationFailed.toString()); + schedule.setOptimizerMessage("No schedules returned for COMPLETED status"); + return; + } + if (osi.getScheduledElements().size() == 0) { + schedule.setStatus(CMSStatusEnum.OptimizationFailed.toString()); + schedule.setOptimizerMessage("No elements scheduled for COMPLETED status"); + return; + } + + List<ChangeManagementGroup> groups = cmGroupDAO.findBySchedulesID(schedule.getUuid()); + Map<String, ChangeManagementGroup> updatedGroups = new HashMap<>(); + + for (ScheduledElement element : osi.getScheduledElements()) { + updateGroup(element, groups, updatedGroups); + String groupId = element.getGroupId(); + String vnfName = element.getElementId(); + ChangeManagementSchedule cms = + cmScheduleDAO.findOneByScheduleUUIDGroupIdAndVnfName(schedule.getUuid(), groupId, vnfName); + cms.setStartTimeMillis(element.getStartTime().getTime()); + cms.setFinishTimeMillis(element.getEndTime().getTime()); + cms.setStatus(CMSStatusEnum.PendingApproval.toString()); + cmScheduleDAO.save(cms); + } + if (osi.getUnScheduledElements() != null) { + for (UnScheduledElement element : osi.getUnScheduledElements()) { + String groupId = element.getGroupId(); + String vnfName = element.getElementId(); + ChangeManagementSchedule cms = cmScheduleDAO.findOneByScheduleUUIDGroupIdAndVnfName(schedule.getUuid(), + groupId, vnfName); + cms.setStatus(CMSStatusEnum.NotScheduled.toString()); + cmScheduleDAO.save(cms); + + } + } + + // Save any changes to the groups + for (ChangeManagementGroup cmg : updatedGroups.values()) { + cmGroupDAO.save(cmg); + } + schedule.setStatus(CMSStatusEnum.PendingApproval.toString()); + } + + private void updateGroup(ScheduledElement element, List<ChangeManagementGroup> groups, + Map<String, ChangeManagementGroup> updatedGroups) { + + // For Dublin the contents of CMG are not functional + // since were are doing individual scheduling. + // We log the not found exception, but do not + // throw it at this time. + try { + ChangeManagementGroup cmg = updatedGroups.get(element.getGroupId()); + if (cmg == null) { + for (ChangeManagementGroup group : groups) { + if (group.getGroupId().equals(element.getGroupId())) { + cmg = group; + break; + } + } + } + if (cmg == null) { + throw new CMSException(Status.INTERNAL_SERVER_ERROR, LogMessages.MISSING_VALID_GROUP_FOR_ELEMENT, + element.getElementId()); + } + Long elementStartTime = element.getStartTime().getTime(); + Long elementFinishTime = element.getEndTime().getTime(); + if (cmg.getStartTimeMillis() == null || cmg.getStartTimeMillis() > elementStartTime) { + cmg.setStartTimeMillis(elementStartTime); + updatedGroups.put(cmg.getGroupId(), cmg); + } + if (cmg.getFinishTime() == null || cmg.getFinishTimeMillis() < elementFinishTime) { + cmg.setFinishTimeMillis(elementFinishTime); + updatedGroups.put(cmg.getGroupId(), cmg); + } + if (cmg.getLastInstanceStartTimeMillis() == null + || cmg.getLastInstanceStartTimeMillis() < elementStartTime) { + cmg.setLastInstanceStartTimeMillis(elementStartTime); + updatedGroups.put(cmg.getGroupId(), cmg); + } + } catch (Exception e) { + Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage()); + } + } + + private OptimizerScheduleInfo chooseSchedule(List<OptimizerScheduleInfo> schedules) { + // The most scheduled elements is the priority + // + OptimizerScheduleInfo chosenOne = null; + for (OptimizerScheduleInfo osi : schedules) { + if (chosenOne == null || osi.getScheduledElements().size() > chosenOne.getScheduledElements().size()) { + chosenOne = osi; + } else { + // Same number of scheduled elements. + // What is the policy. + if (betterSchedule(osi, chosenOne)) { + chosenOne = osi; + } + } + } + return chosenOne; + } + + private boolean betterSchedule(OptimizerScheduleInfo osi, OptimizerScheduleInfo chosenOne) { + // TODO Create a more sophisticated choosing process - + return true; + } +} diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/optimizer/OptimizerQuartzJob.java b/cmso-service/src/main/java/org/onap/optf/cmso/optimizer/OptimizerQuartzJob.java index 39d590b..48d6e73 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/optimizer/OptimizerQuartzJob.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/optimizer/OptimizerQuartzJob.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,22 +31,24 @@ package org.onap.optf.cmso.optimizer;
+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.optf.cmso.common.BasicAuthenticatorFilter;
import org.onap.optf.cmso.common.CMSStatusEnum;
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.Schedule;
import org.onap.optf.cmso.model.dao.ScheduleDAO;
import org.quartz.DisallowConcurrentExecution;
@@ -57,8 +59,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment;
import org.springframework.scheduling.quartz.QuartzJobBean;
import org.springframework.stereotype.Component;
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
@Component
@DisallowConcurrentExecution
@@ -88,8 +88,8 @@ public class OptimizerQuartzJob extends QuartzJobBean { // return;
try {
- // This job will look at the schedules waiting to go to SNIRO
- // (PendingSchedule),
+ // This job will look at the schedules waiting to go to Optimizer or waiting on response from optimizer
+ // (PendingSchedule, PendingOptimizer),
// schedule the request and update the status to PendingSchedule
// and update the state to OptimizationInProgress
List<Schedule> schedules = scheduleDAO.findByDomainStatus(DomainsEnum.ChangeManagement.toString(),
@@ -97,6 +97,12 @@ public class OptimizerQuartzJob extends QuartzJobBean { for (Schedule s : schedules) {
scheduleOptimization(s);
}
+ List<Schedule> inProgressSchedules = scheduleDAO.findByDomainStatus(DomainsEnum.ChangeManagement.toString(),
+ CMSStatusEnum.OptimizationInProgress.toString());
+ for (Schedule s : inProgressSchedules)
+ {
+ scheduleOptimization(s);
+ }
} catch (Exception e) {
debug.debug(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage());
@@ -107,7 +113,7 @@ public class OptimizerQuartzJob extends QuartzJobBean { }
public void scheduleOptimization(Schedule s) {
- Integer id = s.getId();
+ UUID id = s.getUuid();
Map<String, String> mdcSave = Mdc.save();
try {
String url = env.getProperty("cmso.dispatch.url", "http://localhost:8089");
@@ -117,7 +123,7 @@ public class OptimizerQuartzJob extends QuartzJobBean { String pass = pm.getProperty("mechid.pass", "");
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;
@@ -146,16 +152,16 @@ public class OptimizerQuartzJob extends QuartzJobBean { * According to the documentation I read, Quartz would queue a job without
* waiting for the completion of the job with @DisallowConcurrentExecution to
* complete so that there would be a backlog of triggers to process
- *
+ *
* This was designed to spin though these stale triggers. When this didn't work,
* I discovered that the behavior is that Quartz will wait for the appropriate
* interval after @DisallowConcurrentExecution jobs complete.
- *
+ *
* I tested by adding a sleep for an interval > the trigger interval
- *
+ *
* QUartz appears to do what makes sense. Leaving this here in case issues
* arise...
- *
+ *
*/
@SuppressWarnings("unused")
private boolean isStale(JobExecutionContext context) {
diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/optimizer/model/OptimizerRequest.java b/cmso-service/src/main/java/org/onap/optf/cmso/optimizer/model/OptimizerRequest.java new file mode 100644 index 0000000..058d8c1 --- /dev/null +++ b/cmso-service/src/main/java/org/onap/optf/cmso/optimizer/model/OptimizerRequest.java @@ -0,0 +1,164 @@ +/* + * 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.optimizer.model; + +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; +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.service.rs.models.v2.NameValue; +import org.onap.optf.cmso.service.rs.models.v2.PolicyInfo; + +@ApiModel(value = "Optimizer Request", + description = "Request to provide an \"conflict free\" schedule for passed elements.") +public class OptimizerRequest implements Serializable { + private static final long serialVersionUID = 1L; + private static EELFLogger log = EELFManager.getInstance().getLogger(OptimizerRequest.class); + + @ApiModelProperty(value = "Unique Id of the request") + private String requestId; + + @ApiModelProperty(value = "Concurrency limit for this request") + private Integer concurrencyLimit; + + @ApiModelProperty(value = "Expected duration of normal change") + private Integer normalDuration; + + @ApiModelProperty(value = "Additional duration for failed change") + private Integer additionalDuration; + + @ApiModelProperty(value = "Implementation specific name value pairs.") + private List<NameValue> commonData; + + @ApiModelProperty(value = "Lists of desired change windows to schedule the elements.") + private List<ChangeWindow> changeWindows = new ArrayList<>(); + + @ApiModelProperty(value = "List of the elements to schedule.") + private List<ElementInfo> elements = new ArrayList<>(); + + @ApiModelProperty(value = "List of the policies to control optimization.") + private List<PolicyInfo> policies = new ArrayList<>(); + + public String getRequestId() { + return requestId; + } + + + public void setRequestId(String requestId) { + this.requestId = requestId; + } + + + public List<PolicyInfo> getPolicies() { + return policies; + } + + + public void setPolicies(List<PolicyInfo> policies) { + this.policies = policies; + } + + + public List<NameValue> getCommonData() { + return commonData; + } + + + public void setCommonData(List<NameValue> commonData) { + this.commonData = commonData; + } + + + public List<ElementInfo> getElements() { + return elements; + } + + + public void setElements(List<ElementInfo> elements) { + this.elements = elements; + } + + + public List<ChangeWindow> getChangeWindows() { + return changeWindows; + } + + + public void setChangeWindows(List<ChangeWindow> changeWindows) { + this.changeWindows = changeWindows; + } + + + public Integer getConcurrencyLimit() { + return concurrencyLimit; + } + + + public void setConcurrencyLimit(Integer concurrencyLimit) { + this.concurrencyLimit = concurrencyLimit; + } + + + public Integer getNormalDuration() { + return normalDuration; + } + + + public void setNormalDuration(Integer normalDuration) { + this.normalDuration = normalDuration; + } + + + public Integer getAdditionalDuration() { + return additionalDuration; + } + + + public void setAdditionalDuration(Integer additionalDuration) { + this.additionalDuration = additionalDuration; + } + + + @Override + public String toString() { + ObjectMapper mapper = new ObjectMapper(); + try { + return mapper.writeValueAsString(this); + } catch (JsonProcessingException e) { + log.debug("Error in toString()", e); + } + return ""; + } + +} diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/optimizer/model/OptimizerResponse.java b/cmso-service/src/main/java/org/onap/optf/cmso/optimizer/model/OptimizerResponse.java new file mode 100644 index 0000000..9971595 --- /dev/null +++ b/cmso-service/src/main/java/org/onap/optf/cmso/optimizer/model/OptimizerResponse.java @@ -0,0 +1,105 @@ +/* + * 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. + */ + +package org.onap.optf.cmso.optimizer.model; + +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +@ApiModel(value = "Optimizer Response", description = "Response to optimizer request for the requested elements.") +public class OptimizerResponse implements Serializable { + private static final long serialVersionUID = 1L; + private static EELFLogger log = EELFManager.getInstance().getLogger(OptimizerResponse.class); + + public enum OptimizeScheduleStatus { + CREATED, PENDING_TOPOLOGY, PENDING_TICKETS, PENDING_OPTIMIZER, COMPLETED, FAILED, DELETED, + } + + @ApiModelProperty(value = "Unique Id of the request") + private String requestId; + + @ApiModelProperty(value = "Status of the optimization") + private OptimizeScheduleStatus status; + + @ApiModelProperty(value = "Message for failed optimization") + private String errorMessage; + + + @ApiModelProperty(value = "List of schedules returned by the optimizer.") + private List<OptimizerScheduleInfo> schedules = new ArrayList<>(); + + public String getRequestId() { + return requestId; + } + + public void setRequestId(String requestId) { + this.requestId = requestId; + } + + + public List<OptimizerScheduleInfo> getSchedules() { + return schedules; + } + + public void setSchedules(List<OptimizerScheduleInfo> schedules) { + this.schedules = schedules; + } + + public OptimizeScheduleStatus getStatus() { + return status; + } + + public void setStatus(OptimizeScheduleStatus status) { + this.status = status; + } + + public String getErrorMessage() { + return errorMessage; + } + + public void setErrorMessage(String errorMessage) { + this.errorMessage = errorMessage; + } + + @Override + public String toString() { + ObjectMapper mapper = new ObjectMapper(); + try { + return mapper.writeValueAsString(this); + } catch (JsonProcessingException e) { + log.debug("Error in toString()", e); + } + return ""; + } + +} diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/optimizer/model/OptimizerScheduleInfo.java b/cmso-service/src/main/java/org/onap/optf/cmso/optimizer/model/OptimizerScheduleInfo.java new file mode 100644 index 0000000..92ce981 --- /dev/null +++ b/cmso-service/src/main/java/org/onap/optf/cmso/optimizer/model/OptimizerScheduleInfo.java @@ -0,0 +1,82 @@ +/******************************************************************************* + * + * Copyright © 2019 AT&T Intellectual Property. + * + * 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.optimizer.model; + +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +@ApiModel(value = "Optimizer Schedule Info", description = "Schedule Information returned from optimizer request.") +public class OptimizerScheduleInfo implements Serializable { + private static final long serialVersionUID = 1L; + private static EELFLogger log = EELFManager.getInstance().getLogger(OptimizerScheduleInfo.class); + + @ApiModelProperty(value = "Lists of elements with start times.") + private List<ScheduledElement> scheduledElements = new ArrayList<>(); + + @ApiModelProperty(value = "Lists of elements that were not able to be scheduled.") + private List<UnScheduledElement> unScheduledElements = new ArrayList<>(); + + + public List<ScheduledElement> getScheduledElements() { + return scheduledElements; + } + + + public void setScheduledElements(List<ScheduledElement> scheduledElements) { + this.scheduledElements = scheduledElements; + } + + + public List<UnScheduledElement> getUnScheduledElements() { + return unScheduledElements; + } + + + public void setUnScheduledElements(List<UnScheduledElement> unScheduledElements) { + this.unScheduledElements = unScheduledElements; + } + + + @Override + public String toString() { + ObjectMapper mapper = new ObjectMapper(); + try { + return mapper.writeValueAsString(this); + } catch (JsonProcessingException e) { + log.debug("Error in toString()", e); + } + return ""; + } +} diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/optimizer/model/ScheduledElement.java b/cmso-service/src/main/java/org/onap/optf/cmso/optimizer/model/ScheduledElement.java new file mode 100644 index 0000000..db92863 --- /dev/null +++ b/cmso-service/src/main/java/org/onap/optf/cmso/optimizer/model/ScheduledElement.java @@ -0,0 +1,127 @@ +/******************************************************************************* + * + * Copyright © 2019 AT&T Intellectual Property. + * + * 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.optimizer.model; + +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.util.Date; +import org.springframework.format.annotation.DateTimeFormat; + +@ApiModel(value = "Scheduled Element", description = "Scheduled element returned by the optimizer.") +public class ScheduledElement implements Serializable { + private static final long serialVersionUID = 1L; + private static EELFLogger log = EELFManager.getInstance().getLogger(ScheduledElement.class); + + public enum ScheduleType { + UNKNOWN, GROUP_DISPATCH, INDIVIDUAL, + } + + @ApiModelProperty(value = "Element identifier") + private String elementId; + + @ApiModelProperty(value = "Group identifier") + private String groupId; + + private ScheduleType scheduleType = ScheduleType.UNKNOWN; + + @ApiModelProperty(value = "Earliest time for which changes may begin.") + @DateTimeFormat(pattern = "yyyy-MM-dd'T'hh:mm:ss'Z'") + private Date startTime; + + @ApiModelProperty(value = "Latest time by which all changes must be completed.") + @DateTimeFormat(pattern = "yyyy-MM-dd'T'hh:mm:ss'Z'") + private Date endTime; + + @ApiModelProperty(value = "Expected duration of change in seconds.") + private Long durationSeconds; + + public String getElementId() { + return elementId; + } + + public void setElementId(String elementId) { + this.elementId = elementId; + } + + + public String getGroupId() { + return groupId; + } + + public void setGroupId(String groupId) { + this.groupId = groupId; + } + + public ScheduleType getScheduleType() { + return scheduleType; + } + + public void setScheduleType(ScheduleType scheduleType) { + this.scheduleType = scheduleType; + } + + public Date getStartTime() { + return startTime; + } + + public void setStartTime(Date startTime) { + this.startTime = startTime; + } + + public Date getEndTime() { + return endTime; + } + + public void setEndTime(Date endTime) { + this.endTime = endTime; + } + + public Long getDurationSeconds() { + return durationSeconds; + } + + public void setDurationSeconds(Long durationSeconds) { + this.durationSeconds = durationSeconds; + } + + @Override + public String toString() { + ObjectMapper mapper = new ObjectMapper(); + try { + return mapper.writeValueAsString(this); + } catch (JsonProcessingException e) { + log.debug("Error in toString()", e); + } + return ""; + } +} diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/optimizer/model/UnScheduledElement.java b/cmso-service/src/main/java/org/onap/optf/cmso/optimizer/model/UnScheduledElement.java new file mode 100644 index 0000000..be6e89d --- /dev/null +++ b/cmso-service/src/main/java/org/onap/optf/cmso/optimizer/model/UnScheduledElement.java @@ -0,0 +1,103 @@ +/******************************************************************************* + * + * Copyright © 2019 AT&T Intellectual Property. + * + * 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.optimizer.model; + +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +@ApiModel(value = "Unscheduled Element", description = "Scheduled element returned by the optimizer.") +public class UnScheduledElement implements Serializable { + private static final long serialVersionUID = 1L; + private static EELFLogger log = EELFManager.getInstance().getLogger(UnScheduledElement.class); + + public enum NotScheduledReason { + ConcurrencyConstraint, AvailabilityConstraint, Other, + } + + @ApiModelProperty(value = "Element identifier") + private String elementId; + + @ApiModelProperty(value = "Group identifier") + private String groupId; + + @ApiModelProperty(value = "List of reasons not able to schedule this element.") + private List<NotScheduledReason> notScheduledReaons = new ArrayList<>(); + + @ApiModelProperty(value = "List of messages not able to schedule this element.") + private List<String> notScheduledMessages = new ArrayList<>(); + + public String getElementId() { + return elementId; + } + + public void setElementId(String elementId) { + this.elementId = elementId; + } + + public List<NotScheduledReason> getNotScheduledReaons() { + return notScheduledReaons; + } + + public void setNotScheduledReaons(List<NotScheduledReason> notScheduledReaons) { + this.notScheduledReaons = notScheduledReaons; + } + + public List<String> getNotScheduledMessages() { + return notScheduledMessages; + } + + public void setNotScheduledMessages(List<String> notScheduledMessages) { + this.notScheduledMessages = notScheduledMessages; + } + + public String getGroupId() { + return groupId; + } + + public void setGroupId(String groupId) { + this.groupId = groupId; + } + + @Override + public String toString() { + ObjectMapper mapper = new ObjectMapper(); + try { + return mapper.writeValueAsString(this); + } catch (JsonProcessingException e) { + log.debug("Error in toString()", e); + } + return ""; + } +} diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/AdminTool.java b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/AdminTool.java index 10eedf8..6be8159 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/AdminTool.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/AdminTool.java @@ -31,6 +31,11 @@ package org.onap.optf.cmso.service.rs;
+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.DefaultValue;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
@@ -39,12 +44,6 @@ import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
-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("CMSO Administration")
@Path("/{apiVersion}")
@Produces({MediaType.APPLICATION_JSON})
diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/AdminToolImpl.java b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/AdminToolImpl.java index 8ec4f4f..fa182b4 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/AdminToolImpl.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/AdminToolImpl.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,28 +31,26 @@ package org.onap.optf.cmso.service.rs;
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;
-
import org.onap.optf.cmso.common.PropertiesManagement;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-
@Controller
public class AdminToolImpl implements AdminTool {
private static EELFLogger log = EELFManager.getInstance().getLogger(AdminToolImpl.class);
- @Context
+ @Context
UriInfo uri;
-
+
@Context
HttpServletRequest request;
-
+
@Autowired
PropertiesManagement pm;
@@ -60,8 +58,9 @@ public class AdminToolImpl implements AdminTool { @Override
public Response exec(String apiVersion, String id) {
log.info("AdminTool.exec entered");
- if (id.length() < 4)
+ if (id.length() < 4) {
return Response.ok("").build();
+ }
String encrypted = PropertiesManagement.getEncryptedValue(id);
Response response = Response.ok(encrypted).build();
return response;
diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/BaseSchedulerServiceImpl.java b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/BaseSchedulerServiceImpl.java index 2e0cfeb..18678ff 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/BaseSchedulerServiceImpl.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/BaseSchedulerServiceImpl.java @@ -1,40 +1,38 @@ /*
- * 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.service.rs;
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.UUID;
import javax.ws.rs.core.Response.Status;
import org.onap.optf.cmso.common.ApprovalStatusEnum;
import org.onap.optf.cmso.common.CMSStatusEnum;
@@ -51,11 +49,9 @@ import org.onap.optf.cmso.model.dao.DomainDataDAO; import org.onap.optf.cmso.model.dao.ScheduleApprovalDAO;
import org.onap.optf.cmso.model.dao.ScheduleDAO;
import org.onap.optf.cmso.service.rs.models.ApprovalMessage;
-import org.onap.optf.cmso.service.rs.models.ScheduleMessage;
+import org.onap.optf.cmso.service.rs.models.v2.OptimizedScheduleMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
@Controller
public class BaseSchedulerServiceImpl {
@@ -73,37 +69,39 @@ public class BaseSchedulerServiceImpl { @Autowired
ScheduleApprovalDAO scheduleApprovalDAO;
- protected Schedule validateAndAddScheduleRequest(ScheduleMessage scheduleMessage, List<DomainData> domainData)
- throws CMSException {
+ protected Schedule validateAndAddScheduleRequest(OptimizedScheduleMessage scheduleMessage,
+ List<DomainData> domainData) throws CMSException {
messageValidations(scheduleMessage);
- Schedule s = scheduleDAO.findByDomainScheduleID(scheduleMessage.getDomain(), scheduleMessage.getScheduleId());
+ Schedule sch = scheduleDAO.findByDomainScheduleID(scheduleMessage.getDomain(), scheduleMessage.getScheduleId());
- if (s != null) {
+ if (sch != null) {
throw new CMSAlreadyExistsException(scheduleMessage.getDomain(), scheduleMessage.getScheduleId());
}
- s = new Schedule();
- s.setUserId(scheduleMessage.getUserId());
- s.setCreateDateTimeMillis(System.currentTimeMillis());
- s.setDomain(scheduleMessage.getDomain());
- s.setScheduleId(scheduleMessage.getScheduleId());
- s.setOptimizerTransactionId(s.getScheduleId()); // No reason these cannot be the same as
- // these
- // are 1<=>1 at this
- // point.
- s.setScheduleName(scheduleMessage.getScheduleName());
- s.setOptimizerAttemptsToSchedule(0);
- s.setScheduleInfo(scheduleMessage.getSchedulingInfo().toString());
- s.setStatus(CMSStatusEnum.PendingSchedule.toString());
- scheduleDAO.save(s);
+ sch = new Schedule();
+ sch.setUuid(UUID.randomUUID());
+ sch.setUserId(scheduleMessage.getUserId());
+ sch.setCreateDateTimeMillis(System.currentTimeMillis());
+ sch.setDomain(scheduleMessage.getDomain());
+ sch.setScheduleId(scheduleMessage.getScheduleId());
+ sch.setOptimizerTransactionId(sch.getScheduleId()); // No reason these cannot be the same as
+ // these
+ // are 1<=>1 at this
+ // point.
+ sch.setScheduleName(scheduleMessage.getScheduleName());
+ sch.setOptimizerAttemptsToSchedule(0);
+ sch.setScheduleInfo(scheduleMessage.getSchedulingData().toString());
+ sch.setStatus(CMSStatusEnum.PendingSchedule.toString());
+ scheduleDAO.save(sch);
for (DomainData dd : domainData) {
- s.addDomainData(dd);
+ dd.setUuid(UUID.randomUUID());
+ sch.addDomainData(dd);
domainDataDAO.save(dd);
}
- scheduleDAO.save(s);
- return s;
+ scheduleDAO.save(sch);
+ return sch;
}
- private void messageValidations(ScheduleMessage scheduleMessage) throws CMSException {
+ private void messageValidations(OptimizedScheduleMessage scheduleMessage) throws CMSException {
if (scheduleMessage.getScheduleName() == null || scheduleMessage.getScheduleName().equals("")) {
throw new CMSException(Status.BAD_REQUEST, LogMessages.MISSING_REQUIRED_ATTRIBUTE, "schedulerName", "");
}
@@ -113,86 +111,89 @@ public class BaseSchedulerServiceImpl { }
protected void deleteScheduleRequest(String domain, String scheduleId) throws CMSException {
- Schedule s = scheduleDAO.findByDomainScheduleID(domain, scheduleId);
- if (s == null) {
+ Schedule sch = scheduleDAO.findByDomainScheduleID(domain, scheduleId);
+ if (sch == null) {
throw new CMSNotFoundException(domain, scheduleId);
}
- CMSStatusEnum currentStatus = CMSStatusEnum.Completed.fromString(s.getStatus());
- s.setDeleteDateTimeMillis(System.currentTimeMillis());
+ CMSStatusEnum currentStatus = CMSStatusEnum.Completed.fromString(sch.getStatus());
+ sch.setDeleteDateTimeMillis(System.currentTimeMillis());
switch (currentStatus) {
case Scheduled:
// TODO CLose all tickets....
- s.setStatus(CMSStatusEnum.Cancelled.toString());
+ sch.setStatus(CMSStatusEnum.Cancelled.toString());
break;
case NotificationsInitiated:
throw new CMSException(Status.NOT_ACCEPTABLE, LogMessages.CANNOT_CANCEL_IN_PROGRESS);
default:
- s.setStatus(CMSStatusEnum.Deleted.toString());
+ sch.setStatus(CMSStatusEnum.Deleted.toString());
}
- scheduleDAO.save(s);
+ scheduleDAO.save(sch);
}
- protected Schedule processApproval(Schedule s, String domain, ApprovalMessage approvalMessage) throws CMSException {
- String scheduleId = s.getScheduleId();
+ protected Schedule processApproval(Schedule sch, String domain, ApprovalMessage approvalMessage)
+ throws CMSException {
+ String scheduleId = sch.getScheduleId();
ApprovalType approvalType =
- approvalTypeDAO.findByDomainAndType(domain, approvalMessage.getApprovalType().toString());
+ approvalTypeDAO.findByDomainAndType(domain, approvalMessage.getApprovalType().toString());
if (approvalType == null) {
throw new CMSException(Status.BAD_REQUEST, LogMessages.INVALID_ATTRIBUTE, "approvalType",
- approvalMessage.getApprovalType().toString());
+ approvalMessage.getApprovalType().toString());
}
- if (!s.getStatus().equals(CMSStatusEnum.PendingApproval.toString())) {
+ if (!sch.getStatus().equals(CMSStatusEnum.PendingApproval.toString())) {
throw new CMSException(Status.PRECONDITION_FAILED, LogMessages.NOT_PENDING_APPROVAL, domain, scheduleId,
- s.getStatus());
+ sch.getStatus());
}
if (approvalMessage.getApprovalUserId() == null || approvalMessage.getApprovalUserId().equals("")) {
throw new CMSException(Status.BAD_REQUEST, LogMessages.MISSING_REQUIRED_ATTRIBUTE, "userId");
}
ScheduleApproval sa = null;
// only 1 approval per user....
- if (s.getScheduleApprovals() != null) {
- for (ScheduleApproval scheduleApproval : s.getScheduleApprovals()) {
+ if (sch.getScheduleApprovals() != null) {
+ for (ScheduleApproval scheduleApproval : sch.getScheduleApprovals()) {
if (scheduleApproval.getUserId().equals(approvalMessage.getApprovalUserId())
- && scheduleApproval.getApprovalTypeId().equals(approvalType.getId())) {
+ && scheduleApproval.getApprovalTypesUuid().equals(approvalType.getUuid())) {
sa = scheduleApproval;
}
}
}
if (sa == null) {
sa = new ScheduleApproval();
- sa.setSchedule(s);
- sa.setApprovalTypeId(approvalType.getId());
+ sa.setUuid(UUID.randomUUID());
+ sa.setSchedule(sch);
+ sa.setApprovalTypesUuid(approvalType.getUuid());
sa.setUserId(approvalMessage.getApprovalUserId());
}
// Ignore what time is on the message
sa.setApprovalDateTimeMillis(System.currentTimeMillis());
sa.setStatus(approvalMessage.getApprovalStatus().toString());
- sa.setSchedule(s);
- s.addScheduleApproval(sa);
- scheduleDAO.save(s);
+ sa.setSchedule(sch);
+ sch.addScheduleApproval(sa);
+ scheduleDAO.save(sch);
if (sa.getStatus().equals(ApprovalStatusEnum.Rejected.toString())) {
- s.setStatus(CMSStatusEnum.Rejected.toString());
+ sch.setStatus(CMSStatusEnum.Rejected.toString());
} else {
- if (allApprovalsReceived(s, sa))
- s.setStatus(CMSStatusEnum.Accepted.toString());
+ if (allApprovalsReceived(sch, sa)) {
+ sch.setStatus(CMSStatusEnum.Accepted.toString());
+ }
}
- scheduleDAO.save(s);
- return s;
+ scheduleDAO.save(sch);
+ return sch;
}
private boolean allApprovalsReceived(Schedule schedule, ScheduleApproval sa) {
- Map<Integer, Integer> requiredApprovalsByType = new HashMap<Integer, Integer>(); // Approval
- // countdown
- Map<Integer, ApprovalType> approvalsByType = new HashMap<Integer, ApprovalType>(); // Just
- // for
- // logging
+ Map<UUID, Integer> requiredApprovalsByType = new HashMap<>(); // Approval
+ // countdown
+ Map<UUID, ApprovalType> approvalsByType = new HashMap<>(); // Just
+ // for
+ // logging
List<ApprovalType> approvalTypes = approvalTypeDAO.findByDomain(schedule.getDomain());
for (ApprovalType at : approvalTypes) {
- Integer type = at.getId();
+ UUID type = at.getUuid();
Integer count = at.getApprovalCount();
requiredApprovalsByType.put(type, count);
- approvalsByType.put(at.getId(), at);
+ approvalsByType.put(at.getUuid(), at);
}
// Account for approvals so far
@@ -205,17 +206,17 @@ public class BaseSchedulerServiceImpl { }
for (ScheduleApproval approval : existingApprovals) {
if (approval.getStatus().equals(ApprovalStatusEnum.Accepted.toString())) {
- Integer remaining = requiredApprovalsByType.get(approval.getApprovalTypeId());
+ Integer remaining = requiredApprovalsByType.get(approval.getApprovalTypesUuid());
if (remaining != null) {
remaining = remaining - 1;
- requiredApprovalsByType.put(approval.getApprovalTypeId(), remaining);
+ requiredApprovalsByType.put(approval.getApprovalTypesUuid(), remaining);
} else {
- log.warn("Ignored Unidentified approval type {0} for domain {1}", approval.getApprovalTypeId(),
- schedule.getDomain());
+ log.warn("Ignored Unidentified approval type {0} for domain {1}", approval.getApprovalTypesUuid(),
+ schedule.getDomain());
}
}
}
- for (Integer id : requiredApprovalsByType.keySet()) {
+ for (UUID id : requiredApprovalsByType.keySet()) {
Integer remaining = requiredApprovalsByType.get(id);
if (remaining > 0) {
return false;
@@ -223,5 +224,4 @@ public class BaseSchedulerServiceImpl { }
return true;
}
-
}
diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/CMSOServiceImpl.java b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/CMSOServiceImpl.java deleted file mode 100644 index d65dd25..0000000 --- a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/CMSOServiceImpl.java +++ /dev/null @@ -1,674 +0,0 @@ -/*
- * 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.service.rs;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TimeZone;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.ws.rs.core.MultivaluedMap;
-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.onap.observations.Observation;
-import org.onap.optf.cmso.common.ApprovalStatusEnum;
-import org.onap.optf.cmso.common.ApprovalTypesEnum;
-import org.onap.optf.cmso.common.CMSStatusEnum;
-import org.onap.optf.cmso.common.DomainsEnum;
-import org.onap.optf.cmso.common.LogMessages;
-import org.onap.optf.cmso.common.exceptions.CMSException;
-import org.onap.optf.cmso.common.exceptions.CMSNotFoundException;
-import org.onap.optf.cmso.eventq.CMSQueueJob;
-import org.onap.optf.cmso.model.ChangeManagementChangeWindow;
-import org.onap.optf.cmso.model.ChangeManagementDetail;
-import org.onap.optf.cmso.model.ChangeManagementGroup;
-import org.onap.optf.cmso.model.ChangeManagementSchedule;
-import org.onap.optf.cmso.model.DomainData;
-import org.onap.optf.cmso.model.Schedule;
-import org.onap.optf.cmso.model.ScheduleQuery;
-import org.onap.optf.cmso.model.dao.ChangeManagementChangeWindowDAO;
-import org.onap.optf.cmso.model.dao.ChangeManagementDetailDAO;
-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.model.dao.ScheduleQueryDAO;
-import org.onap.optf.cmso.service.rs.models.ApprovalMessage;
-import org.onap.optf.cmso.service.rs.models.CMSInfo;
-import org.onap.optf.cmso.service.rs.models.CMSMessage;
-import org.onap.optf.cmso.service.rs.models.ChangeWindowMessage;
-import org.onap.optf.cmso.service.rs.models.CmDetailsMessage;
-import org.onap.optf.cmso.service.rs.models.CmDomainDataEnum;
-import org.onap.optf.cmso.service.rs.models.VnfDetailsMessage;
-import org.onap.optf.cmso.ticketmgt.TmClient;
-import org.onap.optf.cmso.ticketmgt.bean.BuildCreateRequest;
-import org.onap.optf.cmso.ticketmgt.bean.TmApprovalStatusEnum;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.core.env.Environment;
-import org.springframework.stereotype.Controller;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.transaction.interceptor.TransactionAspectSupport;
-
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-
-@Controller
-public class CMSOServiceImpl extends BaseSchedulerServiceImpl implements CMSOService {
- private static EELFLogger debug = EELFManager.getInstance().getDebugLogger();
-
- @Autowired
- CMSQueueJob qJob;
-
- @Autowired
- Environment env;
-
- @Autowired
- ChangeManagementScheduleDAO cmScheduleDAO;
-
- @Autowired
- ChangeManagementGroupDAO cmGroupDAO;
-
- @Autowired
- ChangeManagementChangeWindowDAO cmChangeWindowDAO;
-
- @Autowired
- ChangeManagementDetailDAO cmDetailsDAO;
-
- @Autowired
- ScheduleQueryDAO scheduleQueryDAO;
-
- @Autowired
- ScheduleDAO scheduleDAO;
-
- @Autowired
- TmClient tmClient;
-
- @Autowired
- BuildCreateRequest buildCreateRequest;
-
- @Override
- public Response searchScheduleRequests(String apiVersion, Boolean includeDetails, String scheduleId,
- String scheduleName, String userId, String status, String createDateTime, String optimizerStatus,
- String workflowName, UriInfo uri, HttpServletRequest request) {
-
- Observation.report(LogMessages.SEARCH_SCHEDULE_REQUEST, "Received", request.getRemoteAddr(), uri.toString(), "");
- Response response = null;
- List<Schedule> schedules = new ArrayList<Schedule>();
- try {
- debug.debug("Timezone={}", TimeZone.getDefault());
- StringBuilder where = new StringBuilder();
- int maxRows = 0;
- //MultivaluedMap<String, String> qp = uri.getQueryParameters();
- // buildWhere(qp, where);
- List<ScheduleQuery> list = scheduleQueryDAO.searchSchedules(where.toString(), maxRows);
- if (list == null || !list.iterator().hasNext()) {
- throw new CMSException(Status.NOT_FOUND, LogMessages.SCHEDULE_NOT_FOUND,
- DomainsEnum.ChangeManagement.toString(), scheduleId);
- }
- Iterator<ScheduleQuery> iter = list.iterator();
- while (iter.hasNext()) {
- Schedule s = scheduleDAO.findById(iter.next().getId()).orElse(null);
- if (s != null) {
- schedules.add(s);
- if (includeDetails) {
- List<ChangeManagementGroup> groups = cmGroupDAO.findBySchedulesID(s.getId());
- s.setGroups(groups);
- for (ChangeManagementGroup g : groups) {
- List<ChangeManagementSchedule> cmSchedules =
- cmScheduleDAO.findByChangeManagementGroupId(g.getId());
- g.setChangeManagementSchedules(cmSchedules);
- }
- }
- }
- }
- response = Response.ok(schedules.toArray(new Schedule[schedules.size()])).build();
- } catch (CMSException e) {
- Observation.report(LogMessages.EXPECTED_EXCEPTION, e, e.getMessage());
- response = Response.status(e.getStatus()).entity(e.getRequestError()).build();
- } catch (Exception e) {
- Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage());
- response = Response.serverError().build();
- }
-
- Observation.report(LogMessages.SEARCH_SCHEDULE_REQUEST, "Returned", request.getRemoteAddr(), schedules.toString(),
- response.getStatusInfo().toString());
- return response;
- }
-
- @Override
- @Transactional
- public Response createScheduleRequest(String apiVersion, String scheduleId, CMSMessage scheduleMessage,
- HttpServletRequest request) {
- Observation.report(LogMessages.CREATE_SCHEDULE_REQUEST, "Received", request.getRemoteAddr(), scheduleId,
- scheduleMessage.toString());
- Response response = null;
- try {
- if (!scheduleMessage.getDomain().equals(DomainsEnum.ChangeManagement.toString())) {
- throw new CMSException(Status.BAD_REQUEST, LogMessages.INVALID_ATTRIBUTE, "domain",
- scheduleMessage.getDomain());
- }
- if (scheduleMessage.getScheduleId() == null || !scheduleMessage.getScheduleId().equals(scheduleId)) {
- throw new CMSException(Status.BAD_REQUEST, LogMessages.INVALID_ATTRIBUTE, "schedulerId",
- scheduleMessage.getScheduleId());
- }
- // Force the name to be = to the ID because there is no way fot the provide a
- // name
- scheduleMessage.setScheduleName(scheduleMessage.getScheduleId());
-
- List<DomainData> domainData = validateDomainData(scheduleMessage);
- boolean immediate = validate(scheduleMessage);
- Schedule schedule = validateAndAddScheduleRequest(scheduleMessage, domainData);
- if (immediate) {
- createChangeManagementImmediate(schedule, scheduleMessage);
-
- // Create automatic approval
- ApprovalMessage am = new ApprovalMessage();
- am.setApprovalStatus(ApprovalStatusEnum.Accepted);
- am.setApprovalType(ApprovalTypesEnum.Tier2);
- am.setApprovalUserId(schedule.getUserId());
- processApproveScheduleRequest(schedule, am, domainData);
-
- } else {
- createChangeManagement(schedule, scheduleMessage);
- }
- response = Response.accepted().build();
- } catch (CMSException e) {
- TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
- Observation.report(LogMessages.EXPECTED_EXCEPTION, e, e.getMessage());
- response = Response.status(e.getStatus()).entity(e.getRequestError()).build();
- } catch (Exception e) {
- Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage());
- TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
- response = Response.serverError().build();
- }
- Observation.report(LogMessages.CREATE_SCHEDULE_REQUEST, "Returned", request.getRemoteAddr(), scheduleId,
- response.getStatusInfo().toString());
- return response;
- }
-
- /**
- * Returns whether this is an immediate request
- */
- private boolean validate(CMSMessage scheduleMessage) throws CMSException {
- Set<String> groups = new HashSet<String>();
- CMSInfo info = scheduleMessage.getSchedulingInfo();
- if (info == null) {
- throw new CMSException(Status.BAD_REQUEST, LogMessages.UNABLE_TO_PARSE_SCHEDULING_INFO);
- }
-
- if (scheduleMessage.getSchedulingInfo().getAdditionalDurationInSeconds() == null)
- throw new CMSException(Status.BAD_REQUEST, LogMessages.MISSING_REQUIRED_ATTRIBUTE,
- "additionalDurationInSeconds");
- if (scheduleMessage.getSchedulingInfo().getNormalDurationInSeconds() == null)
- throw new CMSException(Status.BAD_REQUEST, LogMessages.MISSING_REQUIRED_ATTRIBUTE,
- "normalDurationInSeconds");
- if (scheduleMessage.getSchedulingInfo().getAdditionalDurationInSeconds() < 0)
- throw new CMSException(Status.BAD_REQUEST, LogMessages.INVALID_ATTRIBUTE, "additionalDurationInSeconds",
- scheduleMessage.getSchedulingInfo().getAdditionalDurationInSeconds().toString());
- if (scheduleMessage.getSchedulingInfo().getNormalDurationInSeconds() < 1)
- throw new CMSException(Status.BAD_REQUEST, LogMessages.INVALID_ATTRIBUTE, "normalDurationInSeconds",
- scheduleMessage.getSchedulingInfo().getNormalDurationInSeconds().toString());
- try {
- for (VnfDetailsMessage vnfDetail : scheduleMessage.getSchedulingInfo().getVnfDetails()) {
- if (vnfDetail.getChangeWindow() != null && vnfDetail.getChangeWindow().size() > 0) {
- if (vnfDetail.getNode().size() == 0) {
- throw new CMSException(Status.BAD_REQUEST, LogMessages.MISSING_REQUIRED_ATTRIBUTE, "node list");
- }
- for (String node : vnfDetail.getNode()) {
- if (node.equals(""))
- throw new CMSException(Status.BAD_REQUEST, LogMessages.NODE_LIST_CONTAINS_EMTPY_NODE);
- }
- for (ChangeWindowMessage cw : vnfDetail.getChangeWindow()) {
- if (cw.getStartTime() == null || cw.getStartTime().equals(""))
- throw new CMSException(Status.BAD_REQUEST, LogMessages.MISSING_REQUIRED_ATTRIBUTE,
- "startTime");
- if (cw.getEndTime() == null || cw.getEndTime().equals(""))
- throw new CMSException(Status.BAD_REQUEST, LogMessages.MISSING_REQUIRED_ATTRIBUTE,
- "endTime");
- DateTime start = CMSOOptimizerCallbackImpl.convertISODate(cw.getStartTime(), "startTime");
- DateTime end = CMSOOptimizerCallbackImpl.convertISODate(cw.getEndTime(), "endTime");
- if (!end.isAfter(start))
- throw new CMSException(Status.BAD_REQUEST, LogMessages.INVALID_CHANGE_WINDOW,
- cw.getStartTime(), cw.getEndTime());
- }
- if (scheduleMessage.getSchedulingInfo().getConcurrencyLimit() == null)
- throw new CMSException(Status.BAD_REQUEST, LogMessages.MISSING_REQUIRED_ATTRIBUTE,
- "concurrencyLimit");
- if (scheduleMessage.getSchedulingInfo().getConcurrencyLimit() < 1)
- throw new CMSException(Status.BAD_REQUEST, LogMessages.INVALID_ATTRIBUTE, "concurrencyLimit",
- scheduleMessage.getSchedulingInfo().getConcurrencyLimit().toString());
- if (scheduleMessage.getSchedulingInfo().getPolicyId() == null
- || scheduleMessage.getSchedulingInfo().getPolicyId().equals(""))
- throw new CMSException(Status.BAD_REQUEST, LogMessages.MISSING_REQUIRED_ATTRIBUTE, "policyId");
- return false;
- }
- if (vnfDetail.getGroupId() == null || vnfDetail.getGroupId().equals(""))
- groups.add("default");
- else
- groups.add(vnfDetail.getGroupId());
- }
- } catch (CMSException e) {
- throw e;
- } catch (Exception e) {
- Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage());
- throw new CMSException(Status.INTERNAL_SERVER_ERROR, LogMessages.UNEXPECTED_EXCEPTION, e.getMessage());
- }
- // If we got here, there are no change windows....
- if (groups.size() > 1)
- throw new CMSException(Status.BAD_REQUEST, LogMessages.MULTIPLE_GROUPS_NOT_SUPPORTED);
- return true;
-
- }
-
- private void createChangeManagement(Schedule schedule, CMSMessage scheduleMessage) throws CMSException {
- CMSInfo schedulingInfo = scheduleMessage.getSchedulingInfo();
- for (VnfDetailsMessage vnfDetail : schedulingInfo.getVnfDetails()) {
- ChangeManagementGroup cmg = new ChangeManagementGroup();
- cmg.setSchedulesId(schedule.getId());
- cmg.setGroupId("");
- if (vnfDetail.getGroupId() != null)
- cmg.setGroupId(vnfDetail.getGroupId());
- cmg.setPolicyId(schedulingInfo.getPolicyId());
- cmg.setNormalDurationInSecs(schedulingInfo.getNormalDurationInSeconds());
- cmg.setAdditionalDurationInSecs(schedulingInfo.getAdditionalDurationInSeconds());
- cmg.setConcurrencyLimit(schedulingInfo.getConcurrencyLimit());
- cmGroupDAO.save(cmg);
- for (ChangeWindowMessage cw : vnfDetail.getChangeWindow()) {
- ChangeManagementChangeWindow cmcw = new ChangeManagementChangeWindow();
- cmcw.setChangeManagementGroupsId(cmg.getId());
- DateTime start = CMSOOptimizerCallbackImpl.convertISODate(cw.getStartTime(), "startTime");
- DateTime end = CMSOOptimizerCallbackImpl.convertISODate(cw.getEndTime(), "startTime");
- cmcw.setStartTimeMillis(start.getMillis());
- cmcw.setFinishTimeMillis(end.getMillis());
- cmChangeWindowDAO.save(cmcw);
- }
-
- for (String vnf : vnfDetail.getNode()) {
- ChangeManagementSchedule cms = new ChangeManagementSchedule();
- cms.setChangeManagementGroupsId(cmg.getId());
- cms.setVnfName(vnf);
- cms.setStatus(CMSStatusEnum.PendingSchedule.toString());
- cmScheduleDAO.save(cms);
- }
- }
- }
-
- private void createChangeManagementImmediate(Schedule schedule, CMSMessage scheduleMessage) throws CMSException {
- CMSInfo schedulingInfo = scheduleMessage.getSchedulingInfo();
- for (VnfDetailsMessage vnfDetail : schedulingInfo.getVnfDetails()) {
- ChangeManagementGroup cmg = new ChangeManagementGroup();
- cmg.setSchedulesId(schedule.getId());
- cmg.setGroupId("");
- int duration = schedulingInfo.getNormalDurationInSeconds();
- int backout = schedulingInfo.getAdditionalDurationInSeconds();
- cmg.setStartTimeMillis(System.currentTimeMillis());
- cmg.setFinishTimeMillis(System.currentTimeMillis() + ((duration * 1000) + (backout * 1000)));
- cmg.setNormalDurationInSecs(duration);
- cmg.setAdditionalDurationInSecs(backout);
- if (vnfDetail.getGroupId() != null)
- cmg.setGroupId(vnfDetail.getGroupId());
- cmGroupDAO.save(cmg);
- for (String vnf : vnfDetail.getNode()) {
- ChangeManagementSchedule cms = new ChangeManagementSchedule();
- cms.setChangeManagementGroupsId(cmg.getId());
- cms.setVnfName(vnf);
- cms.setStatus(CMSStatusEnum.PendingApproval.toString());
- cmScheduleDAO.save(cms);
- }
- schedule.setStatus(CMSStatusEnum.PendingApproval.toString());
- }
- }
-
- private void deleteChangeManagement(Schedule schedule) throws CMSException {
- List<ChangeManagementGroup> cmgs = cmGroupDAO.findBySchedulesID(schedule.getId());
-
- for (ChangeManagementGroup cmg : cmgs) {
- List<ChangeManagementSchedule> schedules = cmScheduleDAO.findByChangeManagementGroupId(cmg.getId());
- for (ChangeManagementSchedule s : schedules) {
- CMSStatusEnum currentState = CMSStatusEnum.Completed.fromString(s.getStatus());
- switch (currentState) {
- case Scheduled:
- if (s.getTmChangeId() != null && !s.getTmChangeId().equals(""))
- tmClient.cancelTicket(schedule, s, s.getTmChangeId());
- s.setStatus(CMSStatusEnum.Cancelled.toString());
- break;
- case Triggered:
- // Too late...
- break;
- default:
- s.setStatus(CMSStatusEnum.Deleted.toString());
- }
- cmScheduleDAO.save(s);
- }
- }
-
- }
-
- private List<DomainData> validateDomainData(CMSMessage scheduleMessage) throws CMSException {
- List<Map<String, String>> domainData = scheduleMessage.getDomainData();
- List<DomainData> domainDataList = new ArrayList<DomainData>();
- Set<String> requiredFields = new HashSet<String>();
- for (CmDomainDataEnum req : CmDomainDataEnum.values()) {
- if (req.isRequired())
- requiredFields.add(req.name());
- }
- for (Map<String, String> nameValue : domainData) {
- for (String name : nameValue.keySet()) {
- String value = nameValue.get(name);
- // Save for later validation
- DomainData dd = new DomainData();
- dd.setName(name);
- dd.setValue(value);
- domainDataList.add(dd);
- requiredFields.remove(name);
- try {
- CmDomainDataEnum.valueOf(name);
- } catch (Exception e) {
- Observation.report(LogMessages.UNDEFINED_DOMAIN_DATA_ATTRIBUTE, DomainsEnum.ChangeManagement.name(), name,
- value);
- }
- }
- }
- if (requiredFields.size() > 0) {
- throw new CMSException(Status.BAD_REQUEST, LogMessages.MISSING_REQUIRED_ATTRIBUTE,
- requiredFields.toString());
- }
- return domainDataList;
-
- }
-
- @Override
- @Transactional
- public Response deleteScheduleRequest(String apiVersion, String scheduleId, HttpServletRequest request) {
- Response response = null;
- Observation.report(LogMessages.DELETE_SCHEDULE_REQUEST, "Received", request.getRemoteAddr(), scheduleId, "");
- try {
- Schedule schedule = scheduleDAO.findByDomainScheduleID(DomainsEnum.ChangeManagement.toString(), scheduleId);
- if (schedule == null) {
- throw new CMSNotFoundException(DomainsEnum.ChangeManagement.toString(), scheduleId);
- }
- deleteChangeManagement(schedule);
- deleteScheduleRequest(DomainsEnum.ChangeManagement.toString(), scheduleId);
- response = Response.noContent().build();
- } catch (CMSException e) {
- TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
- Observation.report(LogMessages.EXPECTED_EXCEPTION, e, e.getMessage());
- response = Response.status(e.getStatus()).entity(e.getRequestError()).build();
- } catch (Exception e) {
- Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage());
- TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
- response = Response.serverError().build();
- }
- Observation.report(LogMessages.DELETE_SCHEDULE_REQUEST, "Returned", request.getRemoteAddr(), scheduleId,
- response.getStatusInfo().toString());
- return response;
- }
-
- @Override
- public Response getScheduleRequestInfo(String apiVersion, String scheduleId, HttpServletRequest request) {
- Response response = null;
- Observation.report(LogMessages.GET_SCHEDULE_REQUEST_INFO, "Received", request.getRemoteAddr(), scheduleId, "");
- Schedule schedule = null;
- try {
- schedule = scheduleDAO.findByDomainScheduleID(DomainsEnum.ChangeManagement.toString(), scheduleId);
- if (schedule == null) {
- throw new CMSException(Status.NOT_FOUND, LogMessages.SCHEDULE_NOT_FOUND,
- DomainsEnum.ChangeManagement.toString(), scheduleId);
- }
- response = Response.ok().entity(schedule).build();
- } catch (CMSException e) {
- Observation.report(LogMessages.EXPECTED_EXCEPTION, e, e.getMessage());
- response = Response.status(e.getStatus()).entity(e.getRequestError()).build();
- } catch (Exception e) {
- Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage());
- response = Response.serverError().build();
- }
- Observation.report(LogMessages.GET_SCHEDULE_REQUEST_INFO, "Returned", request.getRemoteAddr(), scheduleId,
- response.getStatusInfo().toString());
- return response;
- }
-
- @Override
- @Transactional
- public Response approveScheduleRequest(String apiVersion, String scheduleId, ApprovalMessage approval,
- HttpServletRequest request) {
- Response response = null;
- Observation.report(LogMessages.APPROVE_SCHEDULE_REQUEST, "Received", request.getRemoteAddr(), scheduleId,
- approval.toString());
- try {
- String domain = DomainsEnum.ChangeManagement.toString();
- Schedule s = scheduleDAO.findByDomainScheduleID(domain, scheduleId);
- if (s == null) {
- throw new CMSNotFoundException(domain, scheduleId);
- }
- processApproveScheduleRequest(s, approval, s.getDomainData());
- response = Response.noContent().build();
- } catch (CMSException e) {
- TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
- Observation.report(LogMessages.EXPECTED_EXCEPTION, e, e.getMessage());
- response = Response.status(e.getStatus()).entity(e.getRequestError()).build();
- } catch (Exception e) {
- Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage());
- TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
- response = Response.serverError().build();
- }
- Observation.report(LogMessages.APPROVE_SCHEDULE_REQUEST, "Returned", request.getRemoteAddr(), scheduleId, "");
- return response;
- }
-
- private void processApproveScheduleRequest(Schedule s, ApprovalMessage approval, List<DomainData> domainData)
- throws CMSException {
- s = scheduleDAO.lockOne(s.getId());
- String domain = DomainsEnum.ChangeManagement.toString();
- processApproval(s, domain, approval);
- if (s.getStatus().equals(CMSStatusEnum.Accepted.toString())) {
- openTickets(s, domainData);
- }
- if (s.getStatus().equals(CMSStatusEnum.Rejected.toString())) {
- updateChangeManagementSchedules(s, CMSStatusEnum.ApprovalRejected);
- }
- }
-
- private void openTickets(Schedule s, List<DomainData> domainData) throws CMSException {
- debug.debug("Entered openTickets scheduleId=" + s.getScheduleId());
-
- Integer max_vnfs_per_ticket = env.getProperty("tm.vnfs.per.ticket", Integer.class, 1);
-
- List<ChangeManagementGroup> groups = cmGroupDAO.findBySchedulesID(s.getId());
- for (ChangeManagementGroup group : groups) {
-
- List<ChangeManagementSchedule> schedules = cmScheduleDAO.findByChangeManagementGroupId(group.getId());
- List<List<ChangeManagementSchedule>> ticketList = new ArrayList<List<ChangeManagementSchedule>>();
- List<ChangeManagementSchedule> current = null;
- for (ChangeManagementSchedule cms : schedules) {
- if (current == null || current.size() == max_vnfs_per_ticket) {
- current = new ArrayList<ChangeManagementSchedule>();
- ticketList.add(current);
- }
- current.add(cms);
- }
- for (List<ChangeManagementSchedule> list : ticketList) {
- openTicketForList(s, group, list, domainData);
- }
- }
- debug.debug("Exited openTickets scheduleId=" + s.getScheduleId());
- }
-
- private void openTicketForList(Schedule schedule, ChangeManagementGroup group, List<ChangeManagementSchedule> list,
- List<DomainData> domainData) throws CMSException {
- List<String> vnfNames = new ArrayList<>();
- for (ChangeManagementSchedule cms : list) {
- vnfNames.add(cms.getVnfName());
- }
-
- debug.debug(
- "Calling createChangeTicket scheduleId=" + schedule.getScheduleId() + ", group=" + group.getGroupId(),
- ", vnfNames=" + vnfNames);
- String changeId = tmClient.createChangeTicket(schedule, group, vnfNames, domainData);
-
- // Pre-approve the ticket
- for (ChangeManagementSchedule cms : list) {
- cms.getTmApprovalStatus();
- cms.setTmChangeId(changeId);
- cms.setTmApprovalStatus(TmApprovalStatusEnum.Approved.toString());
- // cms.setStatus(CMSStatusEnum.PendingApproval.toString());
- if (cms.getStartTimeMillis() == null)
- cms.setStatus(CMSStatusEnum.ScheduledImmediate.toString());
- else
- cms.setStatus(CMSStatusEnum.Scheduled.toString());
- cmScheduleDAO.save(cms);
- }
- schedule.setStatus(CMSStatusEnum.Scheduled.toString());
- scheduleDAO.save(schedule);
- }
-
- private void updateChangeManagementSchedules(Schedule s, CMSStatusEnum approvalrejected) {
- debug.debug("Entered updateChangeManagementSchedules");
- List<ChangeManagementGroup> groups = cmGroupDAO.findBySchedulesID(s.getId());
- for (ChangeManagementGroup group : groups) {
- List<ChangeManagementSchedule> schedules = cmScheduleDAO.findByChangeManagementGroupId(group.getId());
- for (ChangeManagementSchedule schedule : schedules) {
- schedule.setStatus(approvalrejected.toString());
- cmScheduleDAO.save(schedule);
- }
- }
- debug.debug("Exited updateChangeManagementSchedules");
- }
-
- @Override
- public Response searchScheduleRequestDetails(String apiVersion, String scheduleId, String scheduleName,
- String userId, String status, String createDateTime, String optimizerStatus, String requestApprovalUserId,
- String requestApprovalStatus, String requestApprovalType, String workflowName, String vnfName, String vnfId,
- String vnfStatus,
- // String vnfScheduleId,
- String startTime, String finishTime, String lastInstanceTime, String tmChangeId,
- // String approvalUserId,
- // String approvalStatus,
- // String approvalType,
- Integer maxSchedules, String lastScheduleId, Integer concurrencyLimit, UriInfo uri,
- HttpServletRequest request) {
-
- Response response = null;
- Observation.report(LogMessages.SEARCH_SCHEDULE_REQUEST_DETAILS, "Received", request.getRemoteAddr(),
- uri.getRequestUri().getQuery());
- List<CmDetailsMessage> schedules = new ArrayList<CmDetailsMessage>();
-
- try {
- debug.debug("Timezone={}" , TimeZone.getDefault());
- MultivaluedMap<String, String> qp = uri.getQueryParameters();
- StringBuilder where = new StringBuilder();
- int maxRows = 0;
- if (maxSchedules != null && maxSchedules > 0)
- maxRows = maxSchedules;
- buildWhere(qp, where);
- List<ChangeManagementDetail> list = cmDetailsDAO.searchScheduleDetails(where.toString(), maxRows);
- if (list == null || !list.iterator().hasNext()) {
- throw new CMSException(Status.NOT_FOUND, LogMessages.SCHEDULE_NOT_FOUND,
- DomainsEnum.ChangeManagement.toString(), scheduleId);
- }
- Iterator<ChangeManagementDetail> iter = list.iterator();
- Map<Integer, Schedule> scheduleMap = new HashMap<Integer, Schedule>();
- while (iter.hasNext()) {
- ChangeManagementDetail cms = iter.next();
- CmDetailsMessage msg = buildResponse(cms, scheduleMap);
- schedules.add(msg);
- }
- response = Response.ok(schedules.toArray(new CmDetailsMessage[schedules.size()])).build();
- } catch (CMSException e) {
- Observation.report(LogMessages.EXPECTED_EXCEPTION, e, e.getMessage());
- response = Response.status(e.getStatus()).entity(e.getRequestError()).build();
- } catch (Exception e) {
- Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage());
- response = Response.serverError().build();
- }
- Observation.report(LogMessages.SEARCH_SCHEDULE_REQUEST_DETAILS, "Returned", request.getRemoteAddr(),
- response.getStatusInfo().toString());
- return response;
-
- }
-
- private void buildWhere(MultivaluedMap<String, String> qp, StringBuilder where) throws CMSException {
- String delim = " where ";
- for (String urlName : qp.keySet()) {
- List<String> values = qp.get(urlName);
- String clause = CmQueryParameters.buildClause(urlName, values);
- if (clause != null && !clause.equals("")) {
- where.append(delim).append("\n").append(clause).append("\n");
- delim = "AND";
- }
- }
-
- }
-
- private CmDetailsMessage buildResponse(ChangeManagementDetail cms, Map<Integer, Schedule> scheduleMap) {
- CmDetailsMessage msg = new CmDetailsMessage();
- msg.setVnfId(cms.getVnfId());
- msg.setVnfName(cms.getVnfName());
- msg.setStatus(cms.getStatus());
- msg.setTmChangeId(cms.getTmChangeId());
- msg.setFinishTimeMillis(cms.getFinishTimeMillis());
- msg.setStartTimeMillis(cms.getStartTimeMillis());
- msg.setLastInstanceStartTimeMillis(cms.getLastInstanceStartTimeMillis());
- msg.setGroupId(cms.getGroupId());
- msg.setPolicyId(cms.getPolicyId());
- msg.setTmApprovalStatus(cms.getTmApprovalStatus());
- msg.setTmStatus(cms.getTmStatus());
- msg.setStatusMessage(cms.getStatusMessage());
- msg.setDispatchTimeMillis(cms.getDispatchTimeMillis());
- msg.setExecutionCompletedTimeMillis(cms.getExecutionCompletedTimeMillis());
- msg.setMsoMessage(cms.getMsoMessage());
- msg.setMsoRequestId(cms.getMsoRequestId());
- msg.setMsoStatus(cms.getMsoStatus());
- msg.setMsoTimeMillis(cms.getMsoTimeMillis());
- if (!scheduleMap.containsKey(cms.getSchedulesId())) {
- Schedule schedule = scheduleDAO.findById(cms.getSchedulesId()).orElse(null);
- if (schedule != null) {
- // DO not innclude in the results
- schedule.setScheduleInfo(null);
- // schedule.setSchedule(null);
- scheduleMap.put(cms.getSchedulesId(), schedule);
- }
- }
- if (scheduleMap.containsKey(cms.getSchedulesId())) {
- msg.setScheduleRequest(scheduleMap.get(cms.getSchedulesId()));
- }
- return msg;
- }
-
-}
diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/CmQueryParameters.java b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/CmQueryParameters.java index 1a9c29d..2e9ade3 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/CmQueryParameters.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/CmQueryParameters.java @@ -1,33 +1,28 @@ /*
- * 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.service.rs;
@@ -41,33 +36,34 @@ import org.onap.optf.cmso.common.LogMessages; import org.onap.optf.cmso.common.exceptions.CMSException;
import org.onap.optf.cmso.model.DomainData;
+/**
+ * The Class CmQueryParameters.
+ */
public class CmQueryParameters {
+ /**
+ * The Enum QueryColumns.
+ */
public enum QueryColumns {
- RequestScheduleId("request.scheduleId", String.class, "ss.schedule_id"), RequestScheduleName(
- "request.scheduleName", String.class,
- "ss.schedule_name"), RequestUserId("request.userId", String.class, "ss.user_id"), RequestStatus(
- "request.status", String.class, "ss.status"), RequestCreateDateTime("request.createDateTime",
- Date.class, "ss.create_date_time"), RequestOptimizerStatus("request.optimizerStatus",
- String.class, "ss.optimizer_status"), RequestApprovalUserId(
- "request.approvalUserId", String.class,
- "sa.user_id"), RequestApprovalStatus("request.approvalStatus",
- String.class, "sa.status"), RequestApprovalType(
- "request.approvalType", String.class,
- "at.approval_type"), WorkflowName("WorkflowName",
- DomainData.class,
- "dd.value"), vnfName("vnfName", String.class,
- "s.vnf_name"), vnfId("vnfId",
- String.class,
- "s.vnf_id"), vnfStatus(
- "vnfStatus",
- String.class,
- "s.vnf_status"),
+ RequestScheduleId("request.scheduleId", String.class, "ss.schedule_id"),
+ RequestScheduleName("request.scheduleName", String.class, "ss.schedule_name"),
+ RequestUserId("request.userId", String.class, "ss.user_id"),
+ RequestStatus("request.status", String.class, "ss.status"),
+ RequestCreateDateTime("request.createDateTime", Date.class, "ss.create_date_time"),
+ RequestOptimizerStatus("request.optimizerStatus", String.class, "ss.optimizer_status"),
+ RequestApprovalUserId("request.approvalUserId", String.class, "sa.user_id"),
+ RequestApprovalStatus("request.approvalStatus", String.class, "sa.status"),
+ RequestApprovalType("request.approvalType", String.class, "at.approval_type"),
+ WorkflowName("WorkflowName", DomainData.class, "dd.value"),
+ vnfName("vnfName", String.class, "s.vnf_name"),
+ vnfId("vnfId", String.class, "s.vnf_id"),
+ vnfStatus("vnfStatus", String.class, "s.vnf_status"),
// vnfScheduleId("vnfScheduleId", String.class, "s.id"),
- startTime("startTime", Date.class, "s.start_time"), finishTime("finishTime", Date.class,
- "s.finish_ime"), lastInstanceTime("lastInstanceTime", Date.class, "g.last_instance_time"), tmChangeId(
- "tmChangeId", String.class, "s.tm_change_id"), concurrenyLimit("request.concurrencyLimit",
- Integer.class, "g.concurrency_limit"),
+ startTime("startTime", Date.class, "s.start_time"),
+ finishTime("finishTime", Date.class, "s.finish_ime"),
+ lastInstanceTime("lastInstanceTime", Date.class, "g.last_instance_time"),
+ tmChangeId("tmChangeId", String.class, "s.tm_change_id"),
+ concurrenyLimit("request.concurrencyLimit", Integer.class, "g.concurrency_limit"),
// approvalUserId("approvalUserId", String.class, "approvalUserId"),
// approvalStatus("approvalStatus", String.class, "approvalStatus"),
// approvalType("approvalType", String.class, "approvalType"),
@@ -79,20 +75,35 @@ public class CmQueryParameters { private QueryColumns(String urlName, Class<?> type, String col) {
this.urlName = urlName;
- this.type = type;
- this.col = col;
+ this.type = type;
+ this.col = col;
}
}
+ /**
+ * Gets the query column.
+ *
+ * @param urlName the url name
+ * @return the query column
+ */
public static QueryColumns getQueryColumn(String urlName) {
for (QueryColumns qc : QueryColumns.values()) {
- if (qc.urlName.equals(urlName))
+ if (qc.urlName.equals(urlName)) {
return qc;
+ }
}
return null;
}
+ /**
+ * Builds the clause.
+ *
+ * @param urlName the url name
+ * @param values the values
+ * @return the string
+ * @throws CMSException the CMS exception
+ */
public static String buildClause(String urlName, List<String> values) throws CMSException {
QueryColumns qc = getQueryColumn(urlName);
if (qc == null) {
@@ -112,10 +123,12 @@ public class CmQueryParameters { List<String> likes = new ArrayList<String>();
List<String> in = new ArrayList<String>();
for (String value : values) {
- if (value.contains("%"))
+ if (value.contains("%")) {
likes.add(value);
- else
+ }
+ else {
in.add(value);
+ }
}
String delim = "(";
if (in.size() > 0) {
@@ -134,8 +147,9 @@ public class CmQueryParameters { delim = " OR ";
}
}
- if (!delim.equals("("))
+ if (!delim.equals("(")) {
clause.append(")");
+ }
return clause.toString();
}
@@ -145,19 +159,20 @@ public class CmQueryParameters { if (values.size() > 0) {
for (String value : values) {
clause.append(delim).append(" (dd.name = '").append(qc.urlName).append("' AND dd.value = '")
- .append(value).append("')");
+ .append(value).append("')");
delim = " OR ";
}
}
- if (!delim.equals("("))
+ if (!delim.equals("(")) {
clause.append(")");
+ }
return clause.toString();
}
private static String formatDate(String urlName, List<String> values, QueryColumns qc) throws CMSException {
List<String> clauses = new ArrayList<String>();
for (String value : values) {
- String dates[] = value.split(",");
+ String[] dates = value.split(",");
switch (dates.length) {
case 2:
formatDatePair(qc, dates[0].trim(), dates[1].trim(), clauses);
@@ -182,14 +197,16 @@ public class CmQueryParameters { }
private static void formatDatePair(QueryColumns qc, String lowDate, String highDate, List<String> clauses)
- throws CMSException {
+ throws CMSException {
StringBuilder clause = new StringBuilder();
DateTime date1 = null;
DateTime date2 = null;
- if (!lowDate.equals(""))
+ if (!lowDate.equals("")) {
date1 = convertDate(lowDate, qc.urlName);
- if (!highDate.equals(""))
+ }
+ if (!highDate.equals("")) {
date2 = convertDate(highDate, qc.urlName);
+ }
String delim = "(";
if (date1 != null) {
clause.append(delim).append(qc.col).append(" >= ").append(date1.getMillis());
@@ -207,8 +224,9 @@ public class CmQueryParameters { private static DateTime convertDate(String utcDate, String urlName) throws CMSException {
DateTime dateTime = ISODateTimeFormat.dateTimeParser().parseDateTime(utcDate);
- if (dateTime != null)
+ if (dateTime != null) {
return dateTime;
+ }
throw new CMSException(Status.BAD_REQUEST, LogMessages.INVALID_DATE_FILTER, urlName, utcDate);
}
diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/CmsoOptimizedScheduleService.java b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/CmsoOptimizedScheduleService.java new file mode 100644 index 0000000..9874ea8 --- /dev/null +++ b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/CmsoOptimizedScheduleService.java @@ -0,0 +1,72 @@ +/* + * 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. +*/ + +package org.onap.optf.cmso.service.rs; + +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.DefaultValue; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import org.onap.optf.cmso.common.CMSRequestError; +import org.onap.optf.cmso.service.rs.models.v2.OptimizedScheduleMessage; + +@Api("CMSO Optimized Schedule API") +@Path("/{apiVersion}") +@Produces({MediaType.APPLICATION_JSON}) +public interface CmsoOptimizedScheduleService { + + // ****************************************************************** + @POST + @Path("/schedules/optimized/{scheduleId}") + @Produces({MediaType.APPLICATION_JSON}) + @ApiOperation(value = "", notes = "Creates a request for an optimized schedule") + @ApiResponses( + value = {@ApiResponse(code = 202, message = "Schedule request accepted for optimization."), + @ApiResponse(code = 409, message = "Schedule request already exists for this schedule id.", + response = CMSRequestError.class), + @ApiResponse(code = 500, message = "Unexpected Runtime error")}) + public Response createScheduleRequest( + @ApiParam(value = "v1") @PathParam("apiVersion") @DefaultValue("v1") String apiVersion, + @ApiParam(value = "Schedule id to uniquely identify the schedule request being created.") + @PathParam("scheduleId") String scheduleId, + @ApiParam(value = "Data for creating a schedule request for the given schedule id") + OptimizedScheduleMessage scheduleMessage); + + +} diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/CmsoOptimizedScheduleServiceImpl.java b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/CmsoOptimizedScheduleServiceImpl.java new file mode 100644 index 0000000..377c250 --- /dev/null +++ b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/CmsoOptimizedScheduleServiceImpl.java @@ -0,0 +1,80 @@ +/* + * 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.service.rs; + +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; +import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.Response; +import org.onap.observations.Observation; +import org.onap.optf.cmso.common.LogMessages; +import org.onap.optf.cmso.common.exceptions.CMSException; +import org.onap.optf.cmso.service.rs.models.v2.OptimizedScheduleMessage; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.env.Environment; +import org.springframework.stereotype.Controller; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.interceptor.TransactionAspectSupport; + +@Controller +public class CmsoOptimizedScheduleServiceImpl extends CommonServiceImpl implements CmsoOptimizedScheduleService { + private static EELFLogger debug = EELFManager.getInstance().getDebugLogger(); + + @Autowired + Environment env; + + + @Context + HttpServletRequest request; + + @Override + @Transactional + public Response createScheduleRequest(String apiVersion, String scheduleId, + OptimizedScheduleMessage scheduleMessage) { + Observation.report(LogMessages.CREATE_SCHEDULE_REQUEST, "Received", request.getRemoteAddr(), scheduleId, + scheduleMessage.toString()); + Response response = null; + try { + createSchedule(scheduleMessage, scheduleId, request); + response = Response.accepted().build(); + } catch (CMSException e) { + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + Observation.report(LogMessages.EXPECTED_EXCEPTION, e, e.getMessage()); + response = Response.status(e.getStatus()).entity(e.getRequestError()).build(); + } catch (Exception e) { + Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage()); + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + response = Response.serverError().build(); + } + Observation.report(LogMessages.CREATE_SCHEDULE_REQUEST, "Returned", request.getRemoteAddr(), scheduleId, + response.getStatusInfo().toString()); + return response; + } + + +} diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/CMSOptimizerCallback.java b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/CmsoOptimizerCallback.java index cc2785e..d6cefb6 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/CMSOptimizerCallback.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/CmsoOptimizerCallback.java @@ -1,66 +1,64 @@ -/*
- * 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.
-*/
-
-package org.onap.optf.cmso.service.rs;
-
-import javax.ws.rs.DefaultValue;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-
-import org.onap.optf.cmso.optimizer.bean.CMOptimizerResponse;
-
-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("CMSO Optimized Schedule API")
-@Path("/{apiVersion}")
-@Produces({MediaType.APPLICATION_JSON})
-public interface CMSOptimizerCallback {
-
- // ******************************************************************
- @POST
- @Path("/optimizerCallback")
- @Produces({MediaType.APPLICATION_JSON})
- @ApiOperation(value = "", notes = "Processes optimizer results callback to a Pending Optimization schedule.")
- @ApiResponses(value = {@ApiResponse(code = 200, message = "OK"),
- @ApiResponse(code = 500, message = "Unexpected Runtime error", response = Exception.class)})
- public Response sniroCallback(
- @ApiParam(value = "v1") @PathParam("apiVersion") @DefaultValue("v1") String apiVersion,
- @ApiParam(value = "Return schedules > lastScheduleId") CMOptimizerResponse reponse);
-
-}
+/* + * 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. +*/ + +package org.onap.optf.cmso.service.rs; + +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.DefaultValue; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import org.onap.optf.cmso.optimizer.bean.CMOptimizerResponse; + +@Api("CMSO Optimized Schedule API") +@Path("/{apiVersion}") +@Produces({MediaType.APPLICATION_JSON}) +public interface CmsoOptimizerCallback { + + // ****************************************************************** + @POST + @Path("/optimizerCallback") + @Produces({MediaType.APPLICATION_JSON}) + @ApiOperation(value = "", notes = "Processes optimizer results callback to a Pending Optimization schedule.") + @ApiResponses(value = {@ApiResponse(code = 200, message = "OK"), + @ApiResponse(code = 500, message = "Unexpected Runtime error", response = Exception.class)}) + public Response sniroCallback( + @ApiParam(value = "v1") @PathParam("apiVersion") @DefaultValue("v1") String apiVersion, + @ApiParam(value = "Return schedules > lastScheduleId") CMOptimizerResponse reponse); + +} diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/CMSOOptimizerCallbackImpl.java b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/CmsoOptimizerCallbackImpl.java index 679dd02..1596051 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/CMSOOptimizerCallbackImpl.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/CmsoOptimizerCallbackImpl.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,17 +31,18 @@ package org.onap.optf.cmso.service.rs; +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; +import com.fasterxml.jackson.databind.ObjectMapper; import java.util.HashMap; import java.util.List; import java.util.Map; - import javax.servlet.http.HttpServletRequest; import javax.transaction.Transactional; import javax.ws.rs.core.Context; 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.ISODateTimeFormat; @@ -62,24 +63,23 @@ import org.onap.optf.cmso.optimizer.bean.CMSchedule; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; -import com.att.eelf.configuration.EELFLogger; -import com.att.eelf.configuration.EELFManager; -import com.fasterxml.jackson.databind.ObjectMapper; - +/** + * The Class CmsoOptimizerCallbackImpl. + */ @Controller -public class CMSOOptimizerCallbackImpl extends BaseSchedulerServiceImpl implements CMSOptimizerCallback { - private static EELFLogger log = EELFManager.getInstance().getLogger(CMSOOptimizerCallbackImpl.class); +public class CmsoOptimizerCallbackImpl extends BaseSchedulerServiceImpl implements CmsoOptimizerCallback { + private static EELFLogger log = EELFManager.getInstance().getLogger(CmsoOptimizerCallbackImpl.class); private static EELFLogger metrics = EELFManager.getInstance().getMetricsLogger(); private static EELFLogger audit = EELFManager.getInstance().getAuditLogger(); private static EELFLogger debug = EELFManager.getInstance().getDebugLogger(); private static EELFLogger errors = EELFManager.getInstance().getErrorLogger(); - @Context + @Context UriInfo uri; - + @Context HttpServletRequest request; - + @Autowired ChangeManagementScheduleDAO cmScheduleDAO; @@ -93,6 +93,13 @@ public class CMSOOptimizerCallbackImpl extends BaseSchedulerServiceImpl implemen @Autowired ChangeManagementDetailDAO cmDetailsDAO; + /** + * Sniro callback. + * + * @param apiVersion the api version + * @param sniroResponse the sniro response + * @return the response + */ @Override @Transactional public Response sniroCallback(String apiVersion, CMOptimizerResponse sniroResponse) { @@ -164,20 +171,20 @@ public class CMSOOptimizerCallbackImpl extends BaseSchedulerServiceImpl implemen for (CMSchedule sniroSchedule : sniroResponse.getSchedule()) { String groupId = sniroSchedule.getGroupId(); DateTime finishTime = convertDate(sniroSchedule.getFinishTime(), "finishTime"); - DateTime latestInstanceStartTime = - convertDate(sniroSchedule.getLatestInstanceStartTime(), "latestInstanceStartTime"); DateTime startTime = convertDate(sniroSchedule.getStartTime(), "startTime"); - ChangeManagementGroup group = cmGroupDAO.findOneBySchedulesIDGroupID(schedule.getId(), groupId); + ChangeManagementGroup group = cmGroupDAO.findOneBySchedulesIDGroupID(schedule.getUuid(), groupId); if (group == null) { throw new CMSException(Status.PRECONDITION_FAILED, LogMessages.CHANGE_MANAGEMENT_GROUP_NOT_FOUND, schedule.getScheduleId(), groupId); } group.setStartTimeMillis(startTime.getMillis()); group.setFinishTimeMillis(finishTime.getMillis()); + DateTime latestInstanceStartTime = + convertDate(sniroSchedule.getLatestInstanceStartTime(), "latestInstanceStartTime"); group.setLastInstanceStartTimeMillis(latestInstanceStartTime.getMillis()); cmGroupDAO.save(group); long totalDuration = - (group.getAdditionalDurationInSecs() + group.getNormalDurationInSecs()) * 1000l; + (group.getAdditionalDurationInSecs() + group.getNormalDurationInSecs()) * 1000L; Map<String, Map<String, Long>> startAndFinishTimeMap = new HashMap<String, Map<String, Long>>(); makeMap(startTime.getMillis(), latestInstanceStartTime.getMillis(), group.getConcurrencyLimit(), totalDuration, sniroSchedule.getNode(), startAndFinishTimeMap); @@ -203,21 +210,34 @@ public class CMSOOptimizerCallbackImpl extends BaseSchedulerServiceImpl implemen } } + /** + * Make map. + * + * @param startTime the start time + * @param latestInstanceStartTime the latest instance start time + * @param concurrencyLimit the concurrency limit + * @param totalDuration the total duration + * @param nodeList the node list + * @param startAndFinishTimeMap the start and finish time map + * @throws CMSException the CMS exception + */ public static void makeMap(Long startTime, Long latestInstanceStartTime, int concurrencyLimit, long totalDuration, - List<String> nodes, Map<String, Map<String, Long>> startAndFinishTimeMap) throws CMSException { + List<String> nodeList, Map<String, Map<String, Long>> startAndFinishTimeMap) throws CMSException { Long nextStartTime = null; Long nextFinishTime = null; - for (int nodeNumber = 0; nodeNumber < nodes.size(); nodeNumber++) { - String node = nodes.get(nodeNumber); + for (int nodeNumber = 0; nodeNumber < nodeList.size(); nodeNumber++) { + String node = nodeList.get(nodeNumber); if (nodeNumber % concurrencyLimit == 0) { - if (nodeNumber == 0) + if (nodeNumber == 0) { nextStartTime = startTime; - else + } + else { nextStartTime = nextStartTime + totalDuration; + } if (nextStartTime > latestInstanceStartTime) { throw new CMSException(Status.BAD_REQUEST, LogMessages.UNABLE_TO_ALLOCATE_VNF_TIMESLOTS, startTime.toString(), latestInstanceStartTime.toString(), String.valueOf(totalDuration), - String.valueOf(concurrencyLimit), String.valueOf(nodes.size())); + String.valueOf(concurrencyLimit), String.valueOf(nodeList.size())); } nextFinishTime = nextStartTime + totalDuration; } @@ -232,7 +252,7 @@ public class CMSOOptimizerCallbackImpl extends BaseSchedulerServiceImpl implemen private void processNode(Schedule schedule, ChangeManagementGroup group, String node, Map<String, Map<String, Long>> startAndFinishTimeMap) throws CMSException { Map<String, Long> map = startAndFinishTimeMap.get(node); - ChangeManagementSchedule detail = cmScheduleDAO.findOneByGroupIDAndVnfName(group.getId(), node); + ChangeManagementSchedule detail = cmScheduleDAO.findOneByGroupUuidAndVnfName(group.getUuid(), node); if (detail == null) { throw new CMSException(Status.NOT_FOUND, LogMessages.UNABLE_TO_LOCATE_SCHEDULE_DETAIL, schedule.getScheduleId(), group.getGroupId(), node); @@ -244,22 +264,40 @@ public class CMSOOptimizerCallbackImpl extends BaseSchedulerServiceImpl implemen cmScheduleDAO.save(detail); } + /** + * Convert date. + * + * @param utcDate the utc date + * @param attrName the attr name + * @return the date time + * @throws CMSException the CMS exception + */ public static DateTime convertDate(String utcDate, String attrName) throws CMSException { try { DateTime dateTime = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss").withZoneUTC().parseDateTime(utcDate); - if (dateTime != null) + if (dateTime != null) { return dateTime; + } } catch (Exception e) { debug.debug(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage()); } throw new CMSException(Status.BAD_REQUEST, LogMessages.INVALID_ATTRIBUTE, attrName, utcDate); } - public static DateTime convertISODate(String utcDate, String attrName) throws CMSException { + /** + * Convert ISO date. + * + * @param utcDate the utc date + * @param attrName the attr name + * @return the date time + * @throws CMSException the CMS exception + */ + public static DateTime convertIsoDate(String utcDate, String attrName) throws CMSException { try { DateTime dateTime = ISODateTimeFormat.dateTimeParser().parseDateTime(utcDate); - if (dateTime != null) + if (dateTime != null) { return dateTime; + } } catch (Exception e) { debug.debug(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage()); } diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/CMSOService.java b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/CmsoService.java index 6e99b0d..d9b338e 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/CMSOService.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/CmsoService.java @@ -1,206 +1,206 @@ -/*
- * 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.
-*/
-
-package org.onap.optf.cmso.service.rs;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.DefaultValue;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
-import javax.ws.rs.QueryParam;
-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.common.CMSRequestError;
-import org.onap.optf.cmso.model.Schedule;
-import org.onap.optf.cmso.service.rs.models.ApprovalMessage;
-import org.onap.optf.cmso.service.rs.models.CMSMessage;
-import org.onap.optf.cmso.service.rs.models.CmDetailsMessage;
-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("CMSO Schedule API")
-@Path("/{apiVersion}")
-@Produces({MediaType.APPLICATION_JSON})
-public interface CMSOService {
- // ******************************************************************
- @GET
- @Path("/schedules")
- @Produces({MediaType.APPLICATION_JSON})
- @ApiOperation(value = "", notes = "Returns a list of Scheduler Requests based upon the filter criteria.",
- response = Schedule.class, responseContainer = "List")
- @ApiResponses(value = {@ApiResponse(code = 200, message = "OK"),
- @ApiResponse(code = 404, message = "No records found", response = CMSRequestError.class),
- @ApiResponse(code = 500, message = "Unexpected Runtime error", response = Exception.class)})
- public Response searchScheduleRequests(
- @ApiParam(value = "v1") @PathParam("apiVersion") @DefaultValue("v1") String apiVersion,
- @DefaultValue(value = "false") @ApiParam(
- value = "Include details") @QueryParam("includeDetails") Boolean includeDetails,
- @ApiParam(value = "Schedule identifier", allowMultiple = true) @QueryParam("scheduleId") String scheduleId,
- @ApiParam(value = "Schedule name", allowMultiple = true) @QueryParam("scheduleName") String scheduleName,
- @ApiParam(value = "SCheduler creator User id of ",
- allowMultiple = true) @QueryParam("userId") String userId,
- @ApiParam(value = "Schedule status", allowMultiple = true) @QueryParam("status") String status,
- @ApiParam(value = "Creation date and time (<low date>[,<hi date>])",
- allowMultiple = true) @QueryParam("createDateTime") String createDateTime,
- @ApiParam(value = "Optimizer status",
- allowMultiple = true) @QueryParam("optimizerStatus") String optimizerStatus,
- @ApiParam(value = "Workflow", allowMultiple = true) @QueryParam("WorkflowName") String workflowName,
- @Context UriInfo uri, @Context HttpServletRequest request);
-
- // ******************************************************************
- @POST
- @Path("/schedules/{scheduleId}")
- @Produces({MediaType.APPLICATION_JSON})
- @ApiOperation(value = "", notes = "Creates a schedule request for scheduleId")
- @ApiResponses(
- value = {@ApiResponse(code = 202, message = "Schedule request accepted for optimization."),
- @ApiResponse(code = 409, message = "Schedule request already exists for this schedule id.",
- response = CMSRequestError.class),
- @ApiResponse(code = 500, message = "Unexpected Runtime error")})
- public Response createScheduleRequest(
- @ApiParam(value = "v1") @PathParam("apiVersion") @DefaultValue("v1") String apiVersion,
- @ApiParam(
- value = "Schedule id to uniquely identify the schedule request being created.") @PathParam("scheduleId") String scheduleId,
- @ApiParam(
- value = "Data for creating a schedule request for the given schedule id") CMSMessage scheduleMessage,
- @Context HttpServletRequest request);
-
- // ******************************************************************
- @DELETE
- @Path("/schedules/{scheduleId}")
- @Produces({MediaType.APPLICATION_JSON})
- @ApiOperation(value = "", notes = "Cancels the schedule request for scheduleId")
- @ApiResponses(value = {@ApiResponse(code = 204, message = "Delete successful"),
- @ApiResponse(code = 404, message = "No record found", response = CMSRequestError.class),
- @ApiResponse(code = 500, message = "Unexpected Runtime error")})
- public Response deleteScheduleRequest(
- @ApiParam(value = "v1") @PathParam("apiVersion") @DefaultValue("v1") String apiVersion,
- @ApiParam(
- value = "Schedule id to uniquely identify the schedule request being deleted.") @PathParam("scheduleId") String scheduleId,
- @Context HttpServletRequest request);
-
- // ******************************************************************
- @GET
- @Path("/schedules/{scheduleId}")
- @Produces({MediaType.APPLICATION_JSON})
- @ApiOperation(value = "", notes = "Retrieve the schedule request for scheduleId", response = Schedule.class)
- @ApiResponses(
- value = {@ApiResponse(code = 200, message = "OK"), @ApiResponse(code = 404, message = "No record found"),
- @ApiResponse(code = 500, message = "Unexpected Runtime error")})
- public Response getScheduleRequestInfo(
- @ApiParam(value = "v1") @PathParam("apiVersion") @DefaultValue("v1") String apiVersion,
- @ApiParam(
- value = "Schedule id to uniquely identify the schedule info being retrieved.") @PathParam("scheduleId") String scheduleId,
- @Context HttpServletRequest request);
-
- // ******************************************************************
- @POST
- @Path("/schedules/{scheduleId}/approvals")
- @Produces({MediaType.APPLICATION_JSON})
- @ApiOperation(value = "",
- notes = "Adds an accept/reject approval status to the schedule request identified by scheduleId")
- @ApiResponses(
- value = {@ApiResponse(code = 200, message = "OK"), @ApiResponse(code = 404, message = "No record found"),
- @ApiResponse(code = 500, message = "Unexpected Runtime error")})
- public Response approveScheduleRequest(
- @ApiParam(value = "v1") @PathParam("apiVersion") @DefaultValue("v1") String apiVersion,
- @ApiParam(
- value = "Schedule id to uniquely identify the schedule request being accepted or rejected.") @PathParam("scheduleId") String scheduleId,
- @ApiParam(value = "Accept or reject approval message") ApprovalMessage approval,
- @Context HttpServletRequest request);
-
- // ******************************************************************
- @GET
- @Path("/schedules/scheduleDetails")
- @Produces({MediaType.APPLICATION_JSON})
- @ApiOperation(value = "", notes = "Returns a list of Schedule request details based upon the filter criteria.",
- response = CmDetailsMessage.class, responseContainer = "List")
- @ApiResponses(value = {@ApiResponse(code = 200, message = "OK"),
- @ApiResponse(code = 404, message = "No records found", response = CMSRequestError.class),
- @ApiResponse(code = 500, message = "Unexpected Runtime error", response = Exception.class)})
- public Response searchScheduleRequestDetails(
- @ApiParam(value = "v1") @PathParam("apiVersion") @DefaultValue("v1") String apiVersion,
- @ApiParam(value = "Schedule identifier",
- allowMultiple = true) @QueryParam("request.scheduleId") String scheduleId,
- @ApiParam(value = "Schedule name",
- allowMultiple = true) @QueryParam("request.scheduleName") String scheduleName,
- @ApiParam(value = "Scheduler creator User id of ",
- allowMultiple = true) @QueryParam("request.userId") String userId,
- @ApiParam(value = "Schedule status", allowMultiple = true) @QueryParam("request.status") String status,
- @ApiParam(value = "Creation date and time (<low date>[,<hi date>])",
- allowMultiple = true) @QueryParam("request.createDateTime") String createDateTime,
- @ApiParam(value = "Optimizer status",
- allowMultiple = true) @QueryParam("request.optimizerStatus") String optimizerStatus,
- @ApiParam(value = "Request Approval user id",
- allowMultiple = true) @QueryParam("request.approvalUserId") String requestApprovalUserId,
- @ApiParam(value = "Request Approval status",
- allowMultiple = true) @QueryParam("request.approvalStatus") String requestApprovalStatus,
- @ApiParam(value = "Request Approval type",
- allowMultiple = true) @QueryParam("request.approvalType") String requestApprovalType,
- @ApiParam(value = "Workflow", allowMultiple = true) @QueryParam("WorkflowName") String workflowName,
- @ApiParam(value = "VNF Name", allowMultiple = true) @QueryParam("vnfName") String vnfName,
- @ApiParam(value = "VNF Id", allowMultiple = true) @QueryParam("vnfId") String vnfId,
- @ApiParam(value = "VNF Status", allowMultiple = true) @QueryParam("vnfStatus") String vnfStatus,
- // @ApiParam(value="VNF Schedule Id", allowMultiple=true) @QueryParam("vnfScheduleId")
- // String
- // vnfScheduleId,
- @ApiParam(value = "Start time <low>,<high>",
- allowMultiple = true) @QueryParam("startTime") String startTime,
- @ApiParam(value = "Finish time <low>,<high>",
- allowMultiple = true) @QueryParam("finishTime") String finishTime,
- @ApiParam(value = "Last instance start time <low>,<high>",
- allowMultiple = true) @QueryParam("lastInstanceTime") String lastInstanceTime,
- @ApiParam(value = "TM Change Ticket Change Id",
- allowMultiple = true) @QueryParam("tmChangeId") String tmChangeId,
- // @ApiParam(value="Approval user id", allowMultiple=true) @QueryParam("approvalUserId")
- // String approvalUserId,
- // @ApiParam(value="Approval status", allowMultiple=true) @QueryParam("approvalStatus")
- // String
- // approvalStatus,
- // @ApiParam(value="Approval type", allowMultiple=true) @QueryParam("approvalType")
- // String
- // approvalType,
- @ApiParam(value = "Maximum number of schedules to return") @QueryParam("maxSchedules") Integer maxSchedules,
- @ApiParam(value = "Return schedules > lastScheduleId") @QueryParam("lastScheduleId") String lastScheduleId,
- @ApiParam(
- value = "Return concurrencyLimit") @QueryParam("request.concurrencyLimit") Integer concurrencyLimit,
- @Context UriInfo uri, @Context HttpServletRequest request);
-
-}
+/* + * 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. +*/ + +package org.onap.optf.cmso.service.rs; + +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.servlet.http.HttpServletRequest; +import javax.ws.rs.DELETE; +import javax.ws.rs.DefaultValue; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +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.common.CMSRequestError; +import org.onap.optf.cmso.model.Schedule; +import org.onap.optf.cmso.service.rs.models.ApprovalMessage; +import org.onap.optf.cmso.service.rs.models.CmDetailsMessage; +import org.onap.optf.cmso.service.rs.models.CmsoMessage; + +@Api("CMSO Schedule API") +@Path("/{apiVersion}") +@Produces({MediaType.APPLICATION_JSON}) +public interface CmsoService { + // ****************************************************************** + @GET + @Path("/schedules") + @Produces({MediaType.APPLICATION_JSON}) + @ApiOperation(value = "", notes = "Returns a list of Scheduler Requests based upon the filter criteria.", + response = Schedule.class, responseContainer = "List") + @ApiResponses(value = {@ApiResponse(code = 200, message = "OK"), + @ApiResponse(code = 404, message = "No records found", response = CMSRequestError.class), + @ApiResponse(code = 500, message = "Unexpected Runtime error", response = Exception.class)}) + public Response searchScheduleRequests( + @ApiParam(value = "v1") @PathParam("apiVersion") @DefaultValue("v1") String apiVersion, + @DefaultValue(value = "false") @ApiParam( + value = "Include details") @QueryParam("includeDetails") Boolean includeDetails, + @ApiParam(value = "Schedule identifier", allowMultiple = true) @QueryParam("scheduleId") String scheduleId, + @ApiParam(value = "Schedule name", allowMultiple = true) @QueryParam("scheduleName") String scheduleName, + @ApiParam(value = "SCheduler creator User id of ", + allowMultiple = true) @QueryParam("userId") String userId, + @ApiParam(value = "Schedule status", allowMultiple = true) @QueryParam("status") String status, + @ApiParam(value = "Creation date and time (<low date>[,<hi date>])", + allowMultiple = true) @QueryParam("createDateTime") String createDateTime, + @ApiParam(value = "Optimizer status", + allowMultiple = true) @QueryParam("optimizerStatus") String optimizerStatus, + @ApiParam(value = "Workflow", allowMultiple = true) @QueryParam("WorkflowName") String workflowName, + @Context UriInfo uri, @Context HttpServletRequest request); + + // ****************************************************************** + @POST + @Path("/schedules/{scheduleId}") + @Produces({MediaType.APPLICATION_JSON}) + @ApiOperation(value = "", notes = "Creates a schedule request for scheduleId") + @ApiResponses( + value = {@ApiResponse(code = 202, message = "Schedule request accepted for optimization."), + @ApiResponse(code = 409, message = "Schedule request already exists for this schedule id.", + response = CMSRequestError.class), + @ApiResponse(code = 500, message = "Unexpected Runtime error")}) + public Response createScheduleRequest( + @ApiParam(value = "v1") @PathParam("apiVersion") @DefaultValue("v1") String apiVersion, + @ApiParam(value = "Schedule id to uniquely identify the schedule request being created.") + @PathParam("scheduleId") String scheduleId, + @ApiParam(value = "Data for creating a schedule request for the given schedule id") + CmsoMessage scheduleMessage, + @Context HttpServletRequest request); + + // ****************************************************************** + @DELETE + @Path("/schedules/{scheduleId}") + @Produces({MediaType.APPLICATION_JSON}) + @ApiOperation(value = "", notes = "Cancels the schedule request for scheduleId") + @ApiResponses(value = {@ApiResponse(code = 204, message = "Delete successful"), + @ApiResponse(code = 404, message = "No record found", response = CMSRequestError.class), + @ApiResponse(code = 500, message = "Unexpected Runtime error")}) + public Response deleteScheduleRequest( + @ApiParam(value = "v1") @PathParam("apiVersion") @DefaultValue("v1") String apiVersion, + @ApiParam(value = "Schedule id to uniquely identify the schedule request being deleted.") + @PathParam("scheduleId") String scheduleId, + @Context HttpServletRequest request); + + // ****************************************************************** + @GET + @Path("/schedules/{scheduleId}") + @Produces({MediaType.APPLICATION_JSON}) + @ApiOperation(value = "", notes = "Retrieve the schedule request for scheduleId", response = Schedule.class) + @ApiResponses( + value = {@ApiResponse(code = 200, message = "OK"), @ApiResponse(code = 404, message = "No record found"), + @ApiResponse(code = 500, message = "Unexpected Runtime error")}) + public Response getScheduleRequestInfo( + @ApiParam(value = "v1") @PathParam("apiVersion") @DefaultValue("v1") String apiVersion, + @ApiParam(value = "Schedule id to uniquely identify the schedule info being retrieved.") + @PathParam("scheduleId") String scheduleId, + @Context HttpServletRequest request); + + // ****************************************************************** + @POST + @Path("/schedules/{scheduleId}/approvals") + @Produces({MediaType.APPLICATION_JSON}) + @ApiOperation(value = "", + notes = "Adds an accept/reject approval status to the schedule request identified by scheduleId") + @ApiResponses( + value = {@ApiResponse(code = 200, message = "OK"), @ApiResponse(code = 404, message = "No record found"), + @ApiResponse(code = 500, message = "Unexpected Runtime error")}) + public Response approveScheduleRequest( + @ApiParam(value = "v1") @PathParam("apiVersion") @DefaultValue("v1") String apiVersion, + @ApiParam(value = "Schedule id to uniquely identify the schedule request being accepted or rejected.") + @PathParam("scheduleId") String scheduleId, + @ApiParam(value = "Accept or reject approval message") ApprovalMessage approval, + @Context HttpServletRequest request); + + // ****************************************************************** + @GET + @Path("/schedules/scheduleDetails") + @Produces({MediaType.APPLICATION_JSON}) + @ApiOperation(value = "", notes = "Returns a list of Schedule request details based upon the filter criteria.", + response = CmDetailsMessage.class, responseContainer = "List") + @ApiResponses(value = {@ApiResponse(code = 200, message = "OK"), + @ApiResponse(code = 404, message = "No records found", response = CMSRequestError.class), + @ApiResponse(code = 500, message = "Unexpected Runtime error", response = Exception.class)}) + public Response searchScheduleRequestDetails( + @ApiParam(value = "v1") @PathParam("apiVersion") @DefaultValue("v1") String apiVersion, + @ApiParam(value = "Schedule identifier", + allowMultiple = true) @QueryParam("request.scheduleId") String scheduleId, + @ApiParam(value = "Schedule name", + allowMultiple = true) @QueryParam("request.scheduleName") String scheduleName, + @ApiParam(value = "Scheduler creator User id of ", + allowMultiple = true) @QueryParam("request.userId") String userId, + @ApiParam(value = "Schedule status", allowMultiple = true) @QueryParam("request.status") String status, + @ApiParam(value = "Creation date and time (<low date>[,<hi date>])", + allowMultiple = true) @QueryParam("request.createDateTime") String createDateTime, + @ApiParam(value = "Optimizer status", + allowMultiple = true) @QueryParam("request.optimizerStatus") String optimizerStatus, + @ApiParam(value = "Request Approval user id", + allowMultiple = true) @QueryParam("request.approvalUserId") String requestApprovalUserId, + @ApiParam(value = "Request Approval status", + allowMultiple = true) @QueryParam("request.approvalStatus") String requestApprovalStatus, + @ApiParam(value = "Request Approval type", + allowMultiple = true) @QueryParam("request.approvalType") String requestApprovalType, + @ApiParam(value = "Workflow", allowMultiple = true) @QueryParam("WorkflowName") String workflowName, + @ApiParam(value = "VNF Name", allowMultiple = true) @QueryParam("vnfName") String vnfName, + @ApiParam(value = "VNF Id", allowMultiple = true) @QueryParam("vnfId") String vnfId, + @ApiParam(value = "VNF Status", allowMultiple = true) @QueryParam("vnfStatus") String vnfStatus, + // @ApiParam(value="VNF Schedule Id", allowMultiple=true) @QueryParam("vnfScheduleId") + // String + // vnfScheduleId, + @ApiParam(value = "Start time <low>,<high>", + allowMultiple = true) @QueryParam("startTime") String startTime, + @ApiParam(value = "Finish time <low>,<high>", + allowMultiple = true) @QueryParam("finishTime") String finishTime, + @ApiParam(value = "Last instance start time <low>,<high>", + allowMultiple = true) @QueryParam("lastInstanceTime") String lastInstanceTime, + @ApiParam(value = "TM Change Ticket Change Id", + allowMultiple = true) @QueryParam("tmChangeId") String tmChangeId, + // @ApiParam(value="Approval user id", allowMultiple=true) @QueryParam("approvalUserId") + // String approvalUserId, + // @ApiParam(value="Approval status", allowMultiple=true) @QueryParam("approvalStatus") + // String + // approvalStatus, + // @ApiParam(value="Approval type", allowMultiple=true) @QueryParam("approvalType") + // String + // approvalType, + @ApiParam(value = "Maximum number of schedules to return") @QueryParam("maxSchedules") Integer maxSchedules, + @ApiParam(value = "Return schedules > lastScheduleId") @QueryParam("lastScheduleId") String lastScheduleId, + @ApiParam( + value = "Return concurrencyLimit") @QueryParam("request.concurrencyLimit") Integer concurrencyLimit, + @Context UriInfo uri, @Context HttpServletRequest request); + +} diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/CommonServiceImpl.java b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/CommonServiceImpl.java new file mode 100644 index 0000000..52a0928 --- /dev/null +++ b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/CommonServiceImpl.java @@ -0,0 +1,423 @@ +/* + * 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.service.rs; + +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; +import com.fasterxml.jackson.core.JsonProcessingException; +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.servlet.http.HttpServletRequest; +import javax.ws.rs.core.Response.Status; +import org.onap.optf.cmso.common.ApprovalStatusEnum; +import org.onap.optf.cmso.common.ApprovalTypesEnum; +import org.onap.optf.cmso.common.CMSStatusEnum; +import org.onap.optf.cmso.common.DomainsEnum; +import org.onap.optf.cmso.common.LogMessages; +import org.onap.optf.cmso.common.exceptions.CMSException; +import org.onap.optf.cmso.eventq.CMSQueueJob; +import org.onap.optf.cmso.model.ChangeManagementChangeWindow; +import org.onap.optf.cmso.model.ChangeManagementGroup; +import org.onap.optf.cmso.model.ChangeManagementSchedule; +import org.onap.optf.cmso.model.DomainData; +import org.onap.optf.cmso.model.ElementData; +import org.onap.optf.cmso.model.Schedule; +import org.onap.optf.cmso.model.dao.ChangeManagementChangeWindowDAO; +import org.onap.optf.cmso.model.dao.ChangeManagementDetailDAO; +import org.onap.optf.cmso.model.dao.ChangeManagementGroupDAO; +import org.onap.optf.cmso.model.dao.ChangeManagementScheduleDAO; +import org.onap.optf.cmso.model.dao.ElementDataDAO; +import org.onap.optf.cmso.model.dao.ScheduleDAO; +import org.onap.optf.cmso.model.dao.ScheduleQueryDAO; +import org.onap.optf.cmso.service.rs.models.ApprovalMessage; +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.service.rs.models.v2.NameValue; +import org.onap.optf.cmso.service.rs.models.v2.OptimizedScheduleMessage; +import org.onap.optf.cmso.service.rs.models.v2.SchedulingData; +import org.onap.optf.cmso.ticketmgt.TmClient; +import org.onap.optf.cmso.ticketmgt.bean.BuildCreateRequest; +import org.onap.optf.cmso.ticketmgt.bean.TmApprovalStatusEnum; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.env.Environment; +import org.springframework.stereotype.Controller; + +@Controller +public class CommonServiceImpl extends BaseSchedulerServiceImpl { + private static EELFLogger debug = EELFManager.getInstance().getDebugLogger(); + + @Autowired + CMSQueueJob qqJob; + + @Autowired + Environment env; + + @Autowired + ChangeManagementScheduleDAO cmScheduleDAO; + + @Autowired + ChangeManagementGroupDAO cmGroupDAO; + + @Autowired + ChangeManagementChangeWindowDAO cmChangeWindowDAO; + + @Autowired + ChangeManagementDetailDAO cmDetailsDAO; + + @Autowired + ScheduleQueryDAO scheduleQueryDAO; + + @Autowired + ScheduleDAO scheduleDAO; + + @Autowired + ElementDataDAO elementDataDAO; + + @Autowired + TmClient tmClient; + + @Autowired + BuildCreateRequest buildCreateRequest; + + + protected void createSchedule(OptimizedScheduleMessage scheduleMessage, String scheduleId, + HttpServletRequest request) throws CMSException, JsonProcessingException { + if (!scheduleMessage.getDomain().equals(DomainsEnum.ChangeManagement.toString())) { + throw new CMSException(Status.BAD_REQUEST, LogMessages.INVALID_ATTRIBUTE, "domain", + scheduleMessage.getDomain()); + } + if (scheduleMessage.getScheduleId() == null || !scheduleMessage.getScheduleId().equals(scheduleId)) { + throw new CMSException(Status.BAD_REQUEST, LogMessages.INVALID_ATTRIBUTE, "schedulerId", + scheduleMessage.getScheduleId()); + } + // Force the name to be = to the ID because there is no way fot the provide a + // name + scheduleMessage.setScheduleName(scheduleMessage.getScheduleId()); + + List<DomainData> domainData = marshallDomainData(scheduleMessage); + Map<String, List<ElementInfo>> groups = new HashMap<>(); + boolean immediate = validate(scheduleMessage, groups); + Schedule schedule = validateAndAddScheduleRequest(scheduleMessage, domainData); + if (immediate) { + createChangeManagementImmediate(schedule, scheduleMessage, groups); + + // Create automatic approval + ApprovalMessage am = new ApprovalMessage(); + am.setApprovalStatus(ApprovalStatusEnum.Accepted); + am.setApprovalType(ApprovalTypesEnum.Tier2); + am.setApprovalUserId(schedule.getUserId()); + processApproveScheduleRequest(schedule, am, domainData); + + } else { + createChangeManagement(schedule, scheduleMessage, groups); + } + } + + /** + * Returns whether this is an immediate request. + */ + private boolean validate(OptimizedScheduleMessage scheduleMessage, Map<String, List<ElementInfo>> groups) + throws CMSException { + SchedulingData info = scheduleMessage.getSchedulingData(); + boolean immediate = true; + if (info == null) { + throw new CMSException(Status.BAD_REQUEST, LogMessages.UNABLE_TO_PARSE_SCHEDULING_INFO); + } + + if (info.getAdditionalDurationInSeconds() == null) { + throw new CMSException(Status.BAD_REQUEST, LogMessages.MISSING_REQUIRED_ATTRIBUTE, + "additionalDurationInSeconds"); + } + if (info.getNormalDurationInSeconds() == null) { + throw new CMSException(Status.BAD_REQUEST, LogMessages.MISSING_REQUIRED_ATTRIBUTE, + "normalDurationInSeconds"); + } + if (info.getAdditionalDurationInSeconds() < 0) { + throw new CMSException(Status.BAD_REQUEST, LogMessages.INVALID_ATTRIBUTE, "additionalDurationInSeconds", + info.getAdditionalDurationInSeconds().toString()); + } + if (info.getNormalDurationInSeconds() < 1) { + throw new CMSException(Status.BAD_REQUEST, LogMessages.INVALID_ATTRIBUTE, "normalDurationInSeconds", + info.getNormalDurationInSeconds().toString()); + } + if (info.getChangeWindows() != null && info.getChangeWindows().size() > 0) { + for (ChangeWindow cw : info.getChangeWindows()) { + immediate = false; + if (cw.getStartTime() == null) { + throw new CMSException(Status.BAD_REQUEST, LogMessages.MISSING_REQUIRED_ATTRIBUTE, "startTime"); + } + if (cw.getEndTime() == null) { + throw new CMSException(Status.BAD_REQUEST, LogMessages.MISSING_REQUIRED_ATTRIBUTE, "endTime"); + } + Date start = cw.getStartTime(); + Date end = cw.getEndTime(); + if (!end.after(start)) { + throw new CMSException(Status.BAD_REQUEST, LogMessages.INVALID_CHANGE_WINDOW, start.toString(), + end.toString()); + } + } + if (info.getConcurrencyLimit() == null) { + throw new CMSException(Status.BAD_REQUEST, LogMessages.MISSING_REQUIRED_ATTRIBUTE, "concurrencyLimit"); + } + if (info.getConcurrencyLimit() < 1) { + throw new CMSException(Status.BAD_REQUEST, LogMessages.INVALID_ATTRIBUTE, "concurrencyLimit", + info.getConcurrencyLimit().toString()); + } + } + + if (info.getElements() == null || info.getElements().size() == 0) { + throw new CMSException(Status.BAD_REQUEST, LogMessages.MISSING_REQUIRED_ATTRIBUTE, "elements"); + } + + for (ElementInfo element : info.getElements()) { + if (element.getGroupId() == null || element.getGroupId().equals("")) { + element.setElementId("default"); + } + List<ElementInfo> groupedElements = groups.get(element.getGroupId()); + if (groupedElements == null) { + groupedElements = new ArrayList<ElementInfo>(); + groups.put(element.getGroupId(), groupedElements); + } + + groupedElements.add(element); + } + return immediate; + } + + private void createChangeManagement(Schedule schedule, OptimizedScheduleMessage scheduleMessage, + Map<String, List<ElementInfo>> groups) throws CMSException { + SchedulingData schedulingInfo = scheduleMessage.getSchedulingData(); + for (String groupId : groups.keySet()) { + + ChangeManagementGroup cmg = new ChangeManagementGroup(); + cmg.setUuid(UUID.randomUUID()); + cmg.setSchedulesUuid(schedule.getUuid()); + cmg.setGroupId(groupId); + cmg.setPolicyId(schedulingInfo.getPolicies().toString()); + cmg.setNormalDurationInSecs(schedulingInfo.getNormalDurationInSeconds()); + cmg.setAdditionalDurationInSecs(schedulingInfo.getAdditionalDurationInSeconds()); + cmg.setConcurrencyLimit(schedulingInfo.getConcurrencyLimit()); + cmGroupDAO.save(cmg); + for (ChangeWindow cw : schedulingInfo.getChangeWindows()) { + ChangeManagementChangeWindow cmcw = new ChangeManagementChangeWindow(); + cmcw.setUuid(UUID.randomUUID()); + cmcw.setChangeManagementGroupUuid(cmg.getUuid()); + cmcw.setStartTimeMillis(cw.getStartTime().getTime()); + cmcw.setFinishTimeMillis(cw.getEndTime().getTime()); + cmChangeWindowDAO.save(cmcw); + } + + for (ElementInfo element : groups.get(groupId)) { + ChangeManagementSchedule cms = new ChangeManagementSchedule(); + cms.setUuid(UUID.randomUUID()); + cms.setChangeManagementGroupUuid(cmg.getUuid()); + cms.setVnfName(element.getElementId()); + cms.setStatus(CMSStatusEnum.PendingSchedule.toString()); + cms.setRequest(element.getRequest().toString()); + cmScheduleDAO.save(cms); + // Save elementData + saveElementData(cms, element); + } + } + } + + private void saveElementData(ChangeManagementSchedule cms, ElementInfo element) { + List<NameValue> elementData = element.getElementData(); + if (elementData != null) { + for (NameValue nv : elementData) { + ElementData ed = new ElementData(); + ed.setUuid(UUID.randomUUID()); + ed.setChangeManagementSchedulesUuid(cms.getUuid()); + ed.setName(nv.getName()); + // TODO Save as JSON + ed.setValue(nv.getValue().toString()); + elementDataDAO.save(ed); + } + } + + } + + private void createChangeManagementImmediate(Schedule schedule, OptimizedScheduleMessage scheduleMessage, + Map<String, List<ElementInfo>> groups) throws CMSException, JsonProcessingException { + SchedulingData schedulingInfo = scheduleMessage.getSchedulingData(); + for (String groupId : groups.keySet()) { + ChangeManagementGroup cmg = new ChangeManagementGroup(); + cmg.setUuid(UUID.randomUUID()); + cmg.setSchedulesUuid(schedule.getUuid()); + cmg.setGroupId(groupId); + int duration = schedulingInfo.getNormalDurationInSeconds(); + int backout = schedulingInfo.getAdditionalDurationInSeconds(); + cmg.setStartTimeMillis(System.currentTimeMillis()); + cmg.setFinishTimeMillis(System.currentTimeMillis() + ((duration * 1000) + (backout * 1000))); + cmg.setNormalDurationInSecs(duration); + cmg.setAdditionalDurationInSecs(backout); + cmGroupDAO.save(cmg); + for (ElementInfo element : groups.get(groupId)) { + ChangeManagementSchedule cms = new ChangeManagementSchedule(); + cms.setUuid(UUID.randomUUID()); + cms.setChangeManagementGroupUuid(cmg.getUuid()); + cms.setVnfName(element.getElementId()); + cms.setRequest(element.getRequest().toString()); + cms.setStatus(CMSStatusEnum.PendingApproval.toString()); + cmScheduleDAO.save(cms); + } + schedule.setStatus(CMSStatusEnum.PendingApproval.toString()); + scheduleDAO.save(schedule); + } + } + + protected void deleteChangeManagement(Schedule schedule) throws CMSException { + List<ChangeManagementGroup> cmgs = cmGroupDAO.findBySchedulesID(schedule.getUuid()); + + for (ChangeManagementGroup cmg : cmgs) { + List<ChangeManagementSchedule> schedules = cmScheduleDAO.findByChangeManagementGroupId(cmg.getUuid()); + for (ChangeManagementSchedule s : schedules) { + CMSStatusEnum currentState = CMSStatusEnum.Completed.fromString(s.getStatus()); + switch (currentState) { + case Scheduled: + if (s.getTmChangeId() != null && !s.getTmChangeId().equals("")) { + tmClient.cancelTicket(schedule, s, s.getTmChangeId()); + } + s.setStatus(CMSStatusEnum.Cancelled.toString()); + break; + case Triggered: + // Too late... + break; + default: + s.setStatus(CMSStatusEnum.Deleted.toString()); + } + cmScheduleDAO.save(s); + } + } + + } + + // + // Marshall commonData into DB DomainData + // No validation. + // + private List<DomainData> marshallDomainData(OptimizedScheduleMessage scheduleMessage) throws CMSException { + List<NameValue> domainData = scheduleMessage.getCommonData(); + List<DomainData> domainDataList = new ArrayList<DomainData>(); + for (NameValue nameValue : domainData) { + DomainData dd = new DomainData(); + dd.setName(nameValue.getName()); + Object obj = nameValue.getValue(); + String objString = obj.toString(); + // TODO: Store as json + dd.setValue(objString); + domainDataList.add(dd); + } + return domainDataList; + } + + + protected void processApproveScheduleRequest(Schedule sch, ApprovalMessage approval, List<DomainData> domainData) + throws CMSException { + sch = scheduleDAO.lockOne(sch.getUuid()); + String domain = DomainsEnum.ChangeManagement.toString(); + processApproval(sch, domain, approval); + if (sch.getStatus().equals(CMSStatusEnum.Accepted.toString())) { + openTickets(sch, domainData); + } + if (sch.getStatus().equals(CMSStatusEnum.Rejected.toString())) { + updateChangeManagementSchedules(sch, CMSStatusEnum.ApprovalRejected); + } + } + + private void openTickets(Schedule sch, List<DomainData> domainData) throws CMSException { + debug.debug("Entered openTickets scheduleId=" + sch.getScheduleId()); + + Integer maxvnfsperticket = env.getProperty("tm.vnfs.per.ticket", Integer.class, 1); + + List<ChangeManagementGroup> groups = cmGroupDAO.findBySchedulesID(sch.getUuid()); + for (ChangeManagementGroup group : groups) { + + List<ChangeManagementSchedule> schedules = cmScheduleDAO.findByChangeManagementGroupId(group.getUuid()); + List<List<ChangeManagementSchedule>> ticketList = new ArrayList<List<ChangeManagementSchedule>>(); + List<ChangeManagementSchedule> current = null; + for (ChangeManagementSchedule cms : schedules) { + if (current == null || current.size() == maxvnfsperticket) { + current = new ArrayList<ChangeManagementSchedule>(); + ticketList.add(current); + } + current.add(cms); + } + for (List<ChangeManagementSchedule> list : ticketList) { + openTicketForList(sch, group, list, domainData); + } + } + debug.debug("Exited openTickets scheduleId=" + sch.getScheduleId()); + } + + private void openTicketForList(Schedule schedule, ChangeManagementGroup group, List<ChangeManagementSchedule> list, + List<DomainData> domainData) throws CMSException { + List<String> vnfNames = new ArrayList<>(); + for (ChangeManagementSchedule cms : list) { + vnfNames.add(cms.getVnfName()); + } + + debug.debug("Calling createChangeTicket scheduleId=" + schedule.getScheduleId() + ", group=" + + group.getGroupId(), ", vnfNames=" + vnfNames); + String changeId = tmClient.createChangeTicket(schedule, group, vnfNames, domainData); + + // Pre-approve the ticket + for (ChangeManagementSchedule cms : list) { + cms.getTmApprovalStatus(); + cms.setTmChangeId(changeId); + cms.setTmApprovalStatus(TmApprovalStatusEnum.Approved.toString()); + // cms.setStatus(CMSStatusEnum.PendingApproval.toString()); + if (cms.getStartTimeMillis() == null) { + cms.setStatus(CMSStatusEnum.ScheduledImmediate.toString()); + } + else { + cms.setStatus(CMSStatusEnum.Scheduled.toString()); + } + cmScheduleDAO.save(cms); + } + schedule.setStatus(CMSStatusEnum.Scheduled.toString()); + scheduleDAO.save(schedule); + } + + private void updateChangeManagementSchedules(Schedule sch, CMSStatusEnum approvalrejected) { + debug.debug("Entered updateChangeManagementSchedules"); + List<ChangeManagementGroup> groups = cmGroupDAO.findBySchedulesID(sch.getUuid()); + for (ChangeManagementGroup group : groups) { + List<ChangeManagementSchedule> schedules = cmScheduleDAO.findByChangeManagementGroupId(group.getUuid()); + for (ChangeManagementSchedule schedule : schedules) { + schedule.setStatus(approvalrejected.toString()); + cmScheduleDAO.save(schedule); + } + } + debug.debug("Exited updateChangeManagementSchedules"); + } + +} diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/HealthCheck.java b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/HealthCheck.java index fb69e31..981657c 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/HealthCheck.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/HealthCheck.java @@ -31,6 +31,11 @@ package org.onap.optf.cmso.service.rs;
+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.DefaultValue;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
@@ -39,15 +44,8 @@ import javax.ws.rs.Produces; import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
-
import org.onap.optf.cmso.service.rs.models.HealthCheckMessage;
-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("CMSO Administration")
@Path("/{apiVersion}")
@Produces({MediaType.APPLICATION_JSON})
diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/HealthCheckImpl.java b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/HealthCheckImpl.java index 8e6b09e..6f60248 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/HealthCheckImpl.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/HealthCheckImpl.java @@ -1,27 +1,27 @@ /*
* 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.
@@ -31,16 +31,14 @@ package org.onap.optf.cmso.service.rs;
-import java.util.List;
-
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;
-
-import org.onap.optf.cmso.model.ApprovalType;
import org.onap.optf.cmso.model.dao.ApprovalTypeDAO;
-import org.onap.optf.cmso.optimizer.CMSOptimizerClient;
+import org.onap.optf.cmso.optimizer.CmsoOptimizerClient;
import org.onap.optf.cmso.service.rs.models.HealthCheckComponent;
import org.onap.optf.cmso.service.rs.models.HealthCheckMessage;
import org.onap.optf.cmso.sostatus.MsoStatusClient;
@@ -49,24 +47,25 @@ 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;
-
+/**
+ * @author jf9860
+ *
+ */
@Controller
public class HealthCheckImpl implements HealthCheck {
private static EELFLogger debug = EELFManager.getInstance().getDebugLogger();
- @Context
+ @Context
UriInfo uri;
-
+
@Context
HttpServletRequest request;
-
+
@Autowired
TmClient tmClient;
@Autowired
- CMSOptimizerClient optimizerClient;
+ CmsoOptimizerClient optimizerClient;
@Autowired
ApprovalTypeDAO approvalTypeDAO;
@@ -77,6 +76,13 @@ public class HealthCheckImpl implements HealthCheck { @Autowired
MsoStatusClient msoStatusClient;
+ /**
+ * Health check.
+ *
+ * @param apiVersion the api version
+ * @param checkInterfaces the check interfaces
+ * @return the response
+ */
@Override
public Response healthCheck(String apiVersion, Boolean checkInterfaces) {
debug.debug("Entered healthcheck");
@@ -89,30 +95,38 @@ public class HealthCheckImpl implements HealthCheck { addToHealthCheckMessage(hc, msoStatusClient.healthCheck());
addToHealthCheckMessage(hc, optimizerClient.healthCheck());
}
- addToHealthCheckMessage(hc, this.healthCheck());
+ addToHealthCheckMessage(hc, this.healthCheckCrap());
- if (hc.getHealthy())
+ if (hc.getHealthy()) {
response = Response.ok().entity(hc).build();
- else
+ }
+ else {
response = Response.status(Response.Status.BAD_REQUEST).entity(hc).build();
+ }
return response;
}
private void addToHealthCheckMessage(HealthCheckMessage hc, HealthCheckComponent hcc) {
- if (!hcc.getHealthy())
+ if (!hcc.getHealthy()) {
hc.setHealthy(false);
+ }
hc.setHostname(System.getenv("HOSTNAME"));
hc.addComponent(hcc);
}
- public HealthCheckComponent healthCheck() {
+ /**
+ * Health check.
+ *
+ * @return the health check component
+ */
+ private HealthCheckComponent healthCheckCrap() {
HealthCheckComponent hcc = new HealthCheckComponent();
hcc.setName("Scheduler Database");
String url = env.getProperty("spring.datasource.url");
hcc.setUrl(url);
try {
- List<ApprovalType> approvalTypes = approvalTypeDAO.findByDomain("HealthCheck");
+ approvalTypeDAO.findByDomain("HealthCheck");
hcc.setHealthy(true);
hcc.setStatus("OK");
} catch (Exception e) {
diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/ApprovalMessage.java b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/ApprovalMessage.java index 0d43799..f038905 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/ApprovalMessage.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/ApprovalMessage.java @@ -1,27 +1,27 @@ /*
- * 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
- *
+ *
* 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,20 +31,20 @@ package org.onap.optf.cmso.service.rs.models;
-import java.io.Serializable;
-import java.sql.Timestamp;
-import org.onap.optf.cmso.common.ApprovalStatusEnum;
-import org.onap.optf.cmso.common.ApprovalTypesEnum;
import com.att.eelf.configuration.EELFLogger;
import com.att.eelf.configuration.EELFManager;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
+import java.io.Serializable;
+import java.sql.Timestamp;
+import org.onap.optf.cmso.common.ApprovalStatusEnum;
+import org.onap.optf.cmso.common.ApprovalTypesEnum;
/**
* The persistent class for the approval_types database table.
- *
+ *
*/
@ApiModel(value = "Schedule Approval Request", description = "Request to accept or reject an optimized time slot.")
public class ApprovalMessage implements Serializable {
@@ -62,38 +62,84 @@ public class ApprovalMessage implements Serializable { private Timestamp approvalDateTime;
+ /**
+ * Gets the approval user id.
+ *
+ * @return the approval user id
+ */
public String getApprovalUserId() {
return approvalUserId;
}
+ /**
+ * Sets the approval user id.
+ *
+ * @param approvalUserId the new approval user id
+ */
public void setApprovalUserId(String approvalUserId) {
this.approvalUserId = approvalUserId;
}
+ /**
+ * Gets the approval status.
+ *
+ * @return the approval status
+ */
public ApprovalStatusEnum getApprovalStatus() {
return approvalStatus;
}
+ /**
+ * Sets the approval status.
+ *
+ * @param approvalStatus the new approval status
+ */
public void setApprovalStatus(ApprovalStatusEnum approvalStatus) {
this.approvalStatus = approvalStatus;
}
+ /**
+ * Gets the approval type.
+ *
+ * @return the approval type
+ */
public ApprovalTypesEnum getApprovalType() {
return approvalType;
}
+ /**
+ * Sets the approval type.
+ *
+ * @param approvalType the new approval type
+ */
public void setApprovalType(ApprovalTypesEnum approvalType) {
this.approvalType = approvalType;
}
+ /**
+ * Gets the approval date time.
+ *
+ * @return the approval date time
+ */
public Timestamp getApprovalDateTime() {
return approvalDateTime;
}
+ /**
+ * Sets the approval date time.
+ *
+ * @param approvalDateTime the new approval date time
+ */
public void setApprovalDateTime(Timestamp approvalDateTime) {
this.approvalDateTime = approvalDateTime;
}
+ /**
+ * To string.
+ *
+ * @return the string
+ */
+ @Override
public String toString() {
ObjectMapper mapper = new ObjectMapper();
try {
diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/ChangeWindowMessage.java b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/ChangeWindowMessage.java index 58aaa2e..071ab8f 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/ChangeWindowMessage.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/ChangeWindowMessage.java @@ -1,27 +1,27 @@ /*
- * 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
- *
+ *
* 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,16 +31,17 @@ package org.onap.optf.cmso.service.rs.models;
-import java.io.Serializable;
import com.att.eelf.configuration.EELFLogger;
import com.att.eelf.configuration.EELFManager;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
+import java.io.Serializable;
@ApiModel(value = "Change Window",
- description = "Time window within which the scheduler optimizer can schedule the changes for the group of NVFs")
+ description = "Time window within which the scheduler"
+ + " optimizer can schedule the changes for the group of NVFs")
public class ChangeWindowMessage implements Serializable {
private static final long serialVersionUID = 1L;
private static EELFLogger log = EELFManager.getInstance().getLogger(ChangeWindowMessage.class);
@@ -67,6 +68,7 @@ public class ChangeWindowMessage implements Serializable { this.endTime = endTime;
}
+ @Override
public String toString() {
ObjectMapper mapper = new ObjectMapper();
try {
diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/CmDetailsMessage.java b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/CmDetailsMessage.java index b021af9..a526065 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/CmDetailsMessage.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/CmDetailsMessage.java @@ -1,6 +1,6 @@ /*
- * 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.
@@ -31,11 +31,11 @@ package org.onap.optf.cmso.service.rs.models;
+import io.swagger.annotations.ApiModel;
import java.io.Serializable;
import java.util.List;
import org.onap.optf.cmso.model.ChangeManagementDetail;
import org.onap.optf.cmso.model.Schedule;
-import io.swagger.annotations.ApiModel;
/**
* The persistent class for the change_management_groups database table.
diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/CmDomainDataEnum.java b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/CmDomainDataEnum.java index 675a8d9..570fc06 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/CmDomainDataEnum.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/CmDomainDataEnum.java @@ -1,27 +1,27 @@ /*
- * 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
- *
+ *
* 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.
@@ -32,15 +32,10 @@ package org.onap.optf.cmso.service.rs.models;
public enum CmDomainDataEnum {
- WorkflowName(true), CallbackUrl(true), ServiceType(false), VnfType(false), SubscriberName(false), CallbackData(
- true),;
- private final Boolean required;
-
- private CmDomainDataEnum(boolean required) {
- this.required = required;
- }
-
- public boolean isRequired() {
- return required;
- }
+ Scheduler_RequestData,
+ @Deprecated
+ CallbackData,
+ @Deprecated
+ WorkflowName,
+ ;
}
diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/CmsoInfo.java b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/CmsoInfo.java new file mode 100644 index 0000000..e2e4f10 --- /dev/null +++ b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/CmsoInfo.java @@ -0,0 +1,176 @@ +/* + * 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. +*/ + +package org.onap.optf.cmso.service.rs.models; + +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.util.List; + +/** + * The persistent class for the approval_types database table. + * + */ +@ApiModel(value = "Change Management Scheduling Info", description = "Details of schedule being requested") +public class CmsoInfo implements Serializable { + private static EELFLogger log = EELFManager.getInstance().getLogger(CmsoInfo.class); + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "Expected duration (in seconds) of a successful execution of a single VNF change.") + private Integer normalDurationInSeconds; + + @ApiModelProperty( + value = "Additional duration (in seconds) to be added to support backout of an unsuccessful VNF change.") + private Integer additionalDurationInSeconds; + + @ApiModelProperty(value = "Maximum number of VNF changes to schedule concurrently") + private Integer concurrencyLimit; + + @ApiModelProperty( + value = "Name of schedule optimization policy used by" + + " the change management cmso optimizer to determine available time slot") + private String policyId; + + @ApiModelProperty(value = "Lists of the VNFs to be changed and the desired change windows") + private List<VnfDetailsMessage> vnfDetails; + + /** + * To string. + * + * @return the string + */ + @Override + public String toString() { + ObjectMapper mapper = new ObjectMapper(); + try { + return mapper.writeValueAsString(this); + } catch (JsonProcessingException e) { + log.debug("Error in toString()", e); + } + return ""; + } + + /** + * Gets the normal duration in seconds. + * + * @return the normal duration in seconds + */ + public Integer getNormalDurationInSeconds() { + return normalDurationInSeconds; + } + + /** + * Sets the normal duration in seconds. + * + * @param normalDurationInSeconds the new normal duration in seconds + */ + public void setNormalDurationInSeconds(Integer normalDurationInSeconds) { + this.normalDurationInSeconds = normalDurationInSeconds; + } + + /** + * Gets the additional duration in seconds. + * + * @return the additional duration in seconds + */ + public Integer getAdditionalDurationInSeconds() { + return additionalDurationInSeconds; + } + + /** + * Sets the additional duration in seconds. + * + * @param additionalDurationInSeconds the new additional duration in seconds + */ + public void setAdditionalDurationInSeconds(Integer additionalDurationInSeconds) { + this.additionalDurationInSeconds = additionalDurationInSeconds; + } + + /** + * Gets the concurrency limit. + * + * @return the concurrency limit + */ + public Integer getConcurrencyLimit() { + return concurrencyLimit; + } + + /** + * Sets the concurrency limit. + * + * @param concurrencyLimit the new concurrency limit + */ + public void setConcurrencyLimit(Integer concurrencyLimit) { + this.concurrencyLimit = concurrencyLimit; + } + + /** + * Gets the policy id. + * + * @return the policy id + */ + public String getPolicyId() { + return policyId; + } + + /** + * Sets the policy id. + * + * @param policyId the new policy id + */ + public void setPolicyId(String policyId) { + this.policyId = policyId; + } + + /** + * Gets the vnf details. + * + * @return the vnf details + */ + public List<VnfDetailsMessage> getVnfDetails() { + return vnfDetails; + } + + /** + * Sets the vnf details. + * + * @param vnfDetails the new vnf details + */ + public void setVnfDetails(List<VnfDetailsMessage> vnfDetails) { + this.vnfDetails = vnfDetails; + } +} diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/CmsoMessage.java b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/CmsoMessage.java new file mode 100644 index 0000000..e81e212 --- /dev/null +++ b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/CmsoMessage.java @@ -0,0 +1,73 @@ +/* + * 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. +*/ + +package org.onap.optf.cmso.service.rs.models; + +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.swagger.annotations.ApiModel; +import java.io.Serializable; +import org.onap.optf.cmso.common.LogMessages; + +/** + * The persistent class for the approval_types database table. + * + */ +@ApiModel +public class CmsoMessage extends ScheduleMessage implements Serializable { + private static final long serialVersionUID = 1L; + + private static EELFLogger errors = EELFManager.getInstance().getErrorLogger(); + private static EELFLogger debug = EELFManager.getInstance().getDebugLogger(); + + private CmsoInfo schedulingInfo; + + @Override + public CmsoInfo getSchedulingInfo() { + // TODO Auto-generated method stub + return schedulingInfo; + } + + @Override + public void setSchedulingInfo(Object info) { + ObjectMapper mapper = new ObjectMapper(); + try { + String jsonString = mapper.writeValueAsString(info); + schedulingInfo = mapper.readValue(jsonString, CmsoInfo.class); + } catch (Exception e) { + debug.debug(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage()); + errors.error(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage()); + } + + } + +} diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/HealthCheckComponent.java b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/HealthCheckComponent.java index 47d8d57..a9995c2 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/HealthCheckComponent.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/HealthCheckComponent.java @@ -1,27 +1,27 @@ /*
- * 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
- *
+ *
* 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,13 +31,16 @@ package org.onap.optf.cmso.service.rs.models;
-import java.io.Serializable;
import com.att.eelf.configuration.EELFLogger;
import com.att.eelf.configuration.EELFManager;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.swagger.annotations.ApiModel;
+import java.io.Serializable;
+/**
+ * The Class HealthCheckComponent.
+ */
@ApiModel
public class HealthCheckComponent implements Serializable {
private static final long serialVersionUID = 1L;
@@ -48,38 +51,84 @@ public class HealthCheckComponent implements Serializable { private String status;
private Boolean healthy = false;
+ /**
+ * Gets the healthy.
+ *
+ * @return the healthy
+ */
public Boolean getHealthy() {
return healthy;
}
+ /**
+ * Sets the healthy.
+ *
+ * @param healthy the new healthy
+ */
public void setHealthy(Boolean healthy) {
this.healthy = healthy;
}
+ /**
+ * Gets the name.
+ *
+ * @return the name
+ */
public String getName() {
return name;
}
+ /**
+ * Sets the name.
+ *
+ * @param name the new name
+ */
public void setName(String name) {
this.name = name;
}
+ /**
+ * Gets the url.
+ *
+ * @return the url
+ */
public String getUrl() {
return url;
}
+ /**
+ * Sets the url.
+ *
+ * @param url the new url
+ */
public void setUrl(String url) {
this.url = url;
}
+ /**
+ * Gets the status.
+ *
+ * @return the status
+ */
public String getStatus() {
return status;
}
+ /**
+ * Sets the status.
+ *
+ * @param status the new status
+ */
public void setStatus(String status) {
this.status = status;
}
+ /**
+ * To string.
+ *
+ * @return the string
+ */
+ @Override
public String toString() {
ObjectMapper mapper = new ObjectMapper();
try {
diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/HealthCheckMessage.java b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/HealthCheckMessage.java index 02cc65f..2108c13 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/HealthCheckMessage.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/HealthCheckMessage.java @@ -1,27 +1,27 @@ /*
- * 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
- *
+ *
* 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,15 +31,18 @@ package org.onap.optf.cmso.service.rs.models;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
import com.att.eelf.configuration.EELFLogger;
import com.att.eelf.configuration.EELFManager;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.swagger.annotations.ApiModel;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+/**
+ * The Class HealthCheckMessage.
+ */
@ApiModel
public class HealthCheckMessage implements Serializable {
private static final long serialVersionUID = 1L;
@@ -52,50 +55,111 @@ public class HealthCheckMessage implements Serializable { private List<HealthCheckComponent> components = new ArrayList<HealthCheckComponent>();
+ /**
+ * Gets the healthy.
+ *
+ * @return the healthy
+ */
public Boolean getHealthy() {
return healthy;
}
+ /**
+ * Sets the healthy.
+ *
+ * @param healthy the new healthy
+ */
public void setHealthy(Boolean healthy) {
this.healthy = healthy;
}
+ /**
+ * Gets the builds the info.
+ *
+ * @return the builds the info
+ */
public String getBuildInfo() {
return buildInfo;
}
+ /**
+ * Sets the builds the info.
+ *
+ * @param buildInfo the new builds the info
+ */
public void setBuildInfo(String buildInfo) {
this.buildInfo = buildInfo;
}
+ /**
+ * Gets the current time.
+ *
+ * @return the current time
+ */
public String getCurrentTime() {
return currentTime;
}
+ /**
+ * Sets the current time.
+ *
+ * @param currentTime the new current time
+ */
public void setCurrentTime(String currentTime) {
this.currentTime = currentTime;
}
+ /**
+ * Gets the hostname.
+ *
+ * @return the hostname
+ */
public String getHostname() {
return hostname;
}
+ /**
+ * Sets the hostname.
+ *
+ * @param hostname the new hostname
+ */
public void setHostname(String hostname) {
this.hostname = hostname;
}
+ /**
+ * Gets the components.
+ *
+ * @return the components
+ */
public List<HealthCheckComponent> getComponents() {
return components;
}
+ /**
+ * Sets the components.
+ *
+ * @param components the new components
+ */
public void setComponents(List<HealthCheckComponent> components) {
this.components = components;
}
+ /**
+ * Adds the component.
+ *
+ * @param components the components
+ */
public void addComponent(HealthCheckComponent components) {
this.components.add(components);
}
+ /**
+ * To string.
+ *
+ * @return the string
+ */
+ @Override
public String toString() {
ObjectMapper mapper = new ObjectMapper();
try {
diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/ScheduleMessage.java b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/ScheduleMessage.java index a89e818..6fb422a 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/ScheduleMessage.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/ScheduleMessage.java @@ -1,27 +1,27 @@ /*
- * 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
- *
+ *
* 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,27 +31,37 @@ package org.onap.optf.cmso.service.rs.models;
-import java.io.Serializable;
-import java.util.List;
-import java.util.Map;
import com.att.eelf.configuration.EELFLogger;
import com.att.eelf.configuration.EELFManager;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
+import java.io.Serializable;
+import java.util.List;
+import java.util.Map;
/**
* The persistent class for the approval_types database table.
- *
+ *
*/
@ApiModel(value = "Schedule Request", description = "Request to schedule VNF change management workflow(s).")
public abstract class ScheduleMessage implements Serializable {
private static final long serialVersionUID = 1L;
private static EELFLogger log = EELFManager.getInstance().getLogger(ScheduleMessage.class);
+ /**
+ * Gets the scheduling info.
+ *
+ * @return the scheduling info
+ */
public abstract Object getSchedulingInfo();
+ /**
+ * Sets the scheduling info.
+ *
+ * @param info the new scheduling info
+ */
public abstract void setSchedulingInfo(Object info);
// public abstract void setSchedulingInfo(Object schedulingInfo);
@@ -71,46 +81,102 @@ public abstract class ScheduleMessage implements Serializable { @ApiModelProperty(value = "Domain data as name value/pairs. (i.e. CallbackUrl, CallbackData, WorkflowName)")
private List<Map<String, String>> domainData;
+ /**
+ * Gets the domain.
+ *
+ * @return the domain
+ */
public String getDomain() {
return domain;
}
+ /**
+ * Sets the domain.
+ *
+ * @param domain the new domain
+ */
public void setDomain(String domain) {
this.domain = domain;
}
+ /**
+ * Gets the schedule id.
+ *
+ * @return the schedule id
+ */
public String getScheduleId() {
return scheduleId;
}
+ /**
+ * Sets the schedule id.
+ *
+ * @param scheduleId the new schedule id
+ */
public void setScheduleId(String scheduleId) {
this.scheduleId = scheduleId;
}
+ /**
+ * Gets the schedule name.
+ *
+ * @return the schedule name
+ */
public String getScheduleName() {
return scheduleName;
}
+ /**
+ * Sets the schedule name.
+ *
+ * @param scheduleName the new schedule name
+ */
public void setScheduleName(String scheduleName) {
this.scheduleName = scheduleName;
}
+ /**
+ * Gets the user id.
+ *
+ * @return the user id
+ */
public String getUserId() {
return userId;
}
+ /**
+ * Sets the user id.
+ *
+ * @param userId the new user id
+ */
public void setUserId(String userId) {
this.userId = userId;
}
+ /**
+ * Gets the domain data.
+ *
+ * @return the domain data
+ */
public List<Map<String, String>> getDomainData() {
return domainData;
}
+ /**
+ * Sets the domain data.
+ *
+ * @param domainData the domain data
+ */
public void setDomainData(List<Map<String, String>> domainData) {
this.domainData = domainData;
}
+ /**
+ * To string.
+ *
+ * @return the string
+ */
+ @Override
public String toString() {
ObjectMapper mapper = new ObjectMapper();
try {
diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/VnfDetailsMessage.java b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/VnfDetailsMessage.java index b1dde5d..4940c98 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/VnfDetailsMessage.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/VnfDetailsMessage.java @@ -1,27 +1,27 @@ /*
- * 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
- *
+ *
* 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,15 +31,18 @@ package org.onap.optf.cmso.service.rs.models;
-import java.io.Serializable;
-import java.util.List;
import com.att.eelf.configuration.EELFLogger;
import com.att.eelf.configuration.EELFManager;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
+import java.io.Serializable;
+import java.util.List;
+/**
+ * The Class VnfDetailsMessage.
+ */
@ApiModel(value = "VNF Details", description = "Details and scheduling criteria for the VNFs to be changed.")
public class VnfDetailsMessage implements Serializable {
private static final long serialVersionUID = 1L;
@@ -52,33 +55,70 @@ public class VnfDetailsMessage implements Serializable { private List<String> node;
@ApiModelProperty(
- value = "Lists of desired change windows that the optimizer can select from. (Only 1 change window supported at this time)")
+ value = "Lists of desired change windows that the optimize"
+ + "r can select from. (Only 1 change window supported at this time)")
private List<ChangeWindowMessage> changeWindow;
+ /**
+ * Gets the group id.
+ *
+ * @return the group id
+ */
public String getGroupId() {
return groupId;
}
+ /**
+ * Sets the group id.
+ *
+ * @param groupId the new group id
+ */
public void setGroupId(String groupId) {
this.groupId = groupId;
}
+ /**
+ * Gets the node.
+ *
+ * @return the node
+ */
public List<String> getNode() {
return node;
}
+ /**
+ * Sets the node.
+ *
+ * @param node the new node
+ */
public void setNode(List<String> node) {
this.node = node;
}
+ /**
+ * Gets the change window.
+ *
+ * @return the change window
+ */
public List<ChangeWindowMessage> getChangeWindow() {
return changeWindow;
}
+ /**
+ * Sets the change window.
+ *
+ * @param changeWindow the new change window
+ */
public void setChangeWindow(List<ChangeWindowMessage> changeWindow) {
this.changeWindow = changeWindow;
}
+ /**
+ * To string.
+ *
+ * @return the string
+ */
+ @Override
public String toString() {
ObjectMapper mapper = new ObjectMapper();
try {
diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/v2/ChangeWindow.java b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/v2/ChangeWindow.java index 7553c87..5aab6ac 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/v2/ChangeWindow.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/v2/ChangeWindow.java @@ -1,79 +1,99 @@ /* - * 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.service.rs.models.v2; -import java.io.Serializable; -import java.util.Date; - -import org.springframework.format.annotation.DateTimeFormat; - import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; - import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.util.Date; +import org.springframework.format.annotation.DateTimeFormat; -@ApiModel(value = "Change Window", - description = "Time window for which tickets are to returned") +/** + * The Class ChangeWindow. + */ +@ApiModel(value = "Change Window", description = "Time window for which tickets are to returned") public class ChangeWindow implements Serializable { private static final long serialVersionUID = 1L; private static EELFLogger log = EELFManager.getInstance().getLogger(ChangeWindow.class); @ApiModelProperty(value = "Earliest time for which changes may begin.") - @DateTimeFormat(pattern="yyyy-MM-dd'T'hh:mm:ss'Z'") + @DateTimeFormat(pattern = "yyyy-MM-dd'T'hh:mm:ss'Z'") private Date startTime; @ApiModelProperty(value = "Latest time by which all changes must be completed.") - @DateTimeFormat(pattern="yyyy-MM-dd'T'hh:mm:ss'Z'") + @DateTimeFormat(pattern = "yyyy-MM-dd'T'hh:mm:ss'Z'") private Date endTime; + /** + * Gets the start time. + * + * @return the start time + */ public Date getStartTime() { return startTime; } + /** + * Sets the start time. + * + * @param startTime the new start time + */ public void setStartTime(Date startTime) { this.startTime = startTime; } + /** + * Gets the end time. + * + * @return the end time + */ public Date getEndTime() { return endTime; } + /** + * Sets the end time. + * + * @param endTime the new end time + */ public void setEndTime(Date endTime) { this.endTime = endTime; } + /** + * To string. + * + * @return the string + */ + @Override public String toString() { ObjectMapper mapper = new ObjectMapper(); try { diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/v2/ElementInfo.java b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/v2/ElementInfo.java index 35649ea..57619a9 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/v2/ElementInfo.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/v2/ElementInfo.java @@ -1,46 +1,49 @@ -/******************************************************************************* - * - * Copyright © 2019 AT&T Intellectual Property. - * - * 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.service.rs.models.v2; +/** + * ***************************************************************************** + * + * <p> + * Copyright © 2019 AT&T Intellectual Property. + * + * <p> + * 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 + * + * <p> + * http://www.apache.org/licenses/LICENSE-2.0 + * + * <p> + * 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. + * + * <p> + * 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 + * + * <p> + * https://creativecommons.org/licenses/by/4.0/ + * + * <p> + * 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. + * **************************************************************************** + */ -import java.io.Serializable; -import java.util.ArrayList; -import java.util.List; +package org.onap.optf.cmso.service.rs.models.v2; import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; - import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; @ApiModel(value = "Optimizer Element", description = "Element to be scheduled.") public class ElementInfo implements Serializable { @@ -56,32 +59,43 @@ public class ElementInfo implements Serializable { @ApiModelProperty(value = "Request for be scheduled.") public Object request; - public String getElementId() { - return elementId; - } + @ApiModelProperty(value = "VNF group identifier.") + public String groupId; - public void setElementId(String elementId) { - this.elementId = elementId; - } + public String getElementId() { + return elementId; + } + public void setElementId(String elementId) { + this.elementId = elementId; + } - public List<NameValue> getElementData() { - return elementData; - } + public List<NameValue> getElementData() { + return elementData; + } - public void setElementData(List<NameValue> elementData) { - this.elementData = elementData; - } + public void setElementData(List<NameValue> elementData) { + this.elementData = elementData; + } - public Object getRequest() { - return request; - } + public Object getRequest() { + return request; + } - public void setRequest(Object request) { - this.request = request; - } + public void setRequest(Object request) { + this.request = request; + } + + public String getGroupId() { + return groupId; + } + + public void setGroupId(String groupId) { + this.groupId = groupId; + } - public String toString() { + @Override + public String toString() { ObjectMapper mapper = new ObjectMapper(); try { return mapper.writeValueAsString(this); diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/v2/NameValue.java b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/v2/NameValue.java index 9b71f76..1bd0d3c 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/v2/NameValue.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/v2/NameValue.java @@ -1,91 +1,119 @@ /* - * 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.service.rs.models.v2; -import java.io.Serializable; - import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; - import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; -@ApiModel(value = "Name Value Data", - description = "Instance of a name/value") +/** + * The Class NameValue. + */ +@ApiModel(value = "Name Value Data", description = "Instance of a name/value") public class NameValue implements Serializable { private static final long serialVersionUID = 1L; private static EELFLogger log = EELFManager.getInstance().getLogger(NameValue.class); - public NameValue() - { - + /** + * Instantiates a new name value. + */ + public NameValue() { + } - public NameValue(String name, Object value) - { - this.name = name; - this.value = value; + /** + * Instantiates a new name value. + * + * @param name the name + * @param value the value + */ + public NameValue(String name, Object value) { + this.name = name; + this.value = value; } - + @ApiModelProperty(value = "Name.") private String name; @ApiModelProperty(value = "Value.") private Object value; - - + + + /** + * Gets the name. + * + * @return the name + */ public String getName() { - return name; - } + return name; + } - public void setName(String name) { - this.name = name; - } + /** + * Sets the name. + * + * @param name the new name + */ + public void setName(String name) { + this.name = name; + } - public Object getValue() { - return value; - } + /** + * Gets the value. + * + * @return the value + */ + public Object getValue() { + return value; + } - public void setValue(Object value) { - this.value = value; - } + /** + * Sets the value. + * + * @param value the new value + */ + public void setValue(Object value) { + this.value = value; + } - public String toString() { + /** + * To string. + * + * @return the string + */ + @Override + public String toString() { ObjectMapper mapper = new ObjectMapper(); try { return mapper.writeValueAsString(this); diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/v2/OptimizedScheduleMessage.java b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/v2/OptimizedScheduleMessage.java new file mode 100644 index 0000000..ac7037a --- /dev/null +++ b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/v2/OptimizedScheduleMessage.java @@ -0,0 +1,189 @@ +/* + * 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. + */ + +package org.onap.optf.cmso.service.rs.models.v2; + +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.util.List; + +/** + * The persistent class for the approval_types database table. + * + */ +@ApiModel(value = "Optimized Schedule Request", description = "Request to schedule VNF change management workflow(s).") +public class OptimizedScheduleMessage implements Serializable { + private static final long serialVersionUID = 1L; + private static EELFLogger log = EELFManager.getInstance().getLogger(OptimizedScheduleMessage.class); + + @ApiModelProperty(value = "Schedule domain : ChangeManagement") + private String domain; + + @ApiModelProperty(value = "Schedule id that must be unique within the domain. Use of UUID is highly recommended.") + private String scheduleId; + + @ApiModelProperty(value = "User provided name of the schedule (deaults to scheduleId") + private String scheduleName; + + @ApiModelProperty(value = "ATTUID of the user requesting the schedule.") + private String userId; + + @ApiModelProperty(value = "Implementation specific name value pairs.") + private List<NameValue> commonData; + + @ApiModelProperty(value = "Scheduling data.") + private SchedulingData schedulingData; + + /** + * Gets the domain. + * + * @return the domain + */ + public String getDomain() { + return domain; + } + + /** + * Sets the domain. + * + * @param domain the new domain + */ + public void setDomain(String domain) { + this.domain = domain; + } + + /** + * Gets the schedule id. + * + * @return the schedule id + */ + public String getScheduleId() { + return scheduleId; + } + + /** + * Sets the schedule id. + * + * @param scheduleId the new schedule id + */ + public void setScheduleId(String scheduleId) { + this.scheduleId = scheduleId; + } + + /** + * Gets the schedule name. + * + * @return the schedule name + */ + public String getScheduleName() { + return scheduleName; + } + + /** + * Sets the schedule name. + * + * @param scheduleName the new schedule name + */ + public void setScheduleName(String scheduleName) { + this.scheduleName = scheduleName; + } + + /** + * Gets the user id. + * + * @return the user id + */ + public String getUserId() { + return userId; + } + + /** + * Sets the user id. + * + * @param userId the new user id + */ + public void setUserId(String userId) { + this.userId = userId; + } + + /** + * Gets the common data. + * + * @return the common data + */ + public List<NameValue> getCommonData() { + return commonData; + } + + /** + * Sets the common data. + * + * @param commonData the new common data + */ + public void setCommonData(List<NameValue> commonData) { + this.commonData = commonData; + } + + /** + * Gets the scheduling data. + * + * @return the scheduling data + */ + public SchedulingData getSchedulingData() { + return schedulingData; + } + + /** + * Sets the scheduling data. + * + * @param schedulingData the new scheduling data + */ + public void setSchedulingData(SchedulingData schedulingData) { + this.schedulingData = schedulingData; + } + + /** + * To string. + * + * @return the string + */ + @Override + public String toString() { + ObjectMapper mapper = new ObjectMapper(); + try { + return mapper.writeValueAsString(this); + } catch (JsonProcessingException e) { + log.debug("Error in toString()", e); + } + return ""; + } + +} diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/v2/PolicyInfo.java b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/v2/PolicyInfo.java new file mode 100644 index 0000000..1bf47c0 --- /dev/null +++ b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/v2/PolicyInfo.java @@ -0,0 +1,78 @@ +/******************************************************************************* + * + * Copyright © 2019 AT&T Intellectual Property. + * + * 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.service.rs.models.v2; + +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +@ApiModel(value = "Supported Policy Information", description = "Policy Information returned from get policies API.") +public class PolicyInfo implements Serializable { + private static final long serialVersionUID = 1L; + private static EELFLogger log = EELFManager.getInstance().getLogger(PolicyInfo.class); + + @ApiModelProperty(value = "Policy name") + private String policyName; + + @ApiModelProperty(value = "Named values to modify/override policy attributes.") + public List<NameValue> policyModifiers = new ArrayList<>(); + + public String getPolicyName() { + return policyName; + } + + public void setPolicyName(String policyName) { + this.policyName = policyName; + } + + + public List<NameValue> getPolicyModifiers() { + return policyModifiers; + } + + public void setPolicyModifiers(List<NameValue> policyModifiers) { + this.policyModifiers = policyModifiers; + } + + @Override + public String toString() { + ObjectMapper mapper = new ObjectMapper(); + try { + return mapper.writeValueAsString(this); + } catch (JsonProcessingException e) { + log.debug("Error in toString()", e); + } + return ""; + } +} diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/v2/SchedulingData.java b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/v2/SchedulingData.java new file mode 100644 index 0000000..e1e0d91 --- /dev/null +++ b/cmso-service/src/main/java/org/onap/optf/cmso/service/rs/models/v2/SchedulingData.java @@ -0,0 +1,193 @@ +/* + * 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. + */ + +package org.onap.optf.cmso.service.rs.models.v2; + +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +/** + * The persistent class for the approval_types database table. + * + */ +@ApiModel(value = "Change Management Scheduling Info", description = "Details of schedule being requested") +public class SchedulingData implements Serializable { + private static EELFLogger log = EELFManager.getInstance().getLogger(SchedulingData.class); + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "Expected duration (in seconds) of a successful execution of a single VNF change.") + private Integer normalDurationInSeconds; + + @ApiModelProperty( + value = "Additional duration (in seconds) to be added" + + " to support backout of an unsuccessful VNF change.") + private Integer additionalDurationInSeconds; + + @ApiModelProperty(value = "Maximum number of VNF changes to schedule concurrently") + private Integer concurrencyLimit; + + @ApiModelProperty(value = "Lists of desired change windows to schedule the elements.") + private List<ChangeWindow> changeWindows = new ArrayList<>(); + + @ApiModelProperty(value = "List of the policies to control optimization.") + private List<PolicyInfo> policies = new ArrayList<>(); + + @ApiModelProperty(value = "Lists of the VNFs to be changed and the desired change windows") + private List<ElementInfo> elements; + + /** + * To string. + * + * @return the string + */ + @Override + public String toString() { + ObjectMapper mapper = new ObjectMapper(); + try { + return mapper.writeValueAsString(this); + } catch (JsonProcessingException e) { + log.debug("Error in toString()", e); + } + return ""; + } + + /** + * Gets the normal duration in seconds. + * + * @return the normal duration in seconds + */ + public Integer getNormalDurationInSeconds() { + return normalDurationInSeconds; + } + + /** + * Sets the normal duration in seconds. + * + * @param normalDurationInSeconds the new normal duration in seconds + */ + public void setNormalDurationInSeconds(Integer normalDurationInSeconds) { + this.normalDurationInSeconds = normalDurationInSeconds; + } + + /** + * Gets the additional duration in seconds. + * + * @return the additional duration in seconds + */ + public Integer getAdditionalDurationInSeconds() { + return additionalDurationInSeconds; + } + + /** + * Sets the additional duration in seconds. + * + * @param additionalDurationInSeconds the new additional duration in seconds + */ + public void setAdditionalDurationInSeconds(Integer additionalDurationInSeconds) { + this.additionalDurationInSeconds = additionalDurationInSeconds; + } + + /** + * Gets the concurrency limit. + * + * @return the concurrency limit + */ + public Integer getConcurrencyLimit() { + return concurrencyLimit; + } + + /** + * Sets the concurrency limit. + * + * @param concurrencyLimit the new concurrency limit + */ + public void setConcurrencyLimit(Integer concurrencyLimit) { + this.concurrencyLimit = concurrencyLimit; + } + + /** + * Gets the change windows. + * + * @return the change windows + */ + public List<ChangeWindow> getChangeWindows() { + return changeWindows; + } + + /** + * Sets the change windows. + * + * @param changeWindows the new change windows + */ + public void setChangeWindows(List<ChangeWindow> changeWindows) { + this.changeWindows = changeWindows; + } + + /** + * Gets the policies. + * + * @return the policies + */ + public List<PolicyInfo> getPolicies() { + return policies; + } + + /** + * Sets the policies. + * + * @param policies the new policies + */ + public void setPolicies(List<PolicyInfo> policies) { + this.policies = policies; + } + + /** + * Gets the elements. + * + * @return the elements + */ + public List<ElementInfo> getElements() { + return elements; + } + + /** + * Sets the elements. + * + * @param elements the new elements + */ + public void setElements(List<ElementInfo> elements) { + this.elements = elements; + } + +} diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/so/bean/MsoOrchestrationQueryResponse.java b/cmso-service/src/main/java/org/onap/optf/cmso/so/bean/MsoOrchestrationQueryResponse.java index 2e46be0..1d4070e 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/so/bean/MsoOrchestrationQueryResponse.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/so/bean/MsoOrchestrationQueryResponse.java @@ -1,6 +1,6 @@ /*
- * 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.
@@ -32,7 +32,7 @@ package org.onap.optf.cmso.so.bean;
public class MsoOrchestrationQueryResponse {
- public enum MSO_STATUS {
+ public enum MsoStatus {
UNKNOWN, COMPLETE, FAILED, IN_PROGRESS,
}
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 7a7821e..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,40 +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;
@@ -42,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;
@@ -87,21 +80,33 @@ public class MsoStatusClient { @Autowired
PropertiesManagement pm;
- public void execute(Integer id) throws JobExecutionException {
+ /**
+ * 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 {
- ChangeManagementSchedule cmSchedule = cmScheduleDAO.lockOne(id);
+ 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<String, String> mdcSave = Mdc.save();
@@ -111,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;
@@ -130,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) {
@@ -159,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");
@@ -189,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");
@@ -198,7 +202,7 @@ public class MsoStatusClient { Mdc.restore(mdcSave);
}
// Propagate final MSO status to top level
- cmScheduleDAO.save(cmSchedule);
+ cmScheduleDao.save(cmSchedule);
propagateStatus(cmSchedule);
}
@@ -212,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;
@@ -230,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<String, String> 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();
@@ -253,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 df9f361..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,36 +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;
@@ -42,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
@@ -61,7 +57,7 @@ public class MsoStatusJob implements Job { MsoStatusClient mso;
@Autowired
- ChangeManagementScheduleDAO cmScheduleDAO;
+ ChangeManagementScheduleDAO cmScheduleDao;
@Autowired
Environment env;
@@ -73,20 +69,21 @@ public class MsoStatusJob implements Job { @Override
public void execute(JobExecutionContext context) throws JobExecutionException {
Mdc.quartzJobBegin(context);
- Integer id = context.getJobDetail().getJobDataMap().getInt(ContextKeys.scheduleId.toString());
+ String id = context.getJobDetail().getJobDataMap().getString(ContextKeys.scheduleId.toString());
String requestId = context.getJobDetail().getJobDataMap().getString(ContextKeys.msoRequestId.toString());
debug.debug(LogMessages.MSO_STATUS_JOB, "Entered", requestId, id.toString());
try {
- ChangeManagementSchedule cmSchedule = cmScheduleDAO.findById(id).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.toString(), requestId);
+ log.warn(LogMessages.MSO_POLLING_MISSING_SCHEDULE, id, requestId);
return;
}
mso.poll(cmSchedule);
} catch (Exception e) {
errors.error(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage());
}
- debug.debug(LogMessages.MSO_STATUS_JOB, "Exited", requestId, id.toString());
+ debug.debug(LogMessages.MSO_STATUS_JOB, "Exited", requestId, id);
}
}
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 c3254aa..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,23 +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;
@@ -61,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
@@ -75,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;
@@ -86,15 +84,21 @@ 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<ChangeManagementSchedule> list = cmScheduleDAO.findAllTriggered();
+ List<ChangeManagementSchedule> list = cmScheduleDao.findAllTriggered();
for (ChangeManagementSchedule s : list) {
- debug.debug("Dispathcing to check status of CM schedule Id=" + s.getId());
- dispatchMso(s.getId());
+ debug.debug("Dispathcing to check status of CM schedule Id=" + s.getUuid());
+ dispatchMso(s.getUuid());
}
} catch (Exception e) {
Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage());
@@ -103,10 +107,10 @@ public class ScheduleStatusJob implements Job { //
// Update overall status of in flight schedules including closing tickets
- List<Schedule> list = scheduleDAO.findAllInProgress(DomainsEnum.ChangeManagement.toString());
+ List<Schedule> list = scheduleDao.findAllInProgress(DomainsEnum.ChangeManagement.toString());
for (Schedule s : list) {
debug.debug("Dispatching to check status of scheduleId=" + s.getScheduleId());
- dispatchScheduleStatusChecker(s.getId());
+ dispatchScheduleStatusChecker(s.getUuid());
}
} catch (Exception e) {
Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage());
@@ -114,17 +118,22 @@ public class ScheduleStatusJob implements Job { debug.debug(LogMessages.SCHEDULE_STATUS_JOB, "Exited");
}
- public void dispatchScheduleStatusChecker(Integer id) {
+ /**
+ * Dispatch schedule status checker.
+ *
+ * @param uuid the uuid
+ */
+ public void dispatchScheduleStatusChecker(UUID uuid) {
Map<String, String> mdcSave = Mdc.save();
try {
String url = env.getProperty("cmso.dispatch.url", "http://localhost:8089");
String path = env.getProperty("cmso.dispatch.status.path", "/cmso/dispatch/schedulestatus/");
- url = url + path + id;
+ url = url + path + uuid;
String user = env.getProperty("mechid.user", "");
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;
@@ -152,17 +161,22 @@ public class ScheduleStatusJob implements Job { }
- public void dispatchMso(Integer id) {
+ /**
+ * Dispatch mso.
+ *
+ * @param uuid the uuid
+ */
+ public void dispatchMso(UUID uuid) {
Map<String, String> mdcSave = Mdc.save();
try {
String url = env.getProperty("cmso.dispatch.url", "http://localhost:8089");
String path = env.getProperty("cmso.dispatch.sostatus.path", "/cmso/dispatch/sostatus/");
- url = url + path + id;
+ url = url + path + uuid;
String user = env.getProperty("mechid.user", "");
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<String, String> 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<String> nodes = new ArrayList<String>();
- // 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<String, CMSchedule> map = new HashMap<String, CMSchedule>();
- 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<OptimizerScheduleInfo> 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<OptimizerScheduleInfo> getSchedules(OptimizerRequest request) {
+ List<OptimizerScheduleInfo> list = new ArrayList<>();
+ OptimizerScheduleInfo osi = new OptimizerScheduleInfo();
+ List<ScheduledElement> scheduledList = new ArrayList<>();
+ List<UnScheduledElement> unscheduledList = new ArrayList<>();
+ osi.setScheduledElements(scheduledList);
+ osi.setUnScheduledElements(unscheduledList);
+ list.add(osi);
+
+
+ List<ChangeWindow> 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<String, String> nodes = new HashMap<>();
+ List<String> 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<String, Map<String, Long>> startAndFinishTimeMap = new HashMap<String, Map<String, Long>>();
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<String, Long> 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);
}
diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/test/loopback/TicketMgtLoopbackServiceImpl.java b/cmso-service/src/main/java/org/onap/optf/cmso/test/loopback/TicketMgtLoopbackServiceImpl.java index 1c87f66..4fd3914 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/test/loopback/TicketMgtLoopbackServiceImpl.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/test/loopback/TicketMgtLoopbackServiceImpl.java @@ -1,36 +1,35 @@ /*
- * 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.JsonNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
import java.util.HashMap;
import java.util.Map;
import javax.ws.rs.core.Response;
@@ -42,16 +41,10 @@ import org.onap.optf.cmso.ticketmgt.bean.TmStatusEnum; 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;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.node.ObjectNode;
@Controller
public class TicketMgtLoopbackServiceImpl implements TicketMgtLoopbackService {
- private static EELFLogger log = EELFManager.getInstance().getLogger(TicketMgtLoopbackServiceImpl.class);
private static EELFLogger debug = EELFManager.getInstance().getDebugLogger();
- private static EELFLogger errors = EELFManager.getInstance().getErrorLogger();
@Autowired
Environment env;
diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/ticketmgt/TmClient.java b/cmso-service/src/main/java/org/onap/optf/cmso/ticketmgt/TmClient.java index c3b9be8..c8cae12 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/ticketmgt/TmClient.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/ticketmgt/TmClient.java @@ -1,36 +1,37 @@ /*
- * 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.ticketmgt;
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.HashMap;
@@ -38,7 +39,6 @@ import java.util.Iterator; 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;
@@ -48,7 +48,6 @@ 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 org.apache.commons.text.StringSubstitutor;
import org.joda.time.format.ISODateTimeFormat;
import org.onap.observations.Mdc;
@@ -58,7 +57,7 @@ import org.onap.optf.cmso.common.CmHelpers; import org.onap.optf.cmso.common.LogMessages;
import org.onap.optf.cmso.common.PropertiesManagement;
import org.onap.optf.cmso.common.exceptions.CMSException;
-import org.onap.optf.cmso.filters.CMSOClientFilters;
+import org.onap.optf.cmso.filters.CmsoClientFilters;
import org.onap.optf.cmso.model.ChangeManagementGroup;
import org.onap.optf.cmso.model.ChangeManagementSchedule;
import org.onap.optf.cmso.model.DomainData;
@@ -76,13 +75,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;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ArrayNode;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-
+/**
+ * The Class TmClient.
+ */
@Component
public class TmClient {
private static EELFLogger debug = EELFManager.getInstance().getDebugLogger();
@@ -94,7 +89,7 @@ public class TmClient { PropertiesManagement pm;
@Autowired
- ChangeManagementScheduleDAO cmScheduleDAO;
+ ChangeManagementScheduleDAO cmScheduleDao;
@Autowired
BuildCreateRequest buildCreateRequest;
@@ -102,8 +97,18 @@ public class TmClient { @Autowired
TmEndpoints tmEndpoints;
+ /**
+ * Creates the change ticket.
+ *
+ * @param schedule the schedule
+ * @param group the group
+ * @param vnfNames the vnf names
+ * @param domainData the domain data
+ * @return the string
+ * @throws CMSException the CMS exception
+ */
public String createChangeTicket(Schedule schedule, ChangeManagementGroup group, List<String> vnfNames,
- List<DomainData> domainData) throws CMSException {
+ List<DomainData> domainData) throws CMSException {
String changeId = "";
String workflowName = CmHelpers.getDomainData(domainData, CmDomainDataEnum.WorkflowName);
@@ -115,15 +120,34 @@ public class TmClient { return changeId;
}
+ /**
+ * Close ticket.
+ *
+ * @param schedule the schedule
+ * @param group the group
+ * @param cmSchedules the cm schedules
+ * @param changeId the change id
+ * @param closureCode the closure code
+ * @param closingComments the closing comments
+ * @throws CMSException the CMS exception
+ */
public void closeTicket(Schedule schedule, ChangeManagementGroup group, List<ChangeManagementSchedule> cmSchedules,
- String changeId, ClosureCode closureCode, String closingComments) throws CMSException {
+ String changeId, ClosureCode closureCode, String closingComments) throws CMSException {
Map<String, Object> variables =
- getCloseVariables(schedule, group, cmSchedules, changeId, closureCode, closingComments);
+ getCloseVariables(schedule, group, cmSchedules, changeId, closureCode, closingComments);
JsonNode closeChangeRecord = buildCreateRequest.createCloseCancelChangeRecord(variables);
debug.debug("closeChangeRecord=" + closeChangeRecord.toString());
postCloseChangeTicket(closeChangeRecord, schedule.getScheduleId(), changeId);
}
+ /**
+ * Cancel ticket.
+ *
+ * @param schedule the schedule
+ * @param cms the cms
+ * @param changeId the change id
+ * @throws CMSException the CMS exception
+ */
public void cancelTicket(Schedule schedule, ChangeManagementSchedule cms, String changeId) throws CMSException {
Map<String, Object> variables = getCancelVariables(schedule, changeId);
JsonNode cancelChangeRecord = buildCreateRequest.createCancelChangeRecord(variables);
@@ -131,6 +155,14 @@ public class TmClient { postCloseChangeTicket(cancelChangeRecord, schedule.getScheduleId(), changeId);
}
+ /**
+ * Update ticket.
+ *
+ * @param schedule the schedule
+ * @param cms the cms
+ * @param changeId the change id
+ * @throws CMSException the CMS exception
+ */
public void updateTicket(Schedule schedule, ChangeManagementSchedule cms, String changeId) throws CMSException {
Map<String, Object> variables = getUpdateVariables(schedule, changeId);
JsonNode updateChangeRecord = buildCreateRequest.createUpdateChangeRecord(variables);
@@ -138,6 +170,12 @@ public class TmClient { postUpdateChangeTicket(updateChangeRecord, schedule.getScheduleId(), changeId);
}
+ /**
+ * Gets the change ticket.
+ *
+ * @param changeId the change id
+ * @return the change ticket
+ */
public TmChangeInfo getChangeTicket(String changeId) {
Map<String, String> mdcSave = Mdc.save();
try {
@@ -155,7 +193,7 @@ public class TmClient { break;
default: {
Observation.report(LogMessages.UNEXPECTED_RESPONSE, "TM", String.valueOf(response.getStatus()),
- response.toString());
+ response.toString());
}
}
} catch (Exception e) {
@@ -167,29 +205,37 @@ public class TmClient { }
private Map<String, Object> getCloseVariables(Schedule schedule, ChangeManagementGroup group,
- List<ChangeManagementSchedule> cmSchedules, String changeId, ClosureCode closureCode,
- String closingComments) {
+ List<ChangeManagementSchedule> cmSchedules, String changeId, ClosureCode closureCode,
+ String closingComments) {
String requesterId = schedule.getUserId();
- Map<String, Object> variables = new HashMap<String, Object>();
- if (requesterId.length() > Variables.requesterId.getMaxLength())
+ if (requesterId.length() > Variables.requesterId.getMaxLength()) {
requesterId = requesterId.substring(0, Variables.requesterId.getMaxLength());
+ }
long actualStartDate = 0;
long actualEndDate = 0;
for (ChangeManagementSchedule cms : cmSchedules) {
- if (cms.getDispatchTimeMillis() != null)
- if (actualStartDate == 0 || cms.getDispatchTimeMillis() < actualStartDate)
+ if (cms.getDispatchTimeMillis() != null) {
+ if (actualStartDate == 0 || cms.getDispatchTimeMillis() < actualStartDate) {
actualStartDate = cms.getDispatchTimeMillis();
- if (cms.getExecutionCompletedTimeMillis() != null)
- if (cms.getExecutionCompletedTimeMillis() > actualEndDate)
+ }
+ }
+ if (cms.getExecutionCompletedTimeMillis() != null) {
+ if (cms.getExecutionCompletedTimeMillis() > actualEndDate) {
actualEndDate = cms.getExecutionCompletedTimeMillis();
+ }
+ }
}
if (closureCode != ClosureCode.Successful) {
- if (actualEndDate == 0)
+ if (actualEndDate == 0) {
actualEndDate = System.currentTimeMillis();
- if (actualStartDate == 0)
+ }
+ if (actualStartDate == 0) {
actualStartDate = actualEndDate - 1000;
+ }
}
+ Map<String, Object> variables = new HashMap<String, Object>();
+
variables.put(Variables.status.toString(), "Closed");
variables.put(Variables.requesterId.toString(), requesterId);
variables.put(Variables.actualStartDate.toString(), actualStartDate / 1000);
@@ -203,8 +249,9 @@ public class TmClient { private Map<String, Object> getCancelVariables(Schedule schedule, String changeId) {
String requesterId = schedule.getUserId();
Map<String, Object> variables = new HashMap<String, Object>();
- if (requesterId.length() > Variables.requesterId.getMaxLength())
+ if (requesterId.length() > Variables.requesterId.getMaxLength()) {
requesterId = requesterId.substring(0, Variables.requesterId.getMaxLength());
+ }
variables.put(Variables.requesterId.toString(), requesterId);
variables.put(Variables.changeId.toString(), changeId);
return variables;
@@ -213,15 +260,16 @@ public class TmClient { private Map<String, Object> getUpdateVariables(Schedule schedule, String changeId) {
String requesterId = schedule.getUserId();
Map<String, Object> variables = new HashMap<String, Object>();
- if (requesterId.length() > Variables.requesterId.getMaxLength())
+ if (requesterId.length() > Variables.requesterId.getMaxLength()) {
requesterId = requesterId.substring(0, Variables.requesterId.getMaxLength());
+ }
variables.put(Variables.requesterId.toString(), requesterId);
variables.put(Variables.changeId.toString(), changeId);
return variables;
}
private void postCloseChangeTicket(JsonNode closeChangeRecord, String scheduleId, String changeId)
- throws CMSException {
+ throws CMSException {
Map<String, String> mdcSave = Mdc.save();
try {
Response response = null;
@@ -241,24 +289,24 @@ public class TmClient { debug.debug("response=" + respString);
if (!isAlreadyClosed(respString)) {
Observation.report(LogMessages.UNEXPECTED_RESPONSE, "vTM", String.valueOf(response.getStatus()),
- response.toString() + " : " + respString);
+ response.toString() + " : " + respString);
throw new CMSException(Status.PRECONDITION_FAILED, LogMessages.UNABLE_TO_CLOSE_CHANGE_TICKET,
- scheduleId, changeId, respString);
+ scheduleId, changeId, respString);
}
}
break;
default: {
String message = response.readEntity(String.class);
Observation.report(LogMessages.UNEXPECTED_RESPONSE, "vTM", String.valueOf(response.getStatus()),
- response.toString() + " : " + message);
+ response.toString() + " : " + message);
throw new CMSException(Status.PRECONDITION_FAILED, LogMessages.UNABLE_TO_CLOSE_CHANGE_TICKET,
- scheduleId, changeId, message);
+ scheduleId, changeId, message);
}
}
} catch (ProcessingException e) {
Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage());
throw new CMSException(Status.PRECONDITION_FAILED, LogMessages.UNABLE_TO_CLOSE_CHANGE_TICKET, scheduleId,
- changeId, e.toString());
+ changeId, e.toString());
} finally {
Mdc.restore(mdcSave);
}
@@ -300,36 +348,38 @@ public class TmClient { }
private Map<String, Object> getVariables(Schedule schedule, ChangeManagementGroup group, List<String> vnfNames,
- List<DomainData> domainData) {
- Long plannedStartDate = group.getStartTimeMillis();
- Long plannedEndDate = group.getFinishTimeMillis();
- Long validationStartTime = plannedStartDate + group.getNormalDurationInSecs();
- Long backoutStartTime = plannedEndDate - group.getAdditionalDurationInSecs();
+ List<DomainData> domainData) {
String requesterId = schedule.getUserId();
Map<String, Object> variables = new HashMap<String, Object>();
String vnfList = vnfNames.toString();
- if (vnfList.length() > Variables.vnfList.getMaxLength())
+ if (vnfList.length() > Variables.vnfList.getMaxLength()) {
vnfList = vnfList.substring(0, Variables.vnfList.getMaxLength());
- if (requesterId.length() > Variables.requesterId.getMaxLength())
+ }
+ if (requesterId.length() > Variables.requesterId.getMaxLength()) {
requesterId = requesterId.substring(0, Variables.requesterId.getMaxLength());
+ }
variables.put(Variables.vnfList.toString(), vnfList);
variables.put(Variables.vnfName.toString(), vnfNames.get(0));
variables.put(Variables.requesterId.toString(), requesterId);
+ Long plannedStartDate = group.getStartTimeMillis();
+ Long plannedEndDate = group.getFinishTimeMillis();
variables.put(Variables.plannedStartDate.toString(), plannedStartDate / 1000);
variables.put(Variables.plannedEndDate.toString(), plannedEndDate / 1000);
+ Long validationStartTime = plannedStartDate + group.getNormalDurationInSecs();
+ Long backoutStartTime = plannedEndDate - group.getAdditionalDurationInSecs();
variables.put(Variables.validationStartTime.toString(), validationStartTime / 1000);
variables.put(Variables.backoutStartTime.toString(), backoutStartTime / 1000);
// These will be display UTC -
variables.put(Variables.validationStartTimeDisplay.toString(),
- ISODateTimeFormat.dateTimeNoMillis().print(validationStartTime));
+ ISODateTimeFormat.dateTimeNoMillis().print(validationStartTime));
variables.put(Variables.backoutStartTimeDisplay.toString(),
- ISODateTimeFormat.dateTimeNoMillis().print(backoutStartTime));
+ ISODateTimeFormat.dateTimeNoMillis().print(backoutStartTime));
variables.put(Variables.plannedStartTimeDisplay.toString(),
- ISODateTimeFormat.dateTimeNoMillis().print(plannedStartDate));
+ ISODateTimeFormat.dateTimeNoMillis().print(plannedStartDate));
variables.put(Variables.plannedEndTimeDisplay.toString(),
- ISODateTimeFormat.dateTimeNoMillis().print(plannedEndDate));
+ ISODateTimeFormat.dateTimeNoMillis().print(plannedEndDate));
// Ticket field values can be passed in via the DomainData
JsonNode defaultValues = buildCreateRequest.getYaml("DefaultChangeTicketProperties");
@@ -384,24 +434,24 @@ public class TmClient { }
} else {
Observation.report(LogMessages.UNEXPECTED_RESPONSE, "vTM", String.valueOf(response.getStatus()),
- response.toString() + " : " + "Response is empty");
+ response.toString() + " : " + "Response is empty");
throw new CMSException(Status.EXPECTATION_FAILED, LogMessages.UNABLE_TO_CREATE_CHANGE_TICKET,
- scheduleId, "Response is empty");
+ scheduleId, "Response is empty");
}
}
break;
default: {
String message = response.readEntity(String.class);
Observation.report(LogMessages.UNEXPECTED_RESPONSE, "vTM", String.valueOf(response.getStatus()),
- response.toString() + " : " + message);
+ response.toString() + " : " + message);
throw new CMSException(Status.EXPECTATION_FAILED, LogMessages.UNABLE_TO_CREATE_CHANGE_TICKET,
- scheduleId, message);
+ scheduleId, message);
}
}
} catch (ProcessingException e) {
Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage());
throw new CMSException(Status.EXPECTATION_FAILED, LogMessages.UNABLE_TO_CREATE_CHANGE_TICKET, scheduleId,
- e.toString());
+ e.toString());
} finally {
Mdc.restore(mdcSave);
}
@@ -409,7 +459,7 @@ public class TmClient { }
private String postUpdateChangeTicket(JsonNode updateChangeRecord, String scheduleId, String changeId)
- throws CMSException {
+ throws CMSException {
Map<String, String> mdcSave = Mdc.save();
try {
String url = env.getProperty("vtm.url") + env.getProperty("vtm.updatePath");
@@ -429,50 +479,21 @@ public class TmClient { default: {
String message = response.readEntity(String.class);
Observation.report(LogMessages.UNEXPECTED_RESPONSE, "vTM", String.valueOf(response.getStatus()),
- response.toString() + " : " + message);
+ response.toString() + " : " + message);
throw new CMSException(Status.PRECONDITION_FAILED, LogMessages.UNABLE_TO_UPDATE_CHANGE_TICKET,
- scheduleId, changeId, message);
+ scheduleId, changeId, message);
}
}
} catch (ProcessingException e) {
Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage());
throw new CMSException(Status.PRECONDITION_FAILED, LogMessages.UNABLE_TO_UPDATE_CHANGE_TICKET, scheduleId,
- changeId, e.toString());
+ changeId, e.toString());
} finally {
Mdc.restore(mdcSave);
}
return changeId;
}
- private Response vtmPostOld(String url, Object request, String scheduleId) throws CMSException {
- Response response = null;
- try {
- String user = env.getProperty("vtm.user");
- String pass = pm.getProperty("vtm.pass", "");
- // Cannot provide changeId. Interesting.
- // This should be replaced by fetch
- // For now, make a best effort to get the passed changeId
-
- Client client = ClientBuilder.newClient();
- client.register(new BasicAuthenticatorFilter(user, pass));
- client.register(new CMSOClientFilters());
- WebTarget target = client.target(url);
- Invocation.Builder invocationBuilder = target.request(MediaType.APPLICATION_JSON);
- ObjectMapper mapper = new ObjectMapper();
- String jsonRequest = mapper.writeValueAsString(request);
- debug.debug("vTM URL = " + url + " user=" + user + " : " + jsonRequest);
- response = invocationBuilder.post(Entity.json(request));
- // String message = response.readEntity(String.class);
- // debug.debug("Return from " + url + " : " + response.toString() + "\n" +
- // message);
- debug.debug("Return from " + url + " : " + response.toString());
- } catch (Exception e) {
- Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, e.toString());
- throw new CMSException(Status.INTERNAL_SERVER_ERROR, LogMessages.UNABLE_TO_CREATE_CHANGE_TICKET, scheduleId,
- e.getMessage());
- }
- return response;
- }
private Response tmPost(Endpoint ep, Object request, String scheduleId) throws CMSException {
Response response = null;
@@ -488,7 +509,7 @@ public class TmClient { 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);
ObjectMapper mapper = new ObjectMapper();
@@ -503,25 +524,31 @@ public class TmClient { } catch (ProcessingException e) {
Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, e.toString());
url = tmEndpoints.getNextEndpoint(ep, endpoints);
- if (url == null || !tryNextURL(e)) {
+ if (url == null || !tryNextUrl(e)) {
throw new CMSException(Status.INTERNAL_SERVER_ERROR, LogMessages.UNABLE_TO_CREATE_CHANGE_TICKET,
- scheduleId, e.getMessage());
+ scheduleId, e.getMessage());
}
} catch (Exception e) {
Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, e.toString());
throw new CMSException(Status.INTERNAL_SERVER_ERROR, LogMessages.UNABLE_TO_CREATE_CHANGE_TICKET,
- scheduleId, e.getMessage());
+ scheduleId, e.getMessage());
}
}
return response;
}
- private boolean tryNextURL(ProcessingException e) {
- if (e.getCause() instanceof UnknownHostException)
+ private boolean tryNextUrl(ProcessingException exc) {
+ if (exc.getCause() instanceof UnknownHostException) {
return true;
+ }
return true;
}
+ /**
+ * Health check.
+ *
+ * @return the health check component
+ */
public HealthCheckComponent healthCheck() {
// No op
HealthCheckComponent hcc = new HealthCheckComponent();
diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/ticketmgt/TmEndpoints.java b/cmso-service/src/main/java/org/onap/optf/cmso/ticketmgt/TmEndpoints.java index b72eef4..97e4538 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/ticketmgt/TmEndpoints.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/ticketmgt/TmEndpoints.java @@ -1,27 +1,27 @@ /*
- * 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
- *
+ *
* 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,6 +31,8 @@ package org.onap.optf.cmso.ticketmgt;
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -38,13 +40,10 @@ import java.util.Map; 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;
@Component
public class TmEndpoints {
private static EELFLogger log = EELFManager.getInstance().getLogger(TmEndpoints.class);
- private static EELFLogger errors = EELFManager.getInstance().getErrorLogger();
private static EELFLogger debug = EELFManager.getInstance().getDebugLogger();
@Autowired
@@ -72,8 +71,15 @@ public class TmEndpoints { private boolean legacyLoaded = false;
private Map<Endpoint, List<String>> endpointMap = new HashMap<>();
- private Map<Endpoint, String> endpointMapOK = new HashMap<>();
+ private Map<Endpoint, String> endpointMapOk = new HashMap<>();
+ /**
+ * Gets the endpoint.
+ *
+ * @param ep the ep
+ * @param endpoints the endpoints
+ * @return the endpoint
+ */
public String getEndpoint(Endpoint ep, List<String> endpoints) {
loadLegacy();
endpoints.clear();
@@ -82,11 +88,11 @@ public class TmEndpoints { if (endpoints.size() > 0) {
// Make an attempt to return the most recent "working" endpoint.
//
- synchronized (endpointMapOK) {
- endpoint = endpointMapOK.get(ep);
+ synchronized (endpointMapOk) {
+ endpoint = endpointMapOk.get(ep);
if (endpoint == null) {
endpoint = endpoints.get(0);
- endpointMapOK.put(ep, endpoint);
+ endpointMapOk.put(ep, endpoint);
}
}
endpoints.remove(endpoint);
@@ -96,21 +102,29 @@ public class TmEndpoints { // Call this if the previous enpoint failed to connect.
// An attempt to track the most recent "working" endpoint.
+ /**
+ * Gets the next endpoint.
+ *
+ * @param ep the ep
+ * @param endpoints the endpoints
+ * @return the next endpoint
+ */
public String getNextEndpoint(Endpoint ep, List<String> endpoints) {
String endpoint = null;
if (endpoints.size() > 0) {
endpoint = endpoints.remove(0);
- synchronized (endpointMapOK) {
+ synchronized (endpointMapOk) {
// Let's hope this one works.
- endpointMapOK.put(ep, endpoint);
+ endpointMapOk.put(ep, endpoint);
}
}
return endpoint;
}
private synchronized void loadLegacy() {
- if (legacyLoaded)
+ if (legacyLoaded) {
return;
+ }
log.info("Loading legacy endpoints");
endpointMap = new HashMap<>();
addToEndpointMap(Endpoint.CREATE);
@@ -128,6 +142,7 @@ public class TmEndpoints { list.add(env.getProperty(ep.toString()));
}
+ @Override
public String toString() {
return endpointMap.toString();
}
diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/ticketmgt/TmStatusClient.java b/cmso-service/src/main/java/org/onap/optf/cmso/ticketmgt/TmStatusClient.java index e5c14b1..3d13b6f 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/ticketmgt/TmStatusClient.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/ticketmgt/TmStatusClient.java @@ -1,42 +1,41 @@ /*
- * 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.ticketmgt;
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+import com.att.eelf.i18n.EELFResourceManager;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.UUID;
import javax.transaction.Transactional;
import org.onap.optf.cmso.common.CMSStatusEnum;
import org.onap.optf.cmso.common.LogMessages;
@@ -51,13 +50,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-import com.att.eelf.i18n.EELFResourceManager;
@Component
public class TmStatusClient {
- private static EELFLogger log = EELFManager.getInstance().getLogger(TmStatusClient.class);
private static EELFLogger errors = EELFManager.getInstance().getErrorLogger();
private static EELFLogger debug = EELFManager.getInstance().getDebugLogger();
@@ -85,42 +80,48 @@ public class TmStatusClient { Environment env;
@Autowired
- ScheduleDAO scheduleDAO;
+ ScheduleDAO scheduleDao;
@Autowired
- ChangeManagementScheduleDAO cmScheduleDAO;
+ ChangeManagementScheduleDAO cmScheduleDao;
@Autowired
- ChangeManagementGroupDAO cmGroupDAO;
+ ChangeManagementGroupDAO cmGroupDao;
@Autowired
TmClient tmClient;
+ /**
+ * Check status.
+ *
+ * @param id the id
+ */
@Transactional
- public void checkStatus(Integer id) {
+ public void checkStatus(String id) {
debug.debug("Entered checkStatus id=" + id);
try {
// Multiple cmso instance support - re-get the record with a Schedule lock
- Schedule s = scheduleDAO.lockOne(id);
- if (!s.getStatus().equals(CMSStatusEnum.NotificationsInitiated.toString())) {
- debug.debug(s.getScheduleId() + " is no longer in " + CMSStatusEnum.NotificationsInitiated.toString()
- + " : it is " + s.getStatus());
+ UUID uuid = UUID.fromString(id);
+ Schedule sch = scheduleDao.lockOne(uuid);
+ if (!sch.getStatus().equals(CMSStatusEnum.NotificationsInitiated.toString())) {
+ debug.debug(sch.getScheduleId() + " is no longer in " + CMSStatusEnum.NotificationsInitiated.toString()
+ + " : it is " + sch.getStatus());
// Attempt at avoiding race condition in a load balance env. ?
return;
}
Map<GroupAuditStatus, List<ChangeManagementGroup>> groupStatus =
- new HashMap<GroupAuditStatus, List<ChangeManagementGroup>>();
- List<ChangeManagementGroup> groups = cmGroupDAO.findBySchedulesID(id);
+ new HashMap<GroupAuditStatus, List<ChangeManagementGroup>>();
+ List<ChangeManagementGroup> groups = cmGroupDao.findBySchedulesID(uuid);
// Close tickets for completed VNFs
for (ChangeManagementGroup group : groups) {
- processGroup(s, group);
+ processGroup(sch, group);
}
// Check overall status of schedule.
//
for (ChangeManagementGroup group : groups) {
- GroupAuditStatus status = auditGroupStatus(s, group);
+ GroupAuditStatus status = auditGroupStatus(sch, group);
List<ChangeManagementGroup> list = groupStatus.get(status);
if (list == null) {
list = new ArrayList<ChangeManagementGroup>();
@@ -129,16 +130,17 @@ public class TmStatusClient { list.add(group);
}
// In progress
- if (groupStatus.containsKey(GroupAuditStatus.InProgress))
+ if (groupStatus.containsKey(GroupAuditStatus.InProgress)) {
return;
+ }
//
if (groupStatus.containsKey(GroupAuditStatus.CompletedWithErrors)) {
- s.setStatus(CMSStatusEnum.CompletedWithError.toString());
+ sch.setStatus(CMSStatusEnum.CompletedWithError.toString());
}
if (groupStatus.containsKey(GroupAuditStatus.Completed)) {
- s.setStatus(CMSStatusEnum.Completed.toString());
+ sch.setStatus(CMSStatusEnum.Completed.toString());
}
- scheduleDAO.save(s);
+ scheduleDao.save(sch);
} catch (Exception e) {
errors.error(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage());
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
@@ -147,18 +149,17 @@ public class TmStatusClient { }
}
- private void processGroup(Schedule s, ChangeManagementGroup group) throws CMSException {
- debug.debug("{Processing status of " + s.getScheduleId() + " group=" + group.getGroupId());
+ private void processGroup(Schedule sch, ChangeManagementGroup group) throws CMSException {
+ debug.debug("{Processing status of " + sch.getScheduleId() + " group=" + group.getGroupId());
// Get status of all VNFs within a ticket within the group (Tickets will not
// span groups)
Map<String, List<ChangeManagementSchedule>> failed = new HashMap<String, List<ChangeManagementSchedule>>();
Map<String, List<ChangeManagementSchedule>> inProgress = new HashMap<String, List<ChangeManagementSchedule>>();
Map<String, List<ChangeManagementSchedule>> completed = new HashMap<String, List<ChangeManagementSchedule>>();
Map<String, List<ChangeManagementSchedule>> tmClosed = new HashMap<String, List<ChangeManagementSchedule>>();
- List<ChangeManagementSchedule> cmSchedules = cmScheduleDAO.findByChangeManagementGroupId(group.getId());
+ List<ChangeManagementSchedule> cmSchedules = cmScheduleDao.findByChangeManagementGroupId(group.getUuid());
for (ChangeManagementSchedule cmSchedule : cmSchedules) {
String status = cmSchedule.getStatus();
- String changeId = cmSchedule.getTmChangeId();
String tmStatus = cmSchedule.getTmStatus();
CMSStatusEnum cmsStatus = CMSStatusEnum.Completed.fromString(status);
switch (cmsStatus) {
@@ -183,43 +184,47 @@ public class TmStatusClient { case ScheduledImmediate:
default:
errors.applicationEvent(
- "Unexpected Change Management schedule event status {0} encountered after notification : scheduleId={1} vnfName={2}",
- status, s.getScheduleId(), cmSchedule.getVnfName());
+ "Unexpected Change Management schedule event status {0} encountered "
+ + "after notification : scheduleId={1} vnfName={2}",
+ status, sch.getScheduleId(), cmSchedule.getVnfName());
break;
}
- if (tmStatus != null && tmStatus.equals("Closed"))
+ if (tmStatus != null && tmStatus.equals("Closed")) {
addTo(tmClosed, cmSchedule);
+ }
}
- debug.debug("{Status of " + s.getScheduleId() + " Group " + group.getGroupId() + "\ncompleted="
- + completed.keySet().toString() + "\ninProgress=" + inProgress.keySet().toString() + "\nfailed="
- + failed.keySet().toString() + "\ntmCLosed=" + tmClosed.keySet().toString());
+ debug.debug("{Status of " + sch.getScheduleId() + " Group " + group.getGroupId() + "\ncompleted="
+ + completed.keySet().toString() + "\ninProgress=" + inProgress.keySet().toString() + "\nfailed="
+ + failed.keySet().toString() + "\ntmCLosed=" + tmClosed.keySet().toString());
// Remove all tickets from completed where there are still 'Triggered' VNFs
- for (String changeId : inProgress.keySet())
+ for (String changeId : inProgress.keySet()) {
completed.remove(changeId);
+ }
// Remove all tickets from completed where the ticket is already closed.
- for (String changeId : tmClosed.keySet())
+ for (String changeId : tmClosed.keySet()) {
completed.remove(changeId);
+ }
// Do not know what to do with failed
for (String changeId : failed.keySet()) {
completed.remove(changeId);
- closeTheTicket(s, group, changeId, failed.get(changeId), ClosureCode.Unsuccessful,
- "Change management request failed for one or more VNFs");
+ closeTheTicket(sch, group, changeId, failed.get(changeId), ClosureCode.Unsuccessful,
+ "Change management request failed for one or more VNFs");
}
// Remaining completed tickets should be closed
- debug.debug("{Final status of " + s.getScheduleId() + " Group " + group.getGroupId() + "\ncompleted="
- + completed.keySet().toString() + "\ninProgress=" + inProgress.keySet().toString() + "\nfailed="
- + failed.keySet().toString() + "\ntmCLosed=" + tmClosed.keySet().toString());
+ debug.debug("{Final status of " + sch.getScheduleId() + " Group " + group.getGroupId() + "\ncompleted="
+ + completed.keySet().toString() + "\ninProgress=" + inProgress.keySet().toString() + "\nfailed="
+ + failed.keySet().toString() + "\ntmCLosed=" + tmClosed.keySet().toString());
for (String changeId : completed.keySet()) {
- closeTheTicket(s, group, changeId, completed.get(changeId), ClosureCode.Successful,
- ClosureCode.Successful.toString());
+ closeTheTicket(sch, group, changeId, completed.get(changeId), ClosureCode.Successful,
+ ClosureCode.Successful.toString());
}
}
- private GroupAuditStatus auditGroupStatus(Schedule s, ChangeManagementGroup group) {
+ private GroupAuditStatus auditGroupStatus(Schedule sch, ChangeManagementGroup group) {
// Determine group status and synchronize VNF status with Ticket status.
Map<String, List<ChangeManagementSchedule>> failed = new HashMap<String, List<ChangeManagementSchedule>>();
Map<String, List<ChangeManagementSchedule>> inProgress = new HashMap<String, List<ChangeManagementSchedule>>();
@@ -229,8 +234,7 @@ public class TmStatusClient { Set<String> allNames = new HashSet<String>();
Set<String> failedNames = new HashSet<String>();
Set<String> completedNames = new HashSet<String>();
- Long startDate = group.getStartTimeMillis();
- List<ChangeManagementSchedule> cmSchedules = cmScheduleDAO.findByChangeManagementGroupId(group.getId());
+ List<ChangeManagementSchedule> cmSchedules = cmScheduleDao.findByChangeManagementGroupId(group.getUuid());
for (ChangeManagementSchedule cmSchedule : cmSchedules) {
String vnfName = cmSchedule.getVnfName();
vnfNames.add(vnfName);
@@ -262,17 +266,20 @@ public class TmStatusClient { case ScheduledImmediate:
default:
errors.applicationEvent(
- "Unexpected Change Management schedule event status {0} encountered after notification : scheduleId={1} vnfName={2}",
- status, s.getScheduleId(), cmSchedule.getVnfName());
+ "Unexpected Change Management schedule event status {0} encountered"
+ + " after notification : scheduleId={1} vnfName={2}",
+ status, sch.getScheduleId(), cmSchedule.getVnfName());
break;
}
- if (tmStatus != null && tmStatus.equals("Closed"))
+ if (tmStatus != null && tmStatus.equals("Closed")) {
addTo(tmClosed, cmSchedule);
+ }
}
// We have at least 1 ticket with VNFs in progress. Leave schedule status as is.
- if (inProgress.size() > 0)
+ if (inProgress.size() > 0) {
return GroupAuditStatus.InProgress;
+ }
// All VNFs are either failed or completed (or there is a bug.)
@@ -288,7 +295,6 @@ public class TmStatusClient { }
private void addTo(Map<String, List<ChangeManagementSchedule>> map, ChangeManagementSchedule cmSchedule) {
- String status = cmSchedule.getStatus();
String changeId = cmSchedule.getTmChangeId();
List<ChangeManagementSchedule> list = map.get(changeId);
if (list == null) {
@@ -299,14 +305,15 @@ public class TmStatusClient { }
- private void closeTheTicket(Schedule s, ChangeManagementGroup group, String changeId,
- List<ChangeManagementSchedule> list, ClosureCode closureCode, String closingComments) throws CMSException {
+ private void closeTheTicket(Schedule sch, ChangeManagementGroup group, String changeId,
+ List<ChangeManagementSchedule> list, ClosureCode closureCode, String closingComments)
+ throws CMSException {
debug.debug("Closing ticket " + changeId + ":" + closureCode);
try {
- tmClient.closeTicket(s, group, list, changeId, closureCode, closingComments);
+ tmClient.closeTicket(sch, group, list, changeId, closureCode, closingComments);
for (ChangeManagementSchedule cms : list) {
cms.setTmStatus("Closed");
- cmScheduleDAO.save(cms);
+ cmScheduleDao.save(cms);
}
} catch (CMSException e) {
throw e;
diff --git a/cmso-service/src/main/java/org/onap/optf/cmso/ticketmgt/bean/BuildCreateRequest.java b/cmso-service/src/main/java/org/onap/optf/cmso/ticketmgt/bean/BuildCreateRequest.java index 0b7c319..8c8cd6f 100644 --- a/cmso-service/src/main/java/org/onap/optf/cmso/ticketmgt/bean/BuildCreateRequest.java +++ b/cmso-service/src/main/java/org/onap/optf/cmso/ticketmgt/bean/BuildCreateRequest.java @@ -1,27 +1,27 @@ /*
- * 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
- *
+ *
* 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,6 +31,13 @@ package org.onap.optf.cmso.ticketmgt.bean;
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.fasterxml.jackson.databind.node.TextNode;
+import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
import java.io.File;
import java.util.Iterator;
import java.util.List;
@@ -40,14 +47,10 @@ import org.onap.optf.cmso.common.LogMessages; 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;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.fasterxml.jackson.databind.node.TextNode;
-import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
+/**
+ * The Class BuildCreateRequest.
+ */
@Component
public class BuildCreateRequest {
@@ -58,6 +61,9 @@ public class BuildCreateRequest { // This is for example purposes only ans every provider
// will have unique requirements.
// This assumes multiple VNFs can appear on a single ticket
+ /**
+ * The Enum Variables.
+ */
//
public enum Variables {
vnfList(168), requesterId(50), plannedStartDate(15), plannedEndDate(15), validationStartTime(
@@ -71,19 +77,30 @@ public class BuildCreateRequest { this.maxLength = max;
}
+ /**
+ * Gets the max length.
+ *
+ * @return the max length
+ */
public int getMaxLength() {
return maxLength;
}
}
- private static EELFLogger log = EELFManager.getInstance().getLogger(BuildCreateRequest.class);
- private static EELFLogger metrics = EELFManager.getInstance().getMetricsLogger();
private static EELFLogger errors = EELFManager.getInstance().getErrorLogger();
private static EELFLogger debug = EELFManager.getInstance().getDebugLogger();
@Autowired
Environment env;
+ /**
+ * Creates the change record request.
+ *
+ * @param variables the variables
+ * @param assetList the asset list
+ * @param workflowName the workflow name
+ * @return the json node
+ */
public JsonNode createChangeRecordRequest(Map<String, Object> variables, List<TmAsset> assetList,
String workflowName) {
JsonNode rawjson = getYaml("CreateChangeTicket");
@@ -91,24 +108,48 @@ public class BuildCreateRequest { return json;
}
+ /**
+ * Creates the close cancel change record.
+ *
+ * @param variables the variables
+ * @return the json node
+ */
public JsonNode createCloseCancelChangeRecord(Map<String, Object> variables) {
JsonNode rawjson = getYaml("CloseCancelChangeRecord");
JsonNode json = substituteJson(rawjson, variables);
return json;
}
+ /**
+ * Creates the cancel change record.
+ *
+ * @param variables the variables
+ * @return the json node
+ */
public JsonNode createCancelChangeRecord(Map<String, Object> variables) {
JsonNode rawjson = getYaml("CancelChangeRecord");
JsonNode json = substituteJson(rawjson, variables);
return json;
}
+ /**
+ * Creates the update change record.
+ *
+ * @param variables the variables
+ * @return the json node
+ */
public JsonNode createUpdateChangeRecord(Map<String, Object> variables) {
JsonNode rawjson = getYaml("UpdateChangeRecord");
JsonNode json = substituteJson(rawjson, variables);
return json;
}
+ /**
+ * Creates the get change record.
+ *
+ * @param variables the variables
+ * @return the json node
+ */
public JsonNode createGetChangeRecord(Map<String, Object> variables) {
JsonNode rawjson = getYaml("GetChangeRecord");
JsonNode json = substituteJson(rawjson, variables);
@@ -171,17 +212,27 @@ public class BuildCreateRequest { }
private boolean isInteger(String name) {
- if (name.equals(Variables.plannedEndDate.toString()))
+ if (name.equals(Variables.plannedEndDate.toString())) {
return true;
- if (name.equals(Variables.plannedStartDate.toString()))
+ }
+ if (name.equals(Variables.plannedStartDate.toString())) {
return true;
- if (name.equals(Variables.actualStartDate.toString()))
+ }
+ if (name.equals(Variables.actualStartDate.toString())) {
return true;
- if (name.equals(Variables.actualEndDate.toString()))
+ }
+ if (name.equals(Variables.actualEndDate.toString())) {
return true;
+ }
return false;
}
+ /**
+ * Gets the yaml.
+ *
+ * @param workflowName the workflow name
+ * @return the yaml
+ */
public JsonNode getYaml(String workflowName) {
JsonNode json = null;
// Get the YAML file for this workflow
diff --git a/cmso-service/src/main/resources/logmessages.properties b/cmso-service/src/main/resources/logmessages.properties index e339117..cd85191 100644 --- a/cmso-service/src/main/resources/logmessages.properties +++ b/cmso-service/src/main/resources/logmessages.properties @@ -57,3 +57,4 @@ UNAUTHORIZED UNAUTHORIZED|Authorization failed.|No resolution needed|No action i UNAUTHENTICATED UNAUTHENTICATED|Authentication failed.|No resolution needed|No action is required UNRECOGNIZED_MSO_STATUS UNRECOGNIZED_MSO_STATUS|Unrecognized status returned by MSO {0}|No resolution needed|No action is required UNABLE_TO_PARSE_MSO_RESPONSE UNABLE_TO_PARSE_MSO_RESPONSE|Unable to parse status message from MSO {0} : {1}|No resolution needed|No action is required +MISSING_VALID_GROUP_FOR_ELEMENT MISSING_VALID_GROUP_FOR_ELEMENT|Element {0} returned by optimizer has invalid group id|No resolution needed|No action is required diff --git a/cmso-service/src/test/java/org/onap/optf/cmso/AuthProviderTest.java b/cmso-service/src/test/java/org/onap/optf/cmso/AuthProviderTest.java index c8613f8..500c42b 100644 --- a/cmso-service/src/test/java/org/onap/optf/cmso/AuthProviderTest.java +++ b/cmso-service/src/test/java/org/onap/optf/cmso/AuthProviderTest.java @@ -28,20 +28,20 @@ * limitations under the License. */ - package org.onap.optf.cmso; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.Mockito; import org.mockito.runners.MockitoJUnitRunner; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.Authentication; -import static org.junit.Assert.*; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - @RunWith(MockitoJUnitRunner.class) public class AuthProviderTest { diff --git a/cmso-service/src/test/java/org/onap/optf/cmso/JpaInit.java b/cmso-service/src/test/java/org/onap/optf/cmso/JpaInit.java index 8a3aa58..08d110e 100644 --- a/cmso-service/src/test/java/org/onap/optf/cmso/JpaInit.java +++ b/cmso-service/src/test/java/org/onap/optf/cmso/JpaInit.java @@ -1,57 +1,52 @@ -/*
- * 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.
-*/
-
-package org.onap.optf.cmso;
-
-import java.util.concurrent.atomic.AtomicBoolean;
-import org.onap.optf.cmso.model.ApprovalType;
-import org.onap.optf.cmso.model.Domain;
-import org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManager;
-
-public class JpaInit {
-
- private static AtomicBoolean initialized = new AtomicBoolean(false);
-
- public static void init(TestEntityManager entityManager) {
- if (initialized.compareAndSet(true, true))
- return;
- Domain d = new Domain();
- d.setDomain("ChangeManagement");
- entityManager.persist(d);
- ApprovalType at = new ApprovalType();
- at.setApprovalCount(1);
- at.setDomain("ChangeManagement");
- at.setApprovalType("Tier 2");
- entityManager.persist(at);
- entityManager.flush();
-
- }
-}
+/* + * ============LICENSE_START======================================================================================= + * Copyright (c) 2019 AT&T Intellectual Property. + * =================================================================== + * 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. + * ============LICENSE_END========================================================================================= + * + */ + + package org.onap.optf.cmso; + +import java.util.concurrent.atomic.AtomicBoolean; +import org.onap.optf.cmso.model.ApprovalType; +import org.onap.optf.cmso.model.Domain; +import org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManager; + +/** + * The Class JpaInit. + */ +public class JpaInit { + + private static AtomicBoolean initialized = new AtomicBoolean(false); + + /** + * Inits the. + * + * @param entityManager the entity manager + */ + public static void init(TestEntityManager entityManager) { + if (initialized.compareAndSet(true, true)) { + return; + } + Domain dom = new Domain(); + dom.setDomain("ChangeManagement"); + entityManager.persist(dom); + ApprovalType at = new ApprovalType(); + at.setApprovalCount(1); + at.setDomain("ChangeManagement"); + at.setApprovalType("Tier 2"); + entityManager.persist(at); + entityManager.flush(); + + } +} diff --git a/cmso-service/src/test/java/org/onap/optf/cmso/JtestHelper.java b/cmso-service/src/test/java/org/onap/optf/cmso/JtestHelper.java index d0b03e5..f83cd88 100644 --- a/cmso-service/src/test/java/org/onap/optf/cmso/JtestHelper.java +++ b/cmso-service/src/test/java/org/onap/optf/cmso/JtestHelper.java @@ -1,61 +1,55 @@ -/*
- * 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.
-*/
-
-package org.onap.optf.cmso;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.util.Map;
-import java.util.Scanner;
-import org.apache.commons.lang3.text.StrSubstitutor;
-
-public class JtestHelper {
- private static String templatefolder = "src/test/templates" + File.separator;
-
- public static String template(String filename, Map<String, String> values) {
- String data = "";
- Scanner s = null;
- try {
- File t = new File(templatefolder + filename);
- s = new Scanner(t);
- s.useDelimiter("\\Z");
- data = s.next();
- StrSubstitutor ss = new StrSubstitutor(values);
- data = ss.replace(data);
- } catch (FileNotFoundException e) {
- data = "";
- } finally {
- if (s != null)
- s.close();
- }
- return data;
- }
-}
+/* + * ============LICENSE_START======================================================================================= + * Copyright (c) 2019 AT&T Intellectual Property. + * =================================================================== + * 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. + * ============LICENSE_END========================================================================================= + * + */ + +package org.onap.optf.cmso; + +import java.io.File; +import java.io.FileNotFoundException; +import java.util.Map; +import java.util.Scanner; +import org.apache.commons.text.StrSubstitutor; + +public class JtestHelper { + private static String templatefolder = "src/test/templates" + File.separator; + + /** + * Template. + * + * @param filename the filename + * @param values the values + * @return the string + */ + public static String template(String filename, Map<String, String> values) { + String data = ""; + Scanner sc = null; + try { + File tfld = new File(templatefolder + filename); + sc = new Scanner(tfld); + sc.useDelimiter("\\Z"); + data = sc.next(); + StrSubstitutor ss = new StrSubstitutor(values); + data = ss.replace(data); + } catch (FileNotFoundException e) { + data = ""; + } finally { + if (sc != null) { + sc.close(); + } + } + return data; + } +} diff --git a/cmso-service/src/test/java/org/onap/optf/cmso/service/rs/MockHttpServletRequest.java b/cmso-service/src/test/java/org/onap/optf/cmso/service/rs/MockHttpServletRequest.java index aace25e..8070e41 100644 --- a/cmso-service/src/test/java/org/onap/optf/cmso/service/rs/MockHttpServletRequest.java +++ b/cmso-service/src/test/java/org/onap/optf/cmso/service/rs/MockHttpServletRequest.java @@ -1,49 +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
- * 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.service.rs;
-
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-import javax.servlet.http.HttpServletRequest;
-
-public class MockHttpServletRequest {
- public StringBuffer url = new StringBuffer("http://localhost:8089/cmso/v1/ChangeManagement/schedules/");
- public HttpServletRequest request = mock(HttpServletRequest.class);
-
- MockHttpServletRequest() {
-
- when(request.getRequestURL()).thenReturn(url);
- when(request.getHeader("Authorization")).thenReturn("BasicbTEzODc3OnNjaGVkdWxlci1SMTgwMiE=");
-
- }
-
-}
+/* + * ============LICENSE_START======================================================================================= + * Copyright (c) 2019 AT&T Intellectual Property. + * =================================================================== + * 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. + * ============LICENSE_END========================================================================================= + * + */ + +package org.onap.optf.cmso.service.rs; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import javax.servlet.http.HttpServletRequest; + +public class MockHttpServletRequest { + public StringBuffer url = new StringBuffer("http://localhost:8089/cmso/v1/ChangeManagement/schedules/"); + public HttpServletRequest request = mock(HttpServletRequest.class); + + MockHttpServletRequest() { + + when(request.getRequestURL()).thenReturn(url); + when(request.getHeader("Authorization")).thenReturn("BasicbTEzODc3OnNjaGVkdWxlci1SMTgwMiE="); + + } + +} diff --git a/cmso-service/src/test/java/org/onap/optf/cmso/utilities/PropertiesAdmin.java b/cmso-service/src/test/java/org/onap/optf/cmso/utilities/PropertiesAdmin.java index faf408b..defb7ef 100644 --- a/cmso-service/src/test/java/org/onap/optf/cmso/utilities/PropertiesAdmin.java +++ b/cmso-service/src/test/java/org/onap/optf/cmso/utilities/PropertiesAdmin.java @@ -1,52 +1,56 @@ /*
- * 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
- *
+ *
* 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.utilities;
import org.onap.optf.cmso.common.PropertiesManagement;
public class PropertiesAdmin {
- public static void main(String[] args) {
- PropertiesManagement pm = new PropertiesManagement();
- if (args.length < 1) {
- System.out.println("Missing argument");
- return;
- }
- String value = "";
- if (args[0].startsWith("dec:")) {
- value = PropertiesManagement.getDecryptedValue(args[0].substring(4));
- } else {
- value = pm.getEncryptedValue(args[0]);
- }
- System.out.println(args[0] + " : " + value);
+ /**
+ * Test properties admin.
+ *
+ * @param args
+ */
+ public static void main(String[] args) {
+ PropertiesManagement pm = new PropertiesManagement();
+ if (args.length < 1) {
+ System.out.println("Missing argument");
+ return;
}
-
+ String value = "";
+ if (args[0].startsWith("dec:")) {
+ value = PropertiesManagement.getDecryptedValue(args[0].substring(4));
+ } else {
+ value = pm.getEncryptedValue(args[0]);
+ }
+ System.out.println(args[0] + " : " + value);
+ }
}
diff --git a/cmso-ticketmgt/data/a.json b/cmso-ticketmgt/data/a.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/cmso-ticketmgt/data/a.json @@ -0,0 +1 @@ +{} diff --git a/cmso-ticketmgt/pom.xml b/cmso-ticketmgt/pom.xml index 2012bfb..278ee01 100644 --- a/cmso-ticketmgt/pom.xml +++ b/cmso-ticketmgt/pom.xml @@ -27,7 +27,7 @@ <packaging>jar</packaging> - <name>cmso</name> + <name>cmso-ticketmgt</name> <properties> <maven.build.timestamp.format>yyyyMMdd'T'HHmmss'Z'</maven.build.timestamp.format> @@ -155,10 +155,6 @@ </dependency> <dependency> <groupId>org.springframework</groupId> - <artifactId>spring-beans</artifactId> - </dependency> - <dependency> - <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> </dependency> <dependency> @@ -378,7 +374,7 @@ <apiVersion>1.23</apiVersion> <images> <image> - <name>onap/optf-cmso-tciketmgt</name> + <name>onap/optf-cmso-ticketmgt</name> <alias>onap-optf-cmso-tciketmgt</alias> <build> <cleanup>true</cleanup> diff --git a/cmso-ticketmgt/src/test/java/org/onap/optf/cmso/AuthProviderTest.java b/cmso-ticketmgt/src/test/java/org/onap/optf/cmso/AuthProviderTest.java deleted file mode 100644 index ad24e4f..0000000 --- a/cmso-ticketmgt/src/test/java/org/onap/optf/cmso/AuthProviderTest.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright © 2019 IBM Intellectual Property. - * - * 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; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mockito; -import org.mockito.runners.MockitoJUnitRunner; -import org.onap.optf.ticketmgt.AuthProvider; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.core.Authentication; - -import static org.junit.Assert.*; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -@RunWith(MockitoJUnitRunner.class) -public class AuthProviderTest { - - @Test - public void authenticate() { - String principal = "testName"; - String credential = "testPassword"; - Authentication authentication = mock(Authentication.class); - when(authentication.getName()).thenReturn(principal); - when(authentication.getCredentials()).thenReturn(credential); - AuthProvider authProvider = new AuthProvider(); - Authentication auth = authProvider.authenticate(authentication); - assertEquals(principal, auth.getPrincipal()); - assertEquals(credential, auth.getCredentials()); - } - - @Test - public void supports() { - AuthProvider authProvider = new AuthProvider(); - assertTrue(authProvider.supports(UsernamePasswordAuthenticationToken.class)); - assertFalse(authProvider.supports(Authentication.class)); - } -}
\ No newline at end of file diff --git a/cmso-ticketmgt/src/test/java/org/onap/optf/cmso/JtestHelper.java b/cmso-ticketmgt/src/test/java/org/onap/optf/cmso/JtestHelper.java deleted file mode 100644 index eb013a6..0000000 --- a/cmso-ticketmgt/src/test/java/org/onap/optf/cmso/JtestHelper.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * 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. -*/ - -package org.onap.optf.cmso; - -import java.io.File; -import java.io.FileNotFoundException; -import java.util.Map; -import java.util.Scanner; -import org.apache.commons.lang3.text.StrSubstitutor; - -public class JtestHelper { - private static String templatefolder = "src/test/templates" + File.separator; - - public static String template(String filename, Map<String, String> values) { - String data = ""; - Scanner s = null; - try { - File t = new File(templatefolder + filename); - s = new Scanner(t); - s.useDelimiter("\\Z"); - data = s.next(); - StrSubstitutor ss = new StrSubstitutor(values); - data = ss.replace(data); - } catch (FileNotFoundException e) { - data = ""; - } finally { - if (s != null) - s.close(); - } - return data; - } -} diff --git a/cmso-ticketmgt/src/test/java/org/onap/optf/cmso/service/rs/MockHttpServletRequest.java b/cmso-ticketmgt/src/test/java/org/onap/optf/cmso/service/rs/MockHttpServletRequest.java deleted file mode 100644 index cb5f9df..0000000 --- a/cmso-ticketmgt/src/test/java/org/onap/optf/cmso/service/rs/MockHttpServletRequest.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * 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. -*/ - -package org.onap.optf.cmso.service.rs; - -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; -import javax.servlet.http.HttpServletRequest; - -public class MockHttpServletRequest { - public StringBuffer url = new StringBuffer("http://localhost:8089/cmso/v1/ChangeManagement/schedules/"); - public HttpServletRequest request = mock(HttpServletRequest.class); - - MockHttpServletRequest() { - - when(request.getRequestURL()).thenReturn(url); - when(request.getHeader("Authorization")).thenReturn("BasicbTEzODc3OnNjaGVkdWxlci1SMTgwMiE="); - - } - -} diff --git a/cmso-ticketmgt/src/test/java/org/onap/optf/cmso/utilities/PropertiesAdmin.java b/cmso-ticketmgt/src/test/java/org/onap/optf/cmso/utilities/PropertiesAdmin.java deleted file mode 100644 index e5a4ee3..0000000 --- a/cmso-ticketmgt/src/test/java/org/onap/optf/cmso/utilities/PropertiesAdmin.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * 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. -*/ - -package org.onap.optf.cmso.utilities; - -import org.onap.optf.cmso.common.PropertiesManagement; - -public class PropertiesAdmin { - public static void main(String[] args) { - PropertiesManagement pm = new PropertiesManagement(); - if (args.length < 1) { - System.out.println("Missing argument"); - return; - } - String value = ""; - if (args[0].startsWith("dec:")) { - value = PropertiesManagement.getDecryptedValue(args[0].substring(4)); - } else { - value = pm.getEncryptedValue(args[0]); - } - System.out.println(args[0] + " : " + value); - } - -} @@ -62,7 +62,6 @@ </scm>
<modules>
- <module>cmso-service</module>
<module>cmso-database</module>
<module>cmso-robot</module>
</modules>
|