package org.milipede.storage.layer.merapi.handlers;
import java.util.ArrayList;
import org.merapi.handlers.MessageHandler;
import org.merapi.helper.messages.DLControlRespondMessage;
import org.merapi.internal.Bridge;
import org.merapi.messages.IMessage;
//import org.milipede.storage.layer.StorageConsole;
//import org.milipede.storage.layer.domain.AccountVO;
//import org.milipede.storage.layer.internal.AccountController;
//import org.milipede.storage.layer.internal.AccountControllerEvent;
//import org.milipede.storage.layer.internal.AccountControllerListener;
//import org.milipede.storage.layer.internal.Assistant;
//import org.milipede.storage.layer.internal.common.logging.Logger;
//import org.milipede.storage.layer.merapi.messages.ProviderMessage;
//import org.milipede.storage.layer.internal.Storage;
//import com.sun.cloud.api.storage.webdav.WebDavClient;
//import org.milipede.jm.HostPluginWrapper;
//import org.milipede.jm.merapi.messages.ProviderMessage;
import org.millipede.merapi.messages.*;
import org.osgi.service.event.Event;
import org.osgi.service.event.EventHandler;
public class ProviderHandler implements EventHandler { //extends MessageHandler { // implements AccountControllerListener {
/**
* Logger for this class.
*/
// private static final Logger logger = Logger.getLogger(ProviderHandler.class);
// private static ProviderHandler instance = new ProviderHandler();
/**
* Statische Methode, liefert die einzige Instanz dieser Klasse zurueck
*/
// public static ProviderHandler getInstance() {
// return instance;
// }
// private ArrayList<HostPluginWrapper> tempHosts = null;
/**
* Default-Konstruktor, der nicht ausserhalb dieser Klasse aufgerufen werden
* kann
*/
public ProviderHandler() {
// super(ProviderMessage.PROVIDER_MESSAGE);
//
//// ArrayList<HostPluginWrapper> hosts = new ArrayList<HostPluginWrapper>(HostPluginWrapper.getHostWrapper());
////
//// tempHosts = new ArrayList<HostPluginWrapper>();
//// for (HostPluginWrapper wrapper : hosts) {
//// if (wrapper.isPremiumEnabled()) {
//// tempHosts.add(wrapper);
//// //|| !AccountController.getInstance().hasAccounts(wrapper.getHost())
//// } continue;
//// }
}
// @Override
// public void handleMessage(IMessage message) {
// if (message.getType() == "RefreshMessage") {
// System.out.println("RefreshMessage received");
// }
//
// else if (message.getType() == "LoginMessage") {
// System.out.println("LoginMessage received");
// }
//
// else if (message.getType() == "LogoutMessage") {
// System.out.println("LogoutMessage received");
// } else {
// System.out.println("No defined message type received " + message.getType());
// }
// }
// @Override
// public void handleMessage(IMessage message) {
// System.out.println(message);
// if (message instanceof SystemExecuteMessage) {
// ProviderMessage providerMessage = (ProviderMessage) message;
// System.out.println("ProviderMessage received:");
// System.out.println("Content: " + providerMessage.getData().toString());
// }
//
// }
/**
* Handles an <code>IMessage</code> dispatched from the Bridge.
*/
// @Override
// public void handleMessage( IMessage message )
// {
//
// if ( message instanceof ProviderMessage )
// {
//
//
// ProviderMessage sem = (ProviderMessage)message;
// }
// }
// // Use the args passed in the message to do a shell exec
// try
// {
//// if(detectMultipleSendings(sem.getUid().concat())) {
//// break;
//// } else {
////
//// }
//// Object[] args = sem.getArgs();
//// System.out.println("Length: " + sem.getArgs().length);
//// ProviderVO vo = (ProviderVO) args[0];
//// ProviderVO vo = (ProviderVO) sem.getData();
// System.out.println("Message Uid: " + sem.getUid() + " HashCode: " + sem.getType());
// }
// catch ( Exception e )
// {
// System.out.println( MessageHandler.class );
// e.printStackTrace();
// }
//
// //Respond in reaction to an ProviderMessage of processType ProviderMessage.INIT_PROVIDER_LIST_REQUEST
// if(sem.processType.equals(ProviderMessage.INIT_PROVIDER_LIST_REQUEST)) {
//// logger.info(ProviderMessage.INIT_PROVIDER_LIST_REQUEST + " Message received");
//
//// AccountController.getInstance().getAllAccounts("test");
//
// ProviderMessage respondMessage = new ProviderMessage();
// respondMessage.setType(ProviderMessage.PROVIDER_MESSAGE);
// respondMessage.processType = ProviderMessage.INIT_PROVIDER_LIST_RESPOND;
//
// if(sem.providerType.equals("storage")) {
// System.out.println("storage");
// respondMessage.providerType = "storage";
// respondMessage.provider = null;//(ArrayList<AccountVO>) Assistant.getInstance().getProviderList();
//// respondMessage.convertToAccountVOAccount(AccountController.getInstance().getAllAccounts("storage"));
// try {
// Bridge.getInstance().sendMessage(respondMessage);
// } catch (Exception e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// }
// else if(sem.providerType.equals("mail")) {
// respondMessage.providerType = "mail";
// System.out.println("mail");
// respondMessage.provider = null;//(ArrayList<AccountVO>) Assistant.getInstance().getProviderList();
//// respondMessage.convertToAccountVOAccount(AccountController.getInstance().getAllAccounts("mail"));
// try {
// Bridge.getInstance().sendMessage(respondMessage);
// } catch (Exception e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// }
// else if(sem.providerType.equals("hoster")) {
// respondMessage.providerType = "hoster";
// System.out.println("hoster");
//// respondMessage.provider = (ArrayList<AccountVO>) Assistant.getInstance().getProviderList();
//// respondMessage.convertToAccountVOAccount(AccountController.getInstance().getAllAccounts("hoster"));
//
//// respondMessage.convertToProviderVO(HostPluginWrapper.getHostWrapper());
// respondMessage.convertToProviderVO(tempHosts);
//
//// respondMessage.convertToProviderVO(new ArrayList<HostPluginWrapper>(HostPluginWrapper.getHostWrapper()));
// try {
// Bridge.getInstance().sendMessage(respondMessage);
// } catch (Exception e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// }
// }
//
//// else if(sem.processType.equals(ProviderMessage.LOGIN_PROVIDER_REQUEST)) {
////
//// ArrayList<Account> accounts = sem.convertToAccount();
////
//// if(sem.providerType.equals("storage")) {
//// for (Account a: accounts) {
//// //webdav login
//// Storage storage = new Storage();
//// storage.setWebDavClient(new WebDavClient(null, a.getUser(), a.getPass(), null));
//// a.setEnabled(true);
//// AccountController.getInstance().updateAccountInfo(a.getHoster(), a, true);
//// }
//// }
//// else if(sem.providerType.equals("mail")) {
//// for (Account a: accounts) {
////// a.setEnabled(true);
////// AccountController.getInstance().updateAccountInfo(a.getHoster(), a, true);
//// }
//// }
//// else if(sem.providerType.equals("hoster")) {
//// for (Account a: accounts) {
////// a.setEnabled(true);
////// AccountController.getInstance().updateAccountInfo(a.getHoster(), a, true);
//// }
//// }
////
//// //test if login parameter was correct
//// logger.info(ProviderMessage.LOGIN_PROVIDER_REQUEST + " Message received");
////// AccountController.getInstance().addAccount(null, sem.provider);
////
////
//// ProviderMessage respondMessage = new ProviderMessage();
//// respondMessage.setType(ProviderMessage.PROVIDER_MESSAGE);
//// respondMessage.processType = ProviderMessage.LOGIN_PROVIDER_RESPOND;
////
//// try {
//// Bridge.getInstance().sendMessage(respondMessage);
//// } catch (Exception e) {
//// // TODO Auto-generated catch block
//// e.printStackTrace();
//// }
//// }
////
//// else if(sem.processType.equals(ProviderMessage.LOGOUT_PROVIDER_REQUEST)){
////
////// backend system has to be logged out from selected provider
//// logger.info(ProviderMessage.LOGOUT_PROVIDER_REQUEST + " Message received");
////
//// ProviderMessage respondMessage = new ProviderMessage();
////// respondMessage.setUid(sem.getUid());
//// respondMessage.processType = ProviderMessage.LOGOUT_PROVIDER_RESPOND;
//// respondMessage.setType(ProviderMessage.PROVIDER_MESSAGE);
//// //Provider id
////// respondMessage.setData(Assistant.getInstance().getProviderList());
//// try {
//// Bridge.getInstance().sendMessage(respondMessage);
//// } catch (Exception e) {
//// // TODO Auto-generated catch block
//// e.printStackTrace();
//// }
//// }
//// else {
//// logger.info("no such processType received");
//// }
// }
// }
//this handler receives unpredictatable (more than one messages from the as3 bridge,
//this is a known problem,
//workaround
public static String lastUidTime = null;
public boolean detectMultipleSendings(String uIdTime) {
if (lastUidTime != uIdTime) {
lastUidTime = uIdTime;
return false;
}
else
return true;
}
@Override
public void handleEvent(Event event) {
if (event.getTopic().equals(ProviderMessage.INIT_PROVIDER_LIST_RESPOND)) {
ProviderMessage respondMessage = new ProviderMessage();
respondMessage.setType(ProviderMessage.PROVIDER_MESSAGE);
respondMessage.processType = ProviderMessage.INIT_PROVIDER_LIST_RESPOND;
if(event.getProperty("providerType").equals("storage")) {
respondMessage.providerType = "storage";
} else if(event.getProperty("providerType").equals("mail")) {
respondMessage.providerType = "mail";
} else if(event.getProperty("providerType").equals("hoster")) {
respondMessage.providerType = "hoster";
} else
return;
respondMessage.convertToProviderVO((ArrayList<Object>) event.getProperty("provider"));
try {
Bridge.getInstance().sendMessage(respondMessage);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
// @Override
// public void onAccountControllerEvent(AccountControllerEvent event) {
// // TODO Auto-generated method stub
// }
}