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

org.faktorips.runtime.ObjectProperty Maven / Gradle / Ivy

Go to download

Runtime library for Faktor-IPS. When using the JAXB support use either faktorips-runtime-jakarta-xml or faktorips-runtime-javax-xml as dependency. When using CSV to read tables, add the optional dependencies to opencsv, commons-lang3 and commons-text. If you want to run Faktor-IPS tests as JUnit tests, you need to provide either junit (JUnit 4) or junit-jupiter-api (JUnit 5).

There is a newer version: 25.1.0.a20241030-01
Show newest version
/*******************************************************************************
 * Copyright (c) Faktor Zehn GmbH - faktorzehn.org
 * 
 * This source code is available under the terms of the AGPL Affero General Public License version
 * 3.
 * 
 * Please see LICENSE.txt for full license terms, including the additional permissions and
 * restrictions as well as the possibility of alternative license terms.
 *******************************************************************************/

package org.faktorips.runtime;

import static java.util.Objects.requireNonNull;

import java.io.Serializable;
import java.util.Objects;

/**
 * An instance of this class identifies a property in an object, e.g. the name property of a
 * specific person.
 * 

* To add custom information that additionally qualifies the object property, it is possible to * implement and use an {@link IPropertyQualifier}. */ public class ObjectProperty implements Serializable { /** * Comment for serialVersionUID */ private static final long serialVersionUID = -3407760096164658253L; private final Object object; private final String property; private final int index; private final int hashCode; private final IPropertyQualifier qualifier; /** * Creates a new {@link ObjectProperty}. If the property is a list or an array the index can * specify the position within the property. An index smaller than 0 indicates that it is not an * indexed property. *

* It is possible to provide additional information using the qualifier and implementing the * interface {@link IPropertyQualifier}. */ public ObjectProperty(Object object, String property, int index, IPropertyQualifier qualifier) { this.object = requireNonNull(object, "object must not be null"); this.property = property; this.index = index; this.qualifier = qualifier; hashCode = createHashCode(); } /** * Creates a new {@link ObjectProperty}. *

* It is possible to provide additional information using the qualifier and implementing the * interface {@link IPropertyQualifier}. */ public ObjectProperty(Object object, String property, IPropertyQualifier qualifier) { this(object, property, -1, qualifier); } /** * Creates a new ObjectProperty. If the property is a list or an array the index can specify the * position within the property. An index smaller than 0 indicates that it is not an indexed * property. */ public ObjectProperty(Object object, String property, int index) { this(object, property, index, null); } /** * Creates an {@link ObjectProperty} that characterizes the object and the name of the property. */ public ObjectProperty(Object object, String property) { this(object, property, -1); } /** * Creates an {@link ObjectProperty} that characterizes only the object but not a specific * property of it. */ public ObjectProperty(Object object) { this(object, null, -1); } private int createHashCode() { int hash = Objects.hashCode(object) + index; hash = property == null ? hash : 31 * hash + property.hashCode(); return qualifier == null ? hash : 31 * hash + qualifier.hashCode(); } /** * The object that is identified by this {@link ObjectProperty}. * */ public Object getObject() { return object; } /** * The name of the property that is identified by this {@link ObjectProperty}. The property name * should be available as bean property in the given object. * */ public String getProperty() { return property; } /** * In case of {@link #getObject()} is an array or list this index defines which object of the * index is referenced. * * @return The index of the referenced object in the array/list that is referenced by * {@link #getObject()}. Returns -1 if there is no index available. * * @see #hasIndex() */ public int getIndex() { return index; } /** * Returns the {@link IPropertyQualifier} defined at the instantiation of this * {@link ObjectProperty}. * * @return an {@link IPropertyQualifier} containing additional information or null * if no qualifier exists. */ public IPropertyQualifier getQualifier() { return qualifier; } /** * Returns whether this {@link ObjectProperty} has an index that identifies an object in an * array or list. * * @return true if this {@link ObjectProperty} references an index, false if there * is no index available. */ public boolean hasIndex() { return index >= 0; } @Override public boolean equals(Object obj) { if (obj instanceof ObjectProperty) { ObjectProperty other = (ObjectProperty)obj; return Objects.equals(object, other.object) && index == other.index && Objects.equals(property, other.property) && Objects.equals(qualifier, other.qualifier); } return false; } @Override public int hashCode() { return hashCode; } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append(String.valueOf(object)); sb.append('.'); sb.append(property); if (hasIndex()) { sb.append('['); sb.append(index); sb.append(']'); } if (qualifier != null) { sb.append('{'); sb.append(qualifier.toString()); sb.append('}'); } return sb.toString(); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy