0dd1b8053186207cae42687bf262b7dfae936744
[dcaegen2/services/sdk.git] /
1 /*
2  * ============LICENSE_START=======================================================
3  * DCAEGEN2-SERVICES-SDK
4  * ================================================================================
5  * Copyright (C) 2020 Nokia. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.dcaegen2.services.sdk.services.external.schema.manager.service;
22
23 import org.onap.dcaegen2.services.sdk.services.external.schema.manager.model.SchemaReference;
24
25
26 public class SchemaReferenceResolver {
27
28     private static final String ROOT_REFERENCE = "/";
29     private static final int URL_INDEX = 0;
30     private static final int INTERNAL_REFERENCE_INDEX = 1;
31     private static final int REFERENCE_FRAGMENTS_CONTAINING_INTERNAL_REF_SIZE = 2;
32
33     private final String schemaReference;
34
35     public SchemaReferenceResolver(String schemaReference) {
36         this.schemaReference = schemaReference;
37     }
38
39     /**
40      * Extracts the schema reference fragment, provided in the event, corresponding to the url path (before #).
41      *
42      * @return url path
43      */
44     public String resolveUrl() {
45         String[] referenceFragments = schemaReference.split(SchemaReference.URL_SEPARATOR);
46         return referenceFragments[URL_INDEX];
47     }
48
49     /**
50      * Returns internal reference (after #) if it is present in schema reference and add "/" on the beginning if it's
51      * not present, otherwise returns "/".
52      *
53      * @return resolved internal reference
54      */
55     public String resolveInternalReference() {
56         String reference;
57         String[] referenceFragments = schemaReference.split(SchemaReference.URL_SEPARATOR);
58         if (internalReferenceExists(referenceFragments)) {
59             String internalReference = referenceFragments[INTERNAL_REFERENCE_INDEX];
60             reference = prepareExistingInternalReference(internalReference);
61         } else {
62             reference = ROOT_REFERENCE;
63         }
64
65         return reference;
66     }
67
68     private boolean internalReferenceExists(String[] referenceFragments) {
69         return referenceFragments.length == REFERENCE_FRAGMENTS_CONTAINING_INTERNAL_REF_SIZE;
70     }
71
72     private String prepareExistingInternalReference(String internalReference) {
73         return (!isAbsolute(internalReference)) ? ROOT_REFERENCE + internalReference : internalReference;
74     }
75
76     private boolean isAbsolute(String internalReference) {
77         return internalReference.startsWith(ROOT_REFERENCE);
78     }
79
80
81 }