All Downloads are FREE. Search and download functionalities are using the official Maven repository.

tech.aroma.data.sql.serializers.OrganizationSerializer.kt Maven / Gradle / Ivy

/*
 * Copyright 2017 RedRoma, Inc.
 *
 * 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.
 */

package tech.aroma.data.sql.serializers

import org.springframework.jdbc.core.JdbcOperations
import tech.aroma.data.assertions.RequestAssertions.validOrganization
import tech.aroma.data.sql.DatabaseSerializer
import tech.aroma.data.sql.serializers.Columns.Organizations
import tech.aroma.data.sql.toCommaSeparatedList
import tech.aroma.data.sql.toUUID
import tech.aroma.thrift.Industry
import tech.aroma.thrift.Organization
import tech.aroma.thrift.Tier
import tech.sirwellington.alchemy.arguments.Arguments.checkThat
import tech.sirwellington.alchemy.arguments.assertions.*
import java.sql.ResultSet


/**
 * Responsible for the serialization of [Organizations][Organization]
 * @author SirWellington
 */
internal class OrganizationSerializer : DatabaseSerializer
{
    override fun save(`object`: Organization, statement: String, database: JdbcOperations)
    {
        checkThat(`object`, statement, database)
                .are(notNull())

        val org = `object`
        checkThat(org)
                .isA(validOrganization())

        checkThat(statement)
                .isA(nonEmptyString())

        database.update(statement,
                        org.organizationId.toUUID(),
                        org.organizationName,
                        org.owners.toCommaSeparatedList(),
                        org.logoLink,
                        org.industry?.toString(),
                        org.organizationEmail,
                        org.githubProfile,
                        org.stockMarketSymbol,
                        org.tier?.toString(),
                        org.organizationDescription,
                        org.website)

    }

    override fun deserialize(row: ResultSet?): Organization
    {
        checkThat(row).isA(notNull())

        val org = Organization()
        val results = row ?: return org


        val orgId = results.getString(Organizations.ORG_ID)
        val orgName = results.getString(Organizations.ORG_NAME)
        val orgDescription = results.getString(Organizations.DESCRIPTION)
        val industry = results.getString(Organizations.INDUSTRY).asIndustry()
        val tier = results.getString(Organizations.TIER).asTier()
        val website = results.getString(Organizations.WEBSITE)
        val stock = results.getString(Organizations.STOCK_NAME)
        val iconLink = results.getString(Organizations.ICON_LINK)
        val github = results.getString(Organizations.GITHUB_PROFILE)
        val email = results.getString(Organizations.EMAIL)

        val ownersArray = results.getArray(Organizations.OWNERS)

        if (ownersArray != null && ownersArray.array is Array<*>)
        {
            val owners = ownersArray.array as Array<*>

            if (owners.isArrayOf())
            {
                org.setOwners(owners.map { it.toString() })
            }
        }

        return org
                .setOrganizationId(orgId)
                .setOrganizationName(orgName)
                .setOrganizationDescription(orgDescription)
                .setIndustry(industry)
                .setTier(tier)
                .setWebsite(website)
                .setStockMarketSymbol(stock)
                .setLogoLink(iconLink)
                .setGithubProfile(github)
                .setOrganizationEmail(email)
    }

    private fun String.asTier(): Tier?
    {
        return try
        {
            Tier.valueOf(this)
        }
        catch (ex: Exception)
        {
            return null
        }
    }

    private fun String.asIndustry(): Industry?
    {
        return try
        {
            Industry.valueOf(this)
        }
        catch (ex: Exception)
        {
            return null
        }
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy