/**
* $RCSfile: ,v $
* $Revision: $
* $Date: $
*
* Copyright (C) 2004-2011 Jive Software. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jivesoftware.sparkplugin.preferences;
import org.jivesoftware.spark.plugin.phone.resource.PhoneRes;
import net.java.sipmack.softphone.SoftPhoneManager;
import com.thoughtworks.xstream.XStream;
import net.java.sipmack.common.Log;
import net.java.sipmack.sip.SIPConfig;
import org.jivesoftware.Spark;
import org.jivesoftware.spark.preference.Preference;
import org.jivesoftware.spark.util.SwingWorker;
import java.awt.EventQueue;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import javax.swing.Icon;
import javax.swing.JComponent;
/**
* Title: SIPark
* Description:JAIN-SIP Audio/Video phone application
*
* @author Thiago Rocha Camargo (thiago@jivesoftware.com)
* <p/>
* The <code>SipPreference</code> class manage the Spark Preferences
* @version 1.0, 28/09/2006
*/
public class SipPreference implements Preference {
private SipPreferencePanel panel;
private boolean showGUI = true;
private boolean commitSettings = true;
private XStream xstream;
private SipPreferences preferences;
public SipPreference() {
try {
EventQueue.invokeAndWait(new Runnable() {
@Override
public void run() {
loadFromFile();
panel = new SipPreferencePanel();
}
});
}
catch(Exception e){
e.printStackTrace();
}
}
public void setData(SipPreferences sipPreferences) {
this.preferences = sipPreferences;
}
public Object getData() {
return preferences;
}
public String getErrorMessage() {
return "Invalid SIP Settings";
}
public JComponent getGUI() {
return panel;
}
public Icon getIcon() {
return PhoneRes.getImageIcon("ANSWER_PHONE_IMAGE");
}
public String getListName() {
return "Phone";
}
public String getNamespace() {
return "SIP";
}
public String getTitle() {
return "Phone Settings";
}
public String getTooltip() {
return "Phone Settings";
}
public boolean isDataValid() {
return true;
}
public void loadFromFile() {
if (preferences != null) {
return;
}
if (!getSipSettingsFile().exists()) {
preferences = new SipPreferences();
}
else {
// Do Initial Load from FileSystem.
File settingsFile = getSipSettingsFile();
try {
FileReader reader = new FileReader(settingsFile);
preferences = (SipPreferences)getXStream().fromXML(reader);
}
catch (Exception e) {
Log.error("Error loading Sound Preferences.", e);
preferences = new SipPreferences();
}
}
}
public void load() {
SwingWorker worker = new SwingWorker() {
public Object construct() {
loadFromFile();
return preferences;
}
public void finished() {
panel
.setUserName(preferences.getUserName() != null ? preferences
.getUserName()
: "");
panel
.setAuthUserName(preferences.getAuthUserName() != null ? preferences
.getAuthUserName()
: "");
panel.setServer(preferences.getServer() != null ? preferences
.getServer() : "");
panel
.setPassword(preferences.getPassword() != null ? preferences
.getPassword()
: "");
panel.setRegister(preferences.isRegisterAtStart());
panel.setStunServer(preferences.getStunServer());
panel.setStunPort(preferences.getStunPort());
panel.setUseStun(preferences.isUseStun());
}
};
worker.start();
}
public void commit() {
if (commitSettings) {
preferences.setUserName(panel.getUserName());
preferences.setAuthUserName(panel.getAuthUserName());
preferences.setServer(panel.getServer());
preferences.setPassword(panel.getPassword());
preferences.setRegisterAtStart(panel.getRegister());
preferences.setPreferredAddress(SIPConfig
.getPreferredNetworkAddress());
preferences.setUseStun(panel.getUseStun());
preferences.setStunServer(panel.getStunServer());
preferences.setStunPort(panel.getStunPort());
saveSipFile();
SoftPhoneManager.getInstance().handleUnregisterRequest();
SoftPhoneManager.getInstance().register();
}
}
public void shutdown() {
preferences.setPreferredAddress(SIPConfig.getPreferredNetworkAddress());
saveSipFile();
}
public boolean isShowGUI() {
return showGUI;
}
public void setShowGUI(boolean showGUI) {
this.showGUI = showGUI;
}
public boolean isCommitSettings() {
return commitSettings;
}
public void setCommitSettings(boolean commitSettings) {
this.commitSettings = commitSettings;
}
private File getSipSettingsFile() {
File file = new File(Spark.getSparkUserHome());
if (!file.exists()) {
file.mkdirs();
}
return new File(file, "sip-settings.xml");
}
public void saveSipFile() {
try {
FileWriter writer = new FileWriter(getSipSettingsFile());
getXStream().toXML(preferences, writer);
}
catch (Exception e) {
Log.error("Error saving sound settings.", e);
}
}
private XStream getXStream() {
if (xstream == null) {
xstream = new XStream();
xstream.alias("sip", SipPreferences.class);
}
return xstream;
}
}