/* * Copyright 2011 Uwe Krueger. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.mandelsoft.mand.util; import com.mandelsoft.mand.MandelName; import com.mandelsoft.mand.QualifiedMandelName; import com.mandelsoft.mand.cm.Colormap; import com.mandelsoft.mand.cm.ColormapSource; import com.mandelsoft.mand.scan.MandelHandle; import com.mandelsoft.mand.scan.MandelScanner; import java.io.IOException; /** * * @author Uwe Krueger */ public class UpstreamColormapSource implements ColormapSource { protected static final boolean debug=true; private MandelName n; private MandelScanner scanner; private ColormapSource defaultSource; private QualifiedMandelName source; public UpstreamColormapSource(MandelName n, MandelScanner scanner, ColormapSource defaultSource) { this.n=n; this.scanner=scanner; this.defaultSource=defaultSource; } public UpstreamColormapSource(MandelName n, MandelScanner scanner) { this(n,scanner,null); } public Colormap getColormap() { Colormap cm=null; MandelHandle h=MandUtils.lookupColormap(scanner, n); while (cm==null && h!=null) { cm=optimizedLoad(h); if (cm==null) try { if (debug) System.out.println("use upstream colormap of "+h.getName()); cm=h.getData().getColormap(); } catch (IOException ex) { h=MandUtils.lookupColormap(scanner, h.getName().getMandelName().getParentName()); } } if (cm!=null) colormapFound(h,cm); else cm=defaultSource==null?null:defaultSource.getColormap(); return cm; } public MandelName getBasename() { return n; } protected Colormap optimizedLoad(MandelHandle h) { return null; } protected void colormapFound(MandelHandle h, Colormap cm) { source=h.getName(); } public QualifiedMandelName getSource() { return source; } }