/*******************************************************************************
* Copyright (c) 2011-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;
import java.util.Vector;
import org.kxml2.kdom.Document;
import org.kxml2.kdom.Element;
import org.kxml2.kdom.Node;
import org.ned.client.library.LibraryManager;
import org.ned.client.library.NedLibrary;
import org.ned.client.utils.NedIOUtils;
import org.ned.client.utils.NedXmlUtils;
import org.ned.client.view.GeneralAlert;
public class SettingsManager {
private static final String NO = "no";
private static final String YES = "yes";
private String userName = null;
private String dlTime = "06:30AM";
private boolean dlOn = false;
private boolean dlAutomatic = false;
private boolean autoStatSend = true;
private LibraryManager libraryManager = null;
private int mSortBy = NedConsts.SortOrder.NONE;
private boolean mShowTips = true;
public SettingsManager() {
libraryManager = new LibraryManager();
}
public void setDlTime( String time ) {
if ( time.length() >= dlTime.length() ) {
dlTime = time;
} else {
dlTime = time + dlTime.substring( time.length() );
}
}
public String getDlTime() {
return dlTime;
}
public void setDlHour( String hour ) {
try {
int tmp = Integer.parseInt( hour );
if ( tmp < 10 ) {
setDlTime( "0" + String.valueOf( tmp ) + ":" + getDlMin()
+ getDlAmPm() );
} else if ( hour.length() == 2 ) {
setDlTime( hour + ":" + getDlMin() + getDlAmPm() );
}
} catch ( NumberFormatException nfe ) {
}
}
public void setDlMin( String min ) {
try {
int tmp = Integer.parseInt( min );
if ( tmp < 10 ) {
setDlTime( getDlHour() + ":0" + String.valueOf( tmp )
+ getDlAmPm() );
} else if ( min.length() == 2 ) {
setDlTime( getDlHour() + ":" + min + getDlAmPm() );
}
} catch ( NumberFormatException nfe ) {
}
}
public void setDlAmPm( String ampm ) {
if ( ampm.length() == 2 ) {
setDlTime( getDlHour() + ":" + getDlMin() + ampm );
}
}
public String getDlHour() {
return dlTime.substring( 0, 2 );
}
public String getDlMin() {
return dlTime.substring( 3, 5 );
}
public String getDlAmPm() {
return dlTime.substring( 5, 7 );
}
public boolean getDlAutomatic() {
return dlAutomatic;
}
public void setDlAutomatic( boolean auto ) {
dlAutomatic = auto;
}
public boolean getDlState() {
return dlOn;
}
public boolean isSchedulerOn() {
return dlOn;
}
public void setDlState( boolean state ) {
dlOn = state;
}
public String getUser() {
return userName;
}
public void setUser( String newUser ) {
userName = newUser;
}
public void resetServer() {
loadSettings();
}
public boolean loadSettings() {
if ( NedIOUtils.fileExists( NedIOUtils.getSettingsFile() ) ) {
Element rootElement = null;
try {
Document doc = NedXmlUtils.getDocFile( NedIOUtils.getSettingsFile() );
if ( doc == null ) {
NedIOUtils.removeFile( NedIOUtils.getSettingsFile() );
return saveSettings();
} else {
rootElement = doc.getRootElement();
}
} catch ( Exception ex ) {
GeneralAlert.show( "load settings err: " + ex.getMessage(), GeneralAlert.ERROR );
}
for ( int i = 0; i < rootElement.getChildCount(); i++ ) {
if ( rootElement.getType( i ) == Node.ELEMENT ) {
Element element = rootElement.getElement( i );
if ( element.getName().equals( "Library" ) ) {
NedLibrary lib = null;
try {
lib = new NedLibrary(element);
lib.setCatalogCount();
libraryManager.addLibrary( lib );
} catch (OutOfMemoryError ex) {
GeneralAlert.show(
NedResources.LIBRARY_TO_BIG + ( lib!= null ? ("\n" + lib.getTitle()) : "" ),
GeneralAlert.ERROR, true);
NedIOUtils.removeFile( lib.getFileUri() );
}
} else if ( element.getName().equals( "Schedule" ) ) {
setDlTime( element.getText( 0 ) );
if ( element.getAttributeValue( "", "state" ).equals( "on" ) ) {
setDlState( true );
} else {
setDlState( false );
}
String auto = element.getAttributeValue( "", "automatic" );
if ( (auto != null) && (auto.equals( YES )) ) {
setDlAutomatic( true );
} else {
setDlAutomatic( false );
}
} else if ( element.getName().equals( "Statistics" ) ) {
if ( element.getAttributeValue( "", "auto" ) != null
&& element.getAttributeValue( "", "auto" ).equals( NO ) ) {
setAutoStatSend( false );
} else {
setAutoStatSend( true );
}
} else if ( element.getName().equals( "Sorting" ) ) {
if ( element.getAttributeValue( "", "by" ) != null ) {
String valStr = element.getAttributeValue( "", "by" );
int val;
try {
val = Integer.parseInt( valStr );
setSortBy( val );
} catch ( Exception ex ) {
//ignore - setting default sorting method
}
}
} else if ( element.getName().equals( "ShowTips" ) ) {
if ( element.getAttributeValue( "", "show" ) != null ) {
String valStr = element.getAttributeValue( "", "show" );
try {
if ( valStr != null && valStr.equals( YES ) ) {
setShowTips( true );
} else {
setShowTips( false );
}
} catch ( Exception ex ) {
//ignore - setting default sorting method
}
}
}
}
}
} else {
return saveSettings();
}
return true;
}
public boolean saveSettings() {
Document doc = new Document();
Element settings = doc.createElement( "", "Settings" );
Element schedule = doc.createElement( "", "Schedule" );
Element stats = doc.createElement( "", "Statistics" );
Element sort = doc.createElement( "", "Sorting" );
Element showTips = doc.createElement( "", "ShowTips" );
// Element thisLibrary = doc.createElement("", "ActualLibrary");
String time = getDlTime();
schedule.addChild( Node.TEXT, time );
String state = "off";
if ( getDlState() ) {
state = "on";
}
String automatic = NO;
if ( getDlAutomatic() ) {
automatic = YES;
}
schedule.setAttribute( "", "state", state );
schedule.setAttribute( "", "automatic", automatic );
String autoSend = YES;
if ( !getAutoStatSend() ) {
autoSend = NO;
}
stats.setAttribute( "", "auto", autoSend );
sort.setAttribute( "", "by", String.valueOf( mSortBy ) );
showTips.setAttribute( "", "show", mShowTips ? YES : NO );
Element[] libraries = createLibraryXml( doc );
for ( int i = 0; i < libraries.length; i++ ) {
settings.addChild( Node.ELEMENT, libraries[i] );
}
settings.addChild( Node.ELEMENT, schedule );
settings.addChild( Node.ELEMENT, stats );
settings.addChild( Node.ELEMENT, sort );
settings.addChild( Node.ELEMENT, showTips );
doc.addChild( Node.ELEMENT, settings );
NedXmlUtils.writeXmlFile( NedIOUtils.getSettingsFile(), doc );
return true;
}
public LibraryManager getLibraryManager() {
return libraryManager;
}
private Element[] createLibraryXml( Document doc ) {
Vector librariesList = libraryManager.getLibrariesList();
Element[] retval = new Element[librariesList.size()];
for ( int i = 0; i < librariesList.size(); i++ ) {
Element pLibrary = doc.createElement( "", "Library" );
Element pElement;
pElement = doc.createElement( "", "title" );
pElement.addChild( Node.TEXT, ((NedLibrary)librariesList.elementAt( i )).getTitle() );
pLibrary.addChild( Node.ELEMENT, pElement );
pElement = doc.createElement( "", "id" );
pElement.addChild( Node.TEXT,
((NedLibrary)librariesList.elementAt( i )).getId() );
pLibrary.addChild( Node.ELEMENT, pElement );
pElement = doc.createElement( "", "visible" );
if ( ((NedLibrary)librariesList.elementAt( i )).getVisible() == true ) {
pElement.addChild( Node.TEXT, "1" );
} else {
pElement.addChild( Node.TEXT, "0" );
}
pLibrary.addChild( Node.ELEMENT, pElement );
pElement = doc.createElement( "", "version" );
String version = ((NedLibrary)librariesList.elementAt( i )).getVersion();
if ( version == null || version.equals( "" ) ) {
pElement.addChild( Node.TEXT, "0" );
} else {
pElement.addChild( Node.TEXT, version );
}
pLibrary.addChild( Node.ELEMENT, pElement );
retval[i] = pLibrary;
}
return retval;
}
public boolean getAutoStatSend() {
return autoStatSend;
}
public void setAutoStatSend( boolean state ) {
autoStatSend = state;
}
public int getSortBy() {
return mSortBy;
}
public void setSortBy( int aSortBy ) {
mSortBy = aSortBy;
}
public void setShowTips( boolean showTips ) {
mShowTips = showTips;
}
public boolean getShowTips() {
return mShowTips;
}
}