Java tutorial
/* * Copyright (C) 2010 Herve Quiroz * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ package org.trancecode.xproc; import com.google.common.collect.ImmutableMap; import java.util.Map; import org.trancecode.collection.TcMaps; import org.trancecode.function.TcSuppliers; /** * @author Herve Quiroz */ public final class ImmutablePipelineContext extends AbstractPipelineContext { public static ImmutablePipelineContext copyOf(final PipelineContext context) { if (context instanceof ImmutablePipelineContext) { return (ImmutablePipelineContext) context; } if (context instanceof AbstractPipelineContext) { return new ImmutablePipelineContext(((AbstractPipelineContext) context).getProperties()); } throw new IllegalArgumentException(context.getClass().getName()); } ImmutablePipelineContext(final Map<String, Object> properties) { super(ImmutableMap.copyOf(properties)); executor = TcSuppliers.memoize(executor); inputResolver = TcSuppliers.memoize(inputResolver); outputResolver = TcSuppliers.memoize(outputResolver); pipelineLibrary = TcSuppliers.memoize(pipelineLibrary); processor = TcSuppliers.memoize(processor); stepProcessors = TcSuppliers.memoize(stepProcessors); uriResolver = TcSuppliers.memoize(uriResolver); } ImmutablePipelineContext withNewEpisode() { return new ImmutablePipelineContext(TcMaps.copyAndPut(properties, PROPERTY_EPISODE, new Episode())); } }