001    /*
002     * Copyright (C) 2010 eXo Platform SAS.
003     *
004     * This is free software; you can redistribute it and/or modify it
005     * under the terms of the GNU Lesser General Public License as
006     * published by the Free Software Foundation; either version 2.1 of
007     * the License, or (at your option) any later version.
008     *
009     * This software is distributed in the hope that it will be useful,
010     * but WITHOUT ANY WARRANTY; without even the implied warranty of
011     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
012     * Lesser General Public License for more details.
013     *
014     * You should have received a copy of the GNU Lesser General Public
015     * License along with this software; if not, write to the Free
016     * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
017     * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
018     */
019    
020    package org.crsh.shell.ui;
021    
022    import org.crsh.shell.io.ShellWriter;
023    
024    import java.io.IOException;
025    
026    /**
027     * @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
028     * @version $Revision$
029     */
030    public class LabelElement extends Element {
031    
032      /** . */
033      private final String value;
034    
035      public LabelElement(String value) {
036        this.value = value;
037      }
038    
039      public LabelElement(Object value) {
040        this.value = String.valueOf(value);
041      }
042    
043      public String getValue() {
044        return value;
045      }
046    
047      @Override
048      void doPrint(UIWriterContext ctx, ShellWriter writer) throws IOException {
049    
050        //
051        int availableWidth = (ctx.getConsoleWidth() - ctx.padWidth());
052        
053        if (availableWidth < value.length()) {
054    
055          String remainingText = value;
056          boolean first = true;
057    
058          while (availableWidth < remainingText.length()) {
059    
060            //
061            String currentValue = remainingText.substring(0, availableWidth).trim();
062            remainingText = remainingText.substring(availableWidth).trim();
063    
064            //
065            printLine(ctx, writer, currentValue, availableWidth, !first);
066            writer.append(ctx, "\n");
067    
068            //
069            first = false;
070            
071          }
072    
073          //
074          ctx.rightLinePadding = "";
075          printLine(ctx, writer, remainingText, availableWidth, !first);
076    
077        } else {
078          writer.append(ctx, value);
079        }
080      }
081    
082      private void printLine(UIWriterContext ctx, ShellWriter writer, String value, int available, boolean needed) throws IOException {
083    
084        //
085        if (needed) {
086          if (ctx.parentUIContext != null) {
087            ctx.parentUIContext.pad(writer);
088          }
089          ctx.pad(writer);
090          writer.append(ctx, ctx.leftLinePadding);
091        }
092    
093        //
094        writer.append(ctx, value);
095    
096        //
097        for (int pos = value.length(); pos < available; ++pos) {
098          writer.append(" ");
099        }
100        writer.append(ctx, ctx.rightLinePadding);
101    
102      }
103    
104      @Override
105      public String toString() {
106        return "Label[" + value + "]";
107      }
108    
109      @Override
110      int width() {
111        return value.length();
112      }
113    
114    }