de.ks.idnadrev.expimp.xls.ToManyColumn.java Source code

Java tutorial

Introduction

Here is the source code for de.ks.idnadrev.expimp.xls.ToManyColumn.java

Source

/*
 * Copyright [2014] [Christian Loehnert, krampenschiesser@gmail.com]
 * 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 de.ks.idnadrev.expimp.xls;

import de.ks.persistence.entity.IdentifyableEntity;
import de.ks.reflection.ReflectionUtil;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;

import javax.persistence.metamodel.PluralAttribute;
import java.util.Collection;

public class ToManyColumn implements XlsxColumn {

    public static final String SEPARATOR = "|";
    public static final String SEPARATOR_REPLACEMENT = "|";

    private final PluralAttribute attribute;

    public ToManyColumn(PluralAttribute attribute) {
        this.attribute = attribute;
    }

    @Override
    public Class<?> getRoot() {
        return attribute.getDeclaringType().getJavaType();
    }

    @Override
    public String getIdentifier() {
        return attribute.getName();
    }

    @Override
    public Object getValue(Object object) {

        StringBuilder builder = new StringBuilder();
        if (Collection.class.isAssignableFrom(attribute.getJavaType())) {

            Collection collection = (Collection) ReflectionUtil.getFieldValue(object, attribute.getName());
            for (java.util.Iterator iterator = collection.iterator(); iterator.hasNext();) {
                Object next = iterator.next();

                if (IdentifyableEntity.class.isAssignableFrom(next.getClass())) {
                    Object idValue = ((IdentifyableEntity) next).getIdValue();
                    if (idValue instanceof String) {
                        String replaced = StringUtils.replace(String.valueOf(idValue), SEPARATOR,
                                SEPARATOR_REPLACEMENT);
                        builder.append(replaced).append(SEPARATOR);
                    } else {
                        builder.append(idValue).append(SEPARATOR);
                    }
                }
            }
            if (builder.length() == 0) {
                return null;
            } else {
                return builder.substring(0, builder.length() - 1);
            }
        }
        throw new IllegalArgumentException("Cannot resolve to many relation "
                + attribute.getDeclaringType().getJavaType().getName() + "." + attribute.getName());
    }

    @Override
    public int getCellType() {
        return Cell.CELL_TYPE_STRING;
    }

    @Override
    public Object getDefaultValue() {
        return null;
    }

    @Override
    public CellStyle getCellStyle(SXSSFWorkbook workbook) {
        return null;
    }

    @Override
    public Class<?> getFieldType() {
        return String.class;
    }

    @Override
    public void setValue(Object instance, Object value) {

    }
}