Package net.sf.antcontrib.inifile

Source Code of net.sf.antcontrib.inifile.IniFileTask$Get

/*
* Copyright (c) 2001-2004 Ant-Contrib project.  All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package net.sf.antcontrib.inifile;

import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;
import java.util.Vector;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.taskdefs.Property;


/****************************************************************************
* Place class description here.
*
* @author <a href='mailto:mattinger@yahoo.com'>Matthew Inger</a>
* @author    <additional author>
*
* @since
*
****************************************************************************/


public class IniFileTask
        extends Task
{
    public static abstract class IniOperation
    {
        private String section;
        private String property;

        public IniOperation()
        {
            super();
        }

        public String getSection()
        {
            return section;
        }


        public void setSection(String section)
        {
            this.section = section;
        }


        public String getProperty()
        {
            return property;
        }


        public void setProperty(String property)
        {
            this.property = property;
        }

        public void execute(Project project, IniFile iniFile)
        {
                operate(iniFile);
        }

        protected abstract void operate(IniFile file);
    }

    public static abstract class IniOperationConditional extends IniOperation
    {
        private String ifCond;
        private String unlessCond;

        public IniOperationConditional()
        {
            super();
        }

        public void setIf(String ifCond)
        {
            this.ifCond = ifCond;
        }

        public void setUnless(String unlessCond)
        {
            this.unlessCond = unlessCond;
        }

        /**
         * Returns true if the define's if and unless conditions
         * (if any) are satisfied.
         */
        public boolean isActive(org.apache.tools.ant.Project p)
        {
            if (ifCond != null && p.getProperty(ifCond) == null)
            {
                return false;
            }
            else if (unlessCond != null && p.getProperty(unlessCond) != null)
            {
                return false;
            }

            return true;
        }

        public void execute(Project project, IniFile iniFile)
        {
            if (isActive(project))
                operate(iniFile);
        }
    }

  public static abstract class IniOperationPropertySetter extends IniOperation
  {
    private boolean override;
    private String resultproperty;

    public IniOperationPropertySetter()
    {
      super();
    }

    public void setOverride(boolean override)
    {
      this.override = override;
    }

    public void setResultProperty(String resultproperty)
    {
      this.resultproperty = resultproperty;
    }

    protected final void setResultPropertyValue(Project project, String value)
    {
      if (value != null)
      {
        if (override)
        {
          if (project.getUserProperty(resultproperty) == null)
            project.setProperty(resultproperty, value);
          else
            project.setUserProperty(resultproperty, value);
        }
        else
        {
          Property p = (Property)project.createTask("property");
          p.setName(resultproperty);
          p.setValue(value);
          p.execute();
        }
      }
    }
  }

    public static final class Remove
            extends IniOperationConditional
    {
        public Remove()
        {
            super();
        }

        protected void operate(IniFile file)
        {
            String secName = getSection();
            String propName = getProperty();

            if (propName == null)
            {
                file.removeSection(secName);
            }
            else
            {
                IniSection section = file.getSection(secName);
                if (section != null)
                    section.removeProperty(propName);
            }
        }
    }


    public final class Set
            extends IniOperationConditional
    {
        private String value;
        private String operation;

        public Set()
        {
            super();
        }


        public void setValue(String value)
        {
            this.value = value;
        }


        public void setOperation(String operation)
        {
            this.operation = operation;
        }


        protected void operate(IniFile file)
        {
            String secName = getSection();
            String propName = getProperty();

            IniSection section = file.getSection(secName);
            if (section == null)
            {
                section = new IniSection(secName);
                file.setSection(section);
            }

            if (propName != null)
            {
                if (operation != null)
                {
                    if ("+".equals(operation))
                    {
                        IniProperty prop = section.getProperty(propName);
                        value = prop.getValue();
                        int intVal = Integer.parseInt(value) + 1;
                        value = String.valueOf(intVal);
                    }
                    else if ("-".equals(operation))
                    {
                        IniProperty prop = section.getProperty(propName);
                        value = prop.getValue();
                        int intVal = Integer.parseInt(value) - 1;
                        value = String.valueOf(intVal);
                    }
                }
                section.setProperty(new IniProperty(propName, value));
            }
        }
    }

  public final class Exists
    extends IniOperationPropertySetter
  {
    public Exists()
    {
      super();
    }

    protected void operate(IniFile file)
    {
      boolean exists = false;
      String secName = getSection();
      String propName = getProperty();

      if (secName == null)
        throw new BuildException("You must supply a section to search for.");

      if (propName == null)
        exists = (file.getSection(secName) != null);
      else
        exists = (file.getProperty(secName, propName) != null);

      setResultPropertyValue(getProject(), Boolean.valueOf(exists).toString());
    }
  }

  public final class Get
    extends IniOperationPropertySetter
  {
    public Get()
    {
      super();
    }

    protected void operate(IniFile file)
    {
      String secName = getSection();
      String propName = getProperty();

      if (secName == null)
        throw new BuildException("You must supply a section to search for.");

      if (propName == null)
        throw new BuildException("You must supply a property name to search for.");

      setResultPropertyValue(getProject(), file.getProperty(secName, propName));
    }
    }

    private File source;
    private File dest;
    private Vector operations;

    public IniFileTask()
    {
        super();
        this.operations = new Vector();
    }

    public Set createSet()
    {
        Set set = new Set();
        operations.add(set);
        return set;
    }

    public Remove createRemove()
    {
        Remove remove = new Remove();
        operations.add(remove);
        return remove;
    }

    public Exists createExists()
    {
        Exists exists = new Exists();
        operations.add(exists);
        return exists;
    }

    public Get createGet()
    {
        Get get = new Get();
        operations.add(get);
        return get;
    }

    public void setSource(File source)
    {
        this.source = source;
    }


    public void setDest(File dest)
    {
        this.dest = dest;
    }


    public void execute()
        throws BuildException
    {
        if (dest == null)
            throw new BuildException("You must supply a dest file to write to.");

        IniFile iniFile = null;

        try
        {
            iniFile = readIniFile(source);
        }
        catch (IOException e)
        {
            throw new BuildException(e);
        }

        Iterator it = operations.iterator();
        IniOperation operation = null;
        while (it.hasNext())
        {
            operation = (IniOperation)it.next();
            operation.execute(getProject(), iniFile);
        }

        FileWriter writer = null;

        try
        {
            try
            {
                writer = new FileWriter(dest);
                iniFile.write(writer);
            }
            finally
            {
                try
                {
                    if (writer != null)
                        writer.close();
                }
                catch (IOException e)
                {
                    ; // gulp
                }
            }
        }
        catch (IOException e)
        {
            throw new BuildException(e);
        }

    }


    private IniFile readIniFile(File source)
        throws IOException
    {
        FileReader reader = null;
        IniFile iniFile = new IniFile();

        if (source == null)
            return iniFile;

        try
        {
            reader = new FileReader(source);
            iniFile.read(reader);
        }
        finally
        {
            try
            {
                if (reader != null)
                    reader.close();
            }
            catch (IOException e)
            {
                ; // gulp
            }
        }

        return iniFile;
    }
}
TOP

Related Classes of net.sf.antcontrib.inifile.IniFileTask$Get

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.