/** 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.util; import java.util.Iterator; import java.util.List; import org.eclipse.core.internal.resources.File; import org.eclipse.core.internal.resources.Folder; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; import org.eclipse.core.runtime.IPath; import org.eclipse.jface.viewers.IStructuredSelection; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * This class gives some utilities on project structure in resource navigator * @author gavardi * */ public class ResourceNavigatorHandler { /** * return the selection state */ public static final String FOLDER_ANALYSIS_HIER = "FolderInAnalysisHierarchy"; public static final String FOLDER_SERVER_HIER = "FolderInServerHierarchy"; public static final String FOLDER_MODEL_HIER = "FolderInModelHierarchy"; public static final String FILE_ANALYSIS_HIER = "FileInAnalysisHierarchy"; public static final String FILE_MODEL_HIER = "FileInModelHierarchy"; public static final String FILE_BCK_MODEL_HIER = "FileInBckModelHierarchy"; public static final String FILE_SERVER_HIER = "FileInServerHierarchy"; public static final String FILE_METAQUERY_HIER = "FileInMetaQueryHierarchy"; public static final String FILE_OLAP_HIER = "FileInOlapTemplatesHierarchy"; public static final String FOLDER_SYSTEM = "FolderSystem"; public static final String FOLDER_PROJECT = "FolderProject"; private static Logger logger = LoggerFactory.getLogger(ResourceNavigatorHandler.class); public static String getStateOfSelectedObject(Object objSel){ logger.debug("IN"); String toReturn = null; if(objSel instanceof Folder && isInHierarchy(SpagoBIStudioConstants.FOLDER_ANALYSIS, (Folder)objSel)) toReturn = ResourceNavigatorHandler.FOLDER_ANALYSIS_HIER; else if(objSel instanceof IFile && isFileInHierarchy(SpagoBIStudioConstants.FOLDER_ANALYSIS, (File)objSel)) toReturn = ResourceNavigatorHandler.FILE_ANALYSIS_HIER; else if(objSel instanceof Folder && isInHierarchy(SpagoBIStudioConstants.FOLDER_SERVER, (Folder)objSel)) toReturn = ResourceNavigatorHandler.FOLDER_SERVER_HIER; else if(objSel instanceof Folder && isInHierarchy(SpagoBIStudioConstants.FOLDER_METADATA_MODEL, (Folder)objSel)) toReturn = ResourceNavigatorHandler.FOLDER_MODEL_HIER; else if(objSel instanceof IFile && isFileInHierarchy(SpagoBIStudioConstants.FOLDER_METADATA_MODEL, (File)objSel) && ((File)objSel).getName().endsWith(SpagoBIStudioConstants.MODEL_EXTENSION) ) toReturn = ResourceNavigatorHandler.FILE_MODEL_HIER; else if(objSel instanceof IFile && isFileInHierarchy(SpagoBIStudioConstants.FOLDER_METADATA_MODEL, (File)objSel) && ((File)objSel).getName().endsWith(SpagoBIStudioConstants.BACKUP_EXTENSION) ) toReturn = ResourceNavigatorHandler.FILE_BCK_MODEL_HIER; else if(objSel instanceof IFile && isFileInHierarchy(SpagoBIStudioConstants.FOLDER_OLAP_TEMPLATES, (File)objSel) && ((File)objSel).getName().endsWith(SpagoBIStudioConstants.MONDRIAN_EXTENSION) ) toReturn = ResourceNavigatorHandler.FILE_OLAP_HIER; else if(objSel instanceof IFile && ((File)objSel).getName().endsWith(SpagoBIStudioConstants.META_QUERY_EXTENSION) && isFileInHierarchy(SpagoBIStudioConstants.FOLDER_DATASET, ((File)objSel))) toReturn = ResourceNavigatorHandler.FILE_METAQUERY_HIER; logger.debug("OUT"); return toReturn; } /** in order to enable delete * check that selection has no structure folders * @param selList * @return */ public static boolean isSelectedObjSystemFolder(List<IStructuredSelection> selList){ logger.debug("IN"); boolean toreturn = false; for (Iterator iterator = selList.iterator(); iterator.hasNext() && !toreturn;) { Object objSel = iterator.next(); if(objSel instanceof Folder){ IFolder fold = (IFolder)objSel; toreturn = isSpagoBISystemFolder(fold); } } logger.debug("OUT"); return toreturn; } public static String getStateOfSelectedFile(IFile file){ logger.debug("IN"); String toReturn = ""; if(isFileInHierarchy(SpagoBIStudioConstants.FOLDER_ANALYSIS, file)) toReturn = ResourceNavigatorHandler.FILE_ANALYSIS_HIER; else if(file.getName().endsWith(SpagoBIStudioConstants.SERVER_EXTENSION) && isFileInHierarchy(SpagoBIStudioConstants.FOLDER_SERVER, file)) toReturn = ResourceNavigatorHandler.FILE_SERVER_HIER; else if(file.getName().endsWith(SpagoBIStudioConstants.MODEL_EXTENSION) && isFileInHierarchy(SpagoBIStudioConstants.FOLDER_METADATA_MODEL, file)) toReturn = ResourceNavigatorHandler.FILE_MODEL_HIER; else if(file.getName().endsWith(SpagoBIStudioConstants.META_QUERY_EXTENSION) && isFileInHierarchy(SpagoBIStudioConstants.FOLDER_DATASET, file)) toReturn = ResourceNavigatorHandler.FILE_METAQUERY_HIER; logger.debug("OUT"); return toReturn; } /** search if current folder has a parent folder naming like tosearch * * @param toSearch * @param folder * @return */ public static boolean isInHierarchy(String toSearch, Folder folder){ if(folder.getName().equals(toSearch)){ return true; } else{ // if(folder.getParent() == null || !(folder.getParent() instanceof Folder)){ return false; } else{ return isInHierarchy(toSearch, (Folder)folder.getParent()); } } } public static boolean isFileInHierarchy(String toSearch, IFile file ){ if(file.getParent() != null || !(file.getParent() instanceof Folder)){ return isInHierarchy(toSearch, (Folder)file.getParent() ); } return false; } public static boolean isSpagoBISystemFolder(IFolder folder ){ logger.debug("IN"); boolean toreturn = false; String projectName = folder.getProject().getName(); IPath resourcePath =folder.getFullPath(); String resPath = resourcePath.toOSString(); String[] systemFolders = new String[]{ "/"+projectName+"/"+SpagoBIStudioConstants.FOLDER_ANALYSIS, "\\"+projectName+"\\"+SpagoBIStudioConstants.FOLDER_ANALYSIS, "/"+projectName+"/"+SpagoBIStudioConstants.FOLDER_DATA_SOURCE, "\\"+projectName+"\\"+SpagoBIStudioConstants.FOLDER_DATA_SOURCE, "/"+projectName+"/"+SpagoBIStudioConstants.FOLDER_DATASET, "\\"+projectName+"\\"+SpagoBIStudioConstants.FOLDER_DATASET, "/"+projectName+"/"+SpagoBIStudioConstants.FOLDER_METADATA_MODEL, "\\"+projectName+"\\"+SpagoBIStudioConstants.FOLDER_METADATA_MODEL, "/"+projectName+"/"+SpagoBIStudioConstants.FOLDER_PRIVATE_DOCUMENTS, "\\"+projectName+"\\"+SpagoBIStudioConstants.FOLDER_PRIVATE_DOCUMENTS, "/"+projectName+"/"+SpagoBIStudioConstants.FOLDER_RESOURCE+"/"+SpagoBIStudioConstants.FOLDER_SERVER, "\\"+projectName+"\\"+SpagoBIStudioConstants.FOLDER_RESOURCE+"\\"+SpagoBIStudioConstants.FOLDER_SERVER, "/"+projectName+"/"+SpagoBIStudioConstants.FOLDER_SERVER, "\\"+projectName+"\\"+SpagoBIStudioConstants.FOLDER_RESOURCE, "\\"+projectName+"\\"+SpagoBIStudioConstants.FOLDER_OLAP_TEMPLATES, "/"+projectName+"/"+SpagoBIStudioConstants.FOLDER_OLAP_TEMPLATES }; for (int i = 0; i < systemFolders.length && !toreturn; i++) { if(resPath.equals(systemFolders[i])){ toreturn = true; } } logger.debug("OUT"); return toreturn; } }