org.opentcs.access.to.CreationTO Maven / Gradle / Ivy
/**
* Copyright (c) The openTCS Authors.
*
* This program is free software and subject to the MIT license. (For details,
* see the licensing information (LICENSE.txt) you should have received with
* this copy of the software.)
*/
package org.opentcs.access.to;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static java.util.Objects.requireNonNull;
import javax.annotation.Nonnull;
/**
* The base class for all creation transfer objects.
*
* @author Stefan Walter (Fraunhofer IML)
*/
public class CreationTO
implements Serializable {
/**
* The name of this transfer object.
*/
@Nonnull
private String name;
/**
* The properties of this transfer object.
*/
@Nonnull
private Map properties = new HashMap<>();
/**
* Creates a new instance.
*
* @param name The name of this transfer object.
*/
public CreationTO(@Nonnull String name) {
this.name = requireNonNull(name, "name");
}
protected CreationTO(@Nonnull String name, @Nonnull Map properties) {
this.name = requireNonNull(name, "name");
this.properties = requireNonNull(properties, "properties");
}
/**
* Returns the name of this transfer object.
*
* @return The name of this transfer object.
*/
@Nonnull
public String getName() {
return name;
}
/**
* Creates a copy of this object with the given name.
*
* @param name the new name
* @return A copy of this object, differing in the given value.
*/
public CreationTO withName(@Nonnull String name) {
return new CreationTO(name,
properties);
}
/**
* Returns the properties of this transfer object in an unmodifiable map.
*
* @return The properties of this transfer object in an unmodifiable map.
*/
@Nonnull
public Map getProperties() {
return Collections.unmodifiableMap(properties);
}
/**
* Returns the properties of this transfer object.
*
* @return The properties of this transfer object.
*/
protected Map getModifiableProperties() {
return properties;
}
public CreationTO withProperties(@Nonnull Map properties) {
return new CreationTO(name, properties);
}
/**
* Creates a copy of this object with the given property.
* If value == null is true then the key-value pair is removed from the properties.
*
* @param key the key.
* @param value the value
* @return A copy of this object that includes the given property or
* removes the entry, if value == null.
*/
public CreationTO withProperty(@Nonnull String key, @Nonnull String value) {
return new CreationTO(name,
propertiesWith(key, value));
}
protected final Map propertiesWith(String key, String value) {
return mapWithMapping(properties, key, value);
}
/**
* Returns a new map, with the mappings of the given map and the given mapping added to it.
*
* @param The type of the map's keys.
* @param The type of the map's values.
* @param map The map to be extended.
* @param key The key.
* @param value The value. May be null
to remove the mapping from the given map.
* @return a new map, with the mappings of the given map and the given mapping added to it.
*/
protected static final Map mapWithMapping(Map map, K key, V value) {
requireNonNull(map, "map");
requireNonNull(key, "key");
Map result = new HashMap<>(map);
if (value == null) {
result.remove(key);
}
else {
result.put(key, value);
}
return result;
}
/**
* Returns a new list, with the elements of the given list and the given element added to it.
*
* @param The element type of the list.
* @param list The list to be extended.
* @param newElement The element to be added to the list.
* @return A new list, consisting of the given list and the given element added to it.
*/
protected static final List listWithAppendix(List list, T newElement) {
List result = new ArrayList<>(list.size() + 1);
result.addAll(list);
result.add(newElement);
return result;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy