/* * Copyright (c) 2015 EMC Corporation * All Rights Reserved */ package util; import java.net.URI; import java.util.HashSet; import java.util.List; import java.util.Set; import org.apache.commons.lang.StringUtils; import com.emc.storageos.db.client.URIUtil; import com.emc.storageos.db.client.model.FileShare; import com.emc.storageos.db.client.model.Snapshot; import com.emc.storageos.model.file.ExportRule; import com.emc.storageos.model.file.FileSystemExportParam; import com.emc.storageos.volumecontroller.FileShareExport; import com.emc.vipr.client.ViPRCoreClient; import com.google.common.collect.Lists; public class FileUtils { public static List<ExportRule> getFSExportRules(URI id) { ViPRCoreClient client = BourneUtil.getViprClient(); List<ExportRule> rules = Lists.newArrayList(); if (URIUtil.isType(id, Snapshot.class)) { rules = client.fileSnapshots().getExport(id, true, ""); } else if (URIUtil.isType(id, FileShare.class)) { rules = client.fileSystems().getExport(id, true, ""); } return rules; } public static String findSubDirectory(String fsPath, String exportPath) { if (exportPath.length() > fsPath.length()) { return exportPath.substring(fsPath.length() + 1); } else { return ""; } } public static ExportRuleInfo getFSExportRulesInfo(URI id, String exportPath, String security) { String path = StringUtils.defaultString(exportPath); String sec = StringUtils.defaultString(security); List<ExportRule> rules = getFSExportRules(id); List<EndpointInfo> infos = Lists.newArrayList(); ExportRuleInfo exportRuleInfo = new ExportRuleInfo(); for (ExportRule rule : rules) { if ((path.isEmpty() || rule.getExportPath().equals(path)) && (sec.isEmpty() || rule.getSecFlavor().equals(sec))) { if (rule.getReadWriteHosts() != null && !rule.getReadWriteHosts().isEmpty()) { for (String endpoint : rule.getReadWriteHosts()) { infos.add(new EndpointInfo(endpoint, FileShareExport.Permissions.rw.name())); } } if (rule.getReadOnlyHosts() != null && !rule.getReadOnlyHosts().isEmpty()) { for (String endpoint : rule.getReadOnlyHosts()) { infos.add(new EndpointInfo(endpoint, FileShareExport.Permissions.ro.name())); } } if (rule.getRootHosts() != null && !rule.getRootHosts().isEmpty()) { for (String endpoint : rule.getRootHosts()) { infos.add(new EndpointInfo(endpoint, FileShareExport.Permissions.root.name())); } } exportRuleInfo.setAnon(rule.getAnon()); exportRuleInfo.setSecurity(getSecurityFlavorList(rule.getSecFlavor())); exportRuleInfo.setEndpointsInfo(infos); } } return exportRuleInfo; } public static List<FileSystemExportParam> getExports(URI id) { ViPRCoreClient client = BourneUtil.getViprClient(); return client.fileSystems().getExports(id); } public static Set<String> buildEndpointList(List<String> endpoints) { Set<String> endpointList = new HashSet<String>(); for (String endpoint : endpoints) { if (!StringUtils.isEmpty(endpoint)) { endpointList.add(endpoint); } } return endpointList; } private static List<String> getSecurityFlavorList(String secFlo) { List<String> secTypes = Lists.newArrayList(); for (String secType : secFlo.split(",")) { secTypes.add(secType.trim()); } return secTypes; } public static class EndpointInfo { public String endpoint; public String permission; public EndpointInfo(String endpoint, String permission) { this.endpoint = endpoint; this.permission = permission; } } public static class ExportRuleInfo { public String anon; public List<String> security; public List<EndpointInfo> endpoints; public ExportRuleInfo() { } public void setAnon(String anon) { this.anon = anon; } public void setSecurity(List<String> security) { this.security = security; } public void setEndpointsInfo(List<EndpointInfo> infos) { this.endpoints = infos; } } }