package org.dcache.webadmin.controller.util; import com.google.common.base.Strings; import java.util.Date; import java.util.List; import java.util.Map; import diskCacheV111.pools.PoolCostInfo; import diskCacheV111.pools.PoolCostInfo.NamedPoolQueueInfo; import diskCacheV111.pools.PoolCostInfo.PoolQueueInfo; import diskCacheV111.services.space.LinkGroup; import diskCacheV111.services.space.Space; import diskCacheV111.util.UserInfo; import diskCacheV111.util.VOInfo; import diskCacheV111.vehicles.IoJobInfo; import diskCacheV111.vehicles.RestoreHandlerInfo; import org.dcache.admin.webadmin.datacollector.datatypes.CellStatus; import org.dcache.poolmanager.Partition; import org.dcache.util.TransferCollector; import org.dcache.webadmin.model.businessobjects.Pool; import org.dcache.webadmin.model.businessobjects.RestoreInfo; import org.dcache.webadmin.model.util.AccessLatency; import org.dcache.webadmin.model.util.RetentionPolicy; import org.dcache.webadmin.view.beans.ActiveTransfersBean; import org.dcache.webadmin.view.beans.CellServicesBean; import org.dcache.webadmin.view.beans.PoolQueueBean; import org.dcache.webadmin.view.beans.PoolRequestQueue; import org.dcache.webadmin.view.beans.PoolSpaceBean; import org.dcache.webadmin.view.pages.poolselectionsetup.beans.PartitionsBean; import org.dcache.webadmin.view.pages.spacetokens.beans.LinkGroupBean; import org.dcache.webadmin.view.pages.spacetokens.beans.SpaceReservationBean; import org.dcache.webadmin.view.pages.tapetransferqueue.beans.RestoreBean; /** * Does the mapping between modelobjects and viewobjects * @author jans */ public class BeanDataMapper { public static PoolSpaceBean poolModelToView(Pool poolBusinessObject, Map<String, List<String>> domainMap) { PoolSpaceBean returnPoolBean = poolModelToView(poolBusinessObject); returnPoolBean.setDomainName( NamedCellUtil.findDomainOfUniqueCell( domainMap, returnPoolBean.getName())); return returnPoolBean; } private static PoolSpaceBean poolModelToView(Pool poolBusinessObject) { PoolSpaceBean returnPoolBean = new PoolSpaceBean(); returnPoolBean.setEnabled(poolBusinessObject.getSelectionPool().isEnabled()); returnPoolBean.setPoolMode(poolBusinessObject.getSelectionPool().getPoolMode()); returnPoolBean.setName(poolBusinessObject.getName()); PoolCostInfo poolCostInfo = poolBusinessObject.getCostinfo(); returnPoolBean.setFreeSpace(poolCostInfo.getSpaceInfo().getFreeSpace()); returnPoolBean.setPreciousSpace(poolCostInfo.getSpaceInfo().getPreciousSpace()); returnPoolBean.setUsedSpace(poolCostInfo.getSpaceInfo().getUsedSpace()); returnPoolBean.setRemovableSpace(poolCostInfo.getSpaceInfo().getRemovableSpace()); returnPoolBean.setTotalSpace(poolCostInfo.getSpaceInfo().getTotalSpace()); return returnPoolBean; } public static PoolQueueBean poolQueueModelToView(Pool poolBusinessObject, Map<String, List<String>> domainMap) { PoolQueueBean returnPoolQueueBean = poolQueueModelToView(poolBusinessObject); returnPoolQueueBean.setDomainName( NamedCellUtil.findDomainOfUniqueCell( domainMap, returnPoolQueueBean.getName())); return returnPoolQueueBean; } private static PoolQueueBean poolQueueModelToView(Pool poolBusinessObject) { PoolCostInfo costInfo = poolBusinessObject.getCostinfo(); PoolQueueBean returnPoolQueueBean = new PoolQueueBean(); returnPoolQueueBean.setName(poolBusinessObject.getName()); returnPoolQueueBean.addRequestQueue(queuesModelToView("Stores", costInfo.getStoreQueue(), -1)); returnPoolQueueBean.addRequestQueue(queuesModelToView("Restores", costInfo.getRestoreQueue(), -1)); returnPoolQueueBean.addRequestQueue(queuesModelToView("Movers", costInfo.getMoverQueue())); returnPoolQueueBean.addRequestQueue(queuesModelToView("P2P-Server", costInfo.getP2pQueue())); returnPoolQueueBean.addRequestQueue(queuesModelToView("P2P-Client", costInfo.getP2pClientQueue(), -1)); for (NamedPoolQueueInfo info : costInfo.getExtendedMoverHash().values() ) { if (info != null) { returnPoolQueueBean.addRequestQueue(queuesModelToView(info)); } } return returnPoolQueueBean; } private static PoolRequestQueue queuesModelToView(NamedPoolQueueInfo info) { return queuesModelToView(info.getName(), info); } private static PoolRequestQueue queuesModelToView(String name, PoolQueueInfo info) { if (info == null) { return queuesModelToView(name, info, -1); } return queuesModelToView(name, info, info.getMaxActive()); } private static PoolRequestQueue queuesModelToView(String name, PoolQueueInfo info, int max) { PoolRequestQueue queue = new PoolRequestQueue(); queue.setName(name); queue.setMax(max); if (info == null) { queue.setActive(-1); queue.setQueued(-1); } else { queue.setActive(info.getActive()); queue.setQueued(info.getQueued()); } return queue; } public static CellServicesBean cellModelToView(CellStatus cellBusinessObject) { CellServicesBean cellService = new CellServicesBean(); cellService.setCreatedDateTime(cellBusinessObject.getCreatedDateTime()); cellService.setDomainName(cellBusinessObject.getDomainName()); cellService.setEventQueueSize(cellBusinessObject.getEventQueueSize()); cellService.setName(cellBusinessObject.getCellName()); cellService.setPing(cellBusinessObject.getPing()); cellService.setThreadCount(cellBusinessObject.getThreadCount()); cellService.setVersion(cellBusinessObject.getVersion()); return cellService; } public static ActiveTransfersBean moverModelToView(TransferCollector.Transfer transfer) { ActiveTransfersBean bean = new ActiveTransfersBean(); bean.setDomainName(transfer.door().getDomainName()); bean.setCellName(transfer.door().getCellName()); if (transfer.session().getSubject() == null) { bean.setUserInfo(new UserInfo()); } else { bean.setSubject(transfer.session().getSubject()); } if (transfer.session().getPnfsId() == null) { bean.setPnfsId(""); } else { bean.setPnfsId(transfer.session().getPnfsId().toString()); } String poolName = Strings.emptyToNull(transfer.session().getPool()); if (poolName == null || poolName.equals("<unknown>")) { poolName = "N.N."; } bean.setProcess(transfer.door().getProcess().replace("<unknown>", "?")); bean.setProtocol(transfer.door().getProtocolFamily().replace("<unknown>", "?"), transfer.door().getProtocolVersion().replace("<unknown>", "?")); bean.setReplyHost(transfer.session().getReplyHost()); bean.setSerialId(transfer.session().getSerialId()); if (transfer.session().getStatus() == null) { bean.setSessionStatus(""); } else { String status = transfer.session().getStatus(); status = status.replace(" ", "\n"); bean.setSessionStatus(status); } bean.setWaitingSince(transfer.session().getWaitingSince()); IoJobInfo mover = transfer.mover(); if (mover != null) { bean.setBytesTransferred(mover.getBytesTransferred()); bean.setMoverId(mover.getJobId()); bean.setMoverStatus(mover.getStatus()); bean.setTransferTime(mover.getTransferTime()); } return bean; } public static LinkGroupBean linkGroupModelToView(LinkGroup linkGroup) { LinkGroupBean newBean = new LinkGroupBean(); newBean.setId(linkGroup.getId()); newBean.setAllowed(mapLinkGroupAllowanceFlags(linkGroup)); newBean.setFree(linkGroup.getFreeSpace()); newBean.setName(linkGroup.getName()); newBean.setAvailable(linkGroup.getAvailableSpace()); newBean.setReserved(linkGroup.getReservedSpace()); if (linkGroup.getVOs() != null) { newBean.setVos(extractVos(linkGroup.getVOs())); } return newBean; } private static String mapLinkGroupAllowanceFlags(LinkGroup linkGroup) { return (linkGroup.isOnlineAllowed() ? AccessLatency.ONLINE.getShortcut().toUpperCase() : AccessLatency.ONLINE.getShortcut().toLowerCase()) + (linkGroup.isNearlineAllowed() ? AccessLatency.NEARLINE.getShortcut().toUpperCase() : AccessLatency.NEARLINE.getShortcut().toLowerCase()) + (linkGroup.isReplicaAllowed() ? RetentionPolicy.REPLICA.getShortcut().toUpperCase() : RetentionPolicy.REPLICA.getShortcut().toLowerCase()) + (linkGroup.isCustodialAllowed() ? RetentionPolicy.CUSTODIAL.getShortcut().toUpperCase() : RetentionPolicy.CUSTODIAL.getShortcut().toLowerCase()); } public static SpaceReservationBean spaceReservationModelToView(Space reservation) { SpaceReservationBean newReservation = new SpaceReservationBean(); newReservation.setAllocatedSpace(reservation.getAllocatedSpaceInBytes()); newReservation.setCreated(new Date(reservation.getCreationTime()).toString()); newReservation.setDescription(reservation.getDescription()); newReservation.setExpiration(reservation.getExpirationTime()); newReservation.setId(Long.toString(reservation.getId())); newReservation.setLifetime((reservation.getExpirationTime() == null) ? -1 : reservation.getCreationTime() + reservation.getExpirationTime()); newReservation.setLinkGroupRef(reservation.getLinkGroupId()); newReservation.setState(reservation.getState().toString()); newReservation.setStorage(mapReservationAllowanceFlags(reservation)); newReservation.setUsedSpace(reservation.getUsedSizeInBytes()); newReservation.setSize(reservation.getSizeInBytes()); newReservation.setVogroup(reservation.getVoGroup() + ":" + reservation.getVoRole()); return newReservation; } public static RestoreBean restoreInfoModelToView(RestoreInfo info) { RestoreHandlerInfo handler = info.getRestoreHandler(); RestoreBean bean = new RestoreBean(handler.getName(), handler.getErrorCode(), handler.getErrorMessage()); bean.setClients(handler.getClientCount()); bean.setPool(handler.getPool()); bean.setRetries(handler.getRetryCount()); bean.setStartTime(handler.getStartTime()); bean.setStatus(handler.getStatus()); return bean; } public static PartitionsBean partitionModelToView(String name, Partition partition) { PartitionsBean bean = new PartitionsBean(); bean.setPartitionName(name); bean.setProperties(partition.getAllProperties()); return bean; } private static String mapReservationAllowanceFlags(Space reservation) { return mapAccessLatency(reservation.getAccessLatency()) + mapRetentionPolicy(reservation.getRetentionPolicy()); } private static String mapAccessLatency(diskCacheV111.util.AccessLatency accessLatency) { if (accessLatency != null) { return AccessLatency.parseStringValue(accessLatency.toString()).getShortcut(); } return ""; } private static String mapRetentionPolicy(diskCacheV111.util.RetentionPolicy retentionPolicy) { if (retentionPolicy != null) { return RetentionPolicy.parseStringValue(retentionPolicy.toString()).getShortcut(); } return ""; } private static String extractVos(VOInfo[] Vos) { StringBuilder builder = new StringBuilder(); for (VOInfo vo : Vos) { builder.append(vo.toString()).append(";"); } return builder.toString(); } }