/*
* #%L
* BroadleafCommerce Open Admin Platform
* %%
* Copyright (C) 2009 - 2013 Broadleaf Commerce
* %%
* 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.
* #L%
*/
package org.broadleafcommerce.openadmin.server.service.persistence.module.provider;
import org.broadleafcommerce.common.web.BroadleafRequestContext;
import org.broadleafcommerce.openadmin.dto.FieldMetadata;
import org.broadleafcommerce.openadmin.dto.Property;
import org.broadleafcommerce.openadmin.server.service.persistence.module.criteria.FilterMapping;
import org.broadleafcommerce.openadmin.server.service.persistence.module.provider.request.AddFilterPropertiesRequest;
import org.broadleafcommerce.openadmin.server.service.persistence.module.provider.request.AddSearchMappingRequest;
import org.broadleafcommerce.openadmin.server.service.persistence.module.provider.request.ExtractValueRequest;
import org.broadleafcommerce.openadmin.server.service.persistence.module.provider.request.PopulateValueRequest;
import org.broadleafcommerce.openadmin.server.service.type.FieldProviderResponse;
import org.springframework.context.MessageSource;
import org.springframework.core.Ordered;
import java.io.Serializable;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.List;
import java.util.Map;
/**
* @author Jeff Fischer
*/
public class FieldPersistenceProviderAdapter extends AbstractFieldPersistenceProvider {
@Override
public FieldProviderResponse addSearchMapping(AddSearchMappingRequest addSearchMappingRequest, List<FilterMapping> filterMappings) {
return FieldProviderResponse.NOT_HANDLED;
}
@Override
public FieldProviderResponse populateValue(PopulateValueRequest populateValueRequest, Serializable instance) {
return FieldProviderResponse.NOT_HANDLED;
}
@Override
public FieldProviderResponse extractValue(ExtractValueRequest extractValueRequest, Property property) {
return FieldProviderResponse.NOT_HANDLED;
}
@Override
public FieldProviderResponse filterProperties(AddFilterPropertiesRequest addFilterPropertiesRequest, Map<String, FieldMetadata> properties) {
return FieldProviderResponse.NOT_HANDLED;
}
@Override
public int getOrder() {
return Ordered.LOWEST_PRECEDENCE;
}
protected boolean checkDirtyState(PopulateValueRequest request, Object instance, Object checkValue) throws Exception {
boolean dirty = !(instance == null && checkValue == null) && (instance == null || checkValue == null);
if (!dirty) {
Object value = request.getFieldManager().getFieldValue(instance, request.getProperty().getName());
if (checkValue instanceof String) {
checkValue = ((String) checkValue).trim();
}
if (value instanceof String) {
value = ((String) value).trim();
}
if (value instanceof BigDecimal) {
BigDecimal origValue = (BigDecimal) value;
BigDecimal newValue = (BigDecimal) checkValue;
//set the scale of one of the BigDecimal values to the larger of the two scales
if (newValue.scale() < origValue.scale()) {
checkValue = newValue.setScale(origValue.scale(), RoundingMode.UNNECESSARY);
} else if (origValue.scale() < newValue.scale()) {
value = origValue.setScale(newValue.scale(), RoundingMode.UNNECESSARY);
}
}
dirty = value == null || !value.equals(checkValue);
}
return dirty;
}
protected void setNonDisplayableValues(PopulateValueRequest request) {
BroadleafRequestContext context = BroadleafRequestContext.getBroadleafRequestContext();
MessageSource messages = context.getMessageSource();
String label = "(" + messages.getMessage("Workflow_not_displayable", null, "Not Displayable", context.getJavaLocale()) + ")";
request.getProperty().setDisplayValue(label);
request.getProperty().setOriginalDisplayValue(label);
}
}