ToStringGenerationSettings.java :  » IDE-Eclipse » jdt » org » eclipse » jdt » internal » corext » codemanipulation » tostringgeneration » Java Open Source

Java Open Source » IDE Eclipse » jdt 
jdt » org » eclipse » jdt » internal » corext » codemanipulation » tostringgeneration » ToStringGenerationSettings.java
/*******************************************************************************
 * Copyright (c) 2008 Mateusz Matela 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:
 *     Mateusz Matela <mateusz.matela@gmail.com> - [code manipulation] [dcr] toString() builder wizard - https://bugs.eclipse.org/bugs/show_bug.cgi?id=26070
 *     Mateusz Matela <mateusz.matela@gmail.com> - [toString] finish toString() builder wizard - https://bugs.eclipse.org/bugs/show_bug.cgi?id=267710
 *******************************************************************************/
package org.eclipse.jdt.internal.corext.codemanipulation.tostringgeneration;

import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jface.resource.StringConverter;

import org.eclipse.jdt.internal.corext.codemanipulation.CodeGenerationSettings;

public class ToStringGenerationSettings extends CodeGenerationSettings {

  public static final String SETTINGS_SELECTED_TEMPLATE= "ToStringTemplateSelected"; //$NON-NLS-1$

  public static final String SETTINGS_STRINGSTYLE= "StringStyle"; //$NON-NLS-1$

  public static final String SETTINGS_SKIPNULLS= "SkipNull"; //$NON-NLS-1$

  public static final String SETTINGS_IGNOREDEFAULT= "IgnoreDefault"; //$NON-NLS-1$

  public static final String SETTINGS_LIMITELEMENTS= "LimitElements"; //$NON-NLS-1$

  public static final String SETTINGS_LIMITVALUE= "LimitValue"; //$NON-NLS-1$

  public static final String SETTINGS_TEMPLATE_NAMES= "ToStringTemplateNames"; //$NON-NLS-1$

  public static final String SETTINGS_TEMPLATES= "ToStringTemplates"; //$NON-NLS-1$

  public static final String SETTINGS_CUSTOMBUILDER_CLASS= "CustomBuilderClass"; //$NON-NLS-1$

  public static final String SETTINGS_CUSTOMBUILDER_LABEL= "CustomBuilderLabel"; //$NON-NLS-1$

  public static final String SETTINGS_CUSTOMBUILDER_APPENDMETHOD= "CustomBuilderAppendMethod"; //$NON-NLS-1$

  public static final String SETTINGS_CUSTOMBUILDER_RESULTMETHOD= "CustomBuilderResultMethod"; //$NON-NLS-1$

  public static final String SETTINGS_CUSTOMBUILDER_CHAINCALLS= "CustomBuilderChainCalls"; //$NON-NLS-1$

  /**
   * Container for settings specific for custom toString() generator code style
   */
  public static class CustomBuilderSettings {
    /**
     * what class should be used as a custom toString() builder (this is a fully qualified and
     * Parameterized name)
     **/
    public String className;

    /** identifier for the local variable that holds the custom toString() builder in generated code **/
    public String variableName;

    /** name of a custom toString() builder's methods that should be called to append content **/
    public String appendMethod;

    /** name of a custom toString() builder method that should be called to retrieve result **/
    public String resultMethod;

    /** should custom toString() builder method calls be joined into chains? **/
    public boolean chainCalls;
  }

  /** which template should be used to format the output of the toString() method? */
  public int stringFormatTemplateNumber;

  /**
   * what is the template (redundancy - this field can be determined basing on
   * <code>GenerateToStringDialog.getTemplates()</code> and
   * <code>stringFormatTemplateNumber</code>, but this way it's more convenient)
   */
  public String stringFormatTemplate;

  /** what style of code should the toString() method have? */
  public int toStringStyle;

  /** should the toString() method skip null values? */
  public boolean skipNulls;

  /** should the toString() method use its own way to show elements of an array? */
  public boolean customArrayToString;

  /**
   * should the toString() limit maximum number of elements of arrays/Collections to be
   * listed?
   */
  public boolean limitElements;

  /** what is the maximum number of elements in array/Collection to show? */
  public int limitValue;

  /** should blocks be forced in if/for/while statements? */
  public boolean useBlocks;

  /** can generated code use jdk 1.5 API? **/
  public boolean is50orHigher;

  /** can generated code use jdk 1.6 API? **/
  public boolean is60orHigher;

  /** settings specific for custom builder code style **/
  public CustomBuilderSettings customBuilderSettings;

  private IDialogSettings dialogSettings;

  public ToStringGenerationSettings(IDialogSettings dialogSettings) {
    this.dialogSettings= dialogSettings;
    limitElements= asBoolean(dialogSettings.get(SETTINGS_LIMITELEMENTS), false);
    customArrayToString= asBoolean(dialogSettings.get(SETTINGS_IGNOREDEFAULT), true);
    toStringStyle= asInt(dialogSettings.get(SETTINGS_STRINGSTYLE), 0);
    limitValue= asInt(dialogSettings.get(SETTINGS_LIMITVALUE), 10);
    skipNulls= asBoolean(dialogSettings.get(SETTINGS_SKIPNULLS), false);
    stringFormatTemplateNumber= asInt(dialogSettings.get(SETTINGS_SELECTED_TEMPLATE), 0);
    customBuilderSettings= new CustomBuilderSettings();
    customBuilderSettings.className= asString(dialogSettings.get(SETTINGS_CUSTOMBUILDER_CLASS), ""); //$NON-NLS-1$
    customBuilderSettings.variableName= asString(dialogSettings.get(SETTINGS_CUSTOMBUILDER_LABEL), "builder"); //$NON-NLS-1$
    customBuilderSettings.appendMethod= asString(dialogSettings.get(SETTINGS_CUSTOMBUILDER_APPENDMETHOD), "append"); //$NON-NLS-1$
    customBuilderSettings.resultMethod= asString(dialogSettings.get(SETTINGS_CUSTOMBUILDER_RESULTMETHOD), "toString"); //$NON-NLS-1$
    customBuilderSettings.chainCalls= asBoolean(dialogSettings.get(SETTINGS_CUSTOMBUILDER_CHAINCALLS), false);
  }

  public ToStringGenerationSettings() {

  }

  public void writeDialogSettings() {
    dialogSettings.put(SETTINGS_LIMITELEMENTS, limitElements);
    dialogSettings.put(SETTINGS_IGNOREDEFAULT, customArrayToString);
    dialogSettings.put(SETTINGS_STRINGSTYLE, toStringStyle);
    dialogSettings.put(SETTINGS_LIMITVALUE, limitValue);
    dialogSettings.put(SETTINGS_SKIPNULLS, skipNulls);
    dialogSettings.put(SETTINGS_SELECTED_TEMPLATE, stringFormatTemplateNumber);
  }

  /**
   * Returns a copy of customBuilderSettings. Changes made in the returned object will not affect
   * this settings object. To save changes made in returned object, use
   * {@link #writeCustomBuilderSettings(ToStringGenerationSettings.CustomBuilderSettings)}.
   * 
   * @return copy of custom builder settings object
   */
  public CustomBuilderSettings getCustomBuilderSettings() {
    CustomBuilderSettings result= new CustomBuilderSettings();
    result.className= customBuilderSettings.className;
    result.variableName= customBuilderSettings.variableName;
    result.appendMethod= customBuilderSettings.appendMethod;
    result.resultMethod= customBuilderSettings.resultMethod;
    result.chainCalls= customBuilderSettings.chainCalls;
    return result;
  }

  /**
   * Writes given custom builder settings object to the underlying dialog settings.
   * 
   * @param customBuilderSettings1 settings to save
   */
  public void writeCustomBuilderSettings(CustomBuilderSettings customBuilderSettings1) {
    dialogSettings.put(SETTINGS_CUSTOMBUILDER_CLASS, customBuilderSettings1.className);
    dialogSettings.put(SETTINGS_CUSTOMBUILDER_LABEL, customBuilderSettings1.variableName);
    dialogSettings.put(SETTINGS_CUSTOMBUILDER_APPENDMETHOD, customBuilderSettings1.appendMethod);
    dialogSettings.put(SETTINGS_CUSTOMBUILDER_RESULTMETHOD, customBuilderSettings1.resultMethod);
    dialogSettings.put(SETTINGS_CUSTOMBUILDER_CHAINCALLS, customBuilderSettings1.chainCalls);
    customBuilderSettings= customBuilderSettings1;
  }

  private boolean asBoolean(String string, boolean defaultValue) {
    if (string != null) {
      return StringConverter.asBoolean(string, defaultValue);
    }
    return defaultValue;
  }

  private static int asInt(String string, int defaultValue) {
    if (string != null) {
      return StringConverter.asInt(string, defaultValue);
    }
    return defaultValue;
  }

  private static String asString(String string, String defaultValue) {
    if (string != null) {
      return string;
    }
    return defaultValue;
  }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.