/* * Beanfabrics Framework Copyright (C) by Michael Karneim, beanfabrics.org * Use is subject to license terms. See license.txt. */ package org.beanfabrics.swing.customizer.table; import javax.swing.SwingConstants; import org.beanfabrics.swing.table.BnColumn; import org.beanfabrics.swing.table.BnColumnBuilder; public class BnColumnBuilderJavaFormat implements ObjectToSourceCodeFormatter<BnColumn[]> { private static final String BUILDER_CLASSNAME = BnColumnBuilder.class.getName(); private String builderClassname; private String columnDelimiter = "\n\t "; public BnColumnBuilderJavaFormat() { this(BUILDER_CLASSNAME); } protected BnColumnBuilderJavaFormat(String builderClassname) { this.builderClassname = builderClassname; } public String getColumnDelimiter() { return columnDelimiter; } public void setColumnDelimiter(String columnDelimiter) { this.columnDelimiter = columnDelimiter; } @Override public String format(BnColumn[] columns) { StringBuilder sb = new StringBuilder(); if (columns == null || columns.length == 0) { return null; } sb.append("new " + builderClassname + "()"); for (int i = 0; i < columns.length; i++) { BnColumn c = columns[i]; sb.append(columnDelimiter); if (c != null) { sb.append(".addColumn()"); appendProperties(sb, c); } } sb.append(columnDelimiter); sb.append(".build()"); return sb.toString(); } protected void appendProperties(StringBuilder sb, BnColumn column) { if (column.getPath() != null) { sb.append(".withPath(\"" + column.getPath().getPathString() + "\")"); } if (column.getColumnName() != null) { sb.append(".withName(\"" + column.getColumnName() + "\")"); } if (column.getWidth() != BnColumn.DEFAULT_WIDTH) { sb.append(".withWidth(" + column.getWidth() + ")"); } if (column.isWidthFixed() != BnColumn.DEFAULT_WIDTH_FIXED) { sb.append(".withWidthFixed(" + column.isWidthFixed() + ")"); } if (column.getOperationPath() != null) { sb.append(".withOperationPath(\"" + column.getOperationPath().getPathString() + "\")"); } if (!equals(column.getAlignment(), BnColumn.DEFAULT_ALIGNEMNT)) { sb.append(".withAlignment(" + getAlignmentConstantString(column.getAlignment()) + ")"); } } private static boolean equals(Integer a, Integer b) { if (a == null) { return b == null; } else { return a.equals(b); } } private String getAlignmentConstantString(Integer alignment) { if (alignment == null) { return "null"; } String code; switch (alignment.intValue()) { case SwingConstants.LEADING: code = builderClassname + ".ALIGNMENT_LEADING"; break; case SwingConstants.LEFT: code = builderClassname + ".ALIGNMENT_LEFT"; break; case SwingConstants.TRAILING: code = builderClassname + ".ALIGNMENT_TRAILING"; break; case SwingConstants.RIGHT: code = builderClassname + ".ALIGNMENT_RIGHT"; break; case SwingConstants.CENTER: code = builderClassname + ".ALIGNMENT_CENTER"; break; default: code = "null"; } return code; } }