/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package org.pieShare.pieShareApp.service;
import java.util.ArrayList;
import org.pieShare.pieShareApp.model.PieShareAppBeanNames;
import org.pieShare.pieShareApp.model.PieUser;
import org.pieShare.pieShareApp.model.command.LoginCommand;
import org.pieShare.pieShareApp.model.command.LogoutCommand;
import org.pieShare.pieShareApp.model.command.ResetPwdCommand;
import org.pieShare.pieShareApp.model.message.FileListMessage;
import org.pieShare.pieShareApp.model.message.FileListRequestMessage;
import org.pieShare.pieShareApp.model.message.metaMessage.MetaCommitMessage;
import org.pieShare.pieShareApp.model.message.metaMessage.MetaMessage;
import org.pieShare.pieShareApp.model.message.fileHistoryMessage.FileChangedMessage;
import org.pieShare.pieShareApp.model.message.fileHistoryMessage.FileDeletedMessage;
import org.pieShare.pieShareApp.model.message.fileMessageBase.FileRequestMessage;
import org.pieShare.pieShareApp.model.message.metaMessage.FileTransferCompleteMessage;
import org.pieShare.pieShareApp.model.message.fileMessageBase.FileCreatedMessage;
import org.pieShare.pieShareApp.service.configurationService.api.IConfigurationFactory;
import org.pieShare.pieShareApp.service.database.api.IDatabaseService;
import org.pieShare.pieShareApp.task.commandTasks.loginTask.LoginTask;
import org.pieShare.pieShareApp.task.commandTasks.logoutTask.LogoutTask;
import org.pieShare.pieShareApp.task.commandTasks.resetPwd.ResetPwdTask;
import org.pieShare.pieShareApp.task.eventTasks.conflictTasks.FileChangedTask;
import org.pieShare.pieShareApp.task.eventTasks.conflictTasks.FileDeletedTask;
import org.pieShare.pieShareApp.task.eventTasks.FileListRequestTask;
import org.pieShare.pieShareApp.task.eventTasks.MetaCommitTask;
import org.pieShare.pieShareApp.task.eventTasks.conflictTasks.FileListTask;
import org.pieShare.pieShareApp.task.eventTasks.FileMetaTask;
import org.pieShare.pieShareApp.task.eventTasks.FileRequestTask;
import org.pieShare.pieShareApp.task.eventTasks.FileTransferCompleteTask;
import org.pieShare.pieShareApp.task.eventTasks.conflictTasks.NewFileTask;
import org.pieShare.pieTools.piePlate.model.message.loopHoleMessages.LoopHoleConnectionMessage;
import org.pieShare.pieTools.piePlate.service.cluster.api.IClusterManagementService;
import org.pieShare.pieTools.piePlate.service.cluster.exception.ClusterManagmentServiceException;
import org.pieShare.pieTools.piePlate.task.LoopHoleConnectionTask;
import org.pieShare.pieTools.pieUtilities.service.beanService.IBeanService;
import org.pieShare.pieTools.pieUtilities.service.pieExecutorService.PieExecutorTaskFactory;
import org.pieShare.pieTools.pieUtilities.service.pieLogger.PieLogger;
import org.pieShare.pieTools.pieUtilities.service.shutDownService.api.IShutdownService;
import org.springframework.beans.factory.DisposableBean;
/**
*
* @author Svetoslav
*/
public class PieShareService implements DisposableBean {
private PieExecutorTaskFactory executorFactory;
private IClusterManagementService clusterManagementService;
private IShutdownService shutdownService;
private IDatabaseService databaseService;
private IConfigurationFactory configurationFactory;
private IBeanService beanService;
public void setBeanService(IBeanService beanService) {
this.beanService = beanService;
}
public void setDatabaseService(IDatabaseService databaseService) {
this.databaseService = databaseService;
}
public void setShutdownService(IShutdownService shutdownService) {
this.shutdownService = shutdownService;
}
public void setExecutorFactory(PieExecutorTaskFactory executorFactory) {
this.executorFactory = executorFactory;
}
public void setClusterManagementService(IClusterManagementService service) {
this.clusterManagementService = service;
}
public void setConfigurationFactory(IConfigurationFactory configurationFactory) {
this.configurationFactory = configurationFactory;
}
public void start() {
//this.executorService.registerTask(SimpleMessage.class, PrintEventTask.class);
/*
//unimportant for the time being because we don't have commandline support
try {
//todo-sv: change this!!! (new should not be used here)
//getbean per class ist dumm... zerst?rt unabh?ngigkeit
//SimpleMessageActionService action = this.beanService.getBean(SimpleMessageActionService.class);
//this.parserService.registerAction(action);
LoginActionService laction = this.beanService.getBean(PieShareAppBeanNames.getLoginActionServiceName());
this.parserService.registerAction(laction);
} catch (Exception ex) {
ex.printStackTrace();
}*/
PieUser user = null;
ArrayList<PieUser> users = databaseService.findAllPieUser();
if (users != null && users.size() > 0) {
user = users.get(0);
}
if (user == null) {
user = beanService.getBean(PieShareAppBeanNames.getPieUser());
}
user.setPieShareConfiguration(configurationFactory.checkAndCreateConfig(user.getPieShareConfiguration(), false));
this.executorFactory.registerTask(MetaMessage.class, FileMetaTask.class);
this.executorFactory.registerTask(FileRequestMessage.class, FileRequestTask.class);
this.executorFactory.registerTask(FileCreatedMessage.class, NewFileTask.class);
this.executorFactory.registerTask(FileTransferCompleteMessage.class, FileTransferCompleteTask.class);
this.executorFactory.registerTask(FileListRequestMessage.class, FileListRequestTask.class);
this.executorFactory.registerTask(FileListMessage.class, FileListTask.class);
this.executorFactory.registerTask(FileDeletedMessage.class, FileDeletedTask.class);
this.executorFactory.registerTask(FileChangedMessage.class, FileChangedTask.class);
this.executorFactory.registerTask(MetaCommitMessage.class, MetaCommitTask.class);
this.executorFactory.registerTask(LoginCommand.class, LoginTask.class);
this.executorFactory.registerTask(LogoutCommand.class, LogoutTask.class);
this.executorFactory.registerTask(ResetPwdCommand.class, ResetPwdTask.class);
}
public void stop() {
//not needed anymore because cluster now implements shutdownable
/*try {
this.clusterManagementService.diconnectAll();
}
catch (ClusterManagmentServiceException ex) {
PieLogger.error(this.getClass(), "Stop all failed!", ex);
}*/
this.shutdownService.fireShutdown();
}
@Override
public void destroy() throws Exception {
this.stop();
}
}