diff options
Diffstat (limited to 'aai-core/src/main/java/org/onap/aai/parsers/query/LegacyQueryParser.java')
-rw-r--r-- | aai-core/src/main/java/org/onap/aai/parsers/query/LegacyQueryParser.java | 390 |
1 files changed, 203 insertions, 187 deletions
diff --git a/aai-core/src/main/java/org/onap/aai/parsers/query/LegacyQueryParser.java b/aai-core/src/main/java/org/onap/aai/parsers/query/LegacyQueryParser.java index d20915c4..c9412733 100644 --- a/aai-core/src/main/java/org/onap/aai/parsers/query/LegacyQueryParser.java +++ b/aai-core/src/main/java/org/onap/aai/parsers/query/LegacyQueryParser.java @@ -17,10 +17,21 @@ * limitations under the License. * ============LICENSE_END========================================================= */ + package org.onap.aai.parsers.query; import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; + +import java.io.UnsupportedEncodingException; +import java.net.URI; +import java.net.URISyntaxException; +import java.util.*; +import java.util.Map.Entry; + +import javax.ws.rs.core.MultivaluedMap; + +import org.onap.aai.edges.enums.EdgeType; import org.onap.aai.exceptions.AAIException; import org.onap.aai.introspection.Introspector; import org.onap.aai.introspection.Loader; @@ -32,197 +43,202 @@ import org.onap.aai.parsers.uri.URIToObject; import org.onap.aai.query.builder.QueryBuilder; import org.onap.aai.restcore.util.URITools; import org.onap.aai.schema.enums.PropertyMetadata; -import org.onap.aai.edges.enums.EdgeType; - -import javax.ws.rs.core.MultivaluedMap; -import java.io.UnsupportedEncodingException; -import java.net.URI; -import java.net.URISyntaxException; -import java.util.*; -import java.util.Map.Entry; /** * The Class LegacyQueryParser. */ public class LegacyQueryParser extends QueryParser implements Parsable { - private static final EELFLogger LOGGER = EELFManager.getInstance().getLogger(LegacyQueryParser.class); - - private Introspector previous = null; - - /** - * Instantiates a new legacy query parser. - * - * @param loader the loader - * @param queryBuilder the query builder - * @param uri the uri - * @throws UnsupportedEncodingException the unsupported encoding exception - * @throws AAIException the AAI exception - */ - public LegacyQueryParser(Loader loader, QueryBuilder queryBuilder, URI uri) throws UnsupportedEncodingException, AAIException { - super(loader, queryBuilder, uri); - URIParser parser = new URIParser(loader, uri); - parser.parse(this); - } - - /** - * Instantiates a new legacy query parser. - * - * @param loader the loader - * @param queryBuilder the query builder - * @param uri the uri - * @param queryParams the query params - * @throws UnsupportedEncodingException the unsupported encoding exception - * @throws AAIException the AAI exception - */ - public LegacyQueryParser(Loader loader, QueryBuilder queryBuilder, URI uri, MultivaluedMap<String, String> queryParams) throws UnsupportedEncodingException, AAIException { - super(loader, queryBuilder, uri); - URIParser parser = new URIParser(loader, uri, queryParams); - parser.parse(this); - } - - /** - * Instantiates a new legacy query parser. - * - * @param loader the loader - * @param queryBuilder the query builder - */ - public LegacyQueryParser(Loader loader, QueryBuilder queryBuilder) { - super(loader, queryBuilder); - } - - /** - * @throws AAIException - * @{inheritDoc} - */ - @Override - public void processObject(Introspector obj, EdgeType type, MultivaluedMap<String, String> uriKeys) throws AAIException { - if (previous != null) { - this.parentResourceType = previous.getDbName(); - queryBuilder.createEdgeTraversal(type, previous, obj); - } - if (previous == null) { - queryBuilder.createDBQuery(obj); - this.handleUriKeys(obj, uriKeys); - } else { - queryBuilder.createKeyQuery(obj); - this.handleUriKeys(obj, uriKeys); - } - previous = obj; - this.resultResource = obj.getDbName(); - } - - /** - * @{inheritDoc} - */ - @Override - public void processContainer(Introspector obj, EdgeType type, MultivaluedMap<String, String> uriKeys, boolean isFinalContainer) throws AAIException { - if (isFinalContainer) { - if (previous != null) { - this.parentResourceType = previous.getDbName(); - queryBuilder.createEdgeTraversal(type, previous, obj); - } - - if (previous == null) { - queryBuilder.createContainerQuery(obj); - queryBuilder.markParentBoundary(); - } - if (!uriKeys.isEmpty()) { - - try { - Introspector child = obj.newIntrospectorInstanceOfNestedProperty(obj.getChildName()); - this.handleUriKeys(child, uriKeys); - } catch (AAIUnknownObjectException e) { - LOGGER.warn("Skipping container child " + obj.getChildName() + " (Unknown Object) " + - LogFormatTools.getStackTop(e)); - } - } - - this.resultResource = obj.getChildDBName(); - this.containerResource = obj.getName(); - } - } - private void handleUriKeys(Introspector obj, MultivaluedMap<String, String> uriKeys) throws AAIException { - for (String key : uriKeys.keySet()) { - //to validate whether this property exists - if (!obj.hasProperty(key)) { - throw new AAIException("AAI_3000", "property: " + key + " not found on " + obj.getDbName()); - } - - List<String> values = uriKeys.get(key); - String dbPropertyName = key; - Map<String, String> linkedProperties = new HashMap<>(); - final Map<PropertyMetadata, String> metadata = obj.getPropertyMetadata(key); - if (metadata.containsKey(PropertyMetadata.DATA_LINK)) { - linkedProperties.put(key, metadata.get(PropertyMetadata.DATA_LINK)); - } - if (metadata.containsKey(PropertyMetadata.DB_ALIAS)) { - dbPropertyName = metadata.get(PropertyMetadata.DB_ALIAS); - } - - if (!linkedProperties.containsKey(key)) { - if (values.size() > 1) { - queryBuilder.getVerticesByIndexedProperty(dbPropertyName, obj.castValueAccordingToSchema(key, values)); - } else { - queryBuilder.getVerticesByIndexedProperty(dbPropertyName, obj.castValueAccordingToSchema(key, values.get(0))); - } - } - handleLinkedProperties(obj, uriKeys, linkedProperties); - } - } - private void handleLinkedProperties(Introspector obj, MultivaluedMap<String, String> uriKeys, Map<String, String> linkedProperties) throws AAIException { - - QueryBuilder[] builders = new QueryBuilder[linkedProperties.keySet().size()]; - Set<Entry<String, String>> entrySet = linkedProperties.entrySet(); - int i = 0; - Iterator<Entry<String, String>> itr = entrySet.iterator(); - - while (itr.hasNext()) { - Entry<String, String> entry = itr.next(); - Introspector child; - try { - child = new URIToObject(this.latestLoader, new URI(URITools.replaceTemplates(obj, entry.getValue(), PropertyMetadata.DATA_LINK, true).orElse(""))).getEntity(); - } catch (IllegalArgumentException | UnsupportedEncodingException | URISyntaxException e) { - throw new AAIException("AAI_4000", e); - } - List<String> values = uriKeys.get(entry.getKey()); - QueryBuilder builder = queryBuilder.newInstance(); - builder.createEdgeTraversal(EdgeType.TREE, obj, child); - if (values.size() > 1) { - builder.getVerticesByIndexedProperty(entry.getKey(), obj.castValueAccordingToSchema(entry.getKey(), values)); - } else { - builder.getVerticesByIndexedProperty(entry.getKey(), obj.castValueAccordingToSchema(entry.getKey(), values.get(0))); - } - - builders[i] = builder; - i++; - } - - queryBuilder.where(builders); - - } - - /** - * @{inheritDoc} - */ - @Override - public void processNamespace(Introspector obj) { - - } - - /** - * @{inheritDoc} - */ - @Override - public String getCloudRegionTransform() { - return "add"; - } - - /** - * @{inheritDoc} - */ - @Override - public boolean useOriginalLoader() { - return false; - } + private static final EELFLogger LOGGER = EELFManager.getInstance().getLogger(LegacyQueryParser.class); + + private Introspector previous = null; + + /** + * Instantiates a new legacy query parser. + * + * @param loader the loader + * @param queryBuilder the query builder + * @param uri the uri + * @throws UnsupportedEncodingException the unsupported encoding exception + * @throws AAIException the AAI exception + */ + public LegacyQueryParser(Loader loader, QueryBuilder queryBuilder, URI uri) + throws UnsupportedEncodingException, AAIException { + super(loader, queryBuilder, uri); + URIParser parser = new URIParser(loader, uri); + parser.parse(this); + } + + /** + * Instantiates a new legacy query parser. + * + * @param loader the loader + * @param queryBuilder the query builder + * @param uri the uri + * @param queryParams the query params + * @throws UnsupportedEncodingException the unsupported encoding exception + * @throws AAIException the AAI exception + */ + public LegacyQueryParser(Loader loader, QueryBuilder queryBuilder, URI uri, + MultivaluedMap<String, String> queryParams) throws UnsupportedEncodingException, AAIException { + super(loader, queryBuilder, uri); + URIParser parser = new URIParser(loader, uri, queryParams); + parser.parse(this); + } + + /** + * Instantiates a new legacy query parser. + * + * @param loader the loader + * @param queryBuilder the query builder + */ + public LegacyQueryParser(Loader loader, QueryBuilder queryBuilder) { + super(loader, queryBuilder); + } + + /** + * @throws AAIException + * @{inheritDoc} + */ + @Override + public void processObject(Introspector obj, EdgeType type, MultivaluedMap<String, String> uriKeys) + throws AAIException { + if (previous != null) { + this.parentResourceType = previous.getDbName(); + queryBuilder.createEdgeTraversal(type, previous, obj); + } + if (previous == null) { + queryBuilder.createDBQuery(obj); + this.handleUriKeys(obj, uriKeys); + } else { + queryBuilder.createKeyQuery(obj); + this.handleUriKeys(obj, uriKeys); + } + previous = obj; + this.resultResource = obj.getDbName(); + } + + /** + * @{inheritDoc} + */ + @Override + public void processContainer(Introspector obj, EdgeType type, MultivaluedMap<String, String> uriKeys, + boolean isFinalContainer) throws AAIException { + if (isFinalContainer) { + if (previous != null) { + this.parentResourceType = previous.getDbName(); + queryBuilder.createEdgeTraversal(type, previous, obj); + } + + if (previous == null) { + queryBuilder.createContainerQuery(obj); + queryBuilder.markParentBoundary(); + } + if (!uriKeys.isEmpty()) { + + try { + Introspector child = obj.newIntrospectorInstanceOfNestedProperty(obj.getChildName()); + this.handleUriKeys(child, uriKeys); + } catch (AAIUnknownObjectException e) { + LOGGER.warn("Skipping container child " + obj.getChildName() + " (Unknown Object) " + + LogFormatTools.getStackTop(e)); + } + } + + this.resultResource = obj.getChildDBName(); + this.containerResource = obj.getName(); + } + } + + private void handleUriKeys(Introspector obj, MultivaluedMap<String, String> uriKeys) throws AAIException { + for (String key : uriKeys.keySet()) { + // to validate whether this property exists + if (!obj.hasProperty(key)) { + throw new AAIException("AAI_3000", "property: " + key + " not found on " + obj.getDbName()); + } + + List<String> values = uriKeys.get(key); + String dbPropertyName = key; + Map<String, String> linkedProperties = new HashMap<>(); + final Map<PropertyMetadata, String> metadata = obj.getPropertyMetadata(key); + if (metadata.containsKey(PropertyMetadata.DATA_LINK)) { + linkedProperties.put(key, metadata.get(PropertyMetadata.DATA_LINK)); + } + if (metadata.containsKey(PropertyMetadata.DB_ALIAS)) { + dbPropertyName = metadata.get(PropertyMetadata.DB_ALIAS); + } + + if (!linkedProperties.containsKey(key)) { + if (values.size() > 1) { + queryBuilder.getVerticesByIndexedProperty(dbPropertyName, + obj.castValueAccordingToSchema(key, values)); + } else { + queryBuilder.getVerticesByIndexedProperty(dbPropertyName, + obj.castValueAccordingToSchema(key, values.get(0))); + } + } + handleLinkedProperties(obj, uriKeys, linkedProperties); + } + } + + private void handleLinkedProperties(Introspector obj, MultivaluedMap<String, String> uriKeys, + Map<String, String> linkedProperties) throws AAIException { + + QueryBuilder[] builders = new QueryBuilder[linkedProperties.keySet().size()]; + Set<Entry<String, String>> entrySet = linkedProperties.entrySet(); + int i = 0; + Iterator<Entry<String, String>> itr = entrySet.iterator(); + + while (itr.hasNext()) { + Entry<String, String> entry = itr.next(); + Introspector child; + try { + child = new URIToObject(this.latestLoader, new URI( + URITools.replaceTemplates(obj, entry.getValue(), PropertyMetadata.DATA_LINK, true).orElse(""))) + .getEntity(); + } catch (IllegalArgumentException | UnsupportedEncodingException | URISyntaxException e) { + throw new AAIException("AAI_4000", e); + } + List<String> values = uriKeys.get(entry.getKey()); + QueryBuilder builder = queryBuilder.newInstance(); + builder.createEdgeTraversal(EdgeType.TREE, obj, child); + if (values.size() > 1) { + builder.getVerticesByIndexedProperty(entry.getKey(), + obj.castValueAccordingToSchema(entry.getKey(), values)); + } else { + builder.getVerticesByIndexedProperty(entry.getKey(), + obj.castValueAccordingToSchema(entry.getKey(), values.get(0))); + } + + builders[i] = builder; + i++; + } + + queryBuilder.where(builders); + + } + + /** + * @{inheritDoc} + */ + @Override + public void processNamespace(Introspector obj) { + + } + + /** + * @{inheritDoc} + */ + @Override + public String getCloudRegionTransform() { + return "add"; + } + + /** + * @{inheritDoc} + */ + @Override + public boolean useOriginalLoader() { + return false; + } } |