/**
* $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.sparkimpl.plugin.gateways;
import org.jivesoftware.smackx.packet.PrivateData;
import org.jivesoftware.smackx.provider.PrivateDataProvider;
import org.xmlpull.v1.XmlPullParser;
import java.util.HashMap;
import java.util.Map;
/**
* Handle Gateway preferences through private data to persist through seperate locations of the client.
*
* @author Derek DeMoro
*/
public class GatewayPrivateData implements PrivateData {
private final Map<String, String> loginSettingsMap = new HashMap<String, String>();
public static final String ELEMENT = "gateway-settings";
public static final String NAMESPACE = "http://www.jivesoftware.org/spark";
public void addService(String serviceName, boolean autoLogin) {
loginSettingsMap.put(serviceName, Boolean.toString(autoLogin));
}
public boolean autoLogin(String serviceName) {
String str = loginSettingsMap.get(serviceName);
if(str == null){
return true;
}
return Boolean.parseBoolean(str);
}
public String getElementName() {
return ELEMENT;
}
public String getNamespace() {
return NAMESPACE;
}
public String toXML() {
StringBuffer buf = new StringBuffer();
buf.append("<").append(getElementName()).append(" xmlns=\"").append(getNamespace()).append("\">");
buf.append("<gateways>");
for (String serviceName : loginSettingsMap.keySet()) {
buf.append("<gateway>");
String autoLogin = loginSettingsMap.get(serviceName);
buf.append("<serviceName>").append(serviceName).append("</serviceName>");
buf.append("<autoLogin>").append(autoLogin).append("</autoLogin>");
buf.append("</gateway>");
}
buf.append("</gateways>");
buf.append("</").append(getElementName()).append(">");
return buf.toString();
}
public static class ConferencePrivateDataProvider implements PrivateDataProvider {
public ConferencePrivateDataProvider() {
}
public PrivateData parsePrivateData(XmlPullParser parser) throws Exception {
GatewayPrivateData data = new GatewayPrivateData();
boolean done = false;
boolean isInstalled = false;
while (!done) {
int eventType = parser.next();
if (eventType == XmlPullParser.START_TAG && parser.getName().equals("gateways")) {
isInstalled = true;
}
if (eventType == XmlPullParser.START_TAG && parser.getName().equals("gateway")) {
boolean gatewayDone = false;
String serviceName = null;
String autoLogin = null;
while (!gatewayDone) {
int eType = parser.next();
if (eType == XmlPullParser.START_TAG && parser.getName().equals("serviceName")) {
serviceName = parser.nextText();
}
else if (eType == XmlPullParser.START_TAG && parser.getName().equals("autoLogin")) {
autoLogin = parser.nextText();
}
else if (eType == XmlPullParser.END_TAG && parser.getName().equals("gateway")) {
data.addService(serviceName, Boolean.parseBoolean(autoLogin));
gatewayDone = true;
}
}
}
else if (eventType == XmlPullParser.END_TAG && parser.getName().equals("gateways")) {
done = true;
}
else if (!isInstalled) {
done = true;
}
}
return data;
}
}
}