/******************************************************************************* * 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.datastructure.expression; import hydrograph.ui.common.cloneableinterface.IDataStructure; import hydrograph.ui.common.datastructures.messages.Messages; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; /** * @author Bitwise Expression editor data values are stored here * */ public class ExpressionEditorData implements IDataStructure { private boolean isValid; private String errorMessage=Messages.INVALID_EXPRESSION; private String expression; private List<String> fieldsUsedInExpression; private Map<String,Class<?>> selectedInputFieldsForExpression; private Map<String,Class<?>> extraFieldDatatypeMap; private String componentName; public ExpressionEditorData(String expression,String componentName) { this.expression = expression; fieldsUsedInExpression = new ArrayList<>(); selectedInputFieldsForExpression = new LinkedHashMap<String,Class<?>>(); extraFieldDatatypeMap=new LinkedHashMap<String,Class<?>>(); this.componentName=componentName; } /** * @return get extra fields value */ public Map<String, Class<?>> getExtraFieldDatatypeMap() { return extraFieldDatatypeMap; } public ExpressionEditorData(String expression, List<String> clonedListUsedFieldsInExpression, Map<String,Class<?>> clonedSelectedFieldsForExpression, Map<String,Class<?>> clonedExtraInputFieldsDatatypeMap) { this.expression=expression; this.fieldsUsedInExpression=clonedListUsedFieldsInExpression; this.selectedInputFieldsForExpression=clonedSelectedFieldsForExpression; this.extraFieldDatatypeMap=clonedExtraInputFieldsDatatypeMap; } /** * @return expression value */ public String getExpression() { return expression; } /** * @param expression set expression value */ public void setExpression(String expression) { this.expression = expression; } /** * @return */ public Map<String,Class<?>> getSelectedInputFieldsForExpression() { return selectedInputFieldsForExpression; } public List<String> getfieldsUsedInExpression() { return fieldsUsedInExpression; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null||getClass() != obj.getClass()) return false; ExpressionEditorData other=(ExpressionEditorData)obj; if (expression == null) { if (other.expression != null) return false; } else if (!expression.equals(other.expression)) return false; if (fieldsUsedInExpression == null) { if (other.fieldsUsedInExpression != null) return false; } else if (!fieldsUsedInExpression.equals(other.fieldsUsedInExpression)) return false; return true; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((expression == null) ? 0 : expression.hashCode()); result = prime * result + ((fieldsUsedInExpression == null) ? 0 : fieldsUsedInExpression.hashCode()); return result; } /** * @return error message */ public String getErrorMessage() { return errorMessage; } /** * @param errorMessage set error message */ public void setErrorMessage(String errorMessage) { this.errorMessage = errorMessage; } /** * @return */ public boolean isValid() { return isValid; } /** * @param isValid */ public void setValid(boolean isValid) { this.isValid = isValid; } /* (non-Javadoc) * @see java.lang.Object#clone() */ @Override public ExpressionEditorData clone() { String clonedExpression=this.expression; boolean isValid=this.isValid; if(extraFieldDatatypeMap==null){ extraFieldDatatypeMap=new LinkedHashMap<String,Class<?>>(); } List<String> clonedFieldsUsedInExpression = new ArrayList<>(); clonedFieldsUsedInExpression.addAll(this.fieldsUsedInExpression); Map<String,Class<?>> clonedSelectedInputFieldsForExpression = new LinkedHashMap<String,Class<?>>(); Map<String,Class<?>> clonedExtraInputFieldsDatatypeMap = new LinkedHashMap<String,Class<?>>(); for(Map.Entry<String, Class<?>> entry:selectedInputFieldsForExpression.entrySet()) { clonedSelectedInputFieldsForExpression.put(entry.getKey(), entry.getValue()); } for(Map.Entry<String, Class<?>> entry:extraFieldDatatypeMap.entrySet()) { clonedExtraInputFieldsDatatypeMap.put(entry.getKey(), entry.getValue()); } ExpressionEditorData expressionEditorData= new ExpressionEditorData(clonedExpression, clonedFieldsUsedInExpression, clonedSelectedInputFieldsForExpression ,clonedExtraInputFieldsDatatypeMap); expressionEditorData.setValid(isValid); expressionEditorData.setComponentName(componentName); return expressionEditorData; } /** * @return component name */ public String getComponentName() { return componentName; } /** * * merge the two maps into single map * @return map */ public Map<String,Class<?>> getCombinedFieldDatatypeMap() { Map<String,Class<?>> fieldDatatypeMap=new LinkedHashMap<>(); fieldDatatypeMap.putAll(extraFieldDatatypeMap); fieldDatatypeMap.putAll(selectedInputFieldsForExpression); return fieldDatatypeMap; } /** * @param componentName set component name */ public void setComponentName(String componentName) { this.componentName = componentName; } }