/******************************************************************************* * Copyright (c) 2013 hangum. * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Lesser Public License v2.1 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html * * Contributors: * hangum - initial API and implementation ******************************************************************************/ package com.hangum.tadpole.mongodb.erd.core.figures; import java.util.List; import org.apache.log4j.Logger; import org.eclipse.draw2d.ChopboxAnchor; import org.eclipse.draw2d.ColorConstants; import org.eclipse.draw2d.ConnectionAnchor; import org.eclipse.draw2d.Figure; import org.eclipse.draw2d.IFigure; import org.eclipse.draw2d.Label; import org.eclipse.draw2d.LineBorder; import org.eclipse.draw2d.MarginBorder; import org.eclipse.draw2d.ToolbarLayout; import com.hangum.tadpole.mongodb.erd.core.figures.tables.ColumnLayoutFigure; import com.swtdesigner.SWTResourceManager; public class TableFigure extends Figure { private static final Logger logger = Logger.getLogger(TableFigure.class); protected Label tableName; /** column type */ public static enum COLUMN_TYPE{KEY, NAME, TYPE, NULL}; protected ColumnLayoutFigure columnFigure; protected ColumnDetailFigure colKeyFigure; protected ColumnDetailFigure colNameFigure; protected ColumnDetailFigure colTypeFigure; protected ConnectionAnchor connectionAnchor; public TableFigure() { tableName = new Label(); tableName.setBorder(new MarginBorder(2, 2, 0, 2)); tableName.setForegroundColor(ColorConstants.blue()); tableName.setOpaque(true); // key colKeyFigure = new ColumnDetailFigure(); colKeyFigure.setForegroundColor(ColorConstants.red()); // name colNameFigure = new ColumnDetailFigure(); colNameFigure.setForegroundColor(ColorConstants.black()); // type colTypeFigure = new ColumnDetailFigure(); colTypeFigure.setForegroundColor(ColorConstants.buttonDarker()); columnFigure = new ColumnLayoutFigure(this); columnFigure.add(colKeyFigure); columnFigure.add(colNameFigure); columnFigure.add(colTypeFigure); ToolbarLayout layout = new ToolbarLayout(); setLayoutManager(layout); setBackgroundColor(SWTResourceManager.getColor(255, 255, 206)); setBorder(new LineBorder(ColorConstants.black(), 1)); setOpaque(true); add(this.tableName); add(this.columnFigure); } public void setTableName(String tableName){ this.tableName.setText(tableName); } public Label getTableName() { return tableName; } public void add(IFigure figure, Object constraint, int index) { if(figure instanceof ColumnFigure){ ColumnFigure tmpFigure = (ColumnFigure)figure; if(COLUMN_TYPE.KEY == tmpFigure.getColumnType()) { colKeyFigure.add(figure); } else if(COLUMN_TYPE.NAME == tmpFigure.getColumnType()) { colNameFigure.add(figure); } else if(COLUMN_TYPE.TYPE == tmpFigure.getColumnType()) { colTypeFigure.add(figure); } } else { super.add(figure, constraint, index); } } public void remove(IFigure figure) { if(figure instanceof ColumnFigure){ colKeyFigure.remove(figure); colNameFigure.remove(figure); colTypeFigure.remove(figure); } else { super.remove(figure); } } public void removeAllColumns(){ colKeyFigure.removeAll(); colNameFigure.removeAll(); colTypeFigure.removeAll(); List<Figure> listFigure = getChildren(); for (Figure figure : listFigure) { if(figure instanceof SubTableFigure) { SubTableFigure stFigure = (SubTableFigure)figure; // stFigure.removeAllColumns(); stFigure.removeAll(); } } } public ConnectionAnchor getConnectionAnchor() { if(connectionAnchor == null) connectionAnchor = new ChopboxAnchor(this); return connectionAnchor; } }