/*
* 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.io.File;
import java.io.IOException;
import com.izforge.izpack.PackFile;
import com.izforge.izpack.util.FileExecutor;
import com.izforge.izpack.event.SimpleInstallerListener;
import com.izforge.izpack.installer.InstallerException;
/**
* <p>InstallerListener for file and directory permissions
* on Unix.</p>
*
* @author Klaus Bartz
*
*/
public class ChmodInstallerListener extends SimpleInstallerListener
{
/* (non-Javadoc)
* @see com.izforge.izpack.installer.InstallerListener#isFileListener()
*/
public boolean isFileListener()
{
// This is a file related listener.
return true;
}
/* (non-Javadoc)
* @see com.izforge.izpack.compiler.InstallerListener#handleFile(java.io.File, com.izforge.izpack.PackFile)
*/
public void afterFile(File filePath, PackFile pf) throws Exception
{
if( pf.getAdditionals() == null )
return;
Object file = pf.getAdditionals().get("permission.file");
int fileVal = -1;
if( file != null && file instanceof Integer )
fileVal = ((Integer) file).intValue();
if( fileVal != -1)
chmod(filePath, fileVal);
}
/* (non-Javadoc)
* @see com.izforge.izpack.compiler.InstallerListener#handleDir(java.io.File, com.izforge.izpack.PackFile)
*/
public void afterDir(File dirPath, PackFile pf) throws Exception
{
if( pf.getAdditionals() == null )
return;
if( dirPath == null )
return;
Object dir = pf.getAdditionals().get("permission.dir");
int dirVal = -1;
if( dir != null &&dir instanceof Integer )
dirVal = ((Integer) dir).intValue();
if( dirVal != -1)
{
if( (dirVal & 0x000001C0) < 0x000001C0 )
throw new InstallerException( "Bad owner permission for directory "
+ dirPath.getAbsolutePath() +"; at installation time the owner needs full rights" );
chmod(dirPath, dirVal);
}
}
private void chmod(File path, int permissions) throws IOException
{
String pathSep = System.getProperty("path.separator");
if(OsVersion.IS_WINDOWS)
{
throw new IOException("Sorry, chmod not supported yet on windows; use this class OS dependant.");
}
if( path == null )
// Oops this is an error, but in this example we ignore it ...
return;
String permStr = Integer.toOctalString(permissions);
String[] params = {"chmod", permStr, path.getAbsolutePath()};
String[] output = new String[2];
FileExecutor fe = new FileExecutor();
fe.executeCommand(params, output);
}
}