/*******************************************************************************
* Copyright 2017 Capital One Services, LLC and Bitwise, Inc.
* 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 hydrograph.ui.graph.propertywindow;
import hydrograph.ui.common.util.Constants;
import hydrograph.ui.common.util.XMLConfigUtil;
import hydrograph.ui.graph.model.Component;
import hydrograph.ui.graph.model.processor.DynamicClassProcessor;
import hydrograph.ui.logging.factory.LogFactory;
import hydrograph.ui.propertywindow.adapters.ELTComponentPropertyAdapter;
import hydrograph.ui.propertywindow.factory.WidgetFactory.Widgets;
import hydrograph.ui.propertywindow.property.ELTComponenetProperties;
import hydrograph.ui.propertywindow.property.IPropertyTreeBuilder;
import hydrograph.ui.propertywindow.property.Property;
import hydrograph.ui.propertywindow.property.PropertyTreeBuilder;
import hydrograph.ui.propertywindow.propertydialog.PropertyDialog;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.slf4j.Logger;
/**
*
* @author Bitwise
* Sep 25, 2015
*
*/
public class ELTPropertyWindow implements IELTPropertyWindow{
private static final Logger logger = LogFactory.INSTANCE.getLogger(ELTPropertyWindow.class);
private static final String STRING = "String";
private static final String TYPE = "Type";
private static final String COMPONENT_ID = "ID";
private static final String DETAILS = "DETAILS";
private static final String GENERAL = "GENERAL";
Object componenetModel;
ELTComponenetProperties eltComponenetProperties;
Component component;
private boolean propertyChanged = false;
private Map<String, String> toolTipErrorMessages;
/**
* Instantiates a new ELT property window.
*
* @param componenetModel
* the componenet model
*/
public ELTPropertyWindow(Object componenetModel){
this.componenetModel = componenetModel;
component = getCastedModel();
eltComponenetProperties = getELTComponenetProperties();
toolTipErrorMessages = component.getToolTipErrorMessages();
}
private Component getCastedModel() {
return (Component) componenetModel;
}
private ELTComponenetProperties getELTComponenetProperties(){
LinkedHashMap<String, Object> componentConfigurationProperties = component.getProperties();
LinkedHashMap<String, Object> ComponentMiscellaneousProperties = getComponentMiscellaneousProperties();
ELTComponenetProperties eltComponenetProperties = new ELTComponenetProperties(componentConfigurationProperties, ComponentMiscellaneousProperties);
return eltComponenetProperties;
}
private LinkedHashMap<String, Object> getComponentMiscellaneousProperties() {
LinkedHashMap<String, Object> ComponentMiscellaneousProperties = new LinkedHashMap<>();
ComponentMiscellaneousProperties.put(Constants.COMPONENT_NAMES, component.getParent().getComponentNames());
ComponentMiscellaneousProperties.put(Constants.COMPONENT_BASE_TYPE, component.getCategory());
ComponentMiscellaneousProperties.put(Constants.COMPONENT_TYPE, component.getType());
ComponentMiscellaneousProperties.put(Constants.COMPONENT_ORIGINAL_NAME, DynamicClassProcessor.INSTANCE.getClazzName(component.getClass()));
return ComponentMiscellaneousProperties;
}
private Property getComponentBaseTypeProperty(){
Property property = new Property.Builder(STRING, COMPONENT_ID, Widgets.COMPONENT_ID_WIDGET.name())
.group(GENERAL).subGroup(DETAILS).build();
return property;
}
private Property getComponentTypeProperty(){
Property property = new Property.Builder(STRING, TYPE, Widgets.COMPONENT_TYPE_WIDGET.name())
.group(GENERAL).subGroup(DETAILS).build();
return property;
}
//@Override
@Override
public void open() {
List<hydrograph.ui.common.component.config.Property> rowProperties = getComponentPropertiesFromComponentXML();
try {
ArrayList<Property> componentProperties = transformToPropertyWindowFormat(rowProperties);
componentProperties.add(getComponentBaseTypeProperty());
componentProperties.add(getComponentTypeProperty());
IPropertyTreeBuilder propertyTreeBuilder = new PropertyTreeBuilder(componentProperties);
PropertyDialog propertyDialog = new PropertyDialog(propertyTreeBuilder.getPropertyTree(),
eltComponenetProperties,toolTipErrorMessages,component);
propertyDialog.open();
//component.setSize(getNewComponentSize());
propertyChanged = propertyDialog.isPropertyChanged();
} catch (ELTComponentPropertyAdapter.EmptyComponentPropertiesException e) {
logger.error("Failed in transforming properties", e);
}
}
public boolean isPropertyChanged(){
return propertyChanged;
}
private ArrayList<Property> transformToPropertyWindowFormat(
List<hydrograph.ui.common.component.config.Property> rowProperties) throws ELTComponentPropertyAdapter.EmptyComponentPropertiesException {
ELTComponentPropertyAdapter eltComponentPropertyAdapter = new ELTComponentPropertyAdapter(rowProperties);
eltComponentPropertyAdapter.transform();
ArrayList<Property> componentProperties = eltComponentPropertyAdapter.getProperties();
return componentProperties;
}
private List<hydrograph.ui.common.component.config.Property> getComponentPropertiesFromComponentXML() {
return XMLConfigUtil.INSTANCE.getComponent(DynamicClassProcessor.INSTANCE.getClazzName(componenetModel.getClass())).getProperty();
}
}