[ https://issues.apache.org/jira/browse/GORA-502?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16064153#comment-16064153 ]
ASF GitHub Bot commented on GORA-502: ------------------------------------- Github user kamaci commented on a diff in the pull request: https://github.com/apache/gora/pull/111#discussion_r124165711 --- Diff: gora-aerospike/src/main/java/org/apache/gora/aerospike/store/AerospikeMappingBuilder.java --- @@ -0,0 +1,303 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 + * <p> + * http://www.apache.org/licenses/LICENSE-2.0 + * <p> + * 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. + */ +package org.apache.gora.aerospike.store; + +import com.aerospike.client.policy.GenerationPolicy; +import com.aerospike.client.policy.Policy; +import com.aerospike.client.policy.RecordExistsAction; +import com.aerospike.client.policy.WritePolicy; +import org.jdom.Document; +import org.jdom.Element; +import org.jdom.input.SAXBuilder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.jdom.JDOMException; + +import javax.naming.ConfigurationException; +import java.io.IOException; +import java.io.InputStream; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.HashMap; + +public class AerospikeMappingBuilder { + + private static final Logger LOG = LoggerFactory.getLogger(AerospikeMappingBuilder.class); + + private AerospikeMapping aerospikeMapping; + + public AerospikeMappingBuilder() { + this.aerospikeMapping = new AerospikeMapping(); + } + + public AerospikeMapping getAerospikeMapping() { + return this.aerospikeMapping; + } + + /** + * Reads the gora aerospike mapping file + * + * @param mappingFile mapping file path + * @param keyClass key class + * @param persistentClass persistent class + */ + public void readMappingFile(String mappingFile, Class<?> keyClass, Class<?> persistentClass) { + + try { + SAXBuilder saxBuilder = new SAXBuilder(); + InputStream inputStream = getClass().getClassLoader().getResourceAsStream(mappingFile); + if (inputStream == null) { + LOG.error("Mapping file '{}' could not be found!", mappingFile); + throw new IOException("Mapping file '" + mappingFile + "' could not be found!"); + } + Document document = saxBuilder.build(inputStream); + if (document == null) { + LOG.error("Mapping file '{}' could not be found!", mappingFile); + throw new IOException("Mapping file '" + mappingFile + "' could not be found!"); + } + + Element root = document.getRootElement(); + + List<Element> policyElements = root.getChildren("policy"); + + for (Element policyElement : policyElements) { + + String policy = policyElement.getAttributeValue("name"); + if (policy != null) { + if (policy.equals("write")) { + WritePolicy writePolicy = new WritePolicy(); + if (policyElement.getAttributeValue("gen") != null) + writePolicy.generationPolicy = getGenerationPolicyMapping( + policyElement.getAttributeValue("gen").toUpperCase(Locale.getDefault())); + if (policyElement.getAttributeValue("exists") != null) + writePolicy.recordExistsAction = getRecordExistsAction( + policyElement.getAttributeValue("exists").toUpperCase(Locale.getDefault())); + if (policyElement.getAttributeValue("key") != null) + writePolicy.sendKey = getKeyUsagePolicy( + policyElement.getAttributeValue("key").toUpperCase(Locale.getDefault())); + if (policyElement.getAttributeValue("retry") != null) + writePolicy.retryOnTimeout = getRetryOnTimeoutPolicy( + policyElement.getAttributeValue("retry").toUpperCase(Locale.getDefault())); + if (policyElement.getAttributeValue("timeout") != null) + writePolicy.timeout = getTimeoutValue(policyElement.getAttributeValue("timeout")); + aerospikeMapping.setWritePolicy(writePolicy); + } else if (policy.equals("read")) { + Policy readPolicy = new Policy(); + if (policyElement.getAttributeValue("key") != null) + readPolicy.sendKey = getKeyUsagePolicy( + policyElement.getAttributeValue("key").toUpperCase(Locale.getDefault())); + if (policyElement.getAttributeValue("timeout") != null) + readPolicy.timeout = getTimeoutValue(policyElement.getAttributeValue("timeout")); + aerospikeMapping.setReadPolicy(readPolicy); + } + } + } + + List<Element> classElements = root.getChildren("class"); + + boolean persistentClassAndKeyClassMatches = false; + for (Element classElement : classElements) { + + String mappingKeyClass = classElement.getAttributeValue("keyClass"); + String mappingClassName = classElement.getAttributeValue("name"); + + if (mappingKeyClass != null && mappingClassName != null) { --- End diff -- This and below lines of if statements can be merged. > Implement Aerospike Datastore > ----------------------------- > > Key: GORA-502 > URL: https://issues.apache.org/jira/browse/GORA-502 > Project: Apache Gora > Issue Type: New Feature > Components: gora-aerospike, storage > Affects Versions: 0.6.1 > Reporter: Cihad Guzel > Assignee: Nishadi Kirielle > Labels: gsoc2017 > Fix For: 0.8 > > > Aerospike is a NoSQL database solution for real-time operational > applications, delivering predictable performance at scale, superior uptime, > and high availability at the lowest TCO compared to first-generation NoSQL > and relational databases. It could be nice to support Aerospike as a > datastore at Gora. Aerospike uses Apache v2 license for Java client and uses > aGPL license for Aerospike Server Community Edition. > (http://www.aerospike.com/products/) -- This message was sent by Atlassian JIRA (v6.4.14#64029)