/* * Copyright (c) 2016 EMC Corporation * All Rights Reserved */ package com.emc.storageos.coordinator.client.model; import java.util.HashSet; import java.util.Set; import com.emc.storageos.coordinator.exceptions.FatalCoordinatorException; /** * This model is to hold all installed drivers at /config/storagedrivers/global. * Data change would notify all nodes to download/remove their local driver * files to keep aligned with this target list. */ public class StorageDriversInfo implements CoordinatorSerializable { private static final String ENCODING_SEPERATOR = "\0"; public static final String ID = "global"; public static final String KIND = "storagedrivers"; public static final String ATTRIBUTE = "storagedrivers"; private Set<String> installedDrivers = new HashSet<String>(); public Set<String> getInstalledDrivers() { return installedDrivers; } public void setInstalledDrivers(Set<String> installedDrivers) { this.installedDrivers = installedDrivers; } @Override public String encodeAsString() { if (installedDrivers == null || installedDrivers.isEmpty()) { return ""; } StringBuilder builder = new StringBuilder(); for (String driver : installedDrivers) { builder.append(driver).append(ENCODING_SEPERATOR); } return builder.toString(); } @SuppressWarnings("unchecked") @Override public StorageDriversInfo decodeFromString(String infoStr) throws FatalCoordinatorException { if (infoStr == null || infoStr.isEmpty()) { return new StorageDriversInfo(); } StorageDriversInfo info = new StorageDriversInfo(); Set<String> drivers = new HashSet<String>(); String[] driverStrs = infoStr.split(ENCODING_SEPERATOR); for (String driverStr : driverStrs) { if (driverStr == null || driverStr.isEmpty()) { continue; } drivers.add(driverStr); } info.setInstalledDrivers(drivers); return info; } @Override public CoordinatorClassInfo getCoordinatorClassInfo() { return new CoordinatorClassInfo(ID, KIND, ATTRIBUTE); } }