content: /*
   * IzPack - Copyright 2001-2005 Julien Ponge, All Rights Reserved.
   * 
   * http://izpack.org/
   * http://izpack.codehaus.org/
   * 
   * Copyright 2004 Klaus Bartz
   * 
   * 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 com.myCompany.tools.install.listener;
  import java.util.HashMap;
  import java.util.Iterator;
  import java.util.Map;
  import java.util.Vector;
  
  import com.izforge.izpack.adaptator.IXMLElement;
  import com.izforge.izpack.compiler.CompilerException;
  import com.izforge.izpack.event.*;
  
  
  /**
   * <p>CompilerListener for file and directory permissions.</p>
   *
   * @author  Klaus Bartz
   *
   */
  public class ChmodCompilerListener extends SimpleCompilerListener
  {
  
  
    /* (non-Javadoc)
     * @see com.izforge.izpack.compiler.CompilerListener#reviseAdditionalDataMap(java.util.Map, net.n3.nanoxml.XMLElement)
     */
    public Map reviseAdditionalDataMap(Map existentDataMap, IXMLElement element)
      throws CompilerException
    {
      Map retval = existentDataMap != null ? 
        existentDataMap : new  HashMap();
      Vector dataList = element.getChildrenNamed("additionaldata");
      Iterator iter = null;
      if( dataList == null ||  dataList.size() == 0  )
        return( existentDataMap);
      iter = dataList.iterator();
      while( iter.hasNext() )
      {
        IXMLElement data = (IXMLElement) iter.next();
        String [] relevantKeys = { "permission.dir", "permission.file"};
        for( int i = 0; i < relevantKeys.length; ++i )
        {
          String key = data.getAttribute("key");
          if( key.equalsIgnoreCase(relevantKeys[i]))
          {
            String value = data.getAttribute("value");
            if (value == null || value.length() == 0)
              continue;
            try
            {
              int radix = value.startsWith("0") ? 8 : 10;
              retval.put(key,Integer.valueOf(value, radix));
            } catch (NumberFormatException x)
            {
              throw new CompilerException("'" + relevantKeys[i] + "' must be an integer");
            }
          }
        }
      }
      return retval;
    }
  }
  