package org.jactr.core.module.declarative.basic.chunk; import org.jactr.core.chunk.IChunk; import org.jactr.core.chunk.ISubsymbolicChunk; import org.jactr.core.chunk.ISymbolicChunk; import org.jactr.core.model.IModel; /* * default logging */ /** * this is the factory responsible for creating, binding, merginv and destroying * IChunk wrappers. Usually, the default implementation is to be used. This is * separate from the theoretically motivated factories for symbolic and * subsymbolic components because the wrapper is largely an implementation * construct that derives its theoretic behavior from its contents.<br/> * <code> * IChunkType type = ...; * IChunkFactory cFac = ....; * ISymbolicChunkFactory scFac = ....; * ISubsymbolicChunkFacory sscFac = ....; * * * IChunk chunk = cFac.newChunk(); * ISymbolicChunk sc = scFac.newSymbolicChunk(); * ISubsymbolicChunk ssc = sscFac.newSubsymbolicChunk(); * * scFac.bind(sc, chunk, type); * sscFac.bind(ssc, chunk, type); * cFac.bind(chunk, sc, ssc); * * * </code> * * @author harrison */ public interface IChunkFactory { static public final String COPIED_FROM_KEY = "CopiedFrom"; /** * create a new IChunk wrapper, its symbolic and subsymbolic contents should * not be set. * * @return new, unbound (to sub/symbolic contents) chunk */ public IChunk newChunk(IModel model); /** * bind this chunk wrapper to its related contents. This is a separate call so * that other factories can contribute their theoretically motivated contents. * * @param chunk * @param symbolic * @param subsymbolic */ public void bind(IChunk chunk, ISymbolicChunk symbolic, ISubsymbolicChunk subsymbolic); /** * disassociate the chunk from its contents * * @param chunk * @param symbolic * @param subsymbolic */ public void unbind(IChunk chunk, ISymbolicChunk symbolic, ISubsymbolicChunk subsymbolic); /** * dispose of an unneeded chunk wrapper. sub/symbolic contents will have * already been unbound * * @param chunk */ public void dispose(IChunk chunk); public void merge(IChunk master, IChunk mergie); /** * copy relevant metadata to a chunk that will (ultimately) be a copy * * @param source * @param destination */ public void copy(IChunk source, IChunk destination); }