package org.qi4j.runtime.structure; import org.qi4j.api.composite.ModelDescriptor; import org.qi4j.functional.Function; /** * TODO */ public class ModelModule<T extends ModelDescriptor> { public static <T extends ModelDescriptor> Function<T, ModelModule<T>> modelModuleFunction( final ModuleInstance module ) { return new Function<T, ModelModule<T>>() { @Override public ModelModule<T> map( T model ) { return new ModelModule<T>( module, model ); } }; } public static <T extends ModelDescriptor> Function<ModelModule<T>, T> modelFunction() { return new Function<ModelModule<T>, T>() { @Override public T map( ModelModule<T> modelModule ) { return modelModule.model(); } }; } private ModuleInstance module; private T model; public ModelModule( ModuleInstance module, T model ) { this.module = module; this.model = model; } public ModuleInstance module() { return module; } public T model() { return model; } @Override public boolean equals( Object o ) { if( this == o ) { return true; } if( o == null || getClass() != o.getClass() ) { return false; } ModelModule that = (ModelModule) o; if( model != null ? !model.equals( that.model ) : that.model != null ) { return false; } if( module != null ? !module.equals( that.module ) : that.module != null ) { return false; } return true; } @Override public int hashCode() { int result = module != null ? module.hashCode() : 0; result = 31 * result + ( model != null ? model.hashCode() : 0 ); return result; } @Override public String toString() { return module.name() + ":" + model; } }