/**
* Axelor Business Solutions
*
* Copyright (C) 2016 Axelor (<http://axelor.com>).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.axelor.apps.base.service.wizard;
import java.util.List;
import java.util.Map;
import java.util.Random;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.axelor.db.JPA;
import com.axelor.db.mapper.Mapper;
import com.axelor.db.mapper.Property;
import com.axelor.exception.AxelorException;
import com.google.common.collect.Lists;
public class ConvertWizardService {
private static final Logger LOG = LoggerFactory.getLogger(ConvertWizardService.class);
public Object createObject(Map<String, Object> context, Object obj, Mapper mapper) throws AxelorException {
if(context != null) {
final int random = new Random().nextInt();
for(final Property p : mapper.getProperties()) {
if (p.isVirtual() || p.isPrimary() || p.isVersion()) {
continue;
}
LOG.debug("Property name / Context value : {} / {}", p.getName());
Object value = context.get(p.getName());
LOG.debug("Context value : {}", value);
if(value != null) {
if (value instanceof String && p.isUnique()) {
value = ((String) value) + " (" + random + ")";
}
if(value instanceof Map) {
LOG.debug("Map");
Map map = (Map) value;
Object id = map.get("id");
value = JPA.find((Class) p.getTarget(), Long.parseLong(id.toString()));
}
if(value instanceof List) {
LOG.debug("List");
List<Object> valueList = (List<Object>) value;
List<Object> resultList = Lists.newArrayList();
if(valueList != null) {
for(Object object : valueList) {
Map map = (Map) object;
Object id = map.get("id");
resultList.add(JPA.find((Class) p.getTarget(), Long.parseLong(id.toString())));
}
}
value = resultList;
}
p.set(obj, value);
}
}
return obj;
}
return null;
}
}