/* * This file is part of LCMC written by Rasto Levrinc. * * Copyright (C) 2014, Rastislav Levrinc. * * The LCMC is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as published * by the Free Software Foundation; either version 2, or (at your option) * any later version. * * The LCMC is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with LCMC; see the file COPYING. If not, write to * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ package lcmc.cluster.ui.resource; import lcmc.cluster.domain.Cluster; import lcmc.common.domain.ResourceValue; import lcmc.common.ui.Browser; import lcmc.common.ui.Info; import lcmc.drbd.domain.NetInterface; import javax.inject.Inject; import javax.inject.Named; import javax.inject.Provider; import javax.inject.Singleton; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; @Named @Singleton public class ClusterViewFactory { @Inject @Named("netInfo") private Provider<NetInfo> netInfoProvider; @Inject private Provider<FSInfo> fsInfoProvider; private final ConcurrentMap<ResourceValue, Info> viewByResource = new ConcurrentHashMap<ResourceValue, Info>(); private final ConcurrentMap<String, Info> viewByFileSystemName = new ConcurrentHashMap<String, Info>(); private final Lock viewLock = new ReentrantLock(); @Inject private Provider<CommonBlockDevInfo> commonBlockDevInfoProvider; public FSInfo createFileSystemView(final String fileSystem, final Browser browser) { final FSInfo fsInfo = fsInfoProvider.get(); fsInfo.init(fileSystem, browser); viewByFileSystemName.put(fileSystem, fsInfo); return fsInfo; } public Info getNetView(NetInterface netInterface, final Browser browser) { viewLock.lock(); try { final Info view = viewByResource.get(netInterface); if (view == null) { return createNetView(netInterface, browser); } return view; } finally { viewLock.unlock(); } } public CommonBlockDevInfo createCommonBlockDevView(final Cluster cluster, final String commonBlockDevice) { final CommonBlockDevInfo commonBlockDevInfo = commonBlockDevInfoProvider.get(); commonBlockDevInfo.init( commonBlockDevice, cluster.getHostBlockDevices(commonBlockDevice), cluster.getBrowser()); return commonBlockDevInfo; } private Info createNetView(final NetInterface netInterface, final Browser browser) { final NetInfo netInfo = netInfoProvider.get(); viewByResource.put(netInterface, netInfo); netInfo.init(netInterface.getName(), netInterface, browser); return netInfo; } }