/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.milipede.storage.layer.handler;
import ch.cyberduck.BrowserController;
import ch.cyberduck.MainController;
import ch.cyberduck.TransferController;
import ch.cyberduck.TransferPromptController;
import ch.cyberduck.UploadPromptController;
import ch.cyberduck.UserDefaultsPreferences;
import ch.cyberduck.WindowController;
import ch.cyberduck.core.AbstractPath;
import ch.cyberduck.core.AttributedList;
import ch.cyberduck.core.DownloadTransfer;
import ch.cyberduck.core.Host;
import ch.cyberduck.core.Local;
import ch.cyberduck.core.LocalFactory;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.PathAttributes;
import ch.cyberduck.core.PathFactory;
import ch.cyberduck.core.Permission;
import ch.cyberduck.core.Preferences;
import ch.cyberduck.core.Session;
import ch.cyberduck.core.SessionFactory;
import ch.cyberduck.core.SyncTransfer;
import ch.cyberduck.core.Transfer;
import ch.cyberduck.core.TransferAction;
import ch.cyberduck.core.TransferOptions;
import ch.cyberduck.core.TransferPrompt;
import ch.cyberduck.core.UploadTransfer;
import ch.cyberduck.core.service.DownloadTransferService;
import ch.cyberduck.handler.ResultContext;
import ch.cyberduck.handler.ResultHandler;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.Timer;
import java.util.TimerTask;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.merapi.internal.Bridge;
import org.millipede.merapi.messages.ProviderMessage;
import org.openmole.misc.exception.InternalProcessingError;
import org.osgi.service.event.Event;
import org.osgi.service.event.EventHandler;
import org.milipede.storage.layer.PersistenceControllerService;
import org.milipede.storage.layer.internal.PersistenceController;
import org.milipede.storage.layer.internal.ProviderController;
import ch.cyberduck.service.BrowserControllerService;
import ch.cyberduck.service.LoginController;
import ch.cyberduck.service.TransferControllerService;
//import ch.cyberduck.ui.cocoa.foundation.NSDictionary;
//import ch.cyberduck.ui.cocoa.foundation.NSDictionary;
import java.beans.XMLEncoder;
import java.io.FileOutputStream;
import java.util.Dictionary;
import java.util.Hashtable;
import java.util.List;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang.StringUtils;
import org.merapi.messages.Message;
import org.millipede.router.vo.ProviderVO;
import quickbase.exception.BasicFileOperationDatabaseException;
import quickbase.exception.DatabaseException;
import ch.cyberduck.i18n.BundleLocale;
import ch.cyberduck.model.FinderLocal;
import ch.cyberduck.serializer.PlistSerializer;
import ch.cyberduck.serializer.PlistDeserializer;
/**
*
* @author gurkerl
*/
public class ProviderHandler implements EventHandler, ResultHandler {
private LoginController loginService;
public LoginController getLoginService() {
return loginService;
}
public void setLoginService(LoginController loginService) {
this.loginService = loginService;
}
// private BrowserController browserController;
// private BrowserControllerService browserController;
//
// public BrowserControllerService getBrowserController() {
// return browserController;
// }
//
// public void setBrowserController(BrowserControllerService browserController) {
// this.browserController = browserController;
// }
private TransferControllerService transferController;
private DownloadTransferService downloadTransfer;
// private PersistenceService persistentceController;
// private PersistenceController persistenceController;
// public PersistenceControllerService getPersistentceController() {
// return persistentceController;
// }
//
// public PersistenceController getPersistenceController() {
// return persistenceController;
// }
//
// public void setPersistenceController(PersistenceController
// persistenceController) {
// this.persistenceController = persistenceController;
// }
private Session s = null;
// private BrowserController browserController = new BrowserController();
BrowserController doc = null;
@Override
public void handleEvent(Event event) {
try {
PersistenceController.getInstance().startup();
} catch (BasicFileOperationDatabaseException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (DatabaseException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
// if
// (event.getTopic().equals(ProviderMessage.INIT_PROVIDER_LIST_REQUEST+"/"+"test"))
// {
if (event.getTopic().equals("collaboration/init")) {
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";
respondMessage.provider = ProviderController.getInstance()
.getStorage();
} else if (event.getProperty("providerType").equals("mail")) {
respondMessage.providerType = "mail";
respondMessage.provider = ProviderController.getInstance()
.getMail();
int rows = doc.getSelectedBrowserView().numberOfRowsInTableView();
Path selected = doc.getSelectedPath();
if(null == selected || !selected.attributes.isDirectory()) {
selected = doc.workdir();
}
BrowserController c = new BrowserController();
// c.cascade();
// c.window().makeKeyAndOrderFront(null);
// final Host host = new Host(doc.getSession().getHost().getAsDictionary());
final Host host = new Host(doc.getSession().getHost().<Dictionary<Object, Object>>getAsDictionary());
host.setDefaultPath(selected.getAbsolute());
c.mount(host);
} else if (event.getProperty("providerType").equals("hoster")) {
respondMessage.providerType = "hoster";
respondMessage.provider = ProviderController.getInstance()
.getHoster();
} else {
return;
}
respondMessage.send();
// // respondMessage.convertToProviderVO((ArrayList<Object>)
// event.getProperty("provider"));
// try {
// Bridge.getInstance().sendMessage(respondMessage);
// } catch (Exception e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// } else if
// (event.getTopic().equals(ProviderMessage.LOGIN_PROVIDER_REQUEST))
// {
// StartUp the correct Plugin
// if (event.getProperty("plugin").equals("storage")) {
// if (event.getProperty("providerType").equals("storage")) {
// try {
// AccountActivator.pluginMgr.load("D:\\Development\\Java\\pluginmanager\\org.apache.commons.collections15-4.01.jar");
// AccountActivator.pluginMgr.load("C:\\Users\\gurkerl\\Documents\\NetBeansProjects\\downloader\\jmilipede\\target\\jmilipede-1.0.0.jar");
// AccountActivator.pluginMgr.load("D:\\Development\\Java\\workspace\\millipede\\cyberduck\\target\\cyberduck-1.0.0.jar");
// AccountActivator.pluginMgr.load("http://millipede.me/libs/cyberduck-1.0.0.jar");
//
// } catch (InternalProcessingError ex) {
// Logger.getLogger(ProviderHandler.class.getName()).log(Level.SEVERE,
// null, ex);
// } else if (event.getTopic().equals("collaboration/*")) {
//funzt
// } else if (event.getTopic().equals("collaboration/test")) {
FinderLocal.register();
UserDefaultsPreferences.register();
BundleLocale.register();
PlistDeserializer.register();
PlistSerializer.register();
// int delay = 1000;
// int period = 10000;
// Timer timer = new Timer();
// timer.scheduleAtFixedRate(new TimerTask() {
//
// public void run() {
// if (loginService == null) {
// System.out.println("LoginService wasn't registered.");
// } else {
// System.out.println("LoginService is registered.");
// }
// }
// }, delay, period);
// if (event.getProperty("type").equals("add")) {
// final Host h = Host.parse((String) event.getProperty("url"));
final Host h = Host.parse("https://mydisk.se/kirk23/");
// final Host h = Host.parse("https://webdav.mydrive.ch");
// final Host h = Host.parse("https://docs.live.net//3fd0e6207b4a7918//Public");
// final Host h = Host.parse("http://docs.live.net//cid-3fd0e6207b4a7918//Public");
// final Host h = Host.parse("https://e9rtcw.docs.live.net/3fd0e6207b4a7918/test");
// h.setCredentials((String) event.getProperty("user"), (String)
// event.getProperty("password"));
try {
handleResult(h);
} catch (BasicFileOperationDatabaseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (DatabaseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
h.setCredentials("kirk23", "123456");
// h.setCredentials("te_ster44@hotmail.com", "tester44");
// Session s = null;
if (StringUtils.isNotEmpty(h.getDefaultPath())) {
// if (!h.getDefaultPath().endsWith(Path.DELIMITER)) {
this.s = SessionFactory.createSession(h);
this.s.setLoginController(new ch.cyberduck.LoginController());
final Path p = PathFactory.createPath(s, h
.getDefaultPath(), Path.FILE_TYPE);
if (StringUtils.isNotBlank(p.getExtension())) {
// TransferController.instance().startTransfer(new
// DownloadTransfer(p));
getTransferController().startTransfer(
new DownloadTransfer(p));
return;
}
// }
}
// BrowserController doc = MainController.newDocument();
this.doc = MainController.newDocument(true);
// MainController.newDocument(true);
// doc.mount(h);
// browserController.unmount();
// browserController.mount(h);
doc.mount(h);
// int rows = doc.getSelectedBrowserView().numberOfRowsInTableView();
// doc.setWorkdir(doc.getForwardPath());
// doc.getSession().getHost();
// Local loc = h.getDownloadFolder();
// getTransferController().startTransfer(new UploadTransfer(PathFactory.createPath(s, "D:\\Development\\", new Local(new File("D:\\Development\\merapi-java-1.0.0.jar")))));//LocalFactory.createLocal(new File("D:\\Development\\merapi-java-1.0.0.jar")))));
// DownloadTransfer dt = new DownloadTransfer(PathFactory.createPath(this.s, this.s.getHost().getDefaultPath(), 1));
// }
}
// } else if (event.getProperty("plugin").equals("mail")) {
// // AccountActivator.pluginMgr.load(null);
// } else if (event.getProperty("plugin").equals("hoster")) {
// // AccountActivator.pluginMgr.load(null);
// } else
// System.out.println("No such plugin available: " +
// event.getProperty("plugin"));
// }
else if (event.getTopic().equals("collaboration/initUpload")) {
//f browserController.setWorkdir(browserController.getForwardPath());
// try {
// browserController.getSession().workdir().download();
// } catch (IOException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// browserController.getSession().getHost().setDownloadFolder("Development\\testDownloads");
//f Local local = browserController.getSession().getHost().getDownloadFolder();
// try {
// AttributedList<AbstractPath> list = browserController.getSession().workdir().childs();
//
// } catch (IOException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
//// browserController.getSession().cache().encodeToXML();
//// try {
//// java.util.ListIterator<AbstractPath> iterator = browserController.getSession().workdir().childs().listIterator();
//// } catch (IOException e) {
//// // TODO Auto-generated catch block
//// e.printStackTrace();
//// }
//
//// s.getHost().parse("https://mydisk.se/kirk23/").getDownloadFolder();
//
//// UploadTransfer ut = new UploadTransfer(PathFactory.createPath(s, s.getHost().getDefaultPath(), 1));
//
//// TransferPromptController.create(null, new UploadTransfer(PathFactory.createPath(s, s.getHost().getDefaultPath(), 1)));
//
// TransferOptions options = new TransferOptions();
// options.closeSession = false;
//
//// Path file = null;
//// try {
//// file = PathFactory.createPath(browserController.getSession(), browserController.getSession().workdir().getAbsolute(),
//// LocalFactory.createLocal(new File("D:\\Charon.rar")));
//// } catch (IOException e) {
//// // TODO Auto-generated catch block
//// e.printStackTrace();
//// }
////
//// UploadTransfer upload = new UploadTransfer(file);
//// upload.start(new TransferPrompt() {
//// public TransferAction prompt() {
//// return TransferAction.ACTION_OVERWRITE;
//// }
//// }, options);
//
//// try {
//// browserController.getSession().workdir().download();
//// } catch (IOException e) {
//// // TODO Auto-generated catch block
//// e.printStackTrace();
//// }
//
//
//// public List<Path> getRoots() {
//// return this.roots;
//// }
////
//// protected void setRoots(List<Path> roots) {
//// this.roots = roots;
//// }
//// Transfer _delegateDownload = new DownloadTransfer(this.getRoots());
// Transfer _delegateDownload = new DownloadTransfer(browserController.getBackHistory());
// _delegateDownload.start(new TransferPrompt() {
// public TransferAction prompt() {
// return TransferAction.ACTION_OVERWRITE;
// }
// }, options);
}
}
private void handleResult(Host h) throws DatabaseException {
ProviderMessage msg = new ProviderMessage();
boolean inserted = false;
// if (context.equals("Login succeeded")) {
List<ProviderVO> providers = new ArrayList<ProviderVO>();
// for (Host host : h) {
ProviderVO provider = new ProviderVO();
provider.setTitle(h.getHostname());
provider.setCategory("storage");
providers.add(provider);
// getPersistenceController().addProvider(provider);
inserted = PersistenceController.getInstance().addProvider(provider);
// serialize provider to xml
// TODO: transport to global repository
String file = provider.getTitle();
// Create file output stream.
FileOutputStream fstream = null;
try {
fstream = new FileOutputStream(file);
} catch (FileNotFoundException ex) {
Logger.getLogger(ProviderHandler.class.getName()).log(Level.SEVERE,
null, ex);
}
try {
// Create XML encoder.
XMLEncoder ostream = new XMLEncoder(fstream);
try {
// Write object.
ostream.writeObject(provider);
ostream.flush();
} finally {
// Close object stream.
ostream.close();
}
} finally {
try {
// Close file stream.
fstream.close();
} catch (IOException ex) {
Logger.getLogger(ProviderHandler.class.getName()).log(
Level.SEVERE, null, ex);
}
}
// }
if (inserted == true)
msg.processType = ProviderMessage.VERIFICATION_SUCCEEDED;
else
msg.processType = ProviderMessage.VERIFICATION_SUCCEEDED_ALREADY_ADDED;
msg.providerType = "storage";
msg.provider = providers;
msg.send();
// String topic = "login/succeeded";
// Dictionary props = new Hashtable();
// Event e = new Event(topic, props);
// queue.offer(e);
return;
// } else if (context.equals("Login failed")) {
// msg.processType = ProviderMessage.VERIFICATION_FAILED;
// msg.send();
// // String topic = "login/failed";
// // Dictionary props = new Hashtable();
// // Event e = new Event(topic, props);
// // queue.offer(e);
// return;
// } else {
// System.out.println("not handled message");
// }
}
/**
* @return the downloadTransfer
*/
public DownloadTransferService getDownloadTransfer() {
return downloadTransfer;
}
/**
* @param downloadTransfer
* the downloadTransfer to set
*/
public void setDownloadTransfer(DownloadTransferService downloadTransfer) {
this.downloadTransfer = downloadTransfer;
}
public void setTransferController(
TransferControllerService transferController) {
this.transferController = transferController;
}
public TransferControllerService getTransferController() {
return transferController;
}
@Override
public void handleResult(ResultContext context, List<Host> h) {
ProviderMessage msg = new ProviderMessage();
if (context.equals("Login succeeded")) {
List<ProviderVO> providers = new ArrayList<ProviderVO>();
for (Host host : h) {
ProviderVO provider = new ProviderVO();
provider.setTitle(host.getHostname());
provider.setCategory("storage");
providers.add(provider);
// getPersistentceController().addProvider(provider);
// PersistenceController.getInstance().addProvider(provider);
// serialize provider to xml
// TODO: transport to global repository
String file = provider.getTitle();
// Create file output stream.
FileOutputStream fstream = null;
try {
fstream = new FileOutputStream(file);
} catch (FileNotFoundException ex) {
Logger.getLogger(ProviderHandler.class.getName()).log(
Level.SEVERE, null, ex);
}
try {
// Create XML encoder.
XMLEncoder ostream = new XMLEncoder(fstream);
try {
// Write object.
ostream.writeObject(provider);
ostream.flush();
} finally {
// Close object stream.
ostream.close();
}
} finally {
try {
// Close file stream.
fstream.close();
} catch (IOException ex) {
Logger.getLogger(ProviderHandler.class.getName()).log(
Level.SEVERE, null, ex);
}
}
}
msg.processType = ProviderMessage.VERIFICATION_SUCCEEDED;
msg.providerType = "storage";
msg.provider = providers;
msg.send();
// String topic = "login/succeeded";
// Dictionary props = new Hashtable();
// Event e = new Event(topic, props);
// queue.offer(e);
return;
} else if (context.equals("Login failed")) {
msg.processType = ProviderMessage.VERIFICATION_FAILED;
msg.send();
// String topic = "login/failed";
// Dictionary props = new Hashtable();
// Event e = new Event(topic, props);
// queue.offer(e);
return;
} else {
System.out.println("not handled message");
}
}
// /**
// * @return the persistentceController
// */
// public PersistenceService getPersistentceController() {
// return persistentceController;
// }
//
// /**
// * @param persistentceController the persistentceController to set
// */
// public void setPersistentceController(PersistenceService
// persistentceController) {
// this.persistentceController = persistentceController;
// }
}