* ============LICENSE_START=======================================================
* org.onap.aai
* ================================================================================
- * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright © 2017-2018 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.
* See the License for the specific language governing permissions and
* limitations under the License.
* ============LICENSE_END=========================================================
- *
- * ECOMP is a trademark and service mark of AT&T Intellectual Property.
*/
package org.onap.aai.introspection;
import com.att.eelf.configuration.EELFManager;
import com.google.common.base.CaseFormat;
import com.google.common.collect.ImmutableMap;
+
import org.eclipse.persistence.dynamic.DynamicEntity;
import org.eclipse.persistence.jaxb.UnmarshallerProperties;
import org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContext;
import org.onap.aai.introspection.exceptions.AAIUnknownObjectException;
import org.onap.aai.introspection.exceptions.AAIUnmarshallingException;
import org.onap.aai.logging.ErrorLogHelper;
+import org.onap.aai.logging.LogFormatTools;
+import org.onap.aai.nodes.NodeIngestor;
import org.onap.aai.restcore.MediaType;
+import org.onap.aai.schema.enums.ObjectMetadata;
+import org.onap.aai.setup.SchemaVersion;
import org.onap.aai.workarounds.NamingExceptions;
-import org.w3c.dom.Document;
-import org.w3c.dom.NodeList;
-import org.xml.sax.SAXException;
-
-import javax.xml.XMLConstants;
+import org.springframework.stereotype.Component;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.stream.StreamSource;
-import java.io.IOException;
-import java.io.StringReader;
+import java.io.*;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
+import java.util.stream.Collectors;
public class MoxyLoader extends Loader {
private EELFLogger LOGGER = EELFManager.getInstance().getLogger(MoxyLoader.class);
private Map<String, Introspector> allObjs = null;
- /**
- * Instantiates a new moxy loader.
- *
- * @param version the version
- * @param llBuilder the ll builder
- */
- protected MoxyLoader(Version version) {
+ private Map<SchemaVersion, MoxyLoader> moxyLoaderFactory;
+
+ private NodeIngestor nodeIngestor;
+
+ private Set<String> namedProps;
+
+ public MoxyLoader(SchemaVersion version, NodeIngestor nodeIngestor) {
super(version, ModelType.MOXY);
+ this.nodeIngestor = nodeIngestor;
process(version);
}
+ public MoxyLoader getMoxyLoader(SchemaVersion v) {
+ return moxyLoaderFactory.get(v);
+
+ }
/**
* {@inheritDoc}
- * @throws AAIUnknownObjectException
+ * @throws AAIUnknownObjectException
*/
@Override
public Introspector introspectorFromName(String name) throws AAIUnknownObjectException {
return IntrospectorFactory.newInstance(ModelType.MOXY, objectFromName(name));
}
-
+
/**
* {@inheritDoc}
*/
} else {
upperCamel = CaseFormat.LOWER_HYPHEN.to(CaseFormat.UPPER_CAMEL, sanitizedName);
}
-
+
try {
final DynamicEntity result = jaxbContext.newDynamicEntity(upperCamel);
* {@inheritDoc}
*/
@Override
- protected void process(Version version) {
- ModelInjestor injestor = ModelInjestor.getInstance();
- jaxbContext = injestor.getContextForVersion(version);
-
+ protected void process(SchemaVersion version) {
+ /*
+ * We need to have just same JaxbContext for each version
+ */
+ jaxbContext = nodeIngestor.getContextForVersion(version);
+
}
/**
* {@inheritDoc}
*/
@Override
- public Introspector unmarshal(String type, String json, MediaType mediaType) throws AAIUnmarshallingException {
+ public Introspector unmarshal(String type, String json, MediaType mediaType) throws AAIUnmarshallingException {
try {
final Object clazz = objectFromName(type);
final Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
throw new AAIUnmarshallingException("Could not unmarshall: " + e.getMessage(), e);
}
}
-
+
@Override
public Map<String, Introspector> getAllObjects() {
if (this.allObjs != null) {
Introspector introspector = this.introspectorFromName(objName);
map.put(introspector.getDbName(), introspector);
} catch (AAIUnknownObjectException e) {
- LOGGER.warn("Unexpected AAIUnknownObjectException while running getAllObjects()", e);
+ LOGGER.warn("Unexpected AAIUnknownObjectException while running getAllObjects() " + LogFormatTools.getStackTop(e));
}
}
allObjs = map.build();
return allObjs;
}
}
-
+
private Set<String> objectsInVersion() {
- final Set<String> result = new HashSet<>();
+ Set<String> result = new HashSet<>();
try {
- final DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
- final String fileName = ModelInjestor.getInstance().getOXMFileName(getVersion());
-
- docFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
+ result = nodeIngestor.getObjectsInVersion(getVersion());
- final DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
- final Document doc = docBuilder.parse(fileName);
- final NodeList list = doc.getElementsByTagName("java-type");
-
- for (int i = 0; i < list.getLength(); i++) {
- result.add(list.item(i).getAttributes().getNamedItem("name").getNodeValue());
- }
- } catch (ParserConfigurationException | SAXException | IOException e) {
- LOGGER.warn("Exception while enumerating objects for API version " + getVersion() + " (returning partial results)", e);
+ } catch (Exception e) {
+ LOGGER.warn("Exception while enumerating objects for API version " + getVersion() + " (returning partial results) " + LogFormatTools.getStackTop(e));
}
//result.remove("EdgePropNames");
return result;
}
-
+
+ @Override
+ public Set<String> getNamedPropNodes(){
+
+ if(namedProps == null){
+ namedProps = getAllObjects()
+ .entrySet()
+ .stream()
+ .filter(
+ (entry) -> entry.getValue().getMetadata(ObjectMetadata.NAME_PROPS) != null
+ ).map(entry -> entry.getKey()).collect(Collectors.toSet());
+ }
+
+ return namedProps;
+ }
public DynamicJAXBContext getJAXBContext() {
return this.jaxbContext;
}
+ /*
+ * Im keeping this for now - Just in case
+ */
+ /*private static class Helper {
+ private static final Map<SchemaVersion, MoxyLoader> INSTANCEMAP = new ConcurrentHashMap<>();
+
+ private Helper() {}
+
+ private static MoxyLoader getLoaderBySchemaVersion(SchemaVersion v) {
+ if (!INSTANCEMAP.containsKey(v)) {
+ INSTANCEMAP.put(v, new MoxyLoader(v, nodeIngestor));
+ }
+ return INSTANCEMAP.get(v);
+ }
+ }*/
}