srcanaapps/depexplorer/com.nokia.s60tools.appdep/src/com/nokia/s60tools/appdep/util/SISFileUtils.java
author noe\swadi
Sat, 09 Jan 2010 10:04:11 +0530
changeset 0 a02c979e8dfd
permissions -rw-r--r--
1. Copyrights changed to EPL 2. Feature updates mentioned in release notes.

/*
* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies). 
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description:
*
*/
 
package com.nokia.s60tools.appdep.util;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;

/**
 * SIS file handling utilities needed by SIS file analysis feature.
 */
public class SISFileUtils {

	// 
	// Constants
	//
	private static final int BYTES_TO_READ_OFFSET = 0;
	private static final int BYTES_TO_READ = 4;
	private static final String FILE_MODE_READ = "r"; //$NON-NLS-1$
	/**
	 * If the first four bytes of the file are 7A1A2010, it is a valid supported SIS file.
	 */
	private static final byte [] FIRST_BYTES = new byte[]{0x07A,0x01A, 0x020, 0x010};

	/**
	 * Checks if file is valid/supported SIS file.
	 * If the first four bytes of the file are 7A1A2010, it is a valid 
	 * and supported SIS file.
	 * @param fileName Absolute path name pointing to SIS file.
	 * @return <code>true</code> if it was valid 9.x SIS file, otherwise <code>false</code>.
	 */
	public static boolean isValid_9x_SISFile(String fileName) {
		
		File file = new File(fileName);
		if(!file.exists()){
			return false;
		}
		try {
			RandomAccessFile randFile = new RandomAccessFile(file, FILE_MODE_READ);
			byte [] b = new byte[BYTES_TO_READ];
			int off = BYTES_TO_READ_OFFSET;
			int len = BYTES_TO_READ;
			int read = randFile.read(b, off, len);
			
			if(read != BYTES_TO_READ){
				return false;
			}
			boolean match = true;
			for (int i = 0; i < b.length; i++) {
				if(b[i] != FIRST_BYTES[i]){
					match = false;
				}
			}
			return match;
		} catch (FileNotFoundException e) {
			//Should newer occur, because files was selected from file list
			e.printStackTrace();
			return false;
		} catch (IOException e) {
			//Should newer occur, because files was selected from file list			
			e.printStackTrace();
			return false;
		}
		
	}

}