javauis/eswt_qt/org.eclipse.swt/Eclipse SWT/common_j2me/org/eclipse/swt/internal/CLDCCompatibilityDelegate.java
author hgs
Mon, 04 Oct 2010 11:29:25 +0300
changeset 78 71ad690e91f5
parent 21 2a9601315dfc
permissions -rw-r--r--
v2.2.17_1

/*******************************************************************************
 * Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved. This program and the accompanying materials 
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 * 
 * Contributors:
 *     Nokia Corporation - S60 implementation
 *******************************************************************************/
package org.eclipse.swt.internal;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import javax.microedition.io.Connector;
import javax.microedition.io.file.FileConnection;

public class CLDCCompatibilityDelegate implements CompatibilityDelegate {
    
    public CLDCCompatibilityDelegate(){
        super();
    }
    
    public InputStream getInputStreamFromFile(String path) throws IOException {
        String jsr75Path = convertPathToSpecific(path);

        InputStream inputStream = null;
        try{
            FileConnection fileConct = (FileConnection)Connector.open(jsr75Path);
            inputStream = fileConct.openInputStream();
            fileConct.close();
        }
        catch (IOException e) {
           throw e;
        }
        catch(Exception e)
        {
            throw new IOException(e.getMessage());
        }
        return inputStream;
    }

    public String convertPathToSpecific(String path) {        
        String res = path;
        
        // In JSR 75 the file separator is '/' and not '\'
        res = res.replace('\\', '/');
        
        if (res.startsWith("file:///")) {
            res = res.substring(8);
        }
        
        boolean hasDrive = false;
        if (res.length() >= 2) {
            char drive = res.charAt(0);
            hasDrive = ((drive >= 'A' && drive <= 'Z') || (drive >= 'a' && drive <= 'z')) 
                && (res.charAt(1) == ':');
        }

        if (!hasDrive) {
            res = System.getProperty("fileconn.dir.private") + res; // may start now as file:///
        }

        if (!res.startsWith("file:///")) {
            res = "file:///" + res;
        }
        
        // The format now should be: file:///<drive>:/<path>
        
        return res;
    }
    
    public boolean canOpenFile(String path) throws SecurityException {
        String jsr75Path = convertPathToSpecific(path);
        try {
            FileConnection fileConct = (FileConnection) Connector
                    .open(jsr75Path);
            fileConct.close();
        } catch (IOException e) {
            throw new SecurityException(e.getMessage());
        }
        return true;
    }

    public OutputStream getOutStreamFromFile(String path) throws IOException {
        String jsr75Path = convertPathToSpecific(path);

        OutputStream outStream = null; 
        try{
            FileConnection fileConct = (FileConnection)Connector.open(jsr75Path);
            if (!fileConct.exists()) {
                fileConct.create();
            }
            outStream = fileConct.openOutputStream();
            fileConct.close();
        }
        catch(IOException e)
        {
            throw e;
        }
        catch (Exception e) {
            throw new IOException(e.getMessage());
        }
        return outStream;
    }    

}