content: /*******************************************************************************
   * Copyright (c) 2000, 2007 IBM Corporation and others.
   * All rights reserved. This program and the accompanying materials
   * are made available under the terms of the Eclipse Public License v1.0
   * which accompanies this distribution, and is available at
   * http://www.eclipse.org/legal/epl-v10.html
   *
   * Contributors:
   *   Jesper Kamstrup Linnet (eclipse@kamstrup-linnet.dk) - initial API and implementation 
   * 			(report 36180: Callers/Callees view)
   *******************************************************************************/
  package org.eclipse.wst.jsdt.internal.ui.callhierarchy;
  
  import org.eclipse.jface.viewers.ITableLabelProvider;
  import org.eclipse.jface.viewers.LabelProvider;
  import org.eclipse.swt.graphics.Image;
  import org.eclipse.wst.jsdt.internal.corext.callhierarchy.CallLocation;
  import org.eclipse.wst.jsdt.internal.ui.JavaPluginImages;
  
  class LocationLabelProvider extends LabelProvider implements ITableLabelProvider {
      private static final int COLUMN_ICON= 0;
      private static final int COLUMN_LINE= 1;
      private static final int COLUMN_INFO= 2;
          
      LocationLabelProvider() {
          // Do nothing
      }
              
      /* (non-Javadoc)
       * @see org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object)
       */
      public String getText(Object element) {
          return getColumnText(element, COLUMN_INFO);
      }
  
      public Image getImage(Object element) {
          return getColumnImage(element, COLUMN_ICON);
      }
      
      private String removeWhitespaceOutsideStringLiterals(CallLocation callLocation) {
          StringBuffer buf = new StringBuffer();
          boolean withinString = false;
  
          String s= callLocation.getCallText();
          for (int i = 0; i < s.length(); i++) {
              char ch = s.charAt(i);
  
              if (ch == '"') {
                  withinString = !withinString;
              }
  
              if (withinString) {
                  buf.append(ch);
              } else if (Character.isWhitespace(ch)) {
                  if ((buf.length() == 0) ||
                              !Character.isWhitespace(buf.charAt(buf.length() - 1))) {
                      if (ch != ' ') {
                          ch = ' ';
                      }
  
                      buf.append(ch);
                  }
              } else {
                  buf.append(ch);
              }
          }
  
          return buf.toString();
      }
  
      /* (non-Javadoc)
       * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object, int)
       */
      public Image getColumnImage(Object element, int columnIndex) {
          if (columnIndex == COLUMN_ICON) {
              return JavaPluginImages.get(JavaPluginImages.IMG_OBJS_SEARCH_OCCURRENCE);
          }
          return null;
      }
  
      /* (non-Javadoc)
       * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object, int)
       */
      public String getColumnText(Object element, int columnIndex) {
          if (element instanceof CallLocation) {
              CallLocation callLocation= (CallLocation) element;
              
              switch (columnIndex) {
                  case COLUMN_LINE:
                      int lineNumber= callLocation.getLineNumber();
                      if (lineNumber == CallLocation.UNKNOWN_LINE_NUMBER) {
  						return CallHierarchyMessages.LocationLabelProvider_unknown;
                      } else {
                      	return String.valueOf(lineNumber);
                      }
                  case COLUMN_INFO:
                      return removeWhitespaceOutsideStringLiterals(callLocation);
              }
          }
  
          return ""; //$NON-NLS-1$        
      }
  }
  