package org.intellimate.izou.resource;
import org.intellimate.izou.identification.Identification;
/**
* An Resource is an object which is used to pass data from one part of the application to another.
* <p>
* This is a minimal internal implementation! It should stay so to ensure that this implementations doesn't constrain
* the implementation.
* </p>
* Note! This Object is immutable!
*/
public class ResourceMinimalImpl<T> implements ResourceModel<T> {
private final String resourceID;
private final Identification provider;
private final Identification consumer;
private final T resource;
/**
* creates a new Resource.
* This method is thread-safe.
* @param resourceID the ID of the Resource
* @param provider the Provider of the Resource
* @param t the resource
* @param consumer the ID of the Consumer
*/
public ResourceMinimalImpl(String resourceID, Identification provider, T t, Identification consumer) {
this.resourceID = resourceID;
this.provider = provider;
this.resource = t;
this.consumer = consumer;
}
/**
* returns the associated Resource data if set.
* This method is thread-safe.
* @return null or resource data
*/
@Override
public T getResource() {
return resource;
}
/**
* sets the Resource data.
* <p>
* Note! this Object is immutable!
* </p>
* @param resource the data to set
* @return the Resource
*/
public ResourceMinimalImpl<T> setResource(T resource) {
return new ResourceMinimalImpl<>(resourceID, provider, resource, consumer);
}
/**
* returns the ID of the Resource.
* This method is thread-safe.
* @return a String containing the ID of the resource
*/
@Override
public String getResourceID() {
return resourceID;
}
/**
* returns the provider of the Resource.
* This method is thread-safe.
* @return an Identification describing the provider of the Resource or null if not set
*/
@Override
public Identification getProvider() {
return provider;
}
/**
* returns whether a provider is set
* @return true if this resource has an provider, false if not
*/
@Override
public boolean hasProvider() {
return provider != null;
}
/**
* returns the consumer of the object (if set).
* @return null or an Identification describing the consumer of the Resource
*/
@Override
public Identification getConsumer() {
return consumer;
}
/**
* An ID must always be unique.
* A Class like Activator or OutputPlugin can just provide their .class.getCanonicalName()
* If you have to implement this interface multiple times, just concatenate unique Strings to
* .class.getCanonicalName()
*
* @return A String containing an ID
*/
@Override
public String getID() {
return resourceID;
}
}