/* -*- tab-width: 4 -*- * * Electric(tm) VLSI Design System * * File: ExportConflict.java * * Copyright (c) 2003 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.user.ncc; import java.io.Serializable; import java.util.Iterator; import com.sun.electric.database.hierarchy.Cell; import com.sun.electric.database.hierarchy.Export; import com.sun.electric.database.network.Network; import com.sun.electric.database.variable.VarContext; /** * This class is an abstract container for an Export Conflict. * It holds Cell and Context of the conflict, and conflicting name */ public abstract class ExportConflict implements Serializable { /** Conflict Context */ protected Cell cell; /** Conflict Cell */ protected VarContext context; /** Conflicting name */ protected String name; public ExportConflict(Cell cel, VarContext con, String nm) { cell = cel; context = con; name = nm; } public Cell getCell() { return cell; } public VarContext getContext() { return context; } public String getName() { return name; } /** * Get text which should be printed as a hyperlink to conflicting * Networks/Exports * @param col table column * @return text to print as a hyperlink to conflicting Networks/Exports */ protected abstract String getDescription(int col); /** * This class is a container for an Export/Global Network Conflict. * A local Network has the same name as a global Network, which creates * a conflict. */ public static class NetworkConflict extends ExportConflict { static final long serialVersionUID = 0; /** Local Network */ private Network localNet; /** Global Network */ private Network globalNet; /** Network hyperlink texts */ private String descr[] = new String[2]; public NetworkConflict(Cell cel, VarContext con, String nm, Network lNet, Network gNet) { super(cel, con, nm); localNet = lNet; globalNet = gNet; descr[0] = createDescription(globalNet); descr[1] = createDescription(localNet); } /** * Get text which should be printed as a hyperlink to a conflicting Network. * This text id a list of Network names surrounded by curly brackets {} * Column 0 corresponds to the local Network, 1 - to the global one. * @param col table column If column is not 0 or 1, then null is returned * @return text to print as a hyperlink to conflicting Networks/Exports */ protected String getDescription(int col) { if (col != 0 && col != 1) return null; return descr[col]; } /** * Get conflicting Network. Column 0 corresponds to the local Network, * 1 - to the global one. * @param col table column If column is not 0 or 1, then null is returned * @return conflicting Network for the given table column */ public Network getNetwork(int col) { if (col == 0) return globalNet; else if (col == 1) return localNet; else return null; } /** * Get the local conflicting Network * @return the local conflicting Network */ public Network getLocalNetwork() { return localNet; } /** * Get the global conflicting Network * @return the global conflicting Network */ public Network getGlobalNetwork() { return globalNet; } /** * Create text which should be printed as a hyperlink to conflicting Network. * This text id a list of Network names surrounded by curly brackets {} * @param net Network to create a text for * @return hyperlink text for the provided Network */ private String createDescription(Network net) { StringBuffer buf = new StringBuffer(10); buf.append("{"); for (Iterator<String> it = net.getNames(); it.hasNext();) { buf.append(" " + it.next()); if (it.hasNext()) buf.append(","); } buf.append(" }"); return buf.toString(); } } /** * This class is a container for an Export/Global Characteristics conflict. * A local Export has the same name as a global signal, which creates * a conflict. */ public static class CharactConflict extends ExportConflict { static final long serialVersionUID = 0; /** Local Export type */ private String localType; /** Global signal type */ private String globalType; /** Local Export */ private Export localExport; public CharactConflict(Cell cel, VarContext con, String nm, String gType, String lType, Export exp) { super(cel, con, nm); localType = lType; globalType = gType; localExport = exp; } /** * Get text which should be printed as a hyperlink to conflicting * local Export and global signal. This text is simply the type of * Export or signal. Column 0 corresponds to the global signal, * 1 - to the local Export. * @param col table column If column is not 0 or 1, then null is returned * @return text to print as a hyperlink to conflicting Networks/Exports */ protected String getDescription(int col) { if (col == 0) return globalType; else if (col == 1) return localType; else return null; } /** * Get local Export * @return local Export */ public Export getLocalExport() { return localExport; } } }