com.francetelecom.clara.cloud.logicalmodel.LogicalNodeServiceAssociation.java Source code

Java tutorial

Introduction

Here is the source code for com.francetelecom.clara.cloud.logicalmodel.LogicalNodeServiceAssociation.java

Source

/**
 * Copyright (C) 2015 Orange
 * 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.francetelecom.clara.cloud.logicalmodel;

import com.francetelecom.clara.cloud.commons.GuiMapping;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;

import javax.persistence.*;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlIDREF;
import javax.xml.bind.annotation.XmlRootElement;
import java.io.Serializable;
import java.lang.reflect.Field;

/**
 * Logical execution node to service Many to Many Association
 * 
 * @author APOG7416
 * 
 */
@XmlRootElement
@Entity
@Table(name = "EXECUTION_NODE_SERVICE_ASSOCIATION", uniqueConstraints = @UniqueConstraint(columnNames = {
        "processingNode_id", "logicalService_id" }))
public class LogicalNodeServiceAssociation implements Serializable, Comparable<LogicalNodeServiceAssociation> {

    /**
     * 
     */
    private static final long serialVersionUID = 5468256654529545579L;

    @XmlAttribute
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @GuiMapping(status = GuiMapping.StatusType.NA)
    private int id;

    @XmlIDREF
    @XmlElement(name = "processingNodeRef")
    @ManyToOne
    protected ProcessingNode processingNode;

    @XmlIDREF
    @XmlElement(name = "logicalServiceRef")
    @ManyToOne
    protected LogicalService logicalService;

    // defaut access service acess type
    @GuiMapping(status = GuiMapping.StatusType.SKIPPED)
    private LogicalServiceAccessTypeEnum accessType = LogicalServiceAccessTypeEnum.NOT_APPLICABLE;

    /**
     * Note: keep only processingNode that are browsed from from logical services.
     */
    private static final String[] EXCLUDED_EQUALS_FIELDS = new String[] { "name", "sdf", "logicalService", "id" };
    private static final String[] EXCLUDED_EQUALS_DEEP_FIELDS = new String[] { "name", "sdf", "id" };

    /**
     * Default constructor for mapping tools (Jaxb and Jpa)
     */
    protected LogicalNodeServiceAssociation() {

    }

    /**
     * Association constructor
     */
    public LogicalNodeServiceAssociation(ProcessingNode node, LogicalService service) {
        this.processingNode = node;
        this.logicalService = service;
    }

    public LogicalServiceAccessTypeEnum getAccessType() {
        return accessType;
    }

    public void setAccessType(LogicalServiceAccessTypeEnum accessType) {
        this.accessType = accessType;
    }

    public ProcessingNode getProcessingNode() {
        return processingNode;
    }

    public LogicalService getLogicalService() {
        return logicalService;
    }

    public int getId() {
        return id;
    }

    public boolean areAssociated(ProcessingNode processingNode, LogicalService service) {

        boolean associated = false;

        if (processingNode.equals(this.processingNode) && service.equals(logicalService)) {
            associated = true;
        } else {
            associated = false;
        }

        return associated;
    }

    @Override
    public boolean equals(Object obj) {
        return EqualsBuilder.reflectionEquals(this, obj, EXCLUDED_EQUALS_FIELDS);
    }

    @Override
    public int hashCode() {
        return HashCodeBuilder.reflectionHashCode(this, EXCLUDED_EQUALS_FIELDS);
    }

    @Override
    public int compareTo(LogicalNodeServiceAssociation o) {
        return getId() - o.getId();
    }

    public boolean equalsDeep(Object obj) {
        return EqualsBuilder.reflectionEquals(this, obj, EXCLUDED_EQUALS_DEEP_FIELDS);
    }

    @Override
    public String toString() {
        return (new ReflectionToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE) {
            protected boolean accept(Field f) {
                return super.accept(f) && !isFieldExcludedFromToString(f.getName());
            }

            protected Object getValue(Field field) throws IllegalArgumentException, IllegalAccessException {
                //Try to sort all of our collections so that toString() comparison is easier
                Class<?> type = field.getType();
                if (LogicalModelItem.class.isAssignableFrom(type)) {
                    LogicalModelItem item = (LogicalModelItem) field.get(this.getObject());
                    return item.getLabel();
                }
                return field.get(this.getObject());
            }
        }).toString();
    }

    /**
     * Override this method in subclasses to specify the list of excluded to not display fields
     * (usually the same list as equals)
     */
    protected boolean isFieldExcludedFromToString(String fieldName) {
        for (String excludedEqualsField : LogicalNodeServiceAssociation.EXCLUDED_EQUALS_FIELDS) {
            if (excludedEqualsField.equals(fieldName)) {
                return true;
            }
        }
        return false;
    }

}