Java tutorial
/* * Project: xdccBee * Copyright (C) 2009 snert@snert-lab.de, * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package de.snertlab.xdccBee.settings; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import org.apache.commons.lang.StringUtils; import org.eclipse.swt.graphics.Point; import org.jdom.Document; import org.jdom.Element; import org.jdom.JDOMException; import org.jdom.input.SAXBuilder; import org.jdom.output.XMLOutputter; import de.snertlab.xdccBee.AppConfig; import de.snertlab.xdccBee.tools.XmlTool; /** * @author snert * */ public class Settings { private static final String SETTINGS_FILENAME = AppConfig.SETTINGS_FOLDER_PATH + "/" + "settings.xml"; //$NON-NLS-1$ //$NON-NLS-2$ private static final String DEFAULT_BOTNAME = "c0c0nut"; //$NON-NLS-1$ private static final String DEFAULT_BOTVERSION = "1.0"; //$NON-NLS-1$ private static final String DEFAULT_NICKNAME = "c0c0"; //$NON-NLS-1$ private static final String DEFAULT_DOWNLOADFOLDER = AppConfig.USERHOME; private static Settings settings; private String botName; private String botVersion; private String standardNickname; private String downloadFolder; private String mainWindowPositionX; private String mainWindowPositionY; private String mainWindowSizeX; private String mainWindowSizeY; public static Settings getInstance() { if (settings == null) { settings = new Settings(); } return settings; } public Settings() { Document docSettings = makeSettingFolderWithEmptySettingsFile(); initFields(docSettings); } private Document makeSettingFolderWithEmptySettingsFile() { File settingsFile = new File(SETTINGS_FILENAME); if (!settingsFile.exists()) { this.botName = DEFAULT_BOTNAME; this.botVersion = DEFAULT_BOTVERSION; this.standardNickname = DEFAULT_NICKNAME; this.downloadFolder = DEFAULT_DOWNLOADFOLDER; this.mainWindowPositionX = "0"; //$NON-NLS-1$ this.mainWindowPositionY = "0"; //$NON-NLS-1$ this.mainWindowSizeX = "800"; //$NON-NLS-1$ this.mainWindowSizeY = "600"; //$NON-NLS-1$ Document doc = saveSettings(); return doc; } else { try { SAXBuilder builder = new SAXBuilder(); Document anotherDocument = builder.build(new File(settingsFile.getPath())); return anotherDocument; } catch (JDOMException e) { throw new RuntimeException(e); } catch (IOException e) { throw new RuntimeException(e); } } } private Document buildSettingXml() { Document doc = new Document(); Element nodeRoot = new Element("ROOT"); //$NON-NLS-1$ doc.setRootElement(nodeRoot); Element nodeBot = XmlTool.addChildNode(nodeRoot, "BOT"); //$NON-NLS-1$ nodeBot.setAttribute("botName", StringUtils.defaultString(botName)); //$NON-NLS-1$ nodeBot.setAttribute("botVersion", StringUtils.defaultString(botVersion)); //$NON-NLS-1$ nodeBot.setAttribute("standardNickname", StringUtils.defaultString(standardNickname)); //$NON-NLS-1$ nodeBot.setAttribute("downloadFolder", StringUtils.defaultString(downloadFolder)); //$NON-NLS-1$ nodeBot.setAttribute("mainWindowPositionX", StringUtils.defaultString(mainWindowPositionX)); //$NON-NLS-1$ nodeBot.setAttribute("mainWindowPositionY", StringUtils.defaultString(mainWindowPositionY)); //$NON-NLS-1$ nodeBot.setAttribute("mainWindowSizeX", StringUtils.defaultString(mainWindowSizeX)); //$NON-NLS-1$ nodeBot.setAttribute("mainWindowSizeY", StringUtils.defaultString(mainWindowSizeY)); //$NON-NLS-1$ return doc; } private void initFields(Document docSettings) { Element nodeBot = docSettings.getRootElement().getChild("BOT"); //$NON-NLS-1$ botName = StringUtils.defaultString(nodeBot.getAttributeValue("botName")); //$NON-NLS-1$ botVersion = StringUtils.defaultString(nodeBot.getAttributeValue("botVersion")); //$NON-NLS-1$ standardNickname = StringUtils.defaultString(nodeBot.getAttributeValue("standardNickname")); //$NON-NLS-1$ downloadFolder = StringUtils.defaultString(nodeBot.getAttributeValue("downloadFolder")); //$NON-NLS-1$ mainWindowPositionX = StringUtils.defaultString(nodeBot.getAttributeValue("mainWindowPositionX")); //$NON-NLS-1$ mainWindowPositionY = StringUtils.defaultString(nodeBot.getAttributeValue("mainWindowPositionY")); //$NON-NLS-1$ mainWindowSizeX = StringUtils.defaultString(nodeBot.getAttributeValue("mainWindowSizeX")); //$NON-NLS-1$ mainWindowSizeY = StringUtils.defaultString(nodeBot.getAttributeValue("mainWindowSizeY")); //$NON-NLS-1$ } public Document saveSettings() { try { File settingsFile = new File(SETTINGS_FILENAME); Document doc = buildSettingXml(); XMLOutputter xmlOut = new XMLOutputter(); xmlOut.output(doc, new BufferedOutputStream(new FileOutputStream(settingsFile))); return doc; } catch (IOException e) { throw new RuntimeException(e); } } public String getBotName() { return botName; } public void setBotName(String botName) { this.botName = botName; } public String getBotVersion() { return botVersion; } public void setBotVersion(String botVersion) { this.botVersion = botVersion; } public String getStandardNickname() { return standardNickname; } public void setStandardNickname(String standardNickname) { this.standardNickname = standardNickname; } public String getDownloadFolder() { return downloadFolder; } public void setDownloadFolder(String downloadFolder) { this.downloadFolder = downloadFolder; } public Point getMainWindowPosition() { return new Point(Integer.parseInt(mainWindowPositionX), Integer.parseInt(mainWindowPositionY)); } public Point getMainWindowSize() { return new Point(Integer.parseInt(mainWindowSizeX), Integer.parseInt(mainWindowSizeY)); } public void setMainWindowPosition(Point location) { this.mainWindowPositionX = location.x + ""; //$NON-NLS-1$ this.mainWindowPositionY = location.y + ""; //$NON-NLS-1$ } public void setMainWindowSize(Point size) { this.mainWindowSizeX = size.x + ""; //$NON-NLS-1$ this.mainWindowSizeY = size.y + ""; //$NON-NLS-1$ } }