/* -*- tab-width: 4 -*- * * Electric(tm) VLSI Design System * * File: CellModelPrefs.java * * Copyright (c) 2005 Sun Microsystems and Static Free Software * * Electric(tm) is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * Electric(tm) 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Electric(tm); see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, Mass 02111-1307, USA. */ package com.sun.electric.tool.io.output; import com.sun.electric.database.hierarchy.Cell; import com.sun.electric.database.hierarchy.EDatabase; import com.sun.electric.database.hierarchy.Library; import com.sun.electric.database.text.Pref; import com.sun.electric.tool.io.FileType; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.prefs.Preferences; /** * User: gainsley * Date: Jul 17, 2006 */ public class CellModelPrefs { public static final CellModelPrefs spiceModelPrefs = new CellModelPrefs("Spice", FileType.SPICE, true); public static final CellModelPrefs verilogModelPrefs = new CellModelPrefs("Verilog", FileType.VERILOG, false); private final String type; private final FileType fileType; private final boolean canLayoutFromNetlist; private CellModelPrefs(String type, FileType fileType, boolean canLayoutFromNetlist) { this.type = type; this.fileType = fileType; this.canLayoutFromNetlist = canLayoutFromNetlist; } public String getType() { return type; } public FileType getFileType() { return fileType; } public boolean isCanLayoutFromNetlist() { return canLayoutFromNetlist; } public boolean isUseModelFromFile(Cell cell) { return isUseModelFromFile(getModelFileUnfiltered(cell)); } public static boolean isUseModelFromFile(String unfilteredFileName) { return unfilteredFileName != null && unfilteredFileName.length() > 0 && !unfilteredFileName.startsWith("-----") && !unfilteredFileName.startsWith("+++++"); } public boolean isUseLayoutView(Cell cell) { return isUseLayoutView(getModelFileUnfiltered(cell)); } public static boolean isUseLayoutView(String unfilteredFileName) { return unfilteredFileName != null && unfilteredFileName.length() > 0 && unfilteredFileName.startsWith("+++++"); } public String getModelFile(Cell cell) { return getModelFile(getModelFileUnfiltered(cell)); } public static String getModelFile(String unfilteredFileName) { if (unfilteredFileName != null && unfilteredFileName.length() > 0 && (unfilteredFileName.startsWith("+++++") || unfilteredFileName.startsWith("-----"))) return unfilteredFileName.substring(5); return unfilteredFileName; } public void setModelFile(Cell cell, String fileName, boolean useModelFromFile, boolean useLayoutView) { assert !(useModelFromFile && useLayoutView); if (!useModelFromFile && useLayoutView) fileName = "+++++" + fileName; if (!useModelFromFile && !useLayoutView) fileName = "-----" + fileName; Preferences libPrefs = Pref.getLibraryPreferences(cell.getId().libId); String key = getPrefKey(cell); if (fileName.length() == 0) libPrefs.remove(key); else libPrefs.put(key, fileName); } public Map<Cell,String> getUnfilteredFileNames(EDatabase database) { HashMap<Cell,String> m = new HashMap<Cell,String>(); for (Iterator<Library> lit = database.getLibraries(); lit.hasNext(); ) { Library lib = lit.next(); Preferences libPrefs = Pref.getLibraryPreferences(lib.getId()); for (Iterator<Cell> cit = lib.getCells(); cit.hasNext(); ) { Cell cell = cit.next(); String unfilteredFileName = libPrefs.get(getPrefKey(cell), ""); if (unfilteredFileName.length() == 0) continue; m.put(cell, unfilteredFileName); } } return m; } private String getModelFileUnfiltered(Cell cell) { return Pref.getLibraryPreferences(cell.getId().libId).get(getPrefKey(cell), ""); } public void factoryResetModelFile(Cell cell) { Pref.getLibraryPreferences(cell.getId().libId).remove(getPrefKey(cell)); } private String getPrefKey(Cell cell) { return type + "ModelFileFor_" + cell.getLibrary().getName() +"_" + cell.getName() + "_" + cell.getView().getAbbreviation(); } }