LoopTargetFormat.java

/*******************************************************************************
 * Copyright (c) 2026 Carsten Hammer.
 *
 * This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * Contributors:
 *     Carsten Hammer
 *******************************************************************************/
package org.sandbox.jdt.internal.corext.fix.helper;

/**
 * Enum representing the target format for loop conversions.
 * 
 * <p>This enum defines the different formats that loops can be converted to:
 * <ul>
 *   <li>STREAM - Java 8+ Stream API (forEach, map, filter, reduce, etc.)</li>
 *   <li>FOR_LOOP - Enhanced for-loop (for-each style: for (T item : collection))</li>
 *   <li>WHILE_LOOP - While loop with iterator</li>
 * </ul>
 * </p>
 * 
 * <p><b>Note:</b> This enum is retained for potential future use with combo box preferences,
 * but the current implementation uses radio buttons with separate boolean constants in
 * {@link org.sandbox.jdt.internal.corext.fix2.MYCleanUpConstants}.</p>
 */
public enum LoopTargetFormat {
    /**
     * Convert to Java 8+ Stream API operations.
     * Example: list.stream().forEach(item -> System.out.println(item))
     */
    STREAM("stream"),
    
    /**
     * Convert to enhanced for-loop (for-each style).
     * Example: for (String item : list) { System.out.println(item); }
     * 
     * <p><b>Note:</b> This targets the enhanced for-loop introduced in Java 5,
     * not the classic indexed for-loop with initialization/condition/update.</p>
     */
    FOR_LOOP("for"),
    
    /**
     * Convert to while loop with iterator.
     * Example: Iterator<String> it = list.iterator(); while (it.hasNext()) { String item = it.next(); ... }
     */
    WHILE_LOOP("while");
    
    private final String id;
    
    LoopTargetFormat(String id) {
        this.id = id;
    }
    
    /**
     * Returns the string identifier for this format.
     */
    public String getId() {
        return id;
    }
    
    /**
     * Parses a string identifier into a LoopTargetFormat.
     * 
     * @param id the string identifier
     * @return the corresponding LoopTargetFormat, or STREAM if not found
     */
    public static LoopTargetFormat fromId(String id) {
        if (id == null) {
            return STREAM; // default
        }
        for (LoopTargetFormat format : values()) {
            if (format.id.equals(id)) {
                return format;
            }
        }
        return STREAM; // default fallback
    }
}