/******************************************************************************* * Copyright (c) 2012 Nokia Corporation * 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: * Comarch team - initial API and implementation *******************************************************************************/ package org.ned.client.command; import com.sun.lwuit.Command; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import javax.microedition.io.ConnectionNotFoundException; import javax.microedition.io.Connector; import javax.microedition.io.HttpConnection; import javax.microedition.io.file.FileConnection; import org.ned.client.NedConsts; import org.ned.client.NedConsts.NedLocalConst; import org.ned.client.NedMidlet; import org.ned.client.NedResources; import org.ned.client.utils.LanguageInfo; import org.ned.client.utils.NedConnectionUtils; import org.ned.client.utils.NedIOUtils; public class DownloadLanguageAgainCommand extends NedCommandAsync { private static DownloadLanguageAgainCommand instance; private DownloadLanguageAgainCommand() { command = new Command( NedResources.DOWNLOAD_AGAIN_LANGUAGE ); } public static DownloadLanguageAgainCommand getInstance() { if ( instance == null ) { instance = new DownloadLanguageAgainCommand(); } return instance; } protected void doAction( Object param ) { LanguageInfo lang = (LanguageInfo)param; HttpConnection hc = null; FileConnection fc = null; FileConnection fc2 = null; InputStream is = null; OutputStream os = null; String url = NedMidlet.getAccountManager().getServerUrl() + NedConsts.NedRemotePath.LOCALESURL; url = url + "/" + lang.getFile(); try { hc = (HttpConnection)Connector.open( url ); NedConnectionUtils.addCredentialsToConnection( hc, NedMidlet. getAccountManager().getCurrentUser().login, NedMidlet. getAccountManager().getCurrentUser().password ); hc.setRequestMethod( HttpConnection.GET ); hc.setRequestProperty( NedConsts.HttpHeader.CACHECONTROL, NedConsts.HttpHeaderValue.NOCACHE ); if ( hc.getResponseCode() != HttpConnection.HTTP_OK && hc.getResponseCode() != HttpConnection.HTTP_UNAUTHORIZED ) { throw new AsyncException( " " + hc.getResponseCode() ); } else if ( hc.getResponseCode() == HttpConnection.HTTP_UNAUTHORIZED ) { throw new AsyncException( NedResources.UNAUTHORIZED_ACCESS ); } is = hc.openInputStream(); fc = (FileConnection)Connector.open( NedIOUtils.getLocalRoot() + "messages_" + lang.getLocale() + ".properties" + NedLocalConst.TMP, Connector.READ_WRITE ); if ( fc.exists() ) { fc.delete(); } fc.create(); os = fc.openOutputStream(); byte[] databyte = new byte[NedConnectionUtils.MTU]; int bytesread = -1; try { Thread.sleep( 200 ); } catch ( IllegalStateException ex ) { } while ( (bytesread = is.read( databyte, 0, NedConnectionUtils.MTU )) != -1 ) { os.write( databyte, 0, bytesread ); } lang.setLocal(); fc2 = (FileConnection)Connector.open( NedIOUtils.getLocalRoot() + "messages_" + lang.getLocale() + ".properties", Connector.READ_WRITE ); if ( fc2 != null && fc2.exists() ) { fc2.delete(); fc2.close(); } fc.rename( "messages_" + lang.getLocale() + ".properties" ); } catch ( ConnectionNotFoundException cnfex ) { throw new AsyncException( NedResources.CONNECTION_ERROR ); } catch ( UnsupportedEncodingException ueex ) { throw new AsyncException( NedResources.INVALID_ENCODING ); } catch ( IOException ioex ) { throw new AsyncException( NedResources.CORRUPTED_DOCUMENT ); } catch ( Exception ex ) { throw new AsyncException( ex.getMessage() + " Url: " + url ); } finally { if ( os != null ) { try { os.close(); } catch ( IOException ex ) { } } if ( is != null ) { try { is.close(); } catch ( IOException ex ) { } } if ( hc != null ) { try { hc.close(); } catch ( IOException ex ) { } } if ( fc != null ) { try { fc.close(); } catch ( IOException ex ) { ex.printStackTrace(); } } if ( fc != null ) { try { fc.close(); } catch ( IOException ex ) { ex.printStackTrace(); } } } } }