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

com.swisscom.cloud.sb.broker.model.ServiceDetail.groovy Maven / Gradle / Ivy

/*
 * Copyright (c) 2018 Swisscom (Switzerland) Ltd.
 *
 * 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 com.swisscom.cloud.sb.broker.model

import com.swisscom.cloud.sb.broker.util.servicedetail.AbstractServiceDetailKey

import javax.persistence.*

@Entity
class ServiceDetail extends BaseModel{

    @Column(name = '_key')
    String key
    @Column(name = '_value')
    String value
    @Column(name = '_type')
    String type
    @Column(columnDefinition='tinyint(1) default 0')
    boolean uniqueKey

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinTable(name = "service_instance_service_detail",
            joinColumns = @JoinColumn(name = "service_detail_id"),
            inverseJoinColumns = @JoinColumn(name = "service_instance_details_id"))
    ServiceInstance serviceInstance

    static ServiceDetail from(String key, String value, boolean unique = false) {
        return new ServiceDetail(key: key, value: value, uniqueKey: unique)
    }

    static ServiceDetail from(AbstractServiceDetailKey detailKey, String value, boolean unique = false) {
        return new ServiceDetail(key: detailKey.key, value: value, type: detailKey.detailType().type, uniqueKey: unique)
    }

    @Override
    boolean equals(Object obj) {
        ServiceDetail otherServiceDetail = obj as ServiceDetail
        if (otherServiceDetail == null)
            return false

        return isSameServiceDetail(otherServiceDetail)
    }

    private boolean isSameServiceDetail(ServiceDetail serviceDetail) {
        return (serviceDetail.id > 0 && serviceDetail.id == this.id) ||
                (this.uniqueKey && serviceDetail.key == this.key)
    }


    @Override
    public String toString() {
        return new StringJoiner(", ", ServiceDetail.class.getSimpleName() + "[", "]")
                .add("key='" + key + "'")
                .add("value='" + value + "'")
                .add("type='" + type + "'")
                .add("uniqueKey=" + uniqueKey)
                .add("serviceInstance=" + serviceInstance)
                .toString();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy