/*
* Library name : dxf
* (C) 2006 Micha�l Michaud
*
* This program 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 2
* of the License, or (at your option) any later version.
*
* This program 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 this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* For more information, contact:
*
* michael.michaud@free.fr
*
*/
package org.jgrasstools.gears.io.dxfdwg.libs.dxf;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
/**
* The TABLES section of a DXF file. It contains LAYERs, LTYPEs...
* There is a static reader to read the TABLES section in a DXF file
* and a toString method able to write the section in a DXF form
* @author Micha�l Michaud
* @version 0.5.0
*/
// History
// 2006-11-12 : Bug fixed x==Double.NaN --> Double.isNaN(x)
public class DxfTABLES {
public final static DxfGroup TABLE = new DxfGroup(0, "TABLE");
public final static DxfGroup ENDTAB = new DxfGroup(0, "ENDTAB");
public final static DxfGroup NBMAX = new DxfGroup(70, "NBMAX");
public final static DxfGroup APPID = new DxfGroup(2, "APPID");
public final static DxfGroup DIMSTYLE = new DxfGroup(2, "DIMSTYLE");
public final static DxfGroup LTYPE = new DxfGroup(2, "LTYPE");
public final static DxfGroup LAYER = new DxfGroup(2, "LAYER");
public final static DxfGroup STYLE = new DxfGroup(2, "STYLE");
public final static DxfGroup UCS = new DxfGroup(2, "UCS");
public final static DxfGroup VIEW = new DxfGroup(2, "VIEW");
public final static DxfGroup VPORT = new DxfGroup(2, "VPORT");
Map appId;
Map dimStyle;
Map lType;
Map layer;
Map style;
Map ucs;
Map view;
Map vPort;
public DxfTABLES() {
appId = new HashMap();
dimStyle = new HashMap();
lType = new HashMap();
layer = new HashMap();
style = new HashMap();
ucs = new HashMap(); //
view = new HashMap();
vPort = new HashMap();
}
public static DxfTABLES readTables(RandomAccessFile raf) throws IOException {
DxfTABLES tables = new DxfTABLES();
DxfGroup group = null;
String nomVariable = null;
// It�ration sur chaque table
while (null != (group = DxfGroup.readGroup(raf)) && !group.equals(DxfFile.ENDSEC)) {
Map map = null;
if (group.equals(TABLE)) {
// Lecture du groupe portant le nom de la table
group = DxfGroup.readGroup(raf);
if (group.equals(APPID)) {
//System.out.println("\tTABLE APPID");
tables.appId = DxfTABLE_APPID_ITEM.readTable(raf);
}
else if (group.equals(DIMSTYLE)) {
//System.out.println("\tTABLE DIMSTYLE");
tables.dimStyle = DxfTABLE_DIMSTYLE_ITEM.readTable(raf);
}
else if (group.equals(LTYPE)) {
//System.out.println("\tTABLE LTYPE");
tables.lType = DxfTABLE_LTYPE_ITEM.readTable(raf);
}
else if (group.equals(LAYER)) {
//System.out.println("\tTABLE LAYER");
tables.layer = DxfTABLE_LAYER_ITEM.readTable(raf);
}
else if (group.equals(STYLE)) {
//System.out.println("\tTABLE STYLE");
tables.style = DxfTABLE_STYLE_ITEM.readTable(raf);
}
else if (group.equals(UCS)) {
//System.out.println("\tTABLE UCS");
tables.ucs = DxfTABLE_UCS_ITEM.readTable(raf);
}
else if (group.equals(VIEW)) {
//System.out.println("\tTABLE VIEW");
tables.view= DxfTABLE_VIEW_ITEM.readTable(raf);
}
else if (group.equals(VPORT)) {
//System.out.println("\tTABLE VPORT");
tables.vPort= DxfTABLE_VPORT_ITEM.readTable(raf);
}
else if (group.getCode() == 999) {
//System.out.println("Commentaire : " + group.getValue());
}
else {
//System.out.println("Group " + group.getCode() + " " + group.getValue() + " UNKNOWN");
}
}
else if (group.getCode() == 999) {
//System.out.println("Commentaire : " + group.getValue());
}
else {
//System.out.println("Group " + group.getCode() + " " + group.getValue() + " UNKNOWN");
}
}
return tables;
}
public String toString() {
StringBuffer sb = new StringBuffer(DxfFile.SECTION.toString());
sb.append(DxfFile.TABLES.toString());
if (vPort.size() >0) {
sb.append(DxfTABLES.TABLE.toString());
sb.append(DxfTABLES.VPORT.toString());
sb.append(DxfGroup.toString(70, Integer.toString(vPort.size())));
Iterator it = vPort.keySet().iterator();
while (it.hasNext()) {
sb.append(DxfGroup.toString(0, "VPORT"));
sb.append(((DxfTABLE_VPORT_ITEM)vPort.get(it.next())).toString());
}
sb.append(DxfTABLES.ENDTAB.toString());
}
if (appId.size() > 0) {
sb.append(DxfTABLES.TABLE.toString());
sb.append(DxfTABLES.APPID.toString());
sb.append(DxfGroup.toString(70, Integer.toString(appId.size())));
Iterator it = appId.keySet().iterator();
while (it.hasNext()) {
sb.append(DxfGroup.toString(0, "APPID"));
sb.append(((DxfTABLE_APPID_ITEM)appId.get(it.next())).toString());
}
sb.append(DxfTABLES.ENDTAB.toString());
}
if (dimStyle.size() >0) {
sb.append(DxfTABLES.TABLE.toString());
sb.append(DxfTABLES.DIMSTYLE.toString());
sb.append(DxfGroup.toString(70, Integer.toString(dimStyle.size())));
Iterator it = dimStyle.keySet().iterator();
while (it.hasNext()) {
sb.append(DxfGroup.toString(0, "DIMSTYLE"));
sb.append(((DxfTABLE_DIMSTYLE_ITEM)dimStyle.get(it.next())).toString());
}
sb.append(DxfTABLES.ENDTAB.toString());
}
if (lType.size() >0) {
sb.append(DxfTABLES.TABLE.toString());
sb.append(DxfTABLES.LTYPE.toString());
sb.append(DxfGroup.toString(70, Integer.toString(lType.size())));
Iterator it = lType.keySet().iterator();
while (it.hasNext()) {
sb.append(DxfGroup.toString(0, "LTYPE"));
sb.append(((DxfTABLE_LTYPE_ITEM)lType.get(it.next())).toString());
}
sb.append(DxfTABLES.ENDTAB.toString());
}
if (layer.size() >0) {
sb.append(DxfTABLES.TABLE.toString());
sb.append(DxfTABLES.LAYER.toString());
sb.append(DxfGroup.toString(70, Integer.toString(layer.size())));
Iterator it = layer.keySet().iterator();
while (it.hasNext()) {
sb.append(DxfGroup.toString(0, "LAYER"));
sb.append(((DxfTABLE_LAYER_ITEM)layer.get(it.next())).toString());
}
sb.append(DxfTABLES.ENDTAB.toString());
}
if (style.size() >0) {
sb.append(DxfTABLES.TABLE.toString());
sb.append(DxfTABLES.STYLE.toString());
sb.append(DxfGroup.toString(70, Integer.toString(style.size())));
Iterator it = style.keySet().iterator();
while (it.hasNext()) {
sb.append(DxfGroup.toString(0, "STYLE"));
sb.append(((DxfTABLE_STYLE_ITEM)style.get(it.next())).toString());
}
sb.append(DxfTABLES.ENDTAB.toString());
}
if (ucs.size() >0) {
sb.append(DxfTABLES.TABLE.toString());
sb.append(DxfTABLES.UCS.toString());
sb.append(DxfGroup.toString(70, Integer.toString(ucs.size())));
Iterator it = ucs.keySet().iterator();
while (it.hasNext()) {
sb.append(DxfGroup.toString(0, "UCS"));
sb.append(((DxfTABLE_UCS_ITEM)ucs.get(it.next())).toString());
}
sb.append(DxfTABLES.ENDTAB.toString());
}
if (view.size() >0) {
sb.append(DxfTABLES.TABLE.toString());
sb.append(DxfTABLES.VIEW.toString());
sb.append(DxfGroup.toString(70, Integer.toString(view.size())));
Iterator it = view.keySet().iterator();
while (it.hasNext()) {
sb.append(DxfGroup.toString(0, "VIEW"));
sb.append(((DxfTABLE_VIEW_ITEM)view.get(it.next())).toString());
}
sb.append(DxfTABLES.ENDTAB.toString());
}
sb.append(DxfFile.ENDSEC.toString());
return sb.toString();
}
}