/** * Copyright (c) 2013-2016, The SeedStack authors <http://seedstack.org> * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ package org.seedstack.seed.core.internal.configuration.tool; import com.google.common.base.Strings; import org.fusesource.jansi.Ansi; import org.seedstack.shed.text.TextWrapper; import java.io.PrintStream; class DetailPrinter { private static final TextWrapper textWrapper = new TextWrapper(120); private final PropertyInfo propertyInfo; DetailPrinter(PropertyInfo propertyInfo) { this.propertyInfo = propertyInfo; } void printDetail(PrintStream stream) { Ansi ansi = Ansi.ansi(); String title = "Details of " + propertyInfo.getName(); ansi .a(title) .newline() .a(Strings.repeat("-", title.length())) .newline().newline(); printSummary(propertyInfo, ansi); printDeclaration(propertyInfo, ansi); printLongDescription(propertyInfo, ansi); printAdditionalInfo(propertyInfo, ansi); ansi.newline(); stream.print(ansi.toString()); } private Ansi printSummary(PropertyInfo propertyInfo, Ansi ansi) { return ansi.a(propertyInfo.getShortDescription()).newline(); } private void printDeclaration(PropertyInfo propertyInfo, Ansi ansi) { ansi .newline() .a(" ") .fgBright(Ansi.Color.MAGENTA) .a(propertyInfo.getType()) .reset() .a(" ") .fgBright(Ansi.Color.BLUE) .a(propertyInfo.getName()) .reset(); Object defaultValue = propertyInfo.getDefaultValue(); if (defaultValue != null) { ansi .a(" = ") .fgBright(Ansi.Color.GREEN) .a(String.valueOf(defaultValue)) .reset(); } ansi .a(";") .newline(); } private void printLongDescription(PropertyInfo propertyInfo, Ansi ansi) { String longDescription = propertyInfo.getLongDescription(); if (longDescription != null) { ansi.newline().a(textWrapper.wrap(longDescription)).newline(); } } private void printAdditionalInfo(PropertyInfo propertyInfo, Ansi ansi) { if (propertyInfo.isMandatory() || propertyInfo.isSingleValue()) { ansi.newline(); } if (propertyInfo.isMandatory()) { ansi.a("* This property is mandatory.").newline(); } if (propertyInfo.isSingleValue()) { ansi.a("* This property is the default property of its declaring object").newline(); } } }