/******************************************************************************* * Copyright (c) 2013 GigaSpaces Technologies Ltd. All rights reserved * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the * specific language governing permissions and limitations under the License. *******************************************************************************/ package org.cloudifysource.usm.dsl; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.List; import javax.activation.UnsupportedDataTypeException; import org.apache.commons.beanutils.BeanUtils; import org.cloudifysource.domain.BalanceGauge; import org.cloudifysource.domain.BarLineChart; import org.cloudifysource.domain.MetricGroup; import org.cloudifysource.domain.Unit; import org.cloudifysource.domain.UserInterface; import org.cloudifysource.domain.Widget; import org.cloudifysource.domain.WidgetGroup; /** * adapter used to convert domain POJOs into Openspaces objects. * * @author adaml * */ public class OpenspacesDomainUIAdapter { /** * Convert a DSL user interface POJO into an openspaces user interface POJO * @param userInterface * user interface DSL POJO. * @return * the equivalent openspaces user interface object. * @throws UnsupportedDataTypeException * @throws IllegalAccessException . * @throws InvocationTargetException . */ public org.openspaces.ui.UserInterface createOpenspacesUIObject (final UserInterface userInterface) throws IllegalAccessException, InvocationTargetException, UnsupportedDataTypeException { org.openspaces.ui.UserInterface ui = new org.openspaces.ui.UserInterface(); final List<MetricGroup> metricGroups = userInterface.getMetricGroups(); final List<org.openspaces.ui.MetricGroup> destMetricGroups = new ArrayList<org.openspaces.ui.MetricGroup>(); final List<Object> destMetrics = new ArrayList<Object>(); for (MetricGroup metricGroup : metricGroups) { final org.openspaces.ui.MetricGroup group = new org.openspaces.ui.MetricGroup(); List<Object> metrics = metricGroup.getMetrics(); for (Object metric : metrics) { if (metric instanceof List<?>) { @SuppressWarnings("unchecked") List<Object> metricDef = (List<Object>) metric; String metricName = metricDef.get(0).toString(); org.openspaces.ui.Unit axisYUnit = getOpenspacesAxisYUnit((Unit)metricDef.get(1)); final List<Object> destMatrix = new ArrayList<Object>(); destMatrix.add(metricName); destMatrix.add(axisYUnit); destMetrics.add(destMatrix); } else { destMetrics.add(metric); } } group.setMetrics(destMetrics); group.setName(metricGroup.getName()); destMetricGroups.add(group); } final List<WidgetGroup> widgetGroups = userInterface.getWidgetGroups(); final List<org.openspaces.ui.WidgetGroup> destWidgetGroups = new ArrayList<org.openspaces.ui.WidgetGroup>(); for (WidgetGroup widgetGroup : widgetGroups) { final org.openspaces.ui.WidgetGroup destGroup = new org.openspaces.ui.WidgetGroup(); destGroup.setName(widgetGroup.getName()); destGroup.setTtile(widgetGroup.getTitle()); final List<Widget> widgets = widgetGroup.getWidgets(); final List<org.openspaces.ui.Widget> destWidgets = new ArrayList<org.openspaces.ui.Widget>(); for (Widget widget : widgets) { if (widget instanceof BarLineChart) { final org.openspaces.ui.BarLineChart chart = new org.openspaces.ui.BarLineChart(); final Unit axisYUnit = ((BarLineChart) widget).getAxisYUnit(); org.openspaces.ui.Unit destUnit = getOpenspacesAxisYUnit(axisYUnit); chart.setAxisYUnit(destUnit); chart.setMetric(((BarLineChart) widget).getMetric()); destWidgets.add(chart); } else if (widget instanceof BalanceGauge) { org.openspaces.ui.BalanceGauge gauge = new org.openspaces.ui.BalanceGauge(); BeanUtils.copyProperties(gauge, widget); destWidgets.add(gauge); } else { throw new UnsupportedDataTypeException("widget type: " + widget.getClass().getSimpleName() + " is not supported."); } } destGroup.setWidgets(destWidgets); destWidgetGroups.add(destGroup); } ui.setMetricGroups(destMetricGroups); ui.setWidgetGroups(destWidgetGroups); return ui; } private org.openspaces.ui.Unit getOpenspacesAxisYUnit(final Unit axisYUnit) throws UnsupportedDataTypeException { switch (axisYUnit) { case REGULAR: return org.openspaces.ui.Unit.REGULAR; case PERCENTAGE: return org.openspaces.ui.Unit.PERCENTAGE; case MEMORY: return org.openspaces.ui.Unit.MEMORY; case DURATION: return org.openspaces.ui.Unit.DURATION; default: throw new UnsupportedDataTypeException("Unit type " + axisYUnit.toString() + " is not supported"); } } }