diff options
author | 2018-07-23 12:10:41 +0200 | |
---|---|---|
committer | 2018-08-09 18:01:41 +0000 | |
commit | 5008b80497d3256b724d54e0b26ad398f050571e (patch) | |
tree | 2cba735259e1ff33d6d5b647d10de253403152c2 /appc-dispatcher/appc-license-manager/appc-license-manager-core/src/main | |
parent | dc87c8cea2a6b6f68a8d7521db325fec4319b71a (diff) |
Improve LicenseManagerImpl implementation
- Use STAX API for XML processing instead of parsing it manually
- Rearrange code for clarity and testing
- Adjust JUnits accordingly
Issue-ID: APPC-1024
Change-Id: I9d655b581adb401b0c20bc29eda6a2bce1f2ef89
Signed-off-by: Joanna Jeremicz <joanna.jeremicz@nokia.com>
Diffstat (limited to 'appc-dispatcher/appc-license-manager/appc-license-manager-core/src/main')
3 files changed, 140 insertions, 31 deletions
diff --git a/appc-dispatcher/appc-license-manager/appc-license-manager-core/src/main/java/org/onap/appc/licmgr/impl/LicenseManagerImpl.java b/appc-dispatcher/appc-license-manager/appc-license-manager-core/src/main/java/org/onap/appc/licmgr/impl/LicenseManagerImpl.java index 6f8d33ea5..58b9b9e87 100644 --- a/appc-dispatcher/appc-license-manager/appc-license-manager-core/src/main/java/org/onap/appc/licmgr/impl/LicenseManagerImpl.java +++ b/appc-dispatcher/appc-license-manager/appc-license-manager-core/src/main/java/org/onap/appc/licmgr/impl/LicenseManagerImpl.java @@ -6,18 +6,20 @@ * ================================================================================ * Copyright (C) 2017 Amdocs * ============================================================================= + * Modifications Copyright (C) 2018 Nokia + * ============================================================================= * 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========================================================= */ @@ -25,12 +27,15 @@ package org.onap.appc.licmgr.impl; import static org.onap.appc.licmgr.Constants.SDC_ARTIFACTS_FIELDS.ARTIFACT_CONTENT; +import java.io.IOException; import java.util.Map; - +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamException; import org.onap.appc.licmgr.LicenseDataAccessService; import org.onap.appc.licmgr.LicenseManager; import org.onap.appc.licmgr.exception.DataAccessException; import org.onap.appc.licmgr.objects.LicenseModel; +import org.onap.appc.licmgr.objects.LicenseModelBuilder; @SuppressWarnings("all") @@ -38,50 +43,39 @@ public class LicenseManagerImpl implements LicenseManager { private LicenseDataAccessService DAService; - public void setDAService(LicenseDataAccessService daSrv){ - DAService = daSrv; - } - public LicenseManagerImpl() { + } @Override public LicenseModel retrieveLicenseModel(String vnfType, String vnfVersion) throws DataAccessException { - LicenseModel licenseModel; + LicenseModelBuilder builder = new LicenseModelBuilder(); try { - Map<String,String> resultMap = DAService.retrieveLicenseModelData(vnfType, vnfVersion); + Map<String, String> resultMap = DAService.retrieveLicenseModelData(vnfType, vnfVersion); if (resultMap.isEmpty()) { - throw new DataAccessException(String.format("License model not found for vnfType='%s' and vnfVersion='%s'", vnfType, vnfVersion)); + throw new DataAccessException( + String.format("License model not found for vnfType='%s' and vnfVersion='%s'", vnfType, vnfVersion)); } String licenseModelXML = resultMap.get(ARTIFACT_CONTENT.name()); - licenseModel = convert(licenseModelXML); // JAXBUtil.<VfLicenseModel>toObject(licenseModelXML, VfLicenseModel.class); + convert(licenseModelXML, builder); } catch (DataAccessException le) { throw le; } catch (Exception e) { throw new DataAccessException(e); } - return licenseModel; + return builder.build(); } - - private static LicenseModel convert(String xml) { - - LicenseModel licenseModel = new LicenseModel(); - - int posEntitlementStart = xml.indexOf("<entitlement-pool-uuid>"); - int posEntitlementEnd = xml.indexOf("</entitlement-pool-uuid>", posEntitlementStart); - if (-1 != posEntitlementStart) { - licenseModel.setEntitlementPoolUuid(xml.substring(posEntitlementStart + "<entitlement-pool-uuid>".length(), posEntitlementEnd)); - } - - int posLicenseStart = xml.indexOf("<license-key-group-uuid>"); - int posLicenseEnd = xml.indexOf("</license-key-group-uuid>", posEntitlementStart); - if (-1 != posLicenseStart) { - licenseModel.setLicenseKeyGroupUuid(xml.substring(posLicenseStart + "<license-key-group-uuid>".length(), posLicenseEnd)); - } - - return licenseModel; + public void setDAService(LicenseDataAccessService daSrv) { + DAService = daSrv; } + private LicenseModelBuilder convert(String xml, LicenseModelBuilder builder) + throws XMLStreamException, IOException { + XmlToLicenseModelConverter converter = new XmlToLicenseModelConverter( + XMLInputFactory.newInstance()); + converter.convert(VfLicenseModelXmlConsumer::setLicenseModel, xml, builder); + return builder; + } } diff --git a/appc-dispatcher/appc-license-manager/appc-license-manager-core/src/main/java/org/onap/appc/licmgr/impl/VfLicenseModelXmlConsumer.java b/appc-dispatcher/appc-license-manager/appc-license-manager-core/src/main/java/org/onap/appc/licmgr/impl/VfLicenseModelXmlConsumer.java new file mode 100644 index 000000000..6cfb77e7c --- /dev/null +++ b/appc-dispatcher/appc-license-manager/appc-license-manager-core/src/main/java/org/onap/appc/licmgr/impl/VfLicenseModelXmlConsumer.java @@ -0,0 +1,57 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP : APPC + * ================================================================================ + * Copyright (C) 2018 Nokia + * ================================================================================ + * 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.appc.licmgr.impl; + +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.XMLStreamReader; +import org.onap.appc.licmgr.objects.LicenseModelBuilder; + +class VfLicenseModelXmlConsumer { + + private static final String ENTITLEMENT_POOL_UUID = "entitlement-pool-uuid"; + private static final String LICENSE_KEY_GROUP_UUID = "license-key-group-uuid"; + + static void setLicenseModel(XMLStreamReader re, LicenseModelBuilder builder) throws XMLStreamException { + while (re.hasNext() && !builder.isReady()) { + re.next(); + if (re.isStartElement() && !trySetEntitlementPoolUuid(re, builder)) { + trySetLicenseKeyGroupUuid(re, builder); + } + } + } + + private static boolean trySetEntitlementPoolUuid(XMLStreamReader re, LicenseModelBuilder builder) + throws XMLStreamException { + if (re.getName().getLocalPart().equals(ENTITLEMENT_POOL_UUID)) { + builder.setEntitlementPoolUuid(re.getElementText()); + return true; + } + return false; + } + + private static void trySetLicenseKeyGroupUuid(XMLStreamReader re, LicenseModelBuilder builder) + throws XMLStreamException { + if (re.getName().getLocalPart().equals(LICENSE_KEY_GROUP_UUID)) { + builder.setLicenseKeyGroupUuid(re.getElementText()); + } + } +}
\ No newline at end of file diff --git a/appc-dispatcher/appc-license-manager/appc-license-manager-core/src/main/java/org/onap/appc/licmgr/impl/XmlToLicenseModelConverter.java b/appc-dispatcher/appc-license-manager/appc-license-manager-core/src/main/java/org/onap/appc/licmgr/impl/XmlToLicenseModelConverter.java new file mode 100644 index 000000000..02e37bf69 --- /dev/null +++ b/appc-dispatcher/appc-license-manager/appc-license-manager-core/src/main/java/org/onap/appc/licmgr/impl/XmlToLicenseModelConverter.java @@ -0,0 +1,58 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP : APPC + * ================================================================================ + * Copyright (C) 2018 Nokia + * ============================================================================= + * 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.appc.licmgr.impl; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.XMLStreamReader; +import org.onap.appc.licmgr.objects.LicenseModelBuilder; + +class XmlToLicenseModelConverter { + + private XMLInputFactory factory; + + XmlToLicenseModelConverter(XMLInputFactory factory) { + this.factory = factory; + } + + void convert(XMLStreamConsumer<XMLStreamReader, LicenseModelBuilder> consumer, String xml, LicenseModelBuilder builder) + throws XMLStreamException, IOException { + + XMLStreamReader reader = null; + try (InputStream inputStream = new ByteArrayInputStream(xml.getBytes())) { + reader = factory.createXMLStreamReader(inputStream); + consumer.accept(reader, builder); + } finally { + if (reader != null) { + reader.close(); + } + } + } + + @FunctionalInterface + public interface XMLStreamConsumer<T, W> { + void accept(T t, W w) throws XMLStreamException; + } +} |