/**
 * Copyright (c) 2004-2006 IBM Corporation and others.
 * All rights reserved.   This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v2.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v20.html
 * 
 * Contributors: 
 *   IBM - Initial API and implementation
 */
package org.eclipse.emf.ant.util;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;


/**
 * Utility classes with generic methods that may be used by more than one task.
 * @since 2.1.0
 */
public class Util
{
  /**
   * Removes the version number of all the subdirectories of a given directory.
   * The expected format of the directories name is <dirName>_<version> where version 
   * has at least from 1 to 4 fields, the first 3 being digits.  Examples: 
   * foo_2, foo_2.1, foo_2.1.0, foo_2.1.0.a,  
   * 
   *  
   * @param parentDir the parent of the directories that will have the version removed
   * @return the number of changed directories
   */
  public static int removeVersion(File parentDir)
  {
    if (parentDir == null || !parentDir.isDirectory())
    {
      return 0;
    }

    int counter = 0;
    File[] dirs = parentDir.listFiles();
    for (int i = 0; i < dirs.length; i++)
    {
      if (dirs[i].isDirectory())
      {
        String name = dirs[i].getName().replaceAll("_(\\d(\\.\\d){0,2}(\\.([\\w-])*)?)$", "");        
        if (!name.equals(dirs[i].getName()) && dirs[i].renameTo(new File(parentDir, name)))
        {
          counter++;
        }
      }
    }
    return counter;
  }

  /**
   * Writes the given content to the specifed file. 
   * @param file The file to be written or overwritten.
   * @param content
   * @throws IOException
   */
  public static void writeFile(File file, String content) throws IOException
  {
    if (!file.getParentFile().isDirectory())
    {
      file.getParentFile().mkdirs();
    }
    
    BufferedWriter out = null;
    try
    {
      out = new BufferedWriter(new FileWriter(file));
      out.write(content);
    }
    finally
    {
      if (out != null)
      {
        out.close();
      }
    }
  }
}