[
https://issues.apache.org/jira/browse/GORA-497?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16123504#comment-16123504
]
ASF GitHub Bot commented on GORA-497:
-------------------------------------
Github user djkevincr commented on a diff in the pull request:
https://github.com/apache/gora/pull/110#discussion_r132717674
--- Diff:
gora-cassandra-cql/src/main/java/org/apache/gora/cassandra/serializers/CassandraSerializer.java
---
@@ -0,0 +1,216 @@
+/*
+ * 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
+ *
+ * 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.
+ */
+
+package org.apache.gora.cassandra.serializers;
+
+import com.datastax.driver.core.KeyspaceMetadata;
+import com.datastax.driver.core.ResultSet;
+import com.datastax.driver.core.TableMetadata;
+import org.apache.avro.Schema;
+import org.apache.gora.cassandra.bean.Field;
+import org.apache.gora.cassandra.store.CassandraClient;
+import org.apache.gora.cassandra.store.CassandraMapping;
+import org.apache.gora.cassandra.store.CassandraStore;
+import org.apache.gora.persistency.Persistent;
+import org.apache.gora.persistency.impl.PersistentBase;
+import org.apache.gora.query.Query;
+import org.apache.gora.query.Result;
+import org.apache.gora.store.DataStore;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
+/**
+ * This is the abstract Cassandra Serializer class.
+ */
+public abstract class CassandraSerializer<K, T extends Persistent> {
+ private static final Logger LOG =
LoggerFactory.getLogger(CassandraStore.class);
+ protected Class<K> keyClass;
+
+ protected Class<T> persistentClass;
+
+ private Map<String, String> userDefineTypeMaps;
+
+ protected CassandraMapping mapping;
+ private Schema persistentSchema;
+ CassandraClient client;
+
+ CassandraSerializer(CassandraClient cc, Class<K> keyClass, Class<T>
persistantClass, CassandraMapping mapping, Schema schema) {
+ this.keyClass = keyClass;
+ this.persistentClass = persistantClass;
+ this.client = cc;
+ this.mapping = mapping;
+ persistentSchema = schema;
+ try {
+ analyzePersistent();
+ } catch (Exception e) {
+ throw new RuntimeException("Error occurred while analyzing the
persistent class, :" + e.getMessage());
+ }
+ }
+
+ /**
+ * This method returns the Cassandra Serializer according the Cassandra
serializer property.
+ *
+ * @param cc Cassandra Client
+ * @param type Serialization type
+ * @param dataStore Cassandra DataStore
+ * @param mapping Cassandra Mapping
+ * @param <K> key class
+ * @param <T> persistent class
+ * @return Serializer
+ */
+ public static <K, T extends Persistent> CassandraSerializer
getSerializer(CassandraClient cc, String type, final DataStore<K, T> dataStore,
CassandraMapping mapping, Schema schema) {
+ CassandraStore.SerializerType serType = type.isEmpty() ?
CassandraStore.SerializerType.NATIVE :
CassandraStore.SerializerType.valueOf(type.toUpperCase(Locale.ENGLISH));
+ CassandraSerializer serializer;
+ switch (serType) {
+ case AVRO:
+ serializer = new AvroSerializer(cc, dataStore, mapping, schema);
+ break;
+ case NATIVE:
+ default:
+ serializer = new NativeSerializer(cc, dataStore.getKeyClass(),
dataStore.getPersistentClass(), mapping, schema);
+ }
+ return serializer;
+ }
+
+ private void analyzePersistent() throws Exception {
+ userDefineTypeMaps = new HashMap<>();
+ for (Field field : mapping.getFieldList()) {
+ String fieldType = field.getType();
+ if (fieldType.contains("frozen")) {
+ String udtType = fieldType.substring(fieldType.indexOf("<") + 1,
fieldType.indexOf(">"));
+ if (this instanceof AvroSerializer) {
+ if (PersistentBase.class.isAssignableFrom(persistentClass)) {
+ Schema fieldSchema =
persistentSchema.getField(field.getFieldName()).schema();
+ if (fieldSchema.getType().equals(Schema.Type.UNION)) {
+ for (Schema currentSchema : fieldSchema.getTypes()) {
+ if (currentSchema.getType().equals(Schema.Type.RECORD)) {
+ fieldSchema = currentSchema;
+ break;
+ }
+ }
+ }
+ String createQuery =
CassandraQueryFactory.getCreateUDTTypeForAvro(mapping, udtType, fieldSchema);
+ userDefineTypeMaps.put(udtType, createQuery);
+ } else {
+ throw new RuntimeException("Unsupported Class for User Define
Types, Please use PersistentBase class. field : " + udtType);
+ }
+ } else {
+ String createQuery =
CassandraQueryFactory.getCreateUDTTypeForNative(mapping, persistentClass,
udtType, field.getFieldName());
+ userDefineTypeMaps.put(udtType, createQuery);
+ }
+ }
+ }
+
+ }
+
--- End diff --
Better if this unnecessary new lines are removed.
> Migrate CassandraThrift to CQL
> -------------------------------
>
> Key: GORA-497
> URL: https://issues.apache.org/jira/browse/GORA-497
> Project: Apache Gora
> Issue Type: Improvement
> Components: gora-cassandra
> Reporter: Madhawa Gunasekara
> Assignee: Madhawa Gunasekara
> Labels: gsoc2017
> Fix For: 0.8
>
>
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)