/*- * ============LICENSE_START======================================================= * SDC * ================================================================================ * Copyright (C) 2017 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 * * 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.openecomp.sdc.be.dao.api; import fj.data.Either; import org.openecomp.sdc.be.dao.graph.datatype.GraphElement; import org.openecomp.sdc.be.dao.graph.datatype.GraphElementTypeEnum; import org.openecomp.sdc.be.dao.graph.datatype.GraphNode; import org.openecomp.sdc.be.dao.impl.Neo4jResourceDAO; import org.openecomp.sdc.be.dao.neo4j.*; import org.openecomp.sdc.be.dao.neo4j.filters.MatchFilter; import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum; import org.openecomp.sdc.common.log.wrappers.Logger; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Map.Entry; public abstract class BasicDao implements IBasicDAO { Neo4jGraphBatchBuilder graphBatchBuilder = new Neo4jGraphBatchBuilder(); Neo4jClient neo4jClient; private static Logger logger = Logger.getLogger(Neo4jResourceDAO.class.getName()); public Either create(GraphNeighbourTable graphNeighbourTable, Class clazz, NodeTypeEnum nodeType) { if (graphNeighbourTable != null) { Either bbResult = graphBatchBuilder .buildBatchBuilderFromTable(graphNeighbourTable); if (bbResult.isLeft()) { BatchBuilder batchBuilder = bbResult.left().value(); // Neo4jOperationStatus neo4jOperationStatus = // neo4jClient.execute(batchBuilder); Either>, Neo4jOperationStatus> executeResult = neo4jClient .execute(batchBuilder); if (executeResult.isRight()) { return Either.right(executeResult.right().value()); } T result = null; List> listOfResults = executeResult.left().value(); if (listOfResults != null) { for (List listOfElements : listOfResults) { if (listOfElements != null && !listOfElements.isEmpty()) { for (GraphElement element : listOfElements) { logger.debug("element {} was returned after running batch operation {}", element, batchBuilder); if (element instanceof GraphNode) { GraphNode neo4jNode = (GraphNode) element; if (NodeTypeEnum.getByName(neo4jNode.getLabel()) == nodeType) { result = clazz.cast(neo4jNode); } } } } } } return Either.left(result); } else { return Either.right(bbResult.right().value()); } } else { logger.error("The table sent in order to create resource is empty."); return Either.right(Neo4jOperationStatus.BAD_REQUEST); } } @Override public Either getNodeData(String uniqueid, Class clazz, NodeTypeEnum nodeTypeEnum) { MatchFilter filter = new MatchFilter(); filter.addToMatch(GraphPropertiesDictionary.UNIQUE_ID.getProperty(), uniqueid); return getNodeData(filter, clazz, nodeTypeEnum); } @Override public Either getNodeData(String keyName, String uniqueid, Class clazz, NodeTypeEnum nodeTypeEnum) { MatchFilter filter = new MatchFilter(); filter.addToMatch(keyName, uniqueid); return getNodeData(filter, clazz, nodeTypeEnum); } private Either getNodeData(MatchFilter filter, Class clazz, NodeTypeEnum nodeTypeEnum) { Either, Neo4jOperationStatus> status = neo4jClient.getByFilter(GraphElementTypeEnum.Node, nodeTypeEnum.getName(), filter); if (status.isRight()) { return Either.right(status.right().value()); } else { List value = status.left().value(); if (value == null || value.isEmpty()) { return Either.right(Neo4jOperationStatus.NOT_FOUND); } else { return Either.left(clazz.cast(value.get(0))); } } } @Override public Either, Neo4jOperationStatus> getNodesData( Map propertiesToMatch, Class clazz, NodeTypeEnum nodeTypeEnum) { MatchFilter filter = new MatchFilter(); if (propertiesToMatch != null) { for (Entry property : propertiesToMatch.entrySet()) { filter.addToMatch(property.getKey(), property.getValue()); } } Either, Neo4jOperationStatus> status = neo4jClient.getByFilter(GraphElementTypeEnum.Node, nodeTypeEnum.getName(), filter); if (status.isRight()) { return Either.right(status.right().value()); } else { List value = status.left().value(); if (value == null || value.isEmpty()) { return Either.right(Neo4jOperationStatus.NOT_FOUND); } else { List list = new ArrayList<>(); for (GraphElement element : value) { list.add(clazz.cast(element)); } return Either.left(list); } } } public Neo4jClient getNeo4jClient() { return neo4jClient; } public void setNeo4jClient(Neo4jClient neo4jClient) { this.neo4jClient = neo4jClient; } }