/**
SpagoBI, the Open Source Business Intelligence suite
Copyright (C) 2012 Engineering Ingegneria Informatica S.p.A. - SpagoBI Competency Center
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this file,
You can obtain one at http://mozilla.org/MPL/2.0/.
**/
package it.eng.spagobi.studio.utils.services.server;
import it.eng.spagobi.sdk.proxy.TestConnectionServiceProxy;
import it.eng.spagobi.studio.utils.bo.Server;
import it.eng.spagobi.studio.utils.bo.xmlMapping.XmlServerGenerator;
import it.eng.spagobi.studio.utils.sdk.ProxyDataRetriever;
import it.eng.spagobi.studio.utils.util.ClassLoaderUtilities;
import it.eng.spagobi.studio.utils.util.SpagoBIStudioConstants;
import java.util.Vector;
import org.apache.axis.AxisFault;
import org.eclipse.core.internal.resources.ResourceException;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IPath;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.ui.PlatformUI;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* This class is used to handle server files
* @author gavardi
*
*/
public class ServerHandler {
it.eng.spagobi.studio.utils.bo.Server server;
String message;
private static Logger logger = LoggerFactory.getLogger(ServerHandler.class);
public ServerHandler(Server server) {
super();
this.server = server;
}
public ServerHandler() {
super();
this.server = null;
}
/**
* test the connection of server
* @return boolean if test sccesfull and set test message
*/
public boolean testConnection() {
logger.debug("IN");
boolean testResult = false;
message = "";
try {
ClassLoaderUtilities.setSpagoBIClassLoader();
TestConnectionServiceProxy proxy = new TestConnectionServiceProxy(server.getUser(), server.getPassword());
proxy.setEndpoint(server.getUrl() + "/sdk/TestConnectionService");
// set proxy configurations!
new ProxyDataRetriever().initProxyData(proxy,server.getUrl());
// testing connection
boolean result = proxy.connect();
if (result) {
logger.debug("test to "+server.getUrl()+ " succesfull");
message = " Test Succesfull";
testResult = true;
} else {
logger.warn("test to "+server.getUrl()+ " failed");
message = "Error in connection: check server definition";
testResult = false;
}
} catch (AxisFault e) {
logger.error("test to "+server.getUrl()+ " failed ",e);
if (e.getFaultString().startsWith("WSDoAllReceiver")) {
//message = "Error inconnection: Authentication failed";
MessageDialog.openError(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), "Error", "Error inconnection: Authentication failed\n\n\n"+e.getMessage());
testResult = false;
} else {
//message = "Could not connect to SpagoBI Server "+e.getMessage();
MessageDialog.openError(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), "Error", "Could not connect to SpagoBI Server: Check URL is correct \n\n\n"+e.getMessage());
testResult = false;
}
}
catch (java.lang.StringIndexOutOfBoundsException e) {
logger.error("test to "+server.getUrl()+ " failed for incorrect URL definition",e);
//message = "Could not connect to SpagoBI Server: URL is not well formed: \nan example is http://localhost:8080/SpagoBI (Port is optional): "+e.getMessage();
message = "";
MessageDialog.openError(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), "Error", "Could not connect to SpagoBI Server: URL is not well formed: \nan example is http://localhost:8080/SpagoBI (Port is optional): \n\n\nError is: "+e.getMessage());
testResult = false;
}
catch (Exception e) {
logger.error("test to "+server.getUrl()+ " failed ",e);
//message = "Could not connect to SpagoBI Server: "+e.getMessage();
MessageDialog.openError(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), "Error", "Could not connect to SpagoBI Server: check URL is correct:\nan URL example is http://localhost:8080/SpagoBI (Port is optional): \n\n\nError is: "+e.getMessage());
testResult = false;
}
logger.debug("OUT");
return testResult;
}
/**
* Deactivate all other server except the selected one
* @param file
* @return
*/
public boolean deactivateOtherServers(IFile file){
logger.debug("IN");
boolean result = true;
// get Server folder
IFolder folder = (IFolder)file.getParent();
try{
IResource[] resources = folder.members();
for (int i = 0; i < resources.length; i++) {
IResource res = resources[i];
logger.debug("resource "+res.getName());
// check it is a file and it is a server
if(res instanceof IFile && res.getName().endsWith("."+SpagoBIStudioConstants.SERVER_EXTENSION)){
// if it is a server deactivate it
logger.debug("reading file "+res.getName());
if(!res.getName().equals(file.getName())){ // do not deactivate current file
XmlServerGenerator.deactivateServer((IFile)res);
}
}
else{
logger.debug("file "+res.getName()+ " present in Server folder, only server files should be here");
}
}
}
catch (Exception e) {
logger.error("Error in setting the document as template ", e);
result = false;
}
logger.debug("OUT");
return result;
}
/**
* get active server
* @param projectname
* @return
*/
public Server getCurrentActiveServer(String projectname){
logger.debug("IN");
Server active = null;
// when dealing with server check class loader
//ClassLoaderUtilities.setSpagoBIClassLoader();
Vector<Server> names = getCurrentActiveServers(projectname);
if(names.size()== 0){
logger.warn("No active server found");
}
else{
active = names.get(0);
logger.debug("active server is "+active.getName());
if(names.size()>1){
logger.warn("more than one active server found, by default is taken the first found "+active.getName());
}
}
logger.debug("OUT");
return active;
}
/**
* getCurrentActiveServers from project analysis file
* @return
*/
public Vector<Server> getCurrentActiveServers(String projectname){
logger.debug("IN");
// get Server folder
Vector<Server> servers = new Vector<Server>();
IFolder serverFolder = null;
serverFolder = getServerRoot(projectname);
if(serverFolder == null){
logger.error("Error in retrieving server root folder; not found");
return null;
}
try{
IResource[] resources = serverFolder.members();
for (int i = 0; i < resources.length; i++) {
IResource res = resources[i];
logger.debug("resource "+res.getName());
// check it is a file and it is a server
if(res instanceof IFile && res.getName().endsWith("."+SpagoBIStudioConstants.SERVER_EXTENSION)){
// if it is a server deactivate it
logger.debug("reading file "+res.getName());
Server server = XmlServerGenerator.readXml((IFile)res);
if(server.isActive()){
servers.add(server);
}
}
else{
logger.debug("file "+res.getName()+ " present in Server folder, only server files should be here");
}
}
}
catch (ResourceException e) {
logger.error("Check file is sync: try refreshing the server folder", e);
MessageDialog.openWarning(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), "Warning", "Error in reading the file: to check the resource is sync with file systrem please try refreshing the server folder");
}
catch (Exception e) {
logger.error("Error in reading xml file ", e);
return null;
}
logger.debug("OUT");
return servers;
}
// /**
// * getCurrentActiveServers from project analysis file
// * @return
// */
//
// public Vector<String> getCurrentActiveServers(IFile analysisFile){
// logger.debug("IN");
// // get Server folder
// Vector<String> names = new Vector<String>();
//
// IFolder serverFolder = null;
// serverFolder = getServerRootFromFile(analysisFile);
//
// if(serverFolder == null){
// logger.error("Error in retrieving server root folder; not found");
// return null;
// }
//
//
// try{
// IResource[] resources = serverFolder.members();
//
// for (int i = 0; i < resources.length; i++) {
// IResource res = resources[i];
// logger.debug("resource "+res.getName());
// // check it is a file and it is a server
// if(res instanceof IFile && res.getName().endsWith("."+SpagoBIStudioConstants.SERVER_EXTENSION)){
// // if it is a server deactivate it
// logger.debug("reading file "+res.getName());
// Server server = XmlServerGenerator.readXml((IFile)res);
// if(server.isActive()){
// names.add(server.getName());
// }
// }
// else{
// logger.debug("file "+res.getName()+ " present in Server folder, only server files should be here");
// }
// }
// } catch (Exception e) {
// logger.error("Error in reading xml file ", e);
// return null;
// }
//
// logger.debug("OUT");
// return names;
// }
/**
* get SERVER root file from current file
* @param analysisFile
* @return
*/
public IFolder getServerRootFromFile(IFile analysisFile){
logger.debug("IN");
IFolder serverFolder = null;
try{
IProject project = analysisFile.getProject();
IPath resourcePath = project.getProjectRelativePath().append(SpagoBIStudioConstants.FOLDER_RESOURCE);
IFolder resourceFolder = project.getFolder(resourcePath);
serverFolder = resourceFolder.getFolder(SpagoBIStudioConstants.FOLDER_SERVER);
}
catch (Exception e) {
logger.error("Error in retrieving server root folder ", e);
return null;
}
logger.debug("OUT");
return serverFolder;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
/**
* get SERVER root file from current file
* @param analysisFile
* @return
*/
public IFolder getServerRoot(String projectName){
logger.debug("IN");
IFolder serverFolder = null;
try{
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
IProject project= root.getProject(projectName);
IPath porjPath = project.getFullPath();
IPath resourcePath = porjPath.append(SpagoBIStudioConstants.FOLDER_RESOURCE);
IPath serverPath = resourcePath.append(SpagoBIStudioConstants.FOLDER_SERVER);
serverFolder = root.getFolder(serverPath);
// serverFolder = resourceFolder.getFolder(SpagoBIStudioConstants.FOLDER_SERVER);
}
catch (Exception e) {
logger.error("Error in retrieving server root folder ", e);
return null;
}
logger.debug("OUT");
return serverFolder;
}
}